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