@flexilla/alpine-dropdown 0.0.2 → 0.1.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/README.md +37 -9
- package/dist/cdn.js +58 -58
- package/dist/cdn.min.js +1 -1
- package/dist/module.cjs.js +58 -58
- package/dist/module.esm.js +58 -58
- package/package.json +5 -3
- package/src/index.d.ts +7 -0
package/README.md
CHANGED
|
@@ -1,9 +1,21 @@
|
|
|
1
|
-
<h1 align="center">Alpine
|
|
1
|
+
<h1 align="center">Alpine Dropdown</h1>
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
Simple
|
|
4
|
+
Simple Interactive Dropdown Component for <a href="https://alpinejs.dev">Alpine.js</a>
|
|
5
5
|
</p>
|
|
6
6
|
|
|
7
|
+
<p align="center">
|
|
8
|
+
Part of the <a href="https://flexilla-docs.vercel.app">Flexilla</a> library - A collection of UI components for Alpine.js
|
|
9
|
+
</p>
|
|
10
|
+
|
|
11
|
+
## Overview
|
|
12
|
+
|
|
13
|
+
The Alpine Dropdown component provides a lightweight and flexible dropdown menu implementation for Alpine.js applications. It features:
|
|
14
|
+
|
|
15
|
+
- 🎯 Precise positioning
|
|
16
|
+
- 🎨 Customizable styling with Tailwind CSS support
|
|
17
|
+
- ⌨️ Keyboard navigation support
|
|
18
|
+
- 🔄 Smooth transitions and animations
|
|
7
19
|
|
|
8
20
|
## Installation
|
|
9
21
|
|
|
@@ -12,32 +24,48 @@
|
|
|
12
24
|
Include the following `<script>` tag in the `<head>` of your document, just before Alpine.
|
|
13
25
|
|
|
14
26
|
```html
|
|
15
|
-
|
|
27
|
+
<script src="https://cdn.jsdelivr.net/npm/@flexilla/alpine-dropdown@latest/dist/cdn.min.js" defer></script>
|
|
16
28
|
```
|
|
17
29
|
|
|
18
30
|
### NPM
|
|
19
31
|
|
|
20
32
|
```shell
|
|
21
|
-
npm install @flexilla/alpine-
|
|
33
|
+
npm install @flexilla/alpine-dropdown
|
|
22
34
|
```
|
|
23
35
|
|
|
24
|
-
Add the `x-
|
|
36
|
+
Add the `x-dropdown` directive to your project by importing the package **before** starting Alpine.
|
|
25
37
|
|
|
26
38
|
```js
|
|
27
39
|
import Alpine from 'alpinejs';
|
|
28
|
-
import
|
|
40
|
+
import PluginDropdown from '@flexilla/alpine-dropdown';
|
|
29
41
|
|
|
30
|
-
Alpine.plugin(
|
|
42
|
+
Alpine.plugin(PluginDropdown);
|
|
31
43
|
|
|
32
44
|
Alpine.start();
|
|
33
45
|
```
|
|
34
46
|
|
|
35
|
-
##
|
|
47
|
+
## Basic Usage
|
|
36
48
|
|
|
37
49
|
```html
|
|
38
|
-
|
|
50
|
+
<button data-dropdown-trigger data-dropdown-id="dropdown-1"
|
|
51
|
+
class="border border-zinc-800 hover:bg-zinc-950 bg-zinc-900 text-white px-4 py-2 rounded-lg text-sm">
|
|
52
|
+
Open Dropdown
|
|
53
|
+
</button>
|
|
54
|
+
<div x-dropdown x-data role="list" id="dropdown-1" data-fx-popper
|
|
55
|
+
class="fixed top-[--fx-popper-placement-y] left-[--fx-popper-placement-x] z-20 w-56 border border-zinc-800 bg-zinc-900/80 text-zinc-50 backdrop-filter backdrop-blur-xl rounded-lg flex flex-col overflow-hidden opacity-0 invisible fx-open:opacity-100 fx-open:visible ease-linear transition-transform translate-y-4 fx-open:translate-y-0">
|
|
56
|
+
<a href="#" class="focus:outline focus:bg-zinc-900/90 outline-none focus:outline-blue-500 ease-linear flex hover-bg-zinc-800/80 p-2 rounded-md">
|
|
57
|
+
Item 1
|
|
58
|
+
</a>
|
|
59
|
+
<a href="/" class="focus:outline focus:bg-zinc-900/90 outline-none focus:outline-blue-500 ease-linear flex hover-bg-zinc-800/80 p-2 rounded-md">Item 2</a>
|
|
60
|
+
<a href="#" class="focus:outline focus:bg-zinc-900/90 outline-none focus:outline-blue-500 ease-linear flex hover-bg-zinc-800/80 p-2 rounded-md">Item 3</a>
|
|
61
|
+
<a href="#" class="focus:outline focus:bg-zinc-900/90 outline-none focus:outline-blue-500 ease-linear flex hover-bg-zinc-800/80 p-2 rounded-md">Item 4</a>
|
|
62
|
+
</div>
|
|
39
63
|
```
|
|
40
64
|
|
|
65
|
+
## Documentation
|
|
66
|
+
|
|
67
|
+
For detailed documentation, customization options, and advanced usage examples, visit the [Flexilla Dropdown documentation](https://flexilla-docs.vercel.app/docs/components/dropdown).
|
|
68
|
+
|
|
41
69
|
## License
|
|
42
70
|
|
|
43
71
|
Copyright (c) 2025 Johnkat MJ and contributors.
|
package/dist/cdn.js
CHANGED
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
var a = (s, e, t) => q(s, typeof e != "symbol" ? e + "" : e, t);
|
|
6
6
|
var B = Object.defineProperty;
|
|
7
7
|
var N = (s, e, t) => e in s ? B(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
8
|
+
var d = (s, e, t) => N(s, typeof e != "symbol" ? e + "" : e, t);
|
|
9
|
+
var V = "bottom";
|
|
10
|
+
var X = ({ reference: s, popper: e }) => {
|
|
11
11
|
if (!s || !e)
|
|
12
12
|
throw new Error("Reference or popper element is null or undefined");
|
|
13
13
|
const t = /* @__PURE__ */ new WeakMap(), n = (r) => (t.has(r) || t.set(r, r.getBoundingClientRect()), t.get(r)), o = n(e), i = n(s);
|
|
@@ -21,24 +21,21 @@
|
|
|
21
21
|
refRight: i.right
|
|
22
22
|
};
|
|
23
23
|
};
|
|
24
|
-
var V = Object.defineProperty;
|
|
25
|
-
var X = (s, e, t) => e in s ? V(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
26
|
-
var p = (s, e, t) => X(s, typeof e != "symbol" ? e + "" : e, t);
|
|
27
24
|
var Y = (s, e, t, n) => {
|
|
28
25
|
const o = t, i = n - (t + e);
|
|
29
26
|
return o >= (s - e) / 2 && i >= (s - e) / 2;
|
|
30
27
|
};
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
var
|
|
36
|
-
const r = o - t - i, h = t - n, g = t + i - n + (o - t - i),
|
|
37
|
-
return s() ? 0 : e() ? g :
|
|
28
|
+
var J = (s, e, t, n) => (s - e) / 2 <= t && t + s / 2 + e / 2 <= n;
|
|
29
|
+
var Q = (s, e, t, n, o) => t > o - n ? e() ? window.innerHeight - o : t - o : s() ? 0 : t + n;
|
|
30
|
+
var Z = (s, e, t, n) => s <= n && t - s <= e;
|
|
31
|
+
var _ = (s, e, t, n) => t <= n && -s <= e;
|
|
32
|
+
var ee = (s, e, t, n, o, i) => {
|
|
33
|
+
const r = o - t - i, h = t - n, g = t + i - n + (o - t - i), p = r >= 0 ? o - n : h >= 0 ? t - n : t;
|
|
34
|
+
return s() ? 0 : e() ? g : p;
|
|
38
35
|
};
|
|
39
|
-
var
|
|
40
|
-
var
|
|
41
|
-
var
|
|
36
|
+
var te = (s, e, t, n) => s <= t && e - s - n >= s;
|
|
37
|
+
var ne = (s, e) => s >= e;
|
|
38
|
+
var se = ({
|
|
42
39
|
placement: s,
|
|
43
40
|
refWidth: e,
|
|
44
41
|
refTop: t,
|
|
@@ -48,25 +45,25 @@
|
|
|
48
45
|
popperHeight: r,
|
|
49
46
|
windowHeight: h,
|
|
50
47
|
windowWidth: g,
|
|
51
|
-
offsetDistance:
|
|
48
|
+
offsetDistance: p
|
|
52
49
|
}) => {
|
|
53
|
-
const c = g - n - e, f = n, v = h - t - o, m = t, w = () =>
|
|
54
|
-
() =>
|
|
55
|
-
() =>
|
|
50
|
+
const c = g - n - e, f = n, v = h - t - o, m = t, w = () => Q(
|
|
51
|
+
() => _(t, o, r, h),
|
|
52
|
+
() => Z(t, o, r, h),
|
|
56
53
|
t,
|
|
57
54
|
o,
|
|
58
55
|
r
|
|
59
|
-
), y = () =>
|
|
60
|
-
() =>
|
|
61
|
-
() =>
|
|
56
|
+
), y = () => ee(
|
|
57
|
+
() => te(n, g, i, e),
|
|
58
|
+
() => ne(n, i),
|
|
62
59
|
n,
|
|
63
60
|
i,
|
|
64
61
|
g,
|
|
65
62
|
e
|
|
66
|
-
), H = () => Y(i, e, n, g) ? n + e / 2 - i / 2 : y(), T = () =>
|
|
63
|
+
), H = () => Y(i, e, n, g) ? n + e / 2 - i / 2 : y(), T = () => J(r, o, t, h) ? t + o / 2 - r / 2 : w(), C = () => n + i <= g ? n : y(), O = () => n + e - i >= 0 ? n + e - i : y(), L = () => t + r <= h ? t : w(), G = () => t + o - r >= 0 ? t + o - r : w();
|
|
67
64
|
let u = 0, E = 0;
|
|
68
|
-
const M = t - r -
|
|
69
|
-
switch (s.startsWith("top") ? E =
|
|
65
|
+
const M = t - r - p, k = t + o + p, D = n - i - p, I = n + e + p, W = m >= r + p, F = v >= r + p, R = f >= i + p, $ = c >= i + p;
|
|
66
|
+
switch (s.startsWith("top") ? E = W ? M : F ? k : Math.max(M, k) : s.startsWith("bottom") ? E = F ? k : W ? M : Math.max(k) : s.startsWith("left") ? u = R ? D : $ ? I : Math.max(D, I) : s.startsWith("right") && (u = $ ? I : R ? D : Math.max(I, D)), s) {
|
|
70
67
|
case "bottom":
|
|
71
68
|
case "bottom-middle":
|
|
72
69
|
case "top":
|
|
@@ -98,7 +95,7 @@
|
|
|
98
95
|
}
|
|
99
96
|
return { x: u, y: E };
|
|
100
97
|
};
|
|
101
|
-
var
|
|
98
|
+
var ie = class {
|
|
102
99
|
/**
|
|
103
100
|
* Flexilla Popper
|
|
104
101
|
* @param reference
|
|
@@ -118,21 +115,21 @@
|
|
|
118
115
|
* @param {Function} [options.onUpdate] - Callback function when position updates
|
|
119
116
|
*/
|
|
120
117
|
constructor(e, t, n = {}) {
|
|
121
|
-
|
|
118
|
+
d(this, "reference"), d(this, "popper"), d(this, "offsetDistance"), d(this, "placement"), d(this, "disableOnResize"), d(this, "disableOnScroll"), d(this, "onUpdate"), d(this, "isWindowEventsRegistered"), d(this, "validateElements", () => {
|
|
122
119
|
if (!(this.reference instanceof HTMLElement))
|
|
123
120
|
throw new Error("Invalid HTMLElement for Reference Element");
|
|
124
121
|
if (!(this.popper instanceof HTMLElement))
|
|
125
122
|
throw new Error("Invalid HTMLElement for Popper");
|
|
126
123
|
if (typeof this.offsetDistance != "number")
|
|
127
124
|
throw new Error("OffsetDistance must be a number");
|
|
128
|
-
}),
|
|
125
|
+
}), d(this, "setPopperStyleProperty", (c, f) => {
|
|
129
126
|
this.popper.style.setProperty("--fx-popper-placement-x", `${c}px`), this.popper.style.setProperty("--fx-popper-placement-y", `${f}px`);
|
|
130
|
-
}),
|
|
127
|
+
}), d(this, "setInitialStyles", () => {
|
|
131
128
|
this.popper.style.setProperty("--fx-popper-placement-x", ""), this.popper.style.setProperty("--fx-popper-placement-y", "");
|
|
132
|
-
}),
|
|
129
|
+
}), d(this, "initPlacement", () => {
|
|
133
130
|
var c;
|
|
134
131
|
this.validateElements(), this.setInitialStyles();
|
|
135
|
-
const f = window.innerWidth, v = window.innerHeight, { popperHeight: m, popperWidth: w, refHeight: y, refWidth: H, refLeft: T, refTop: C } =
|
|
132
|
+
const f = window.innerWidth, v = window.innerHeight, { popperHeight: m, popperWidth: w, refHeight: y, refWidth: H, refLeft: T, refTop: C } = X({ reference: this.reference, popper: this.popper }), { x: O, y: L } = se(
|
|
136
133
|
{
|
|
137
134
|
placement: this.placement,
|
|
138
135
|
refWidth: H,
|
|
@@ -147,20 +144,20 @@
|
|
|
147
144
|
}
|
|
148
145
|
);
|
|
149
146
|
this.setPopperStyleProperty(O, L), (c = this.onUpdate) == null || c.call(this, { x: O, y: L, placement: this.placement });
|
|
150
|
-
}),
|
|
147
|
+
}), d(this, "removeWindowEvents", () => {
|
|
151
148
|
this.isWindowEventsRegistered && (!this.disableOnResize && window.removeEventListener("resize", this.updatePosition), !this.disableOnScroll && window.removeEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = false);
|
|
152
|
-
}),
|
|
149
|
+
}), d(this, "attachWindowEvent", () => {
|
|
153
150
|
this.isWindowEventsRegistered && this.removeWindowEvents(), this.disableOnResize || window.addEventListener("resize", this.updatePosition), this.disableOnScroll || window.addEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = true;
|
|
154
|
-
}),
|
|
151
|
+
}), d(this, "resetPosition", () => {
|
|
155
152
|
this.setInitialStyles();
|
|
156
|
-
}),
|
|
153
|
+
}), d(this, "updatePosition", () => {
|
|
157
154
|
this.initPlacement(), this.attachWindowEvent();
|
|
158
|
-
}),
|
|
155
|
+
}), d(this, "cleanupEvents", () => {
|
|
159
156
|
this.setInitialStyles(), this.removeWindowEvents();
|
|
160
157
|
});
|
|
161
158
|
const {
|
|
162
159
|
offsetDistance: o = 10,
|
|
163
|
-
placement: i =
|
|
160
|
+
placement: i = V,
|
|
164
161
|
eventEffect: r = {},
|
|
165
162
|
onUpdate: h
|
|
166
163
|
} = n;
|
|
@@ -170,8 +167,8 @@
|
|
|
170
167
|
throw new Error("Invalid HTMLElement for Popper");
|
|
171
168
|
if (n.offsetDistance && typeof n.offsetDistance != "number")
|
|
172
169
|
throw new Error("OffsetDistance must be a number");
|
|
173
|
-
const { disableOnResize: g, disableOnScroll:
|
|
174
|
-
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = i, this.disableOnResize = g || false, this.disableOnScroll =
|
|
170
|
+
const { disableOnResize: g, disableOnScroll: p } = r;
|
|
171
|
+
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = i, this.disableOnResize = g || false, this.disableOnScroll = p || false, this.onUpdate = h;
|
|
175
172
|
}
|
|
176
173
|
/**
|
|
177
174
|
* Updates popper configuration and recalculates position
|
|
@@ -184,6 +181,9 @@
|
|
|
184
181
|
this.placement = e, this.offsetDistance = t || this.offsetDistance, this.initPlacement(), this.attachWindowEvent();
|
|
185
182
|
}
|
|
186
183
|
};
|
|
184
|
+
var oe = Object.defineProperty;
|
|
185
|
+
var re = (s, e, t) => e in s ? oe(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
186
|
+
var l = (s, e, t) => re(s, typeof e != "symbol" ? e + "" : e, t);
|
|
187
187
|
var ae = (s, e = document.body) => e.querySelector(s);
|
|
188
188
|
var A = (s, e) => {
|
|
189
189
|
for (const [t, n] of Object.entries(e))
|
|
@@ -251,7 +251,7 @@
|
|
|
251
251
|
}), l(this, "showOnMouseEnter", () => {
|
|
252
252
|
this.show(), this.addEventOnMouseEnter();
|
|
253
253
|
}), l(this, "setShowOptions", ({ placement: i, offsetDistance: r }) => {
|
|
254
|
-
var h, g,
|
|
254
|
+
var h, g, p, c;
|
|
255
255
|
this.popper.setOptions({
|
|
256
256
|
placement: i,
|
|
257
257
|
offsetDistance: r
|
|
@@ -259,7 +259,7 @@
|
|
|
259
259
|
state: "open",
|
|
260
260
|
popper: this.contentElement,
|
|
261
261
|
trigger: this.triggerElement
|
|
262
|
-
}), this.onToggleState(false), (c = (
|
|
262
|
+
}), this.onToggleState(false), (c = (p = this.options).onShow) == null || c.call(p);
|
|
263
263
|
}), l(this, "setPopperOptions", ({ placement: i, offsetDistance: r }) => {
|
|
264
264
|
this.popper.setOptions({
|
|
265
265
|
placement: i,
|
|
@@ -278,7 +278,7 @@
|
|
|
278
278
|
throw new Error("Trigger element must be a valid HTML element");
|
|
279
279
|
if (!(this.contentElement instanceof HTMLElement))
|
|
280
280
|
throw new Error("Content element must be a valid HTML element");
|
|
281
|
-
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 = (o = this.options.popper) == null ? void 0 : o.eventEffect, this.popper = new
|
|
281
|
+
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 = (o = this.options.popper) == null ? void 0 : o.eventEffect, this.popper = new ie(
|
|
282
282
|
this.triggerElement,
|
|
283
283
|
this.contentElement,
|
|
284
284
|
{
|
|
@@ -334,16 +334,16 @@
|
|
|
334
334
|
}), this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
|
|
335
335
|
}
|
|
336
336
|
};
|
|
337
|
-
var
|
|
337
|
+
var P = (s, e = document.body) => e.querySelector(s);
|
|
338
338
|
var U = (s, e = document.body) => Array.from(e.querySelectorAll(s));
|
|
339
|
-
var
|
|
340
|
-
var
|
|
339
|
+
var pe = (s) => typeof s == "string" ? P(s) : s;
|
|
340
|
+
var de = ({ containerElement: s, targetChildren: e = "a:not([disabled]), button:not([disabled])", direction: t }) => {
|
|
341
341
|
let n = false;
|
|
342
|
-
const o =
|
|
342
|
+
const o = pe(s) || document.body, i = typeof e == "string" ? U(e, o) : e, r = (h) => {
|
|
343
343
|
if (h.preventDefault(), o.focus(), i.length === 0)
|
|
344
344
|
return;
|
|
345
|
-
const g = h.key,
|
|
346
|
-
let c = i.findIndex((m) => m ===
|
|
345
|
+
const g = h.key, p = document.activeElement;
|
|
346
|
+
let c = i.findIndex((m) => m === p);
|
|
347
347
|
if (c === -1) {
|
|
348
348
|
g === "ArrowUp" || g === "ArrowLeft" ? i[i.length - 1].focus() : i[0].focus();
|
|
349
349
|
return;
|
|
@@ -369,7 +369,7 @@
|
|
|
369
369
|
default:
|
|
370
370
|
return;
|
|
371
371
|
}
|
|
372
|
-
i[c] !==
|
|
372
|
+
i[c] !== p && i[c].focus();
|
|
373
373
|
};
|
|
374
374
|
return {
|
|
375
375
|
make: () => {
|
|
@@ -380,7 +380,7 @@
|
|
|
380
380
|
}
|
|
381
381
|
};
|
|
382
382
|
};
|
|
383
|
-
var
|
|
383
|
+
var z = (s, e, t) => {
|
|
384
384
|
const n = new CustomEvent(e, { detail: t });
|
|
385
385
|
s.dispatchEvent(n);
|
|
386
386
|
};
|
|
@@ -434,13 +434,13 @@
|
|
|
434
434
|
});
|
|
435
435
|
a(this, "onShow", () => {
|
|
436
436
|
var e2, t2;
|
|
437
|
-
|
|
437
|
+
z(this.contentElement, "dropdown-show", {
|
|
438
438
|
isHidden: false
|
|
439
439
|
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2);
|
|
440
440
|
});
|
|
441
441
|
a(this, "onHide", () => {
|
|
442
442
|
var e2, t2;
|
|
443
|
-
|
|
443
|
+
z(this.contentElement, "dropdown-hide", {
|
|
444
444
|
isHidden: true
|
|
445
445
|
}), (t2 = (e2 = this.options).onHide) == null || t2.call(e2);
|
|
446
446
|
});
|
|
@@ -462,7 +462,7 @@
|
|
|
462
462
|
a(this, "cleanup", () => {
|
|
463
463
|
this.OverlayInstance.cleanup(), x.removeInstance("dropdown", this.contentElement);
|
|
464
464
|
});
|
|
465
|
-
const n = typeof e == "string" ?
|
|
465
|
+
const n = typeof e == "string" ? P(e) : e;
|
|
466
466
|
if (!(n instanceof HTMLElement))
|
|
467
467
|
throw new Error(
|
|
468
468
|
"Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement"
|
|
@@ -474,7 +474,7 @@
|
|
|
474
474
|
if (o)
|
|
475
475
|
return o;
|
|
476
476
|
const i = `[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;
|
|
477
|
-
if (this.triggerElement =
|
|
477
|
+
if (this.triggerElement = P(i), !(this.triggerElement instanceof HTMLElement))
|
|
478
478
|
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}"`);
|
|
479
479
|
this.options = t, this.triggerStrategy = this.options.triggerStrategy || this.contentElement.dataset.triggerStrategy || "click", this.placement = this.options.placement || this.contentElement.dataset.placement || "bottom-start", this.offsetDistance = this.options.offsetDistance || parseInt(`${this.contentElement.dataset.offsetDistance}`) | 6, this.preventFromCloseOutside = this.options.preventFromCloseOutside || this.contentElement.hasAttribute("data-prevent-close-outside") || false, this.preventFromCloseInside = this.options.preventCloseFromInside || this.contentElement.hasAttribute("data-prevent-close-inside") || false, this.defaultState = this.options.defaultState || this.contentElement.dataset.defaultState || "close", this.OverlayInstance = new ce({
|
|
480
480
|
trigger: this.triggerElement,
|
|
@@ -495,7 +495,7 @@
|
|
|
495
495
|
},
|
|
496
496
|
popper: this.options.popper
|
|
497
497
|
}
|
|
498
|
-
}), this.navigationKeys =
|
|
498
|
+
}), this.navigationKeys = de({
|
|
499
499
|
containerElement: this.contentElement,
|
|
500
500
|
targetChildren: "a:not([disabled]), button:not([disabled])",
|
|
501
501
|
direction: "up-down"
|
|
@@ -516,12 +516,12 @@
|
|
|
516
516
|
for (const n of t)
|
|
517
517
|
new S(n);
|
|
518
518
|
});
|
|
519
|
-
var
|
|
519
|
+
var K = S;
|
|
520
520
|
|
|
521
521
|
// src/index.js
|
|
522
522
|
function Dropdown(Alpine) {
|
|
523
523
|
Alpine.directive("dropdown", (el, {}, { cleanup }) => {
|
|
524
|
-
const dropdown_ = new
|
|
524
|
+
const dropdown_ = new K(el);
|
|
525
525
|
cleanup(() => {
|
|
526
526
|
dropdown_.cleanup();
|
|
527
527
|
});
|
package/dist/cdn.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var J=Object.defineProperty,Q=(n,e,t)=>e in n?J(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,h=(n,e,t)=>Q(n,typeof e!="symbol"?e+"":e,t),V=Object.defineProperty,X=(n,e,t)=>e in n?V(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,l=(n,e,t)=>X(n,typeof e!="symbol"?e+"":e,t),Y="bottom",Z=({reference:n,popper:e})=>{if(!n||!e)throw new Error("Reference or popper element is null or undefined");let t=new WeakMap,i=o=>(t.has(o)||t.set(o,o.getBoundingClientRect()),t.get(o)),r=i(e),s=i(n);return{popperHeight:r.height,popperWidth:r.width,refHeight:s.height,refWidth:s.width,refLeft:s.left,refTop:s.top,refRight:s.right}},_=Object.defineProperty,ee=(n,e,t)=>e in n?_(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,m=(n,e,t)=>ee(n,typeof e!="symbol"?e+"":e,t),te=(n,e,t,i)=>{let r=t,s=i-(t+e);return r>=(n-e)/2&&s>=(n-e)/2},ne=(n,e,t,i)=>(n-e)/2<=t&&t+n/2+e/2<=i,ie=(n,e,t,i,r)=>t>r-i?e()?window.innerHeight-r:t-r:n()?0:t+i,se=(n,e,t,i)=>n<=i&&t-n<=e,oe=(n,e,t,i)=>t<=i&&-n<=e,re=(n,e,t,i,r,s)=>{let o=r-t-s,a=t-i,c=t+s-i+(r-t-s),d=o>=0?r-i:a>=0?t-i:t;return n()?0:e()?c:d},ae=(n,e,t,i)=>n<=t&&e-n-i>=n,le=(n,e)=>n>=e,he=({placement:n,refWidth:e,refTop:t,refLeft:i,refHeight:r,popperWidth:s,popperHeight:o,windowHeight:a,windowWidth:c,offsetDistance:d})=>{let p=c-i-e,f=i,E=a-t-r,g=t,w=()=>ie(()=>oe(t,r,o,a),()=>se(t,r,o,a),t,r,o),y=()=>re(()=>ae(i,c,s,e),()=>le(i,s),i,s,c,e),I=()=>te(s,e,i,c)?i+e/2-s/2:y(),T=()=>ne(o,r,t,a)?t+r/2-o/2:w(),C=()=>i+s<=c?i:y(),O=()=>i+e-s>=0?i+e-s:y(),D=()=>t+o<=a?t:w(),N=()=>t+r-o>=0?t+r-o:w(),v=0,u=0,M=t-o-d,L=t+r+d,k=i-s-d,H=i+e+d,R=g>=o+d,$=E>=o+d,A=f>=s+d,K=p>=s+d;switch(n.startsWith("top")?u=R?M:$?L:Math.max(M,L):n.startsWith("bottom")?u=$?L:R?M:Math.max(L):n.startsWith("left")?v=A?k:K?H:Math.max(k,H):n.startsWith("right")&&(v=K?H:A?k:Math.max(H,k)),n){case"bottom":case"bottom-middle":case"top":case"top-middle":v=I();break;case"left":case"left-middle":case"right":case"right-middle":u=T();break;case"bottom-start":case"top-start":v=C();break;case"bottom-end":case"top-end":v=O();break;case"left-start":case"right-start":u=D();break;case"left-end":case"right-end":u=N();break}return{x:v,y:u}},x=class{constructor(e,t,i={}){m(this,"reference"),m(this,"popper"),m(this,"offsetDistance"),m(this,"placement"),m(this,"disableOnResize"),m(this,"disableOnScroll"),m(this,"onUpdate"),m(this,"isWindowEventsRegistered"),m(this,"validateElements",()=>{if(!(this.reference instanceof HTMLElement))throw new Error("Invalid HTMLElement for Reference Element");if(!(this.popper instanceof HTMLElement))throw new Error("Invalid HTMLElement for Popper");if(typeof this.offsetDistance!="number")throw new Error("OffsetDistance must be a number")}),m(this,"setPopperStyleProperty",(p,f)=>{this.popper.style.setProperty("--fx-popper-placement-x",`${p}px`),this.popper.style.setProperty("--fx-popper-placement-y",`${f}px`)}),m(this,"setInitialStyles",()=>{this.popper.style.setProperty("--fx-popper-placement-x",""),this.popper.style.setProperty("--fx-popper-placement-y","")}),m(this,"initPlacement",()=>{var p;this.validateElements(),this.setInitialStyles();let f=window.innerWidth,E=window.innerHeight,{popperHeight:g,popperWidth:w,refHeight:y,refWidth:I,refLeft:T,refTop:C}=Z({reference:this.reference,popper:this.popper}),{x:O,y:D}=he({placement:this.placement,refWidth:I,refTop:C,refLeft:T,popperWidth:w,refHeight:y,popperHeight:g,windowHeight:E,windowWidth:f,offsetDistance:this.offsetDistance});this.setPopperStyleProperty(O,D),(p=this.onUpdate)==null||p.call(this,{x:O,y:D,placement:this.placement})}),m(this,"removeWindowEvents",()=>{this.isWindowEventsRegistered&&(!this.disableOnResize&&window.removeEventListener("resize",this.updatePosition),!this.disableOnScroll&&window.removeEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!1)}),m(this,"attachWindowEvent",()=>{this.isWindowEventsRegistered&&this.removeWindowEvents(),this.disableOnResize||window.addEventListener("resize",this.updatePosition),this.disableOnScroll||window.addEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!0}),m(this,"resetPosition",()=>{this.setInitialStyles()}),m(this,"updatePosition",()=>{this.initPlacement(),this.attachWindowEvent()}),m(this,"cleanupEvents",()=>{this.setInitialStyles(),this.removeWindowEvents()});let{offsetDistance:r=10,placement:s=Y,eventEffect:o={},onUpdate:a}=i;if(!(e instanceof HTMLElement))throw new Error("Invalid HTMLElement for Reference Element");if(!(t instanceof HTMLElement))throw new Error("Invalid HTMLElement for Popper");if(i.offsetDistance&&typeof i.offsetDistance!="number")throw new Error("OffsetDistance must be a number");let{disableOnResize:c,disableOnScroll:d}=o;this.isWindowEventsRegistered=!1,this.reference=e,this.popper=t,this.offsetDistance=r,this.placement=s,this.disableOnResize=c||!1,this.disableOnScroll=d||!1,this.onUpdate=a}setOptions({placement:e,offsetDistance:t}){this.placement=e,this.offsetDistance=t||this.offsetDistance,this.initPlacement(),this.attachWindowEvent()}},ce=(n,e=document.body)=>e.querySelector(n),z=(n,e)=>{for(let[t,i]of Object.entries(e))n.setAttribute(t,i)},pe=({element:n,callback:e,type:t,keysCheck:i})=>{let r=getComputedStyle(n),s=r.transition;if(s!=="none"&&s!==""&&!i.includes(s)){let o="transitionend",a=()=>{n.removeEventListener(o,a),e()};n.addEventListener(o,a,{once:!0})}else e()},de=({element:n,callback:e})=>{pe({element:n,callback:e,type:"transition",keysCheck:["all 0s ease 0s","all"]})},b=({state:n,trigger:e,popper:t})=>{let i=n==="open";z(t,{"data-state":n}),z(e,{"aria-expanded":`${i}`})},P=class{constructor({trigger:e,content:t,options:i={}}){l(this,"triggerElement"),l(this,"contentElement"),l(this,"triggerStrategy"),l(this,"placement"),l(this,"offsetDistance"),l(this,"preventFromCloseOutside"),l(this,"preventFromCloseInside"),l(this,"options"),l(this,"defaultState"),l(this,"popper"),l(this,"eventEffect"),l(this,"getElement",s=>typeof s=="string"?ce(s):s instanceof HTMLElement?s:void 0),l(this,"handleDocumentClick",s=>{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())}),l(this,"handleKeyDown",s=>{s.preventDefault(),this.triggerStrategy!=="hover"&&s.key==="Escape"&&this.contentElement.getAttribute("data-state")==="open"&&(this.preventFromCloseOutside||this.hide())}),l(this,"toggleStateOnClick",()=>{(this.contentElement.dataset.state||"close")==="close"?(this.show(),this.triggerStrategy==="hover"&&this.addEventOnMouseEnter()):this.hide()}),l(this,"hideOnMouseLeaseTrigger",()=>{setTimeout(()=>{this.contentElement.matches(":hover")||this.hide()},150)}),l(this,"hideOnMouseLeave",()=>{setTimeout(()=>{this.triggerElement.matches(":hover")||this.hide()},150)}),l(this,"addEventOnMouseEnter",()=>{this.triggerElement.addEventListener("mouseleave",this.hideOnMouseLeaseTrigger),this.contentElement.addEventListener("mouseleave",this.hideOnMouseLeave)}),l(this,"showOnMouseEnter",()=>{this.show(),this.addEventOnMouseEnter()}),l(this,"setShowOptions",({placement:s,offsetDistance:o})=>{var a,c,d,p;this.popper.setOptions({placement:s,offsetDistance:o}),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleDocumentClick),(c=(a=this.options).beforeShow)==null||c.call(a),b({state:"open",popper:this.contentElement,trigger:this.triggerElement}),this.onToggleState(!1),(p=(d=this.options).onShow)==null||p.call(d)}),l(this,"setPopperOptions",({placement:s,offsetDistance:o})=>{this.popper.setOptions({placement:s,offsetDistance:o||this.offsetDistance})}),l(this,"setPopperTrigger",(s,o)=>{this.cleanup(),this.popper.setOptions({placement:o.placement||this.placement,offsetDistance:o.offsetDistance||this.offsetDistance}),this.triggerElement=s,this.triggerElement.addEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.addEventListener("mouseenter",this.showOnMouseEnter)}),l(this,"cleanup",()=>{this.triggerElement.removeEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.removeEventListener("mouseenter",this.showOnMouseEnter)});var r;if(this.contentElement=this.getElement(t),this.triggerElement=this.getElement(e),!(this.triggerElement instanceof HTMLElement))throw new Error("Trigger element must be a valid HTML element");if(!(this.contentElement instanceof HTMLElement))throw new Error("Content element must be a valid HTML element");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||!1,this.preventFromCloseInside=this.options.preventCloseFromInside||!1,this.defaultState=this.options.defaultState||"close",this.eventEffect=(r=this.options.popper)==null?void 0:r.eventEffect,this.popper=new x(this.triggerElement,this.contentElement,{placement:this.placement,offsetDistance:this.offsetDistance,eventEffect:this.eventEffect}),this.initInstance()}onToggleState(e){var t,i;(i=(t=this.options).onToggle)==null||i.call(t,{isHidden:e})}show(){var e,t,i,r;this.popper.updatePosition(),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleDocumentClick),(t=(e=this.options).beforeShow)==null||t.call(e),b({state:"open",popper:this.contentElement,trigger:this.triggerElement}),this.onToggleState(!1),(r=(i=this.options).onShow)==null||r.call(i)}hide(){var e,t;(t=(e=this.options).beforeHide)==null||t.call(e),b({state:"close",popper:this.contentElement,trigger:this.triggerElement}),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)),de({element:this.contentElement,callback:()=>{var i,r;this.onToggleState(!0),this.popper.cleanupEvents(),(r=(i=this.options).onHide)==null||r.call(i)}})}initInstance(){b({state:this.defaultState,popper:this.contentElement,trigger:this.triggerElement}),this.defaultState==="open"?this.show():b({state:"close",popper:this.contentElement,trigger:this.triggerElement}),this.triggerElement.addEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.addEventListener("mouseenter",this.showOnMouseEnter)}},W=(n,e=document.body)=>e.querySelector(n),j=(n,e=document.body)=>Array.from(e.querySelectorAll(n)),me=n=>typeof n=="string"?W(n):n,ge=({containerElement:n,targetChildren:e="a:not([disabled]), button:not([disabled])",direction:t})=>{let i=!1,r=me(n)||document.body,s=typeof e=="string"?j(e,r):e,o=a=>{if(a.preventDefault(),r.focus(),s.length===0)return;let c=a.key,d=document.activeElement,p=s.findIndex(g=>g===d);if(p===-1){c==="ArrowUp"||c==="ArrowLeft"?s[s.length-1].focus():s[0].focus();return}let f=g=>g>0?g-1:s.length-1,E=g=>g<s.length-1?g+1:0;switch(c){case"ArrowDown":a.preventDefault(),p=E(p);break;case"ArrowRight":break;case"ArrowUp":a.preventDefault(),p=f(p);break;case"ArrowLeft":break;case"Home":a.preventDefault(),p=0;break;case"End":a.preventDefault(),p=s.length-1;break;default:return}s[p]!==d&&s[p].focus()};return{make:()=>{i||(document.addEventListener("keydown",o),i=!0)},destroy:()=>{i&&(document.removeEventListener("keydown",o),i=!1)}}},U=(n,e,t)=>{let i=new CustomEvent(e,{detail:t});n.dispatchEvent(i)},S=class{static initGlobalRegistry(){window.$flexillaInstances||(window.$flexillaInstances={})}static register(e,t,i){return this.initGlobalRegistry(),window.$flexillaInstances[e]||(window.$flexillaInstances[e]=[]),this.getInstance(e,t)||(window.$flexillaInstances[e].push({element:t,instance:i}),i)}static getInstance(e,t){var i,r;return this.initGlobalRegistry(),(r=(i=window.$flexillaInstances[e])==null?void 0:i.find(s=>s.element===t))==null?void 0:r.instance}static removeInstance(e,t){this.initGlobalRegistry(),window.$flexillaInstances[e]&&(window.$flexillaInstances[e]=window.$flexillaInstances[e].filter(i=>i.element!==t))}},F=class G{constructor(e,t={}){h(this,"triggerElement"),h(this,"contentElement"),h(this,"options"),h(this,"OverlayInstance"),h(this,"navigationKeys"),h(this,"triggerStrategy"),h(this,"placement"),h(this,"offsetDistance"),h(this,"preventFromCloseOutside"),h(this,"preventFromCloseInside"),h(this,"defaultState"),h(this,"onToggle",({isHidden:o})=>{var a,c;(c=(a=this.options).onToggle)==null||c.call(a,{isHidden:o})}),h(this,"beforeShow",()=>{this.contentElement.focus(),this.navigationKeys.make()}),h(this,"beforeHide",()=>{this.contentElement.blur(),this.navigationKeys.destroy()}),h(this,"onShow",()=>{var o,a;U(this.contentElement,"dropdown-show",{isHidden:!1}),(a=(o=this.options).onShow)==null||a.call(o)}),h(this,"onHide",()=>{var o,a;U(this.contentElement,"dropdown-hide",{isHidden:!0}),(a=(o=this.options).onHide)==null||a.call(o)}),h(this,"show",()=>{this.OverlayInstance.show()}),h(this,"hide",()=>{this.OverlayInstance.hide()}),h(this,"setShowOptions",({placement:o,offsetDistance:a})=>{this.OverlayInstance.setShowOptions({placement:o,offsetDistance:a})}),h(this,"setOptions",({placement:o,offsetDistance:a})=>{this.OverlayInstance.setPopperOptions({placement:o,offsetDistance:a})}),h(this,"setPopperTrigger",(o,a)=>{this.OverlayInstance.setPopperTrigger(o,a)}),h(this,"cleanup",()=>{this.OverlayInstance.cleanup(),S.removeInstance("dropdown",this.contentElement)});let i=typeof e=="string"?W(e):e;if(!(i instanceof HTMLElement))throw new Error("Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement");if(!i.id)throw new Error("Dropdown content element must have an 'id' attribute for trigger association");this.contentElement=i;let r=S.getInstance("dropdown",this.contentElement);if(r)return r;let s=`[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;if(this.triggerElement=W(s),!(this.triggerElement instanceof HTMLElement))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}"`);this.options=t,this.triggerStrategy=this.options.triggerStrategy||this.contentElement.dataset.triggerStrategy||"click",this.placement=this.options.placement||this.contentElement.dataset.placement||"bottom-start",this.offsetDistance=this.options.offsetDistance||parseInt(`${this.contentElement.dataset.offsetDistance}`)|6,this.preventFromCloseOutside=this.options.preventFromCloseOutside||this.contentElement.hasAttribute("data-prevent-close-outside")||!1,this.preventFromCloseInside=this.options.preventCloseFromInside||this.contentElement.hasAttribute("data-prevent-close-inside")||!1,this.defaultState=this.options.defaultState||this.contentElement.dataset.defaultState||"close",this.OverlayInstance=new P({trigger:this.triggerElement,content:this.contentElement,options:{placement:this.placement,offsetDistance:this.offsetDistance,triggerStrategy:this.triggerStrategy,preventFromCloseOutside:this.preventFromCloseOutside,preventCloseFromInside:this.preventFromCloseInside,defaultState:this.defaultState,beforeShow:this.beforeShow,beforeHide:this.beforeHide,onShow:this.onShow,onHide:this.onHide,onToggle:({isHidden:o})=>{this.onToggle({isHidden:o})},popper:this.options.popper}}),this.navigationKeys=ge({containerElement:this.contentElement,targetChildren:"a:not([disabled]), button:not([disabled])",direction:"up-down"}),S.register("dropdown",this.contentElement,this)}static init(e,t={}){new G(e,t)}};h(F,"autoInit",(n="[data-fx-dropdown]")=>{let e=j(n);for(let t of e)new F(t)});var q=F;function fe(n){n.directive("dropdown",(e,{},{cleanup:t})=>{let i=new q(e);t(()=>{i.cleanup()})})}var B=fe;document.addEventListener("alpine:init",()=>{B(window.Alpine)});})();
|
|
1
|
+
(()=>{var J=Object.defineProperty,Q=(n,e,t)=>e in n?J(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,h=(n,e,t)=>Q(n,typeof e!="symbol"?e+"":e,t),V=Object.defineProperty,X=(n,e,t)=>e in n?V(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,m=(n,e,t)=>X(n,typeof e!="symbol"?e+"":e,t),Y="bottom",Z=({reference:n,popper:e})=>{if(!n||!e)throw new Error("Reference or popper element is null or undefined");let t=new WeakMap,i=o=>(t.has(o)||t.set(o,o.getBoundingClientRect()),t.get(o)),r=i(e),s=i(n);return{popperHeight:r.height,popperWidth:r.width,refHeight:s.height,refWidth:s.width,refLeft:s.left,refTop:s.top,refRight:s.right}},_=(n,e,t,i)=>{let r=t,s=i-(t+e);return r>=(n-e)/2&&s>=(n-e)/2},ee=(n,e,t,i)=>(n-e)/2<=t&&t+n/2+e/2<=i,te=(n,e,t,i,r)=>t>r-i?e()?window.innerHeight-r:t-r:n()?0:t+i,ne=(n,e,t,i)=>n<=i&&t-n<=e,ie=(n,e,t,i)=>t<=i&&-n<=e,se=(n,e,t,i,r,s)=>{let o=r-t-s,a=t-i,c=t+s-i+(r-t-s),p=o>=0?r-i:a>=0?t-i:t;return n()?0:e()?c:p},oe=(n,e,t,i)=>n<=t&&e-n-i>=n,re=(n,e)=>n>=e,ae=({placement:n,refWidth:e,refTop:t,refLeft:i,refHeight:r,popperWidth:s,popperHeight:o,windowHeight:a,windowWidth:c,offsetDistance:p})=>{let d=c-i-e,f=i,E=a-t-r,g=t,w=()=>te(()=>ie(t,r,o,a),()=>ne(t,r,o,a),t,r,o),y=()=>se(()=>oe(i,c,s,e),()=>re(i,s),i,s,c,e),I=()=>_(s,e,i,c)?i+e/2-s/2:y(),T=()=>ee(o,r,t,a)?t+r/2-o/2:w(),C=()=>i+s<=c?i:y(),O=()=>i+e-s>=0?i+e-s:y(),D=()=>t+o<=a?t:w(),N=()=>t+r-o>=0?t+r-o:w(),v=0,u=0,M=t-o-p,L=t+r+p,k=i-s-p,H=i+e+p,R=g>=o+p,$=E>=o+p,A=f>=s+p,K=d>=s+p;switch(n.startsWith("top")?u=R?M:$?L:Math.max(M,L):n.startsWith("bottom")?u=$?L:R?M:Math.max(L):n.startsWith("left")?v=A?k:K?H:Math.max(k,H):n.startsWith("right")&&(v=K?H:A?k:Math.max(H,k)),n){case"bottom":case"bottom-middle":case"top":case"top-middle":v=I();break;case"left":case"left-middle":case"right":case"right-middle":u=T();break;case"bottom-start":case"top-start":v=C();break;case"bottom-end":case"top-end":v=O();break;case"left-start":case"right-start":u=D();break;case"left-end":case"right-end":u=N();break}return{x:v,y:u}},x=class{constructor(e,t,i={}){m(this,"reference"),m(this,"popper"),m(this,"offsetDistance"),m(this,"placement"),m(this,"disableOnResize"),m(this,"disableOnScroll"),m(this,"onUpdate"),m(this,"isWindowEventsRegistered"),m(this,"validateElements",()=>{if(!(this.reference instanceof HTMLElement))throw new Error("Invalid HTMLElement for Reference Element");if(!(this.popper instanceof HTMLElement))throw new Error("Invalid HTMLElement for Popper");if(typeof this.offsetDistance!="number")throw new Error("OffsetDistance must be a number")}),m(this,"setPopperStyleProperty",(d,f)=>{this.popper.style.setProperty("--fx-popper-placement-x",`${d}px`),this.popper.style.setProperty("--fx-popper-placement-y",`${f}px`)}),m(this,"setInitialStyles",()=>{this.popper.style.setProperty("--fx-popper-placement-x",""),this.popper.style.setProperty("--fx-popper-placement-y","")}),m(this,"initPlacement",()=>{var d;this.validateElements(),this.setInitialStyles();let f=window.innerWidth,E=window.innerHeight,{popperHeight:g,popperWidth:w,refHeight:y,refWidth:I,refLeft:T,refTop:C}=Z({reference:this.reference,popper:this.popper}),{x:O,y:D}=ae({placement:this.placement,refWidth:I,refTop:C,refLeft:T,popperWidth:w,refHeight:y,popperHeight:g,windowHeight:E,windowWidth:f,offsetDistance:this.offsetDistance});this.setPopperStyleProperty(O,D),(d=this.onUpdate)==null||d.call(this,{x:O,y:D,placement:this.placement})}),m(this,"removeWindowEvents",()=>{this.isWindowEventsRegistered&&(!this.disableOnResize&&window.removeEventListener("resize",this.updatePosition),!this.disableOnScroll&&window.removeEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!1)}),m(this,"attachWindowEvent",()=>{this.isWindowEventsRegistered&&this.removeWindowEvents(),this.disableOnResize||window.addEventListener("resize",this.updatePosition),this.disableOnScroll||window.addEventListener("scroll",this.updatePosition),this.isWindowEventsRegistered=!0}),m(this,"resetPosition",()=>{this.setInitialStyles()}),m(this,"updatePosition",()=>{this.initPlacement(),this.attachWindowEvent()}),m(this,"cleanupEvents",()=>{this.setInitialStyles(),this.removeWindowEvents()});let{offsetDistance:r=10,placement:s=Y,eventEffect:o={},onUpdate:a}=i;if(!(e instanceof HTMLElement))throw new Error("Invalid HTMLElement for Reference Element");if(!(t instanceof HTMLElement))throw new Error("Invalid HTMLElement for Popper");if(i.offsetDistance&&typeof i.offsetDistance!="number")throw new Error("OffsetDistance must be a number");let{disableOnResize:c,disableOnScroll:p}=o;this.isWindowEventsRegistered=!1,this.reference=e,this.popper=t,this.offsetDistance=r,this.placement=s,this.disableOnResize=c||!1,this.disableOnScroll=p||!1,this.onUpdate=a}setOptions({placement:e,offsetDistance:t}){this.placement=e,this.offsetDistance=t||this.offsetDistance,this.initPlacement(),this.attachWindowEvent()}},le=Object.defineProperty,he=(n,e,t)=>e in n?le(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t,l=(n,e,t)=>he(n,typeof e!="symbol"?e+"":e,t),ce=(n,e=document.body)=>e.querySelector(n),z=(n,e)=>{for(let[t,i]of Object.entries(e))n.setAttribute(t,i)},de=({element:n,callback:e,type:t,keysCheck:i})=>{let r=getComputedStyle(n),s=r.transition;if(s!=="none"&&s!==""&&!i.includes(s)){let o="transitionend",a=()=>{n.removeEventListener(o,a),e()};n.addEventListener(o,a,{once:!0})}else e()},pe=({element:n,callback:e})=>{de({element:n,callback:e,type:"transition",keysCheck:["all 0s ease 0s","all"]})},b=({state:n,trigger:e,popper:t})=>{let i=n==="open";z(t,{"data-state":n}),z(e,{"aria-expanded":`${i}`})},P=class{constructor({trigger:e,content:t,options:i={}}){l(this,"triggerElement"),l(this,"contentElement"),l(this,"triggerStrategy"),l(this,"placement"),l(this,"offsetDistance"),l(this,"preventFromCloseOutside"),l(this,"preventFromCloseInside"),l(this,"options"),l(this,"defaultState"),l(this,"popper"),l(this,"eventEffect"),l(this,"getElement",s=>typeof s=="string"?ce(s):s instanceof HTMLElement?s:void 0),l(this,"handleDocumentClick",s=>{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())}),l(this,"handleKeyDown",s=>{s.preventDefault(),this.triggerStrategy!=="hover"&&s.key==="Escape"&&this.contentElement.getAttribute("data-state")==="open"&&(this.preventFromCloseOutside||this.hide())}),l(this,"toggleStateOnClick",()=>{(this.contentElement.dataset.state||"close")==="close"?(this.show(),this.triggerStrategy==="hover"&&this.addEventOnMouseEnter()):this.hide()}),l(this,"hideOnMouseLeaseTrigger",()=>{setTimeout(()=>{this.contentElement.matches(":hover")||this.hide()},150)}),l(this,"hideOnMouseLeave",()=>{setTimeout(()=>{this.triggerElement.matches(":hover")||this.hide()},150)}),l(this,"addEventOnMouseEnter",()=>{this.triggerElement.addEventListener("mouseleave",this.hideOnMouseLeaseTrigger),this.contentElement.addEventListener("mouseleave",this.hideOnMouseLeave)}),l(this,"showOnMouseEnter",()=>{this.show(),this.addEventOnMouseEnter()}),l(this,"setShowOptions",({placement:s,offsetDistance:o})=>{var a,c,p,d;this.popper.setOptions({placement:s,offsetDistance:o}),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleDocumentClick),(c=(a=this.options).beforeShow)==null||c.call(a),b({state:"open",popper:this.contentElement,trigger:this.triggerElement}),this.onToggleState(!1),(d=(p=this.options).onShow)==null||d.call(p)}),l(this,"setPopperOptions",({placement:s,offsetDistance:o})=>{this.popper.setOptions({placement:s,offsetDistance:o||this.offsetDistance})}),l(this,"setPopperTrigger",(s,o)=>{this.cleanup(),this.popper.setOptions({placement:o.placement||this.placement,offsetDistance:o.offsetDistance||this.offsetDistance}),this.triggerElement=s,this.triggerElement.addEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.addEventListener("mouseenter",this.showOnMouseEnter)}),l(this,"cleanup",()=>{this.triggerElement.removeEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.removeEventListener("mouseenter",this.showOnMouseEnter)});var r;if(this.contentElement=this.getElement(t),this.triggerElement=this.getElement(e),!(this.triggerElement instanceof HTMLElement))throw new Error("Trigger element must be a valid HTML element");if(!(this.contentElement instanceof HTMLElement))throw new Error("Content element must be a valid HTML element");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||!1,this.preventFromCloseInside=this.options.preventCloseFromInside||!1,this.defaultState=this.options.defaultState||"close",this.eventEffect=(r=this.options.popper)==null?void 0:r.eventEffect,this.popper=new x(this.triggerElement,this.contentElement,{placement:this.placement,offsetDistance:this.offsetDistance,eventEffect:this.eventEffect}),this.initInstance()}onToggleState(e){var t,i;(i=(t=this.options).onToggle)==null||i.call(t,{isHidden:e})}show(){var e,t,i,r;this.popper.updatePosition(),document.addEventListener("keydown",this.handleKeyDown),document.addEventListener("click",this.handleDocumentClick),(t=(e=this.options).beforeShow)==null||t.call(e),b({state:"open",popper:this.contentElement,trigger:this.triggerElement}),this.onToggleState(!1),(r=(i=this.options).onShow)==null||r.call(i)}hide(){var e,t;(t=(e=this.options).beforeHide)==null||t.call(e),b({state:"close",popper:this.contentElement,trigger:this.triggerElement}),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)),pe({element:this.contentElement,callback:()=>{var i,r;this.onToggleState(!0),this.popper.cleanupEvents(),(r=(i=this.options).onHide)==null||r.call(i)}})}initInstance(){b({state:this.defaultState,popper:this.contentElement,trigger:this.triggerElement}),this.defaultState==="open"?this.show():b({state:"close",popper:this.contentElement,trigger:this.triggerElement}),this.triggerElement.addEventListener("click",this.toggleStateOnClick),this.triggerStrategy==="hover"&&this.triggerElement.addEventListener("mouseenter",this.showOnMouseEnter)}},W=(n,e=document.body)=>e.querySelector(n),j=(n,e=document.body)=>Array.from(e.querySelectorAll(n)),me=n=>typeof n=="string"?W(n):n,ge=({containerElement:n,targetChildren:e="a:not([disabled]), button:not([disabled])",direction:t})=>{let i=!1,r=me(n)||document.body,s=typeof e=="string"?j(e,r):e,o=a=>{if(a.preventDefault(),r.focus(),s.length===0)return;let c=a.key,p=document.activeElement,d=s.findIndex(g=>g===p);if(d===-1){c==="ArrowUp"||c==="ArrowLeft"?s[s.length-1].focus():s[0].focus();return}let f=g=>g>0?g-1:s.length-1,E=g=>g<s.length-1?g+1:0;switch(c){case"ArrowDown":a.preventDefault(),d=E(d);break;case"ArrowRight":break;case"ArrowUp":a.preventDefault(),d=f(d);break;case"ArrowLeft":break;case"Home":a.preventDefault(),d=0;break;case"End":a.preventDefault(),d=s.length-1;break;default:return}s[d]!==p&&s[d].focus()};return{make:()=>{i||(document.addEventListener("keydown",o),i=!0)},destroy:()=>{i&&(document.removeEventListener("keydown",o),i=!1)}}},U=(n,e,t)=>{let i=new CustomEvent(e,{detail:t});n.dispatchEvent(i)},S=class{static initGlobalRegistry(){window.$flexillaInstances||(window.$flexillaInstances={})}static register(e,t,i){return this.initGlobalRegistry(),window.$flexillaInstances[e]||(window.$flexillaInstances[e]=[]),this.getInstance(e,t)||(window.$flexillaInstances[e].push({element:t,instance:i}),i)}static getInstance(e,t){var i,r;return this.initGlobalRegistry(),(r=(i=window.$flexillaInstances[e])==null?void 0:i.find(s=>s.element===t))==null?void 0:r.instance}static removeInstance(e,t){this.initGlobalRegistry(),window.$flexillaInstances[e]&&(window.$flexillaInstances[e]=window.$flexillaInstances[e].filter(i=>i.element!==t))}},F=class G{constructor(e,t={}){h(this,"triggerElement"),h(this,"contentElement"),h(this,"options"),h(this,"OverlayInstance"),h(this,"navigationKeys"),h(this,"triggerStrategy"),h(this,"placement"),h(this,"offsetDistance"),h(this,"preventFromCloseOutside"),h(this,"preventFromCloseInside"),h(this,"defaultState"),h(this,"onToggle",({isHidden:o})=>{var a,c;(c=(a=this.options).onToggle)==null||c.call(a,{isHidden:o})}),h(this,"beforeShow",()=>{this.contentElement.focus(),this.navigationKeys.make()}),h(this,"beforeHide",()=>{this.contentElement.blur(),this.navigationKeys.destroy()}),h(this,"onShow",()=>{var o,a;U(this.contentElement,"dropdown-show",{isHidden:!1}),(a=(o=this.options).onShow)==null||a.call(o)}),h(this,"onHide",()=>{var o,a;U(this.contentElement,"dropdown-hide",{isHidden:!0}),(a=(o=this.options).onHide)==null||a.call(o)}),h(this,"show",()=>{this.OverlayInstance.show()}),h(this,"hide",()=>{this.OverlayInstance.hide()}),h(this,"setShowOptions",({placement:o,offsetDistance:a})=>{this.OverlayInstance.setShowOptions({placement:o,offsetDistance:a})}),h(this,"setOptions",({placement:o,offsetDistance:a})=>{this.OverlayInstance.setPopperOptions({placement:o,offsetDistance:a})}),h(this,"setPopperTrigger",(o,a)=>{this.OverlayInstance.setPopperTrigger(o,a)}),h(this,"cleanup",()=>{this.OverlayInstance.cleanup(),S.removeInstance("dropdown",this.contentElement)});let i=typeof e=="string"?W(e):e;if(!(i instanceof HTMLElement))throw new Error("Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement");if(!i.id)throw new Error("Dropdown content element must have an 'id' attribute for trigger association");this.contentElement=i;let r=S.getInstance("dropdown",this.contentElement);if(r)return r;let s=`[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;if(this.triggerElement=W(s),!(this.triggerElement instanceof HTMLElement))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}"`);this.options=t,this.triggerStrategy=this.options.triggerStrategy||this.contentElement.dataset.triggerStrategy||"click",this.placement=this.options.placement||this.contentElement.dataset.placement||"bottom-start",this.offsetDistance=this.options.offsetDistance||parseInt(`${this.contentElement.dataset.offsetDistance}`)|6,this.preventFromCloseOutside=this.options.preventFromCloseOutside||this.contentElement.hasAttribute("data-prevent-close-outside")||!1,this.preventFromCloseInside=this.options.preventCloseFromInside||this.contentElement.hasAttribute("data-prevent-close-inside")||!1,this.defaultState=this.options.defaultState||this.contentElement.dataset.defaultState||"close",this.OverlayInstance=new P({trigger:this.triggerElement,content:this.contentElement,options:{placement:this.placement,offsetDistance:this.offsetDistance,triggerStrategy:this.triggerStrategy,preventFromCloseOutside:this.preventFromCloseOutside,preventCloseFromInside:this.preventFromCloseInside,defaultState:this.defaultState,beforeShow:this.beforeShow,beforeHide:this.beforeHide,onShow:this.onShow,onHide:this.onHide,onToggle:({isHidden:o})=>{this.onToggle({isHidden:o})},popper:this.options.popper}}),this.navigationKeys=ge({containerElement:this.contentElement,targetChildren:"a:not([disabled]), button:not([disabled])",direction:"up-down"}),S.register("dropdown",this.contentElement,this)}static init(e,t={}){new G(e,t)}};h(F,"autoInit",(n="[data-fx-dropdown]")=>{let e=j(n);for(let t of e)new F(t)});var q=F;function fe(n){n.directive("dropdown",(e,{},{cleanup:t})=>{let i=new q(e);t(()=>{i.cleanup()})})}var B=fe;document.addEventListener("alpine:init",()=>{B(window.Alpine)});})();
|
package/dist/module.cjs.js
CHANGED
|
@@ -29,9 +29,9 @@ var q = (s, e, t) => e in s ? j(s, e, { enumerable: true, configurable: true, wr
|
|
|
29
29
|
var a = (s, e, t) => q(s, typeof e != "symbol" ? e + "" : e, t);
|
|
30
30
|
var B = Object.defineProperty;
|
|
31
31
|
var N = (s, e, t) => e in s ? B(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
32
|
+
var d = (s, e, t) => N(s, typeof e != "symbol" ? e + "" : e, t);
|
|
33
|
+
var V = "bottom";
|
|
34
|
+
var X = ({ reference: s, popper: e }) => {
|
|
35
35
|
if (!s || !e)
|
|
36
36
|
throw new Error("Reference or popper element is null or undefined");
|
|
37
37
|
const t = /* @__PURE__ */ new WeakMap(), n = (r) => (t.has(r) || t.set(r, r.getBoundingClientRect()), t.get(r)), o = n(e), i = n(s);
|
|
@@ -45,24 +45,21 @@ var Q = ({ reference: s, popper: e }) => {
|
|
|
45
45
|
refRight: i.right
|
|
46
46
|
};
|
|
47
47
|
};
|
|
48
|
-
var V = Object.defineProperty;
|
|
49
|
-
var X = (s, e, t) => e in s ? V(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
50
|
-
var p = (s, e, t) => X(s, typeof e != "symbol" ? e + "" : e, t);
|
|
51
48
|
var Y = (s, e, t, n) => {
|
|
52
49
|
const o = t, i = n - (t + e);
|
|
53
50
|
return o >= (s - e) / 2 && i >= (s - e) / 2;
|
|
54
51
|
};
|
|
55
|
-
var
|
|
56
|
-
var
|
|
57
|
-
var
|
|
58
|
-
var
|
|
59
|
-
var
|
|
60
|
-
const r = o - t - i, h = t - n, g = t + i - n + (o - t - i),
|
|
61
|
-
return s() ? 0 : e() ? g :
|
|
52
|
+
var J = (s, e, t, n) => (s - e) / 2 <= t && t + s / 2 + e / 2 <= n;
|
|
53
|
+
var Q = (s, e, t, n, o) => t > o - n ? e() ? window.innerHeight - o : t - o : s() ? 0 : t + n;
|
|
54
|
+
var Z = (s, e, t, n) => s <= n && t - s <= e;
|
|
55
|
+
var _ = (s, e, t, n) => t <= n && -s <= e;
|
|
56
|
+
var ee = (s, e, t, n, o, i) => {
|
|
57
|
+
const r = o - t - i, h = t - n, g = t + i - n + (o - t - i), p = r >= 0 ? o - n : h >= 0 ? t - n : t;
|
|
58
|
+
return s() ? 0 : e() ? g : p;
|
|
62
59
|
};
|
|
63
|
-
var
|
|
64
|
-
var
|
|
65
|
-
var
|
|
60
|
+
var te = (s, e, t, n) => s <= t && e - s - n >= s;
|
|
61
|
+
var ne = (s, e) => s >= e;
|
|
62
|
+
var se = ({
|
|
66
63
|
placement: s,
|
|
67
64
|
refWidth: e,
|
|
68
65
|
refTop: t,
|
|
@@ -72,25 +69,25 @@ var oe = ({
|
|
|
72
69
|
popperHeight: r,
|
|
73
70
|
windowHeight: h,
|
|
74
71
|
windowWidth: g,
|
|
75
|
-
offsetDistance:
|
|
72
|
+
offsetDistance: p
|
|
76
73
|
}) => {
|
|
77
|
-
const c = g - n - e, f = n, v = h - t - o, m = t, w = () =>
|
|
78
|
-
() =>
|
|
79
|
-
() =>
|
|
74
|
+
const c = g - n - e, f = n, v = h - t - o, m = t, w = () => Q(
|
|
75
|
+
() => _(t, o, r, h),
|
|
76
|
+
() => Z(t, o, r, h),
|
|
80
77
|
t,
|
|
81
78
|
o,
|
|
82
79
|
r
|
|
83
|
-
), y = () =>
|
|
84
|
-
() =>
|
|
85
|
-
() =>
|
|
80
|
+
), y = () => ee(
|
|
81
|
+
() => te(n, g, i, e),
|
|
82
|
+
() => ne(n, i),
|
|
86
83
|
n,
|
|
87
84
|
i,
|
|
88
85
|
g,
|
|
89
86
|
e
|
|
90
|
-
), H = () => Y(i, e, n, g) ? n + e / 2 - i / 2 : y(), T = () =>
|
|
87
|
+
), H = () => Y(i, e, n, g) ? n + e / 2 - i / 2 : y(), T = () => J(r, o, t, h) ? t + o / 2 - r / 2 : w(), C = () => n + i <= g ? n : y(), O = () => n + e - i >= 0 ? n + e - i : y(), L = () => t + r <= h ? t : w(), G = () => t + o - r >= 0 ? t + o - r : w();
|
|
91
88
|
let u = 0, E = 0;
|
|
92
|
-
const M = t - r -
|
|
93
|
-
switch (s.startsWith("top") ? E =
|
|
89
|
+
const M = t - r - p, k = t + o + p, D = n - i - p, I = n + e + p, W = m >= r + p, F = v >= r + p, R = f >= i + p, $ = c >= i + p;
|
|
90
|
+
switch (s.startsWith("top") ? E = W ? M : F ? k : Math.max(M, k) : s.startsWith("bottom") ? E = F ? k : W ? M : Math.max(k) : s.startsWith("left") ? u = R ? D : $ ? I : Math.max(D, I) : s.startsWith("right") && (u = $ ? I : R ? D : Math.max(I, D)), s) {
|
|
94
91
|
case "bottom":
|
|
95
92
|
case "bottom-middle":
|
|
96
93
|
case "top":
|
|
@@ -122,7 +119,7 @@ var oe = ({
|
|
|
122
119
|
}
|
|
123
120
|
return { x: u, y: E };
|
|
124
121
|
};
|
|
125
|
-
var
|
|
122
|
+
var ie = class {
|
|
126
123
|
/**
|
|
127
124
|
* Flexilla Popper
|
|
128
125
|
* @param reference
|
|
@@ -142,21 +139,21 @@ var re = class {
|
|
|
142
139
|
* @param {Function} [options.onUpdate] - Callback function when position updates
|
|
143
140
|
*/
|
|
144
141
|
constructor(e, t, n = {}) {
|
|
145
|
-
|
|
142
|
+
d(this, "reference"), d(this, "popper"), d(this, "offsetDistance"), d(this, "placement"), d(this, "disableOnResize"), d(this, "disableOnScroll"), d(this, "onUpdate"), d(this, "isWindowEventsRegistered"), d(this, "validateElements", () => {
|
|
146
143
|
if (!(this.reference instanceof HTMLElement))
|
|
147
144
|
throw new Error("Invalid HTMLElement for Reference Element");
|
|
148
145
|
if (!(this.popper instanceof HTMLElement))
|
|
149
146
|
throw new Error("Invalid HTMLElement for Popper");
|
|
150
147
|
if (typeof this.offsetDistance != "number")
|
|
151
148
|
throw new Error("OffsetDistance must be a number");
|
|
152
|
-
}),
|
|
149
|
+
}), d(this, "setPopperStyleProperty", (c, f) => {
|
|
153
150
|
this.popper.style.setProperty("--fx-popper-placement-x", `${c}px`), this.popper.style.setProperty("--fx-popper-placement-y", `${f}px`);
|
|
154
|
-
}),
|
|
151
|
+
}), d(this, "setInitialStyles", () => {
|
|
155
152
|
this.popper.style.setProperty("--fx-popper-placement-x", ""), this.popper.style.setProperty("--fx-popper-placement-y", "");
|
|
156
|
-
}),
|
|
153
|
+
}), d(this, "initPlacement", () => {
|
|
157
154
|
var c;
|
|
158
155
|
this.validateElements(), this.setInitialStyles();
|
|
159
|
-
const f = window.innerWidth, v = window.innerHeight, { popperHeight: m, popperWidth: w, refHeight: y, refWidth: H, refLeft: T, refTop: C } =
|
|
156
|
+
const f = window.innerWidth, v = window.innerHeight, { popperHeight: m, popperWidth: w, refHeight: y, refWidth: H, refLeft: T, refTop: C } = X({ reference: this.reference, popper: this.popper }), { x: O, y: L } = se(
|
|
160
157
|
{
|
|
161
158
|
placement: this.placement,
|
|
162
159
|
refWidth: H,
|
|
@@ -171,20 +168,20 @@ var re = class {
|
|
|
171
168
|
}
|
|
172
169
|
);
|
|
173
170
|
this.setPopperStyleProperty(O, L), (c = this.onUpdate) == null || c.call(this, { x: O, y: L, placement: this.placement });
|
|
174
|
-
}),
|
|
171
|
+
}), d(this, "removeWindowEvents", () => {
|
|
175
172
|
this.isWindowEventsRegistered && (!this.disableOnResize && window.removeEventListener("resize", this.updatePosition), !this.disableOnScroll && window.removeEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = false);
|
|
176
|
-
}),
|
|
173
|
+
}), d(this, "attachWindowEvent", () => {
|
|
177
174
|
this.isWindowEventsRegistered && this.removeWindowEvents(), this.disableOnResize || window.addEventListener("resize", this.updatePosition), this.disableOnScroll || window.addEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = true;
|
|
178
|
-
}),
|
|
175
|
+
}), d(this, "resetPosition", () => {
|
|
179
176
|
this.setInitialStyles();
|
|
180
|
-
}),
|
|
177
|
+
}), d(this, "updatePosition", () => {
|
|
181
178
|
this.initPlacement(), this.attachWindowEvent();
|
|
182
|
-
}),
|
|
179
|
+
}), d(this, "cleanupEvents", () => {
|
|
183
180
|
this.setInitialStyles(), this.removeWindowEvents();
|
|
184
181
|
});
|
|
185
182
|
const {
|
|
186
183
|
offsetDistance: o = 10,
|
|
187
|
-
placement: i =
|
|
184
|
+
placement: i = V,
|
|
188
185
|
eventEffect: r = {},
|
|
189
186
|
onUpdate: h
|
|
190
187
|
} = n;
|
|
@@ -194,8 +191,8 @@ var re = class {
|
|
|
194
191
|
throw new Error("Invalid HTMLElement for Popper");
|
|
195
192
|
if (n.offsetDistance && typeof n.offsetDistance != "number")
|
|
196
193
|
throw new Error("OffsetDistance must be a number");
|
|
197
|
-
const { disableOnResize: g, disableOnScroll:
|
|
198
|
-
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = i, this.disableOnResize = g || false, this.disableOnScroll =
|
|
194
|
+
const { disableOnResize: g, disableOnScroll: p } = r;
|
|
195
|
+
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = i, this.disableOnResize = g || false, this.disableOnScroll = p || false, this.onUpdate = h;
|
|
199
196
|
}
|
|
200
197
|
/**
|
|
201
198
|
* Updates popper configuration and recalculates position
|
|
@@ -208,6 +205,9 @@ var re = class {
|
|
|
208
205
|
this.placement = e, this.offsetDistance = t || this.offsetDistance, this.initPlacement(), this.attachWindowEvent();
|
|
209
206
|
}
|
|
210
207
|
};
|
|
208
|
+
var oe = Object.defineProperty;
|
|
209
|
+
var re = (s, e, t) => e in s ? oe(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
210
|
+
var l = (s, e, t) => re(s, typeof e != "symbol" ? e + "" : e, t);
|
|
211
211
|
var ae = (s, e = document.body) => e.querySelector(s);
|
|
212
212
|
var A = (s, e) => {
|
|
213
213
|
for (const [t, n] of Object.entries(e))
|
|
@@ -275,7 +275,7 @@ var ce = class {
|
|
|
275
275
|
}), l(this, "showOnMouseEnter", () => {
|
|
276
276
|
this.show(), this.addEventOnMouseEnter();
|
|
277
277
|
}), l(this, "setShowOptions", ({ placement: i, offsetDistance: r }) => {
|
|
278
|
-
var h, g,
|
|
278
|
+
var h, g, p, c;
|
|
279
279
|
this.popper.setOptions({
|
|
280
280
|
placement: i,
|
|
281
281
|
offsetDistance: r
|
|
@@ -283,7 +283,7 @@ var ce = class {
|
|
|
283
283
|
state: "open",
|
|
284
284
|
popper: this.contentElement,
|
|
285
285
|
trigger: this.triggerElement
|
|
286
|
-
}), this.onToggleState(false), (c = (
|
|
286
|
+
}), this.onToggleState(false), (c = (p = this.options).onShow) == null || c.call(p);
|
|
287
287
|
}), l(this, "setPopperOptions", ({ placement: i, offsetDistance: r }) => {
|
|
288
288
|
this.popper.setOptions({
|
|
289
289
|
placement: i,
|
|
@@ -302,7 +302,7 @@ var ce = class {
|
|
|
302
302
|
throw new Error("Trigger element must be a valid HTML element");
|
|
303
303
|
if (!(this.contentElement instanceof HTMLElement))
|
|
304
304
|
throw new Error("Content element must be a valid HTML element");
|
|
305
|
-
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 = (o = this.options.popper) == null ? void 0 : o.eventEffect, this.popper = new
|
|
305
|
+
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 = (o = this.options.popper) == null ? void 0 : o.eventEffect, this.popper = new ie(
|
|
306
306
|
this.triggerElement,
|
|
307
307
|
this.contentElement,
|
|
308
308
|
{
|
|
@@ -358,16 +358,16 @@ var ce = class {
|
|
|
358
358
|
}), this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
|
|
359
359
|
}
|
|
360
360
|
};
|
|
361
|
-
var
|
|
361
|
+
var P = (s, e = document.body) => e.querySelector(s);
|
|
362
362
|
var U = (s, e = document.body) => Array.from(e.querySelectorAll(s));
|
|
363
|
-
var
|
|
364
|
-
var
|
|
363
|
+
var pe = (s) => typeof s == "string" ? P(s) : s;
|
|
364
|
+
var de = ({ containerElement: s, targetChildren: e = "a:not([disabled]), button:not([disabled])", direction: t }) => {
|
|
365
365
|
let n = false;
|
|
366
|
-
const o =
|
|
366
|
+
const o = pe(s) || document.body, i = typeof e == "string" ? U(e, o) : e, r = (h) => {
|
|
367
367
|
if (h.preventDefault(), o.focus(), i.length === 0)
|
|
368
368
|
return;
|
|
369
|
-
const g = h.key,
|
|
370
|
-
let c = i.findIndex((m) => m ===
|
|
369
|
+
const g = h.key, p = document.activeElement;
|
|
370
|
+
let c = i.findIndex((m) => m === p);
|
|
371
371
|
if (c === -1) {
|
|
372
372
|
g === "ArrowUp" || g === "ArrowLeft" ? i[i.length - 1].focus() : i[0].focus();
|
|
373
373
|
return;
|
|
@@ -393,7 +393,7 @@ var pe = ({ containerElement: s, targetChildren: e = "a:not([disabled]), button:
|
|
|
393
393
|
default:
|
|
394
394
|
return;
|
|
395
395
|
}
|
|
396
|
-
i[c] !==
|
|
396
|
+
i[c] !== p && i[c].focus();
|
|
397
397
|
};
|
|
398
398
|
return {
|
|
399
399
|
make: () => {
|
|
@@ -404,7 +404,7 @@ var pe = ({ containerElement: s, targetChildren: e = "a:not([disabled]), button:
|
|
|
404
404
|
}
|
|
405
405
|
};
|
|
406
406
|
};
|
|
407
|
-
var
|
|
407
|
+
var z = (s, e, t) => {
|
|
408
408
|
const n = new CustomEvent(e, { detail: t });
|
|
409
409
|
s.dispatchEvent(n);
|
|
410
410
|
};
|
|
@@ -458,13 +458,13 @@ var S = class S2 {
|
|
|
458
458
|
});
|
|
459
459
|
a(this, "onShow", () => {
|
|
460
460
|
var e2, t2;
|
|
461
|
-
|
|
461
|
+
z(this.contentElement, "dropdown-show", {
|
|
462
462
|
isHidden: false
|
|
463
463
|
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2);
|
|
464
464
|
});
|
|
465
465
|
a(this, "onHide", () => {
|
|
466
466
|
var e2, t2;
|
|
467
|
-
|
|
467
|
+
z(this.contentElement, "dropdown-hide", {
|
|
468
468
|
isHidden: true
|
|
469
469
|
}), (t2 = (e2 = this.options).onHide) == null || t2.call(e2);
|
|
470
470
|
});
|
|
@@ -486,7 +486,7 @@ var S = class S2 {
|
|
|
486
486
|
a(this, "cleanup", () => {
|
|
487
487
|
this.OverlayInstance.cleanup(), x.removeInstance("dropdown", this.contentElement);
|
|
488
488
|
});
|
|
489
|
-
const n = typeof e == "string" ?
|
|
489
|
+
const n = typeof e == "string" ? P(e) : e;
|
|
490
490
|
if (!(n instanceof HTMLElement))
|
|
491
491
|
throw new Error(
|
|
492
492
|
"Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement"
|
|
@@ -498,7 +498,7 @@ var S = class S2 {
|
|
|
498
498
|
if (o)
|
|
499
499
|
return o;
|
|
500
500
|
const i = `[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;
|
|
501
|
-
if (this.triggerElement =
|
|
501
|
+
if (this.triggerElement = P(i), !(this.triggerElement instanceof HTMLElement))
|
|
502
502
|
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}"`);
|
|
503
503
|
this.options = t, this.triggerStrategy = this.options.triggerStrategy || this.contentElement.dataset.triggerStrategy || "click", this.placement = this.options.placement || this.contentElement.dataset.placement || "bottom-start", this.offsetDistance = this.options.offsetDistance || parseInt(`${this.contentElement.dataset.offsetDistance}`) | 6, this.preventFromCloseOutside = this.options.preventFromCloseOutside || this.contentElement.hasAttribute("data-prevent-close-outside") || false, this.preventFromCloseInside = this.options.preventCloseFromInside || this.contentElement.hasAttribute("data-prevent-close-inside") || false, this.defaultState = this.options.defaultState || this.contentElement.dataset.defaultState || "close", this.OverlayInstance = new ce({
|
|
504
504
|
trigger: this.triggerElement,
|
|
@@ -519,7 +519,7 @@ var S = class S2 {
|
|
|
519
519
|
},
|
|
520
520
|
popper: this.options.popper
|
|
521
521
|
}
|
|
522
|
-
}), this.navigationKeys =
|
|
522
|
+
}), this.navigationKeys = de({
|
|
523
523
|
containerElement: this.contentElement,
|
|
524
524
|
targetChildren: "a:not([disabled]), button:not([disabled])",
|
|
525
525
|
direction: "up-down"
|
|
@@ -540,12 +540,12 @@ a(S, "autoInit", (e = "[data-fx-dropdown]") => {
|
|
|
540
540
|
for (const n of t)
|
|
541
541
|
new S(n);
|
|
542
542
|
});
|
|
543
|
-
var
|
|
543
|
+
var K = S;
|
|
544
544
|
|
|
545
545
|
// src/index.js
|
|
546
546
|
function Dropdown(Alpine) {
|
|
547
547
|
Alpine.directive("dropdown", (el, {}, { cleanup }) => {
|
|
548
|
-
const dropdown_ = new
|
|
548
|
+
const dropdown_ = new K(el);
|
|
549
549
|
cleanup(() => {
|
|
550
550
|
dropdown_.cleanup();
|
|
551
551
|
});
|
package/dist/module.esm.js
CHANGED
|
@@ -4,9 +4,9 @@ var q = (s, e, t) => e in s ? j(s, e, { enumerable: true, configurable: true, wr
|
|
|
4
4
|
var a = (s, e, t) => q(s, typeof e != "symbol" ? e + "" : e, t);
|
|
5
5
|
var B = Object.defineProperty;
|
|
6
6
|
var N = (s, e, t) => e in s ? B(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
7
|
+
var d = (s, e, t) => N(s, typeof e != "symbol" ? e + "" : e, t);
|
|
8
|
+
var V = "bottom";
|
|
9
|
+
var X = ({ reference: s, popper: e }) => {
|
|
10
10
|
if (!s || !e)
|
|
11
11
|
throw new Error("Reference or popper element is null or undefined");
|
|
12
12
|
const t = /* @__PURE__ */ new WeakMap(), n = (r) => (t.has(r) || t.set(r, r.getBoundingClientRect()), t.get(r)), o = n(e), i = n(s);
|
|
@@ -20,24 +20,21 @@ var Q = ({ reference: s, popper: e }) => {
|
|
|
20
20
|
refRight: i.right
|
|
21
21
|
};
|
|
22
22
|
};
|
|
23
|
-
var V = Object.defineProperty;
|
|
24
|
-
var X = (s, e, t) => e in s ? V(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
25
|
-
var p = (s, e, t) => X(s, typeof e != "symbol" ? e + "" : e, t);
|
|
26
23
|
var Y = (s, e, t, n) => {
|
|
27
24
|
const o = t, i = n - (t + e);
|
|
28
25
|
return o >= (s - e) / 2 && i >= (s - e) / 2;
|
|
29
26
|
};
|
|
30
|
-
var
|
|
31
|
-
var
|
|
32
|
-
var
|
|
33
|
-
var
|
|
34
|
-
var
|
|
35
|
-
const r = o - t - i, h = t - n, g = t + i - n + (o - t - i),
|
|
36
|
-
return s() ? 0 : e() ? g :
|
|
27
|
+
var J = (s, e, t, n) => (s - e) / 2 <= t && t + s / 2 + e / 2 <= n;
|
|
28
|
+
var Q = (s, e, t, n, o) => t > o - n ? e() ? window.innerHeight - o : t - o : s() ? 0 : t + n;
|
|
29
|
+
var Z = (s, e, t, n) => s <= n && t - s <= e;
|
|
30
|
+
var _ = (s, e, t, n) => t <= n && -s <= e;
|
|
31
|
+
var ee = (s, e, t, n, o, i) => {
|
|
32
|
+
const r = o - t - i, h = t - n, g = t + i - n + (o - t - i), p = r >= 0 ? o - n : h >= 0 ? t - n : t;
|
|
33
|
+
return s() ? 0 : e() ? g : p;
|
|
37
34
|
};
|
|
38
|
-
var
|
|
39
|
-
var
|
|
40
|
-
var
|
|
35
|
+
var te = (s, e, t, n) => s <= t && e - s - n >= s;
|
|
36
|
+
var ne = (s, e) => s >= e;
|
|
37
|
+
var se = ({
|
|
41
38
|
placement: s,
|
|
42
39
|
refWidth: e,
|
|
43
40
|
refTop: t,
|
|
@@ -47,25 +44,25 @@ var oe = ({
|
|
|
47
44
|
popperHeight: r,
|
|
48
45
|
windowHeight: h,
|
|
49
46
|
windowWidth: g,
|
|
50
|
-
offsetDistance:
|
|
47
|
+
offsetDistance: p
|
|
51
48
|
}) => {
|
|
52
|
-
const c = g - n - e, f = n, v = h - t - o, m = t, w = () =>
|
|
53
|
-
() =>
|
|
54
|
-
() =>
|
|
49
|
+
const c = g - n - e, f = n, v = h - t - o, m = t, w = () => Q(
|
|
50
|
+
() => _(t, o, r, h),
|
|
51
|
+
() => Z(t, o, r, h),
|
|
55
52
|
t,
|
|
56
53
|
o,
|
|
57
54
|
r
|
|
58
|
-
), y = () =>
|
|
59
|
-
() =>
|
|
60
|
-
() =>
|
|
55
|
+
), y = () => ee(
|
|
56
|
+
() => te(n, g, i, e),
|
|
57
|
+
() => ne(n, i),
|
|
61
58
|
n,
|
|
62
59
|
i,
|
|
63
60
|
g,
|
|
64
61
|
e
|
|
65
|
-
), H = () => Y(i, e, n, g) ? n + e / 2 - i / 2 : y(), T = () =>
|
|
62
|
+
), H = () => Y(i, e, n, g) ? n + e / 2 - i / 2 : y(), T = () => J(r, o, t, h) ? t + o / 2 - r / 2 : w(), C = () => n + i <= g ? n : y(), O = () => n + e - i >= 0 ? n + e - i : y(), L = () => t + r <= h ? t : w(), G = () => t + o - r >= 0 ? t + o - r : w();
|
|
66
63
|
let u = 0, E = 0;
|
|
67
|
-
const M = t - r -
|
|
68
|
-
switch (s.startsWith("top") ? E =
|
|
64
|
+
const M = t - r - p, k = t + o + p, D = n - i - p, I = n + e + p, W = m >= r + p, F = v >= r + p, R = f >= i + p, $ = c >= i + p;
|
|
65
|
+
switch (s.startsWith("top") ? E = W ? M : F ? k : Math.max(M, k) : s.startsWith("bottom") ? E = F ? k : W ? M : Math.max(k) : s.startsWith("left") ? u = R ? D : $ ? I : Math.max(D, I) : s.startsWith("right") && (u = $ ? I : R ? D : Math.max(I, D)), s) {
|
|
69
66
|
case "bottom":
|
|
70
67
|
case "bottom-middle":
|
|
71
68
|
case "top":
|
|
@@ -97,7 +94,7 @@ var oe = ({
|
|
|
97
94
|
}
|
|
98
95
|
return { x: u, y: E };
|
|
99
96
|
};
|
|
100
|
-
var
|
|
97
|
+
var ie = class {
|
|
101
98
|
/**
|
|
102
99
|
* Flexilla Popper
|
|
103
100
|
* @param reference
|
|
@@ -117,21 +114,21 @@ var re = class {
|
|
|
117
114
|
* @param {Function} [options.onUpdate] - Callback function when position updates
|
|
118
115
|
*/
|
|
119
116
|
constructor(e, t, n = {}) {
|
|
120
|
-
|
|
117
|
+
d(this, "reference"), d(this, "popper"), d(this, "offsetDistance"), d(this, "placement"), d(this, "disableOnResize"), d(this, "disableOnScroll"), d(this, "onUpdate"), d(this, "isWindowEventsRegistered"), d(this, "validateElements", () => {
|
|
121
118
|
if (!(this.reference instanceof HTMLElement))
|
|
122
119
|
throw new Error("Invalid HTMLElement for Reference Element");
|
|
123
120
|
if (!(this.popper instanceof HTMLElement))
|
|
124
121
|
throw new Error("Invalid HTMLElement for Popper");
|
|
125
122
|
if (typeof this.offsetDistance != "number")
|
|
126
123
|
throw new Error("OffsetDistance must be a number");
|
|
127
|
-
}),
|
|
124
|
+
}), d(this, "setPopperStyleProperty", (c, f) => {
|
|
128
125
|
this.popper.style.setProperty("--fx-popper-placement-x", `${c}px`), this.popper.style.setProperty("--fx-popper-placement-y", `${f}px`);
|
|
129
|
-
}),
|
|
126
|
+
}), d(this, "setInitialStyles", () => {
|
|
130
127
|
this.popper.style.setProperty("--fx-popper-placement-x", ""), this.popper.style.setProperty("--fx-popper-placement-y", "");
|
|
131
|
-
}),
|
|
128
|
+
}), d(this, "initPlacement", () => {
|
|
132
129
|
var c;
|
|
133
130
|
this.validateElements(), this.setInitialStyles();
|
|
134
|
-
const f = window.innerWidth, v = window.innerHeight, { popperHeight: m, popperWidth: w, refHeight: y, refWidth: H, refLeft: T, refTop: C } =
|
|
131
|
+
const f = window.innerWidth, v = window.innerHeight, { popperHeight: m, popperWidth: w, refHeight: y, refWidth: H, refLeft: T, refTop: C } = X({ reference: this.reference, popper: this.popper }), { x: O, y: L } = se(
|
|
135
132
|
{
|
|
136
133
|
placement: this.placement,
|
|
137
134
|
refWidth: H,
|
|
@@ -146,20 +143,20 @@ var re = class {
|
|
|
146
143
|
}
|
|
147
144
|
);
|
|
148
145
|
this.setPopperStyleProperty(O, L), (c = this.onUpdate) == null || c.call(this, { x: O, y: L, placement: this.placement });
|
|
149
|
-
}),
|
|
146
|
+
}), d(this, "removeWindowEvents", () => {
|
|
150
147
|
this.isWindowEventsRegistered && (!this.disableOnResize && window.removeEventListener("resize", this.updatePosition), !this.disableOnScroll && window.removeEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = false);
|
|
151
|
-
}),
|
|
148
|
+
}), d(this, "attachWindowEvent", () => {
|
|
152
149
|
this.isWindowEventsRegistered && this.removeWindowEvents(), this.disableOnResize || window.addEventListener("resize", this.updatePosition), this.disableOnScroll || window.addEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = true;
|
|
153
|
-
}),
|
|
150
|
+
}), d(this, "resetPosition", () => {
|
|
154
151
|
this.setInitialStyles();
|
|
155
|
-
}),
|
|
152
|
+
}), d(this, "updatePosition", () => {
|
|
156
153
|
this.initPlacement(), this.attachWindowEvent();
|
|
157
|
-
}),
|
|
154
|
+
}), d(this, "cleanupEvents", () => {
|
|
158
155
|
this.setInitialStyles(), this.removeWindowEvents();
|
|
159
156
|
});
|
|
160
157
|
const {
|
|
161
158
|
offsetDistance: o = 10,
|
|
162
|
-
placement: i =
|
|
159
|
+
placement: i = V,
|
|
163
160
|
eventEffect: r = {},
|
|
164
161
|
onUpdate: h
|
|
165
162
|
} = n;
|
|
@@ -169,8 +166,8 @@ var re = class {
|
|
|
169
166
|
throw new Error("Invalid HTMLElement for Popper");
|
|
170
167
|
if (n.offsetDistance && typeof n.offsetDistance != "number")
|
|
171
168
|
throw new Error("OffsetDistance must be a number");
|
|
172
|
-
const { disableOnResize: g, disableOnScroll:
|
|
173
|
-
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = i, this.disableOnResize = g || false, this.disableOnScroll =
|
|
169
|
+
const { disableOnResize: g, disableOnScroll: p } = r;
|
|
170
|
+
this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = i, this.disableOnResize = g || false, this.disableOnScroll = p || false, this.onUpdate = h;
|
|
174
171
|
}
|
|
175
172
|
/**
|
|
176
173
|
* Updates popper configuration and recalculates position
|
|
@@ -183,6 +180,9 @@ var re = class {
|
|
|
183
180
|
this.placement = e, this.offsetDistance = t || this.offsetDistance, this.initPlacement(), this.attachWindowEvent();
|
|
184
181
|
}
|
|
185
182
|
};
|
|
183
|
+
var oe = Object.defineProperty;
|
|
184
|
+
var re = (s, e, t) => e in s ? oe(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
|
|
185
|
+
var l = (s, e, t) => re(s, typeof e != "symbol" ? e + "" : e, t);
|
|
186
186
|
var ae = (s, e = document.body) => e.querySelector(s);
|
|
187
187
|
var A = (s, e) => {
|
|
188
188
|
for (const [t, n] of Object.entries(e))
|
|
@@ -250,7 +250,7 @@ var ce = class {
|
|
|
250
250
|
}), l(this, "showOnMouseEnter", () => {
|
|
251
251
|
this.show(), this.addEventOnMouseEnter();
|
|
252
252
|
}), l(this, "setShowOptions", ({ placement: i, offsetDistance: r }) => {
|
|
253
|
-
var h, g,
|
|
253
|
+
var h, g, p, c;
|
|
254
254
|
this.popper.setOptions({
|
|
255
255
|
placement: i,
|
|
256
256
|
offsetDistance: r
|
|
@@ -258,7 +258,7 @@ var ce = class {
|
|
|
258
258
|
state: "open",
|
|
259
259
|
popper: this.contentElement,
|
|
260
260
|
trigger: this.triggerElement
|
|
261
|
-
}), this.onToggleState(false), (c = (
|
|
261
|
+
}), this.onToggleState(false), (c = (p = this.options).onShow) == null || c.call(p);
|
|
262
262
|
}), l(this, "setPopperOptions", ({ placement: i, offsetDistance: r }) => {
|
|
263
263
|
this.popper.setOptions({
|
|
264
264
|
placement: i,
|
|
@@ -277,7 +277,7 @@ var ce = class {
|
|
|
277
277
|
throw new Error("Trigger element must be a valid HTML element");
|
|
278
278
|
if (!(this.contentElement instanceof HTMLElement))
|
|
279
279
|
throw new Error("Content element must be a valid HTML element");
|
|
280
|
-
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 = (o = this.options.popper) == null ? void 0 : o.eventEffect, this.popper = new
|
|
280
|
+
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 = (o = this.options.popper) == null ? void 0 : o.eventEffect, this.popper = new ie(
|
|
281
281
|
this.triggerElement,
|
|
282
282
|
this.contentElement,
|
|
283
283
|
{
|
|
@@ -333,16 +333,16 @@ var ce = class {
|
|
|
333
333
|
}), this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
|
|
334
334
|
}
|
|
335
335
|
};
|
|
336
|
-
var
|
|
336
|
+
var P = (s, e = document.body) => e.querySelector(s);
|
|
337
337
|
var U = (s, e = document.body) => Array.from(e.querySelectorAll(s));
|
|
338
|
-
var
|
|
339
|
-
var
|
|
338
|
+
var pe = (s) => typeof s == "string" ? P(s) : s;
|
|
339
|
+
var de = ({ containerElement: s, targetChildren: e = "a:not([disabled]), button:not([disabled])", direction: t }) => {
|
|
340
340
|
let n = false;
|
|
341
|
-
const o =
|
|
341
|
+
const o = pe(s) || document.body, i = typeof e == "string" ? U(e, o) : e, r = (h) => {
|
|
342
342
|
if (h.preventDefault(), o.focus(), i.length === 0)
|
|
343
343
|
return;
|
|
344
|
-
const g = h.key,
|
|
345
|
-
let c = i.findIndex((m) => m ===
|
|
344
|
+
const g = h.key, p = document.activeElement;
|
|
345
|
+
let c = i.findIndex((m) => m === p);
|
|
346
346
|
if (c === -1) {
|
|
347
347
|
g === "ArrowUp" || g === "ArrowLeft" ? i[i.length - 1].focus() : i[0].focus();
|
|
348
348
|
return;
|
|
@@ -368,7 +368,7 @@ var pe = ({ containerElement: s, targetChildren: e = "a:not([disabled]), button:
|
|
|
368
368
|
default:
|
|
369
369
|
return;
|
|
370
370
|
}
|
|
371
|
-
i[c] !==
|
|
371
|
+
i[c] !== p && i[c].focus();
|
|
372
372
|
};
|
|
373
373
|
return {
|
|
374
374
|
make: () => {
|
|
@@ -379,7 +379,7 @@ var pe = ({ containerElement: s, targetChildren: e = "a:not([disabled]), button:
|
|
|
379
379
|
}
|
|
380
380
|
};
|
|
381
381
|
};
|
|
382
|
-
var
|
|
382
|
+
var z = (s, e, t) => {
|
|
383
383
|
const n = new CustomEvent(e, { detail: t });
|
|
384
384
|
s.dispatchEvent(n);
|
|
385
385
|
};
|
|
@@ -433,13 +433,13 @@ var S = class S2 {
|
|
|
433
433
|
});
|
|
434
434
|
a(this, "onShow", () => {
|
|
435
435
|
var e2, t2;
|
|
436
|
-
|
|
436
|
+
z(this.contentElement, "dropdown-show", {
|
|
437
437
|
isHidden: false
|
|
438
438
|
}), (t2 = (e2 = this.options).onShow) == null || t2.call(e2);
|
|
439
439
|
});
|
|
440
440
|
a(this, "onHide", () => {
|
|
441
441
|
var e2, t2;
|
|
442
|
-
|
|
442
|
+
z(this.contentElement, "dropdown-hide", {
|
|
443
443
|
isHidden: true
|
|
444
444
|
}), (t2 = (e2 = this.options).onHide) == null || t2.call(e2);
|
|
445
445
|
});
|
|
@@ -461,7 +461,7 @@ var S = class S2 {
|
|
|
461
461
|
a(this, "cleanup", () => {
|
|
462
462
|
this.OverlayInstance.cleanup(), x.removeInstance("dropdown", this.contentElement);
|
|
463
463
|
});
|
|
464
|
-
const n = typeof e == "string" ?
|
|
464
|
+
const n = typeof e == "string" ? P(e) : e;
|
|
465
465
|
if (!(n instanceof HTMLElement))
|
|
466
466
|
throw new Error(
|
|
467
467
|
"Invalid dropdown content element: Must provide either a valid HTMLElement or a selector string that resolves to an existing HTMLElement"
|
|
@@ -473,7 +473,7 @@ var S = class S2 {
|
|
|
473
473
|
if (o)
|
|
474
474
|
return o;
|
|
475
475
|
const i = `[data-dropdown-trigger][data-dropdown-id=${this.contentElement.id}]`;
|
|
476
|
-
if (this.triggerElement =
|
|
476
|
+
if (this.triggerElement = P(i), !(this.triggerElement instanceof HTMLElement))
|
|
477
477
|
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}"`);
|
|
478
478
|
this.options = t, this.triggerStrategy = this.options.triggerStrategy || this.contentElement.dataset.triggerStrategy || "click", this.placement = this.options.placement || this.contentElement.dataset.placement || "bottom-start", this.offsetDistance = this.options.offsetDistance || parseInt(`${this.contentElement.dataset.offsetDistance}`) | 6, this.preventFromCloseOutside = this.options.preventFromCloseOutside || this.contentElement.hasAttribute("data-prevent-close-outside") || false, this.preventFromCloseInside = this.options.preventCloseFromInside || this.contentElement.hasAttribute("data-prevent-close-inside") || false, this.defaultState = this.options.defaultState || this.contentElement.dataset.defaultState || "close", this.OverlayInstance = new ce({
|
|
479
479
|
trigger: this.triggerElement,
|
|
@@ -494,7 +494,7 @@ var S = class S2 {
|
|
|
494
494
|
},
|
|
495
495
|
popper: this.options.popper
|
|
496
496
|
}
|
|
497
|
-
}), this.navigationKeys =
|
|
497
|
+
}), this.navigationKeys = de({
|
|
498
498
|
containerElement: this.contentElement,
|
|
499
499
|
targetChildren: "a:not([disabled]), button:not([disabled])",
|
|
500
500
|
direction: "up-down"
|
|
@@ -515,12 +515,12 @@ a(S, "autoInit", (e = "[data-fx-dropdown]") => {
|
|
|
515
515
|
for (const n of t)
|
|
516
516
|
new S(n);
|
|
517
517
|
});
|
|
518
|
-
var
|
|
518
|
+
var K = S;
|
|
519
519
|
|
|
520
520
|
// src/index.js
|
|
521
521
|
function Dropdown(Alpine) {
|
|
522
522
|
Alpine.directive("dropdown", (el, {}, { cleanup }) => {
|
|
523
|
-
const dropdown_ = new
|
|
523
|
+
const dropdown_ = new K(el);
|
|
524
524
|
cleanup(() => {
|
|
525
525
|
dropdown_.cleanup();
|
|
526
526
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flexilla/alpine-dropdown",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.1.0",
|
|
4
4
|
"description": "AlpineJS plugin for adding Dropdown functionality to your AlpineJS components",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
},
|
|
19
19
|
"main": "src/index.js",
|
|
20
20
|
"module": "dist/module.esm.js",
|
|
21
|
+
"types": "src/index.d.ts",
|
|
21
22
|
"scripts": {
|
|
22
23
|
"build": "node ./scripts/build.js",
|
|
23
24
|
"watch": "node ./scripts/build.js --watch",
|
|
@@ -41,6 +42,7 @@
|
|
|
41
42
|
"LICENSE",
|
|
42
43
|
"README.md",
|
|
43
44
|
"src/index.js",
|
|
45
|
+
"src/index.d.ts",
|
|
44
46
|
"package.json",
|
|
45
47
|
"dist"
|
|
46
48
|
],
|
|
@@ -58,7 +60,7 @@
|
|
|
58
60
|
"Flexilla"
|
|
59
61
|
],
|
|
60
62
|
"dependencies": {
|
|
61
|
-
"@flexilla/dropdown": "^2.
|
|
63
|
+
"@flexilla/dropdown": "^2.2.0"
|
|
62
64
|
},
|
|
63
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "34cb017e7b29fb1ee10ded1d4317256fa7167093"
|
|
64
66
|
}
|