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