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