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