@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.
package/dist/cdn.js CHANGED
@@ -1,110 +1,101 @@
1
1
  (() => {
2
2
  // ../../node_modules/@flexilla/popover/dist/popover.js
3
- var K = Object.defineProperty;
4
- var U = (i, e, t) => e in i ? K(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
5
- var h = (i, e, t) => U(i, typeof e != "symbol" ? e + "" : e, t);
6
- var A = (i, e = document.body) => e.querySelector(i);
7
- var j = (i, e = document.body) => Array.from(e.querySelectorAll(i));
8
- var M = (i, e, t) => {
9
- const s = new CustomEvent(e, { detail: t });
10
- i.dispatchEvent(s);
11
- };
12
- var q = Object.defineProperty;
13
- var B = (i, e, t) => e in i ? q(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
14
- var a = (i, e, t) => B(i, typeof e != "symbol" ? e + "" : e, t);
15
- var J = "bottom";
16
- var N = ({ reference: i, popper: e }) => {
17
- 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)
18
12
  throw new Error("Reference or popper element is null or undefined");
19
- 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);
20
14
  return {
21
15
  popperHeight: o.height,
22
16
  popperWidth: o.width,
23
- refHeight: n.height,
24
- refWidth: n.width,
25
- refLeft: n.left,
26
- refTop: n.top,
27
- refRight: n.right
17
+ refHeight: i.height,
18
+ refWidth: i.width,
19
+ refLeft: i.left,
20
+ refTop: i.top,
21
+ refRight: i.right
28
22
  };
29
23
  };
30
- var Q = Object.defineProperty;
31
- var V = (i, e, t) => e in i ? Q(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
32
- var p = (i, e, t) => V(i, typeof e != "symbol" ? e + "" : e, t);
33
- var X = (i, e, t, s) => {
34
- const o = t, n = s - (t + e);
35
- 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;
36
27
  };
37
- var Y = (i, e, t, s) => (i - e) / 2 <= t && t + i / 2 + e / 2 <= s;
38
- var Z = (i, e, t, s, o) => t > o - s ? e() ? window.innerHeight - o : t - o : i() ? 0 : t + s;
39
- var _ = (i, e, t, s) => i <= s && t - i <= e;
40
- var ee = (i, e, t, s) => t <= s && -i <= e;
41
- var te = (i, e, t, s, o, n) => {
42
- 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;
43
- 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;
44
35
  };
45
- var se = (i, e, t, s) => i <= t && e - i - s >= i;
46
- var ie = (i, e) => i >= e;
47
- var ne = ({
48
- placement: i,
36
+ var _ = (s, e, t, n) => s <= t && e - s - n >= s;
37
+ var ee = (s, e) => s >= e;
38
+ var te = ({
39
+ placement: s,
49
40
  refWidth: e,
50
41
  refTop: t,
51
- refLeft: s,
42
+ refLeft: n,
52
43
  refHeight: o,
53
- popperWidth: n,
44
+ popperWidth: i,
54
45
  popperHeight: r,
55
- windowHeight: l,
46
+ windowHeight: h,
56
47
  windowWidth: d,
57
48
  offsetDistance: c
58
49
  }) => {
59
- const g = d - s - e, v = s, L = l - t - o, D = t, u = () => Z(
60
- () => ee(t, o, r, l),
61
- () => _(t, o, r, l),
50
+ const m = d - n - e, v = n, I = h - t - o, C = t, E = () => Y(
51
+ () => Q(t, o, r, h),
52
+ () => J(t, o, r, h),
62
53
  t,
63
54
  o,
64
55
  r
65
- ), E = () => te(
66
- () => se(s, d, n, e),
67
- () => ie(s, n),
68
- s,
56
+ ), u = () => Z(
57
+ () => _(n, d, i, e),
58
+ () => ee(n, i),
69
59
  n,
60
+ i,
70
61
  d,
71
62
  e
72
- ), 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();
73
- let m = 0, f = 0;
74
- 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;
75
- 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) {
76
67
  case "bottom":
77
68
  case "bottom-middle":
78
69
  case "top":
79
70
  case "top-middle":
80
- m = k();
71
+ g = D();
81
72
  break;
82
73
  case "left":
83
74
  case "left-middle":
84
75
  case "right":
85
76
  case "right-middle":
86
- f = C();
77
+ f = M();
87
78
  break;
88
79
  case "bottom-start":
89
80
  case "top-start":
90
- m = P();
81
+ g = x();
91
82
  break;
92
83
  case "bottom-end":
93
84
  case "top-end":
94
- m = y();
85
+ g = b();
95
86
  break;
96
87
  case "left-start":
97
88
  case "right-start":
98
- f = b();
89
+ f = y();
99
90
  break;
100
91
  case "left-end":
101
92
  case "right-end":
102
- f = G();
93
+ f = z();
103
94
  break;
104
95
  }
105
- return { x: m, y: f };
96
+ return { x: g, y: f };
106
97
  };
107
- var oe = class {
98
+ var ne = class {
108
99
  /**
109
100
  * Flexilla Popper
110
101
  * @param reference
@@ -123,7 +114,7 @@
123
114
  * @param {boolean} [options.eventEffect.disableOnScroll] - Disable position updates on scroll
124
115
  * @param {Function} [options.onUpdate] - Callback function when position updates
125
116
  */
126
- constructor(e, t, s = {}) {
117
+ constructor(e, t, n = {}) {
127
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", () => {
128
119
  if (!(this.reference instanceof HTMLElement))
129
120
  throw new Error("Invalid HTMLElement for Reference Element");
@@ -131,28 +122,28 @@
131
122
  throw new Error("Invalid HTMLElement for Popper");
132
123
  if (typeof this.offsetDistance != "number")
133
124
  throw new Error("OffsetDistance must be a number");
134
- }), p(this, "setPopperStyleProperty", (g, v) => {
135
- 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`);
136
127
  }), p(this, "setInitialStyles", () => {
137
128
  this.popper.style.setProperty("--fx-popper-placement-x", ""), this.popper.style.setProperty("--fx-popper-placement-y", "");
138
129
  }), p(this, "initPlacement", () => {
139
- var g;
130
+ var m;
140
131
  this.validateElements(), this.setInitialStyles();
141
- 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(
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(
142
133
  {
143
134
  placement: this.placement,
144
- refWidth: k,
145
- refTop: P,
146
- refLeft: C,
147
- popperWidth: u,
148
- refHeight: E,
149
- popperHeight: D,
150
- windowHeight: L,
135
+ refWidth: D,
136
+ refTop: x,
137
+ refLeft: M,
138
+ popperWidth: E,
139
+ refHeight: u,
140
+ popperHeight: C,
141
+ windowHeight: I,
151
142
  windowWidth: v,
152
143
  offsetDistance: this.offsetDistance
153
144
  }
154
145
  );
155
- 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 });
156
147
  }), p(this, "removeWindowEvents", () => {
157
148
  this.isWindowEventsRegistered && (!this.disableOnResize && window.removeEventListener("resize", this.updatePosition), !this.disableOnScroll && window.removeEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = false);
158
149
  }), p(this, "attachWindowEvent", () => {
@@ -166,18 +157,18 @@
166
157
  });
167
158
  const {
168
159
  offsetDistance: o = 10,
169
- placement: n = J,
160
+ placement: i = K,
170
161
  eventEffect: r = {},
171
- onUpdate: l
172
- } = s;
162
+ onUpdate: h
163
+ } = n;
173
164
  if (!(e instanceof HTMLElement))
174
165
  throw new Error("Invalid HTMLElement for Reference Element");
175
166
  if (!(t instanceof HTMLElement))
176
167
  throw new Error("Invalid HTMLElement for Popper");
177
- if (s.offsetDistance && typeof s.offsetDistance != "number")
168
+ if (n.offsetDistance && typeof n.offsetDistance != "number")
178
169
  throw new Error("OffsetDistance must be a number");
179
170
  const { disableOnResize: d, disableOnScroll: c } = r;
180
- 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;
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;
181
172
  }
182
173
  /**
183
174
  * Updates popper configuration and recalculates position
@@ -190,43 +181,50 @@
190
181
  this.placement = e, this.offsetDistance = t || this.offsetDistance, this.initPlacement(), this.attachWindowEvent();
191
182
  }
192
183
  };
193
- var re = (i, e = document.body) => e.querySelector(i);
194
- var z = (i, e) => {
195
- for (const [t, s] of Object.entries(e))
196
- 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);
197
191
  };
198
- var ae = ({
199
- element: i,
192
+ var re = ({
193
+ element: s,
200
194
  callback: e,
201
195
  type: t,
202
- keysCheck: s
196
+ keysCheck: n
203
197
  }) => {
204
- const o = getComputedStyle(i), n = o.transition;
205
- if (n !== "none" && n !== "" && !s.includes(n)) {
206
- const r = "transitionend", l = () => {
207
- i.removeEventListener(r, l), e();
198
+ const o = getComputedStyle(s), i = o.transition;
199
+ if (i !== "none" && i !== "" && !n.includes(i)) {
200
+ const r = "transitionend", h = () => {
201
+ s.removeEventListener(r, h), e();
208
202
  };
209
- i.addEventListener(r, l, { once: true });
203
+ s.addEventListener(r, h, { once: true });
210
204
  } else
211
205
  e();
212
206
  };
213
- var le = ({
214
- element: i,
207
+ var ae = ({
208
+ element: s,
215
209
  callback: e
216
210
  }) => {
217
- ae({
218
- element: i,
211
+ re({
212
+ element: s,
219
213
  callback: e,
220
214
  type: "transition",
221
215
  keysCheck: ["all 0s ease 0s", "all"]
222
216
  });
223
217
  };
224
- var w = ({ state: i, trigger: e, popper: t }) => {
225
- const s = i === "open";
226
- z(t, {
227
- "data-state": i
228
- }), z(e, {
229
- "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}`
230
228
  });
231
229
  };
232
230
  var he = class {
@@ -237,46 +235,46 @@
237
235
  * @param {string | HTMLElement} params.content - The content element selector or HTMLElement
238
236
  * @param {OverlayOptions} [params.options] - Configuration options for the overlay
239
237
  */
240
- constructor({ trigger: e, content: t, options: s = {} }) {
241
- 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) => {
242
- 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());
243
- }), a(this, "handleKeyDown", (n) => {
244
- n.preventDefault(), this.triggerStrategy !== "hover" && n.key === "Escape" && this.contentElement.getAttribute("data-state") === "open" && (this.preventFromCloseOutside || this.hide());
245
- }), 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", () => {
246
244
  (this.contentElement.dataset.state || "close") === "close" ? (this.show(), this.triggerStrategy === "hover" && this.addEventOnMouseEnter()) : this.hide();
247
- }), a(this, "hideOnMouseLeaseTrigger", () => {
245
+ }), l(this, "hideOnMouseLeaseTrigger", () => {
248
246
  setTimeout(() => {
249
247
  this.contentElement.matches(":hover") || this.hide();
250
248
  }, 150);
251
- }), a(this, "hideOnMouseLeave", () => {
249
+ }), l(this, "hideOnMouseLeave", () => {
252
250
  setTimeout(() => {
253
251
  this.triggerElement.matches(":hover") || this.hide();
254
252
  }, 150);
255
- }), a(this, "addEventOnMouseEnter", () => {
253
+ }), l(this, "addEventOnMouseEnter", () => {
256
254
  this.triggerElement.addEventListener("mouseleave", this.hideOnMouseLeaseTrigger), this.contentElement.addEventListener("mouseleave", this.hideOnMouseLeave);
257
- }), a(this, "showOnMouseEnter", () => {
255
+ }), l(this, "showOnMouseEnter", () => {
258
256
  this.show(), this.addEventOnMouseEnter();
259
- }), a(this, "setShowOptions", ({ placement: n, offsetDistance: r }) => {
260
- var l, d, c, g;
257
+ }), l(this, "setShowOptions", ({ placement: i, offsetDistance: r }) => {
258
+ var h, d, c, m;
261
259
  this.popper.setOptions({
262
- placement: n,
260
+ placement: i,
263
261
  offsetDistance: r
264
- }), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (d = (l = this.options).beforeShow) == null || d.call(l), w({
262
+ }), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (d = (h = this.options).beforeShow) == null || d.call(h), w({
265
263
  state: "open",
266
264
  popper: this.contentElement,
267
265
  trigger: this.triggerElement
268
- }), this.onToggleState(false), (g = (c = this.options).onShow) == null || g.call(c);
269
- }), 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 }) => {
270
268
  this.popper.setOptions({
271
- placement: n,
269
+ placement: i,
272
270
  offsetDistance: r || this.offsetDistance
273
271
  });
274
- }), a(this, "setPopperTrigger", (n, r) => {
272
+ }), l(this, "setPopperTrigger", (i, r) => {
275
273
  this.cleanup(), this.popper.setOptions({
276
274
  placement: r.placement || this.placement,
277
275
  offsetDistance: r.offsetDistance || this.offsetDistance
278
- }), this.triggerElement = n, this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
279
- }), 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", () => {
280
278
  this.triggerElement.removeEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.removeEventListener("mouseenter", this.showOnMouseEnter);
281
279
  });
282
280
  var o;
@@ -284,7 +282,7 @@
284
282
  throw new Error("Trigger element must be a valid HTML element");
285
283
  if (!(this.contentElement instanceof HTMLElement))
286
284
  throw new Error("Content element must be a valid HTML element");
287
- 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(
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(
288
286
  this.triggerElement,
289
287
  this.contentElement,
290
288
  {
@@ -295,38 +293,45 @@
295
293
  ), this.initInstance();
296
294
  }
297
295
  onToggleState(e) {
298
- var t, s;
299
- (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 });
300
298
  }
301
299
  /**
302
300
  * Shows the overlay
303
301
  * Positions the overlay, adds event listeners, and triggers related callbacks
304
302
  */
305
303
  show() {
306
- var e, t, s, o;
304
+ var e, t, n, o;
307
305
  this.popper.updatePosition(), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (t = (e = this.options).beforeShow) == null || t.call(e), w({
308
306
  state: "open",
309
307
  popper: this.contentElement,
310
308
  trigger: this.triggerElement
311
- }), 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);
312
310
  }
313
311
  /**
314
312
  * Hides the overlay
315
313
  * Removes event listeners and triggers related callbacks
316
314
  */
317
315
  hide() {
318
- var e, t;
319
- (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({
320
325
  state: "close",
321
326
  popper: this.contentElement,
322
327
  trigger: this.triggerElement
323
- }), 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({
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({
324
329
  element: this.contentElement,
325
330
  callback: () => {
326
- var s, o;
327
- 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);
328
333
  }
329
- });
334
+ }));
330
335
  }
331
336
  initInstance() {
332
337
  w({
@@ -340,26 +345,67 @@
340
345
  }), this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
341
346
  }
342
347
  };
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);
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
- h(this, "triggerElement");
380
- h(this, "contentElement");
381
- h(this, "options");
382
- h(this, "PopoverInstance");
383
- h(this, "triggerStrategy");
384
- h(this, "placement");
385
- h(this, "offsetDistance");
386
- h(this, "preventFromCloseOutside");
387
- h(this, "preventFromCloseInside");
388
- h(this, "defaultState");
389
- h(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
- h(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
- h(this, "setPopperTrigger", (e2, t2) => {
467
+ a(this, "setPopperTrigger", (e2, t2) => {
396
468
  this.PopoverInstance.setPopperTrigger(e2, t2);
397
469
  });
398
- h(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
- h(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
- h(this, "cleanup", () => {
476
+ a(this, "cleanup", () => {
409
477
  this.PopoverInstance.cleanup(), H.removeInstance("popover", this.contentElement);
410
478
  });
411
- const s = typeof e == "string" ? A(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 = 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({
484
+ 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({
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 }) => {
429
- var r, l;
430
- (l = (r = this.options).onToggle) == null || l.call(r, { isHidden: n }), M(this.contentElement, "popover-toggle", {
431
- isHidden: n
494
+ beforeShow: this.beforeShow,
495
+ onShow: this.onShow,
496
+ onHide: this.onHide,
497
+ onToggle: ({ isHidden: i }) => {
498
+ var r, h;
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 = j(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
  });