@flexilla/alpine-popover 0.0.2 → 0.1.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,111 +24,102 @@ __export(module_exports, {
24
24
  module.exports = __toCommonJS(module_exports);
25
25
 
26
26
  // ../../node_modules/@flexilla/popover/dist/popover.js
27
- var K = Object.defineProperty;
28
- var U = (i, e, t) => e in i ? K(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
29
- var h = (i, e, t) => U(i, typeof e != "symbol" ? e + "" : e, t);
30
- var A = (i, e = document.body) => e.querySelector(i);
31
- var j = (i, e = document.body) => Array.from(e.querySelectorAll(i));
32
- var M = (i, e, t) => {
33
- const s = new CustomEvent(e, { detail: t });
34
- i.dispatchEvent(s);
35
- };
36
- var q = Object.defineProperty;
37
- var B = (i, e, t) => e in i ? q(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
38
- var a = (i, e, t) => B(i, typeof e != "symbol" ? e + "" : e, t);
39
- var J = "bottom";
40
- var N = ({ reference: i, popper: e }) => {
41
- if (!i || !e)
27
+ var B = Object.defineProperty;
28
+ var j = (s, e, t) => e in s ? B(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
29
+ var a = (s, e, t) => j(s, typeof e != "symbol" ? e + "" : e, t);
30
+ var G = Object.defineProperty;
31
+ var U = (s, e, t) => e in s ? G(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
32
+ var p = (s, e, t) => U(s, typeof e != "symbol" ? e + "" : e, t);
33
+ var K = "bottom";
34
+ var q = ({ reference: s, popper: e }) => {
35
+ if (!s || !e)
42
36
  throw new Error("Reference or popper element is null or undefined");
43
- const t = /* @__PURE__ */ new WeakMap(), s = (r) => (t.has(r) || t.set(r, r.getBoundingClientRect()), t.get(r)), o = s(e), n = s(i);
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);
44
38
  return {
45
39
  popperHeight: o.height,
46
40
  popperWidth: o.width,
47
- refHeight: n.height,
48
- refWidth: n.width,
49
- refLeft: n.left,
50
- refTop: n.top,
51
- refRight: n.right
41
+ refHeight: i.height,
42
+ refWidth: i.width,
43
+ refLeft: i.left,
44
+ refTop: i.top,
45
+ refRight: i.right
52
46
  };
53
47
  };
54
- var Q = Object.defineProperty;
55
- var V = (i, e, t) => e in i ? Q(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
56
- var p = (i, e, t) => V(i, typeof e != "symbol" ? e + "" : e, t);
57
- var X = (i, e, t, s) => {
58
- const o = t, n = s - (t + e);
59
- return o >= (i - e) / 2 && n >= (i - e) / 2;
48
+ var V = (s, e, t, n) => {
49
+ const o = t, i = n - (t + e);
50
+ return o >= (s - e) / 2 && i >= (s - e) / 2;
60
51
  };
61
- var Y = (i, e, t, s) => (i - e) / 2 <= t && t + i / 2 + e / 2 <= s;
62
- var Z = (i, e, t, s, o) => t > o - s ? e() ? window.innerHeight - o : t - o : i() ? 0 : t + s;
63
- var _ = (i, e, t, s) => i <= s && t - i <= e;
64
- var ee = (i, e, t, s) => t <= s && -i <= e;
65
- var te = (i, e, t, s, o, n) => {
66
- const r = o - t - n, l = t - s, d = t + n - s + (o - t - n), c = r >= 0 ? o - s : l >= 0 ? t - s : t;
67
- return i() ? 0 : e() ? d : c;
52
+ var X = (s, e, t, n) => (s - e) / 2 <= t && t + s / 2 + e / 2 <= n;
53
+ var Y = (s, e, t, n, o) => t > o - n ? e() ? window.innerHeight - o : t - o : s() ? 0 : t + n;
54
+ var J = (s, e, t, n) => s <= n && t - s <= e;
55
+ var Q = (s, e, t, n) => t <= n && -s <= e;
56
+ var Z = (s, e, t, n, o, i) => {
57
+ const r = o - t - i, h = t - n, d = t + i - n + (o - t - i), c = r >= 0 ? o - n : h >= 0 ? t - n : t;
58
+ return s() ? 0 : e() ? d : c;
68
59
  };
69
- var se = (i, e, t, s) => i <= t && e - i - s >= i;
70
- var ie = (i, e) => i >= e;
71
- var ne = ({
72
- placement: i,
60
+ var _ = (s, e, t, n) => s <= t && e - s - n >= s;
61
+ var ee = (s, e) => s >= e;
62
+ var te = ({
63
+ placement: s,
73
64
  refWidth: e,
74
65
  refTop: t,
75
- refLeft: s,
66
+ refLeft: n,
76
67
  refHeight: o,
77
- popperWidth: n,
68
+ popperWidth: i,
78
69
  popperHeight: r,
79
- windowHeight: l,
70
+ windowHeight: h,
80
71
  windowWidth: d,
81
72
  offsetDistance: c
82
73
  }) => {
83
- const g = d - s - e, v = s, L = l - t - o, D = t, u = () => Z(
84
- () => ee(t, o, r, l),
85
- () => _(t, o, r, l),
74
+ const m = d - n - e, v = n, I = h - t - o, C = t, E = () => Y(
75
+ () => Q(t, o, r, h),
76
+ () => J(t, o, r, h),
86
77
  t,
87
78
  o,
88
79
  r
89
- ), E = () => te(
90
- () => se(s, d, n, e),
91
- () => ie(s, n),
92
- s,
80
+ ), u = () => Z(
81
+ () => _(n, d, i, e),
82
+ () => ee(n, i),
93
83
  n,
84
+ i,
94
85
  d,
95
86
  e
96
- ), k = () => X(n, e, s, d) ? s + e / 2 - n / 2 : E(), C = () => Y(r, o, t, l) ? t + o / 2 - r / 2 : u(), P = () => s + n <= d ? s : E(), y = () => s + e - n >= 0 ? s + e - n : E(), b = () => t + r <= l ? t : u(), G = () => t + o - r >= 0 ? t + o - r : u();
97
- let m = 0, f = 0;
98
- const T = t - r - c, S = t + o + c, O = s - n - c, I = s + e + c, W = D >= r + c, F = L >= r + c, R = v >= n + c, $ = g >= n + c;
99
- switch (i.startsWith("top") ? f = W ? T : F ? S : Math.max(T, S) : i.startsWith("bottom") ? f = F ? S : W ? T : Math.max(S) : i.startsWith("left") ? m = R ? O : $ ? I : Math.max(O, I) : i.startsWith("right") && (m = $ ? I : R ? O : Math.max(I, O)), i) {
87
+ ), D = () => V(i, e, n, d) ? n + e / 2 - i / 2 : u(), M = () => X(r, o, t, h) ? t + o / 2 - r / 2 : E(), x = () => n + i <= d ? n : u(), b = () => n + e - i >= 0 ? n + e - i : u(), y = () => t + r <= h ? t : E(), z = () => t + o - r >= 0 ? t + o - r : E();
88
+ let g = 0, f = 0;
89
+ const T = t - r - c, O = t + o + c, S = n - i - c, L = n + e + c, W = C >= r + c, F = I >= r + c, R = v >= i + c, $ = m >= i + c;
90
+ switch (s.startsWith("top") ? f = W ? T : F ? O : Math.max(T, O) : s.startsWith("bottom") ? f = F ? O : W ? T : Math.max(O) : s.startsWith("left") ? g = R ? S : $ ? L : Math.max(S, L) : s.startsWith("right") && (g = $ ? L : R ? S : Math.max(L, S)), s) {
100
91
  case "bottom":
101
92
  case "bottom-middle":
102
93
  case "top":
103
94
  case "top-middle":
104
- m = k();
95
+ g = D();
105
96
  break;
106
97
  case "left":
107
98
  case "left-middle":
108
99
  case "right":
109
100
  case "right-middle":
110
- f = C();
101
+ f = M();
111
102
  break;
112
103
  case "bottom-start":
113
104
  case "top-start":
114
- m = P();
105
+ g = x();
115
106
  break;
116
107
  case "bottom-end":
117
108
  case "top-end":
118
- m = y();
109
+ g = b();
119
110
  break;
120
111
  case "left-start":
121
112
  case "right-start":
122
- f = b();
113
+ f = y();
123
114
  break;
124
115
  case "left-end":
125
116
  case "right-end":
126
- f = G();
117
+ f = z();
127
118
  break;
128
119
  }
129
- return { x: m, y: f };
120
+ return { x: g, y: f };
130
121
  };
131
- var oe = class {
122
+ var ne = class {
132
123
  /**
133
124
  * Flexilla Popper
134
125
  * @param reference
@@ -147,7 +138,7 @@ var oe = class {
147
138
  * @param {boolean} [options.eventEffect.disableOnScroll] - Disable position updates on scroll
148
139
  * @param {Function} [options.onUpdate] - Callback function when position updates
149
140
  */
150
- constructor(e, t, s = {}) {
141
+ constructor(e, t, n = {}) {
151
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", () => {
152
143
  if (!(this.reference instanceof HTMLElement))
153
144
  throw new Error("Invalid HTMLElement for Reference Element");
@@ -155,28 +146,28 @@ var oe = class {
155
146
  throw new Error("Invalid HTMLElement for Popper");
156
147
  if (typeof this.offsetDistance != "number")
157
148
  throw new Error("OffsetDistance must be a number");
158
- }), p(this, "setPopperStyleProperty", (g, v) => {
159
- this.popper.style.setProperty("--fx-popper-placement-x", `${g}px`), this.popper.style.setProperty("--fx-popper-placement-y", `${v}px`);
149
+ }), p(this, "setPopperStyleProperty", (m, v) => {
150
+ this.popper.style.setProperty("--fx-popper-placement-x", `${m}px`), this.popper.style.setProperty("--fx-popper-placement-y", `${v}px`);
160
151
  }), p(this, "setInitialStyles", () => {
161
152
  this.popper.style.setProperty("--fx-popper-placement-x", ""), this.popper.style.setProperty("--fx-popper-placement-y", "");
162
153
  }), p(this, "initPlacement", () => {
163
- var g;
154
+ var m;
164
155
  this.validateElements(), this.setInitialStyles();
165
- const v = window.innerWidth, L = window.innerHeight, { popperHeight: D, popperWidth: u, refHeight: E, refWidth: k, refLeft: C, refTop: P } = N({ reference: this.reference, popper: this.popper }), { x: y, y: b } = ne(
156
+ const v = window.innerWidth, I = window.innerHeight, { popperHeight: C, popperWidth: E, refHeight: u, refWidth: D, refLeft: M, refTop: x } = q({ reference: this.reference, popper: this.popper }), { x: b, y } = te(
166
157
  {
167
158
  placement: this.placement,
168
- refWidth: k,
169
- refTop: P,
170
- refLeft: C,
171
- popperWidth: u,
172
- refHeight: E,
173
- popperHeight: D,
174
- windowHeight: L,
159
+ refWidth: D,
160
+ refTop: x,
161
+ refLeft: M,
162
+ popperWidth: E,
163
+ refHeight: u,
164
+ popperHeight: C,
165
+ windowHeight: I,
175
166
  windowWidth: v,
176
167
  offsetDistance: this.offsetDistance
177
168
  }
178
169
  );
179
- this.setPopperStyleProperty(y, b), (g = this.onUpdate) == null || g.call(this, { x: y, y: b, placement: this.placement });
170
+ this.setPopperStyleProperty(b, y), (m = this.onUpdate) == null || m.call(this, { x: b, y, placement: this.placement });
180
171
  }), p(this, "removeWindowEvents", () => {
181
172
  this.isWindowEventsRegistered && (!this.disableOnResize && window.removeEventListener("resize", this.updatePosition), !this.disableOnScroll && window.removeEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = false);
182
173
  }), p(this, "attachWindowEvent", () => {
@@ -190,18 +181,18 @@ var oe = class {
190
181
  });
191
182
  const {
192
183
  offsetDistance: o = 10,
193
- placement: n = J,
184
+ placement: i = K,
194
185
  eventEffect: r = {},
195
- onUpdate: l
196
- } = s;
186
+ onUpdate: h
187
+ } = n;
197
188
  if (!(e instanceof HTMLElement))
198
189
  throw new Error("Invalid HTMLElement for Reference Element");
199
190
  if (!(t instanceof HTMLElement))
200
191
  throw new Error("Invalid HTMLElement for Popper");
201
- if (s.offsetDistance && typeof s.offsetDistance != "number")
192
+ if (n.offsetDistance && typeof n.offsetDistance != "number")
202
193
  throw new Error("OffsetDistance must be a number");
203
194
  const { disableOnResize: d, disableOnScroll: c } = r;
204
- this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = n, this.disableOnResize = d || false, this.disableOnScroll = c || false, this.onUpdate = l;
195
+ this.isWindowEventsRegistered = false, this.reference = e, this.popper = t, this.offsetDistance = o, this.placement = i, this.disableOnResize = d || false, this.disableOnScroll = c || false, this.onUpdate = h;
205
196
  }
206
197
  /**
207
198
  * Updates popper configuration and recalculates position
@@ -214,43 +205,50 @@ var oe = class {
214
205
  this.placement = e, this.offsetDistance = t || this.offsetDistance, this.initPlacement(), this.attachWindowEvent();
215
206
  }
216
207
  };
217
- var re = (i, e = document.body) => e.querySelector(i);
218
- var z = (i, e) => {
219
- for (const [t, s] of Object.entries(e))
220
- i.setAttribute(t, s);
208
+ var se = Object.defineProperty;
209
+ var ie = (s, e, t) => e in s ? se(s, e, { enumerable: true, configurable: true, writable: true, value: t }) : s[e] = t;
210
+ var l = (s, e, t) => ie(s, typeof e != "symbol" ? e + "" : e, t);
211
+ var oe = (s, e = document.body) => e.querySelector(s);
212
+ var N = (s, e) => {
213
+ for (const [t, n] of Object.entries(e))
214
+ s.setAttribute(t, n);
221
215
  };
222
- var ae = ({
223
- element: i,
216
+ var re = ({
217
+ element: s,
224
218
  callback: e,
225
219
  type: t,
226
- keysCheck: s
220
+ keysCheck: n
227
221
  }) => {
228
- const o = getComputedStyle(i), n = o.transition;
229
- if (n !== "none" && n !== "" && !s.includes(n)) {
230
- const r = "transitionend", l = () => {
231
- i.removeEventListener(r, l), e();
222
+ const o = getComputedStyle(s), i = o.transition;
223
+ if (i !== "none" && i !== "" && !n.includes(i)) {
224
+ const r = "transitionend", h = () => {
225
+ s.removeEventListener(r, h), e();
232
226
  };
233
- i.addEventListener(r, l, { once: true });
227
+ s.addEventListener(r, h, { once: true });
234
228
  } else
235
229
  e();
236
230
  };
237
- var le = ({
238
- element: i,
231
+ var ae = ({
232
+ element: s,
239
233
  callback: e
240
234
  }) => {
241
- ae({
242
- element: i,
235
+ re({
236
+ element: s,
243
237
  callback: e,
244
238
  type: "transition",
245
239
  keysCheck: ["all 0s ease 0s", "all"]
246
240
  });
247
241
  };
248
- var w = ({ state: i, trigger: e, popper: t }) => {
249
- const s = i === "open";
250
- z(t, {
251
- "data-state": i
252
- }), z(e, {
253
- "aria-expanded": `${s}`
242
+ var le = (s, e, t) => {
243
+ const n = new CustomEvent(e, { detail: t });
244
+ s.dispatchEvent(n);
245
+ };
246
+ var w = ({ state: s, trigger: e, popper: t }) => {
247
+ const n = s === "open";
248
+ N(t, {
249
+ "data-state": s
250
+ }), N(e, {
251
+ "aria-expanded": `${n}`
254
252
  });
255
253
  };
256
254
  var he = class {
@@ -261,46 +259,46 @@ var he = class {
261
259
  * @param {string | HTMLElement} params.content - The content element selector or HTMLElement
262
260
  * @param {OverlayOptions} [params.options] - Configuration options for the overlay
263
261
  */
264
- constructor({ trigger: e, content: t, options: s = {} }) {
265
- a(this, "triggerElement"), a(this, "contentElement"), a(this, "triggerStrategy"), a(this, "placement"), a(this, "offsetDistance"), a(this, "preventFromCloseOutside"), a(this, "preventFromCloseInside"), a(this, "options"), a(this, "defaultState"), a(this, "popper"), a(this, "eventEffect"), a(this, "getElement", (n) => typeof n == "string" ? re(n) : n instanceof HTMLElement ? n : void 0), a(this, "handleDocumentClick", (n) => {
266
- this.contentElement.getAttribute("data-state") === "open" && (!this.triggerElement.contains(n.target) && !this.preventFromCloseInside && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(n.target) && !this.contentElement.contains(n.target) && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(n.target) && !this.contentElement.contains(n.target) && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(n.target) && this.contentElement.contains(n.target) && !this.preventFromCloseInside && this.hide());
267
- }), a(this, "handleKeyDown", (n) => {
268
- n.preventDefault(), this.triggerStrategy !== "hover" && n.key === "Escape" && this.contentElement.getAttribute("data-state") === "open" && (this.preventFromCloseOutside || this.hide());
269
- }), a(this, "toggleStateOnClick", () => {
262
+ constructor({ trigger: e, content: t, options: n = {} }) {
263
+ 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", (i) => typeof i == "string" ? oe(i) : i instanceof HTMLElement ? i : void 0), l(this, "handleDocumentClick", (i) => {
264
+ this.contentElement.getAttribute("data-state") === "open" && (!this.triggerElement.contains(i.target) && !this.preventFromCloseInside && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(i.target) && !this.contentElement.contains(i.target) && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(i.target) && !this.contentElement.contains(i.target) && !this.preventFromCloseOutside ? this.hide() : !this.triggerElement.contains(i.target) && this.contentElement.contains(i.target) && !this.preventFromCloseInside && this.hide());
265
+ }), l(this, "handleKeyDown", (i) => {
266
+ i.preventDefault(), this.triggerStrategy !== "hover" && i.key === "Escape" && this.contentElement.getAttribute("data-state") === "open" && (this.preventFromCloseOutside || this.hide());
267
+ }), l(this, "toggleStateOnClick", () => {
270
268
  (this.contentElement.dataset.state || "close") === "close" ? (this.show(), this.triggerStrategy === "hover" && this.addEventOnMouseEnter()) : this.hide();
271
- }), a(this, "hideOnMouseLeaseTrigger", () => {
269
+ }), l(this, "hideOnMouseLeaseTrigger", () => {
272
270
  setTimeout(() => {
273
271
  this.contentElement.matches(":hover") || this.hide();
274
272
  }, 150);
275
- }), a(this, "hideOnMouseLeave", () => {
273
+ }), l(this, "hideOnMouseLeave", () => {
276
274
  setTimeout(() => {
277
275
  this.triggerElement.matches(":hover") || this.hide();
278
276
  }, 150);
279
- }), a(this, "addEventOnMouseEnter", () => {
277
+ }), l(this, "addEventOnMouseEnter", () => {
280
278
  this.triggerElement.addEventListener("mouseleave", this.hideOnMouseLeaseTrigger), this.contentElement.addEventListener("mouseleave", this.hideOnMouseLeave);
281
- }), a(this, "showOnMouseEnter", () => {
279
+ }), l(this, "showOnMouseEnter", () => {
282
280
  this.show(), this.addEventOnMouseEnter();
283
- }), a(this, "setShowOptions", ({ placement: n, offsetDistance: r }) => {
284
- var l, d, c, g;
281
+ }), l(this, "setShowOptions", ({ placement: i, offsetDistance: r }) => {
282
+ var h, d, c, m;
285
283
  this.popper.setOptions({
286
- placement: n,
284
+ placement: i,
287
285
  offsetDistance: r
288
- }), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (d = (l = this.options).beforeShow) == null || d.call(l), w({
286
+ }), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (d = (h = this.options).beforeShow) == null || d.call(h), w({
289
287
  state: "open",
290
288
  popper: this.contentElement,
291
289
  trigger: this.triggerElement
292
- }), this.onToggleState(false), (g = (c = this.options).onShow) == null || g.call(c);
293
- }), a(this, "setPopperOptions", ({ placement: n, offsetDistance: r }) => {
290
+ }), this.onToggleState(false), (m = (c = this.options).onShow) == null || m.call(c);
291
+ }), l(this, "setPopperOptions", ({ placement: i, offsetDistance: r }) => {
294
292
  this.popper.setOptions({
295
- placement: n,
293
+ placement: i,
296
294
  offsetDistance: r || this.offsetDistance
297
295
  });
298
- }), a(this, "setPopperTrigger", (n, r) => {
296
+ }), l(this, "setPopperTrigger", (i, r) => {
299
297
  this.cleanup(), this.popper.setOptions({
300
298
  placement: r.placement || this.placement,
301
299
  offsetDistance: r.offsetDistance || this.offsetDistance
302
- }), this.triggerElement = n, this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
303
- }), a(this, "cleanup", () => {
300
+ }), this.triggerElement = i, this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
301
+ }), l(this, "cleanup", () => {
304
302
  this.triggerElement.removeEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.removeEventListener("mouseenter", this.showOnMouseEnter);
305
303
  });
306
304
  var o;
@@ -308,7 +306,7 @@ var he = class {
308
306
  throw new Error("Trigger element must be a valid HTML element");
309
307
  if (!(this.contentElement instanceof HTMLElement))
310
308
  throw new Error("Content element must be a valid HTML element");
311
- this.options = s, 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 oe(
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 = (o = this.options.popper) == null ? void 0 : o.eventEffect, this.popper = new ne(
312
310
  this.triggerElement,
313
311
  this.contentElement,
314
312
  {
@@ -319,38 +317,45 @@ var he = class {
319
317
  ), this.initInstance();
320
318
  }
321
319
  onToggleState(e) {
322
- var t, s;
323
- (s = (t = this.options).onToggle) == null || s.call(t, { isHidden: e });
320
+ var t, n;
321
+ (n = (t = this.options).onToggle) == null || n.call(t, { isHidden: e });
324
322
  }
325
323
  /**
326
324
  * Shows the overlay
327
325
  * Positions the overlay, adds event listeners, and triggers related callbacks
328
326
  */
329
327
  show() {
330
- var e, t, s, o;
328
+ var e, t, n, o;
331
329
  this.popper.updatePosition(), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (t = (e = this.options).beforeShow) == null || t.call(e), w({
332
330
  state: "open",
333
331
  popper: this.contentElement,
334
332
  trigger: this.triggerElement
335
- }), this.onToggleState(false), (o = (s = this.options).onShow) == null || o.call(s);
333
+ }), this.onToggleState(false), (o = (n = this.options).onShow) == null || o.call(n);
336
334
  }
337
335
  /**
338
336
  * Hides the overlay
339
337
  * Removes event listeners and triggers related callbacks
340
338
  */
341
339
  hide() {
342
- var e, t;
343
- (t = (e = this.options).beforeHide) == null || t.call(e), w({
340
+ var e, t, n;
341
+ let o = false;
342
+ le(this.contentElement, "before-hide", {
343
+ setExitAction: (r) => {
344
+ o = r;
345
+ }
346
+ });
347
+ const i = (n = (t = (e = this.options).beforeHide) == null ? void 0 : t.call(e)) == null ? void 0 : n.cancelAction;
348
+ o || i || (w({
344
349
  state: "close",
345
350
  popper: this.contentElement,
346
351
  trigger: this.triggerElement
347
- }), 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)), le({
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)), ae({
348
353
  element: this.contentElement,
349
354
  callback: () => {
350
- var s, o;
351
- this.onToggleState(true), this.popper.cleanupEvents(), (o = (s = this.options).onHide) == null || o.call(s);
355
+ var r, h;
356
+ this.onToggleState(true), this.popper.cleanupEvents(), (h = (r = this.options).onHide) == null || h.call(r);
352
357
  }
353
- });
358
+ }));
354
359
  }
355
360
  initInstance() {
356
361
  w({
@@ -364,26 +369,67 @@ var he = class {
364
369
  }), this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
365
370
  }
366
371
  };
372
+ var A = (s, e = document.body) => e.querySelector(s);
373
+ var pe = (s, e = document.body) => Array.from(e.querySelectorAll(s));
374
+ var k = (s, e, t) => {
375
+ const n = new CustomEvent(e, { detail: t });
376
+ s.dispatchEvent(n);
377
+ };
378
+ function ce(s, e, t = "move") {
379
+ if (!(s instanceof HTMLElement))
380
+ throw new Error("Source element must be an HTMLElement");
381
+ if (!(e instanceof HTMLElement))
382
+ throw new Error("Target element must be an HTMLElement");
383
+ if (!["move", "detachable"].includes(t))
384
+ throw new Error(`Invalid teleport mode: ${t}. Must be "move" or "detachable".`);
385
+ let n = document.createComment("teleporter-placeholder");
386
+ const o = s.parentNode;
387
+ return o ? o.insertBefore(n, s) : console.warn("Element has no parent; placeholder not inserted."), t === "move" ? (s.parentNode && e.appendChild(s), {
388
+ append() {
389
+ s.parentNode !== e && e.appendChild(s);
390
+ },
391
+ remove() {
392
+ n != null && n.parentNode && s.parentNode && n.parentNode.insertBefore(s, n);
393
+ },
394
+ restore() {
395
+ n != null && n.parentNode && s.parentNode !== o && n.parentNode.insertBefore(s, n);
396
+ }
397
+ }) : (s.parentNode && e.appendChild(s), {
398
+ append() {
399
+ e.contains(s) || e.appendChild(s);
400
+ },
401
+ remove() {
402
+ s.parentNode && s.remove();
403
+ },
404
+ restore() {
405
+ n != null && n.parentNode && !s.parentNode && n.parentNode.insertBefore(s, n);
406
+ }
407
+ });
408
+ }
367
409
  var H = class {
368
410
  static initGlobalRegistry() {
369
411
  window.$flexillaInstances || (window.$flexillaInstances = {});
370
412
  }
371
- static register(e, t, s) {
372
- return this.initGlobalRegistry(), window.$flexillaInstances[e] || (window.$flexillaInstances[e] = []), this.getInstance(e, t) || (window.$flexillaInstances[e].push({ element: t, instance: s }), s);
413
+ static register(e, t, n) {
414
+ return this.initGlobalRegistry(), window.$flexillaInstances[e] || (window.$flexillaInstances[e] = []), this.getInstance(e, t) || (window.$flexillaInstances[e].push({ element: t, instance: n }), n);
373
415
  }
374
416
  static getInstance(e, t) {
375
- var s, o;
376
- return this.initGlobalRegistry(), (o = (s = window.$flexillaInstances[e]) == null ? void 0 : s.find(
377
- (n) => n.element === t
417
+ var n, o;
418
+ return this.initGlobalRegistry(), (o = (n = window.$flexillaInstances[e]) == null ? void 0 : n.find(
419
+ (i) => i.element === t
378
420
  )) == null ? void 0 : o.instance;
379
421
  }
380
422
  static removeInstance(e, t) {
381
423
  this.initGlobalRegistry(), window.$flexillaInstances[e] && (window.$flexillaInstances[e] = window.$flexillaInstances[e].filter(
382
- (s) => s.element !== t
424
+ (n) => n.element !== t
383
425
  ));
384
426
  }
385
427
  };
386
- var x = class _x {
428
+ var de = {
429
+ teleport: true,
430
+ teleportMode: "move"
431
+ };
432
+ var P = class _P {
387
433
  /**
388
434
  * Creates a new Popover instance.
389
435
  * @param {string | HTMLElement} popoverEl - The popover content element or its selector.
@@ -400,44 +446,66 @@ var x = class _x {
400
446
  * });
401
447
  */
402
448
  constructor(e, t = {}) {
403
- h(this, "triggerElement");
404
- h(this, "contentElement");
405
- h(this, "options");
406
- h(this, "PopoverInstance");
407
- h(this, "triggerStrategy");
408
- h(this, "placement");
409
- h(this, "offsetDistance");
410
- h(this, "preventFromCloseOutside");
411
- h(this, "preventFromCloseInside");
412
- h(this, "defaultState");
413
- h(this, "setShowOptions", ({ placement: e2, offsetDistance: t2 }) => {
449
+ a(this, "triggerElement");
450
+ a(this, "contentElement");
451
+ a(this, "options");
452
+ a(this, "PopoverInstance");
453
+ a(this, "triggerStrategy");
454
+ a(this, "placement");
455
+ a(this, "offsetDistance");
456
+ a(this, "preventFromCloseOutside");
457
+ a(this, "preventFromCloseInside");
458
+ a(this, "defaultState");
459
+ a(this, "experimentalOptions");
460
+ a(this, "teleporter");
461
+ a(this, "moveElOnInit", () => {
462
+ this.experimentalOptions.teleport && (this.experimentalOptions.teleportMode === "detachable" ? this.teleporter.remove() : this.teleporter.append());
463
+ });
464
+ a(this, "moveEl", () => {
465
+ this.experimentalOptions.teleport && this.experimentalOptions.teleportMode === "detachable" && this.teleporter.remove();
466
+ });
467
+ a(this, "restoreEl", () => {
468
+ this.experimentalOptions.teleport && this.experimentalOptions.teleportMode === "detachable" && this.teleporter.append();
469
+ });
470
+ a(this, "beforeShow", () => {
471
+ this.restoreEl();
472
+ });
473
+ a(this, "onHide", () => {
474
+ var e2, t2;
475
+ (t2 = (e2 = this.options).onHide) == null || t2.call(e2), this.moveEl(), k(this.contentElement, "popover-hide", {
476
+ isHidden: true
477
+ });
478
+ });
479
+ a(this, "onShow", () => {
480
+ var e2, t2;
481
+ (t2 = (e2 = this.options).onShow) == null || t2.call(e2), k(this.contentElement, "popover-show", {
482
+ isHidden: false
483
+ });
484
+ });
485
+ a(this, "setShowOptions", ({ placement: e2, offsetDistance: t2 }) => {
414
486
  this.PopoverInstance.setShowOptions({ placement: e2, offsetDistance: t2 });
415
487
  });
416
- h(this, "setOptions", ({ placement: e2, offsetDistance: t2 }) => {
488
+ a(this, "setOptions", ({ placement: e2, offsetDistance: t2 }) => {
417
489
  this.PopoverInstance.setPopperOptions({ placement: e2, offsetDistance: t2 });
418
490
  });
419
- h(this, "setPopperTrigger", (e2, t2) => {
491
+ a(this, "setPopperTrigger", (e2, t2) => {
420
492
  this.PopoverInstance.setPopperTrigger(e2, t2);
421
493
  });
422
- h(this, "show", () => {
423
- this.PopoverInstance.show(), M(this.contentElement, "popover-show", {
424
- isHidden: false
425
- });
494
+ a(this, "show", () => {
495
+ this.PopoverInstance.show();
426
496
  });
427
- h(this, "hide", () => {
428
- this.PopoverInstance.hide(), M(this.contentElement, "popover-hide", {
429
- isHidden: true
430
- });
497
+ a(this, "hide", () => {
498
+ this.PopoverInstance.hide();
431
499
  });
432
- h(this, "cleanup", () => {
500
+ a(this, "cleanup", () => {
433
501
  this.PopoverInstance.cleanup(), H.removeInstance("popover", this.contentElement);
434
502
  });
435
- const s = typeof e == "string" ? A(e) : e;
436
- this.contentElement = s;
503
+ const n = typeof e == "string" ? A(e) : e;
504
+ this.contentElement = n;
437
505
  const o = H.getInstance("popover", this.contentElement);
438
506
  if (o)
439
507
  return o;
440
- this.triggerElement = A(`[data-popover-trigger][data-popover-id=${s.getAttribute("id")}]`), this.options = t, this.triggerStrategy = this.options.triggerStrategy || s.dataset.triggerStrategy || "click", this.placement = this.options.placement || s.dataset.placement || "bottom-middle", this.offsetDistance = this.options.offsetDistance || parseInt(`${s.dataset.offsetDistance}`) | 6, this.preventFromCloseOutside = this.options.preventFromCloseOutside || s.hasAttribute("data-prevent-close-outside") || false, this.preventFromCloseInside = this.options.preventCloseFromInside || s.hasAttribute("data-prevent-close-inside") || false, this.defaultState = this.options.defaultState || s.dataset.defaultState || "close", this.PopoverInstance = new he({
508
+ this.triggerElement = A(`[data-popover-trigger][data-popover-id=${n.getAttribute("id")}]`), this.options = t, this.triggerStrategy = this.options.triggerStrategy || n.dataset.triggerStrategy || "click", this.placement = this.options.placement || n.dataset.placement || "bottom-middle", this.offsetDistance = this.options.offsetDistance || parseInt(`${n.dataset.offsetDistance}`) | 6, this.preventFromCloseOutside = this.options.preventFromCloseOutside || n.hasAttribute("data-prevent-close-outside") || false, this.preventFromCloseInside = this.options.preventCloseFromInside || n.hasAttribute("data-prevent-close-inside") || false, this.defaultState = this.options.defaultState || n.dataset.defaultState || "close", this.experimentalOptions = Object.assign({}, de, t.experimental), this.teleporter = ce(this.contentElement, document.body, this.experimentalOptions.teleportMode), this.PopoverInstance = new he({
441
509
  trigger: this.triggerElement,
442
510
  content: this.contentElement,
443
511
  options: {
@@ -447,17 +515,18 @@ var x = class _x {
447
515
  preventFromCloseOutside: this.preventFromCloseOutside,
448
516
  preventCloseFromInside: this.preventFromCloseInside,
449
517
  defaultState: this.defaultState,
450
- onShow: this.options.onShow,
451
- onHide: this.options.onHide,
452
- onToggle: ({ isHidden: n }) => {
453
- var r, l;
454
- (l = (r = this.options).onToggle) == null || l.call(r, { isHidden: n }), M(this.contentElement, "popover-toggle", {
455
- isHidden: n
518
+ beforeShow: this.beforeShow,
519
+ onShow: this.onShow,
520
+ onHide: this.onHide,
521
+ onToggle: ({ isHidden: i }) => {
522
+ var r, h;
523
+ (h = (r = this.options).onToggle) == null || h.call(r, { isHidden: i }), k(this.contentElement, "popover-toggle", {
524
+ isHidden: i
456
525
  });
457
526
  },
458
527
  popper: this.options.popper
459
528
  }
460
- }), H.register("popover", this.contentElement, this);
529
+ }), this.moveElOnInit(), H.register("popover", this.contentElement, this);
461
530
  }
462
531
  /**
463
532
  * Creates a new Popover instance with the specified options.
@@ -471,7 +540,7 @@ var x = class _x {
471
540
  * });
472
541
  */
473
542
  static init(e, t) {
474
- return new _x(e, t);
543
+ return new _P(e, t);
475
544
  }
476
545
  /**
477
546
  * Automatically initializes all popover elements matching the specified selector.
@@ -484,16 +553,16 @@ var x = class _x {
484
553
  * Popover.autoInit('.custom-popover');
485
554
  */
486
555
  static autoInit(e = "[data-fx-popover]") {
487
- const t = j(e);
488
- for (const s of t)
489
- new _x(s);
556
+ const t = pe(e);
557
+ for (const n of t)
558
+ new _P(n);
490
559
  }
491
560
  };
492
561
 
493
562
  // src/index.js
494
563
  function Popover(Alpine) {
495
564
  Alpine.directive("popover", (el, {}, { cleanup }) => {
496
- const popover_ = new x(el);
565
+ const popover_ = new P(el);
497
566
  cleanup(() => {
498
567
  popover_.cleanup();
499
568
  });