@flexilla/alpine-popover 0.1.0 → 0.2.0

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