@flexilla/alpine-popover 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,442 @@
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 p = (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
+ const t = e.getBoundingClientRect(), s = i.getBoundingClientRect();
17
+ return {
18
+ popperHeight: t.height,
19
+ popperWidth: t.width,
20
+ refHeight: s.height,
21
+ refWidth: s.width,
22
+ refLeft: s.left,
23
+ refTop: s.top,
24
+ refRight: s.right
25
+ };
26
+ };
27
+ var Q = Object.defineProperty;
28
+ var V = (i, e, t) => e in i ? Q(i, e, { enumerable: true, configurable: true, writable: true, value: t }) : i[e] = t;
29
+ var h = (i, e, t) => V(i, typeof e != "symbol" ? e + "" : e, t);
30
+ var X = (i, e, t, s) => {
31
+ const o = t, n = s - (t + e);
32
+ return o >= (i - e) / 2 && n >= (i - e) / 2;
33
+ };
34
+ var Y = (i, e, t, s) => (i - e) / 2 <= t && t + i / 2 + e / 2 <= s;
35
+ var Z = (i, e, t, s, o) => t > o - s ? e() ? window.innerHeight - o : t - o : i() ? 0 : t + s;
36
+ var _ = (i, e, t, s) => i <= s && t - i <= e;
37
+ var ee = (i, e, t, s) => t <= s && -i <= e;
38
+ var te = (i, e, t, s, o, n) => {
39
+ 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;
40
+ return i() ? 0 : e() ? d : c;
41
+ };
42
+ var se = (i, e, t, s) => i <= t && e - i - s >= i;
43
+ var ie = (i, e) => i >= e;
44
+ var ne = ({
45
+ placement: i,
46
+ refWidth: e,
47
+ refTop: t,
48
+ refLeft: s,
49
+ refHeight: o,
50
+ popperWidth: n,
51
+ popperHeight: r,
52
+ windowHeight: l,
53
+ windowWidth: d,
54
+ offsetDistance: c
55
+ }) => {
56
+ const m = d - s - e, v = s, D = l - t - o, C = t, u = () => Z(
57
+ () => ee(t, o, r, l),
58
+ () => _(t, o, r, l),
59
+ t,
60
+ o,
61
+ r
62
+ ), E = () => te(
63
+ () => se(s, d, n, e),
64
+ () => ie(s, n),
65
+ s,
66
+ n,
67
+ d,
68
+ e
69
+ ), k = () => X(n, e, s, d) ? s + e / 2 - n / 2 : E(), H = () => Y(r, o, t, l) ? t + o / 2 - r / 2 : u(), T = () => 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();
70
+ let g = 0, f = 0;
71
+ const S = t - r - c, O = t + o + c, I = s - n - c, L = s + e + c, W = C >= r + c, F = D >= r + c, R = v >= n + c, $ = m >= n + c;
72
+ switch (i.startsWith("top") ? f = W ? S : F ? O : Math.max(S, O) : i.startsWith("bottom") ? f = F ? O : W ? S : Math.max(S, O) : i.startsWith("left") ? g = R ? I : $ ? L : Math.max(I, L) : i.startsWith("right") && (g = $ ? L : R ? I : Math.max(I, L)), i) {
73
+ case "bottom":
74
+ case "bottom-middle":
75
+ case "top":
76
+ case "top-middle":
77
+ g = k();
78
+ break;
79
+ case "left":
80
+ case "left-middle":
81
+ case "right":
82
+ case "right-middle":
83
+ f = H();
84
+ break;
85
+ case "bottom-start":
86
+ case "top-start":
87
+ g = T();
88
+ break;
89
+ case "bottom-end":
90
+ case "top-end":
91
+ g = y();
92
+ break;
93
+ case "left-start":
94
+ case "right-start":
95
+ f = b();
96
+ break;
97
+ case "left-end":
98
+ case "right-end":
99
+ f = G();
100
+ break;
101
+ }
102
+ return { x: g, y: f };
103
+ };
104
+ var oe = class {
105
+ /**
106
+ * Flexilla Popper
107
+ * @param reference
108
+ * @param popper
109
+ * @param options
110
+ */
111
+ constructor(e, t, s = {}) {
112
+ h(this, "reference"), h(this, "popper"), h(this, "offsetDistance"), h(this, "placement"), h(this, "disableOnResize"), h(this, "disableOnScroll"), h(this, "onUpdate"), h(this, "isWindowEventsRegistered"), h(this, "validateElements", () => {
113
+ if (!(this.reference instanceof HTMLElement)) throw new Error("Invalid HTMLElement for Reference Element");
114
+ if (!(this.popper instanceof HTMLElement)) throw new Error("Invalid HTMLElement for Popper");
115
+ if (typeof this.offsetDistance != "number") throw new Error("OffsetDistance must be a number");
116
+ }), h(this, "setPopperStyleProperty", (m, v) => {
117
+ this.popper.style.setProperty("--fx-popper-placement-x", `${m}px`), this.popper.style.setProperty("--fx-popper-placement-y", `${v}px`);
118
+ }), h(this, "setInitialStyles", () => {
119
+ this.popper.style.setProperty("--fx-popper-placement-x", ""), this.popper.style.setProperty("--fx-popper-placement-y", "");
120
+ }), h(this, "initPlacement", () => {
121
+ var m;
122
+ this.validateElements(), this.setInitialStyles();
123
+ const v = window.innerWidth, D = window.innerHeight, { popperHeight: C, popperWidth: u, refHeight: E, refWidth: k, refLeft: H, refTop: T } = N({ reference: this.reference, popper: this.popper }), { x: y, y: b } = ne(
124
+ {
125
+ placement: this.placement,
126
+ refWidth: k,
127
+ refTop: T,
128
+ refLeft: H,
129
+ popperWidth: u,
130
+ refHeight: E,
131
+ popperHeight: C,
132
+ windowHeight: D,
133
+ windowWidth: v,
134
+ offsetDistance: this.offsetDistance
135
+ }
136
+ );
137
+ this.setPopperStyleProperty(y, b), (m = this.onUpdate) == null || m.call(this, { x: y, y: b, placement: this.placement });
138
+ }), h(this, "removeWindowEvents", () => {
139
+ this.isWindowEventsRegistered && (!this.disableOnResize && window.removeEventListener("resize", this.updatePosition), !this.disableOnScroll && window.removeEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = false);
140
+ }), h(this, "attachWindowEvent", () => {
141
+ this.isWindowEventsRegistered && this.removeWindowEvents(), this.disableOnResize || window.addEventListener("resize", this.updatePosition), this.disableOnScroll || window.addEventListener("scroll", this.updatePosition), this.isWindowEventsRegistered = true;
142
+ }), h(this, "resetPosition", () => {
143
+ this.setInitialStyles();
144
+ }), h(this, "updatePosition", () => {
145
+ this.initPlacement(), this.attachWindowEvent();
146
+ }), h(this, "cleanupEvents", () => {
147
+ this.setInitialStyles(), this.removeWindowEvents();
148
+ });
149
+ const {
150
+ offsetDistance: o = 10,
151
+ placement: n = J,
152
+ eventEffect: r = {},
153
+ onUpdate: l
154
+ } = s;
155
+ if (!(e instanceof HTMLElement)) throw new Error("Invalid HTMLElement for Reference Element");
156
+ if (!(t instanceof HTMLElement)) throw new Error("Invalid HTMLElement for Popper");
157
+ if (s.offsetDistance && typeof s.offsetDistance != "number") throw new Error("OffsetDistance must be a number");
158
+ const { disableOnResize: d, disableOnScroll: c } = r;
159
+ 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;
160
+ }
161
+ setOptions({ placement: e, offsetDistance: t }) {
162
+ this.placement = e, this.offsetDistance = t || this.offsetDistance, this.initPlacement(), this.attachWindowEvent();
163
+ }
164
+ };
165
+ var re = (i, e = document.body) => e.querySelector(i);
166
+ var z = (i, e) => {
167
+ for (const [t, s] of Object.entries(e))
168
+ i.setAttribute(t, s);
169
+ };
170
+ var ae = ({
171
+ element: i,
172
+ callback: e,
173
+ type: t,
174
+ keysCheck: s
175
+ }) => {
176
+ const o = getComputedStyle(i), n = o.transition;
177
+ if (n !== "none" && n !== "" && !s.includes(n)) {
178
+ const r = "transitionend", l = () => {
179
+ i.removeEventListener(r, l), e();
180
+ };
181
+ i.addEventListener(r, l, { once: true });
182
+ } else
183
+ e();
184
+ };
185
+ var le = ({
186
+ element: i,
187
+ callback: e
188
+ }) => {
189
+ ae({
190
+ element: i,
191
+ callback: e,
192
+ type: "transition",
193
+ keysCheck: ["all 0s ease 0s", "all"]
194
+ });
195
+ };
196
+ var w = ({ state: i, trigger: e, popper: t }) => {
197
+ z(t, {
198
+ "data-state": i
199
+ }), z(e, {
200
+ "aria-expanded": `${i}`
201
+ });
202
+ };
203
+ var he = class {
204
+ /**
205
+ * Creates an instance of CreateOverlay
206
+ * @param {Object} params - The initialization parameters
207
+ * @param {string | HTMLElement} params.trigger - The trigger element selector or HTMLElement
208
+ * @param {string | HTMLElement} params.content - The content element selector or HTMLElement
209
+ * @param {OverlayOptions} [params.options] - Configuration options for the overlay
210
+ * @throws {Error} When trigger or content elements are invalid
211
+ */
212
+ constructor({ trigger: e, content: t, options: s = {} }) {
213
+ 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) => {
214
+ 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());
215
+ }), a(this, "handleKeyDown", (n) => {
216
+ n.preventDefault(), this.triggerStrategy !== "hover" && n.key === "Escape" && this.contentElement.getAttribute("data-state") === "open" && (this.preventFromCloseOutside || this.hide());
217
+ }), a(this, "toggleStateOnClick", () => {
218
+ (this.contentElement.dataset.state || "close") === "close" ? (this.show(), this.triggerStrategy === "hover" && this.addEventOnMouseEnter()) : this.hide();
219
+ }), a(this, "hideOnMouseLeaseTrigger", () => {
220
+ setTimeout(() => {
221
+ this.contentElement.matches(":hover") || this.hide();
222
+ }, 150);
223
+ }), a(this, "hideOnMouseLeave", () => {
224
+ setTimeout(() => {
225
+ this.triggerElement.matches(":hover") || this.hide();
226
+ }, 150);
227
+ }), a(this, "addEventOnMouseEnter", () => {
228
+ this.triggerElement.addEventListener("mouseleave", this.hideOnMouseLeaseTrigger), this.contentElement.addEventListener("mouseleave", this.hideOnMouseLeave);
229
+ }), a(this, "showOnMouseEnter", () => {
230
+ this.show(), this.addEventOnMouseEnter();
231
+ }), a(this, "setShowOptions", ({ placement: n, offsetDistance: r }) => {
232
+ var l, d, c, m;
233
+ this.popper.setOptions({
234
+ placement: n,
235
+ offsetDistance: r
236
+ }), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (d = (l = this.options).beforeShow) == null || d.call(l), w({
237
+ state: "open",
238
+ popper: this.contentElement,
239
+ trigger: this.triggerElement
240
+ }), this.onToggleState(false), (m = (c = this.options).onShow) == null || m.call(c);
241
+ }), a(this, "setPopperOptions", ({ placement: n, offsetDistance: r }) => {
242
+ this.popper.setOptions({
243
+ placement: n,
244
+ offsetDistance: r
245
+ });
246
+ }), a(this, "cleanup", () => {
247
+ this.triggerElement.removeEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.removeEventListener("mouseenter", this.showOnMouseEnter);
248
+ });
249
+ var o;
250
+ if (this.contentElement = this.getElement(t), this.triggerElement = this.getElement(e), !(this.triggerElement instanceof HTMLElement)) throw new Error("Trigger element must be a valid HTML element");
251
+ if (!(this.contentElement instanceof HTMLElement)) throw new Error("Content element must be a valid HTML element");
252
+ 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(
253
+ this.triggerElement,
254
+ this.contentElement,
255
+ {
256
+ placement: this.placement,
257
+ offsetDistance: this.offsetDistance,
258
+ eventEffect: this.eventEffect
259
+ }
260
+ ), this.initInstance();
261
+ }
262
+ onToggleState(e) {
263
+ var t, s;
264
+ (s = (t = this.options).onToggle) == null || s.call(t, { isHidden: e });
265
+ }
266
+ /**
267
+ * Shows the overlay
268
+ * Positions the overlay, adds event listeners, and triggers related callbacks
269
+ */
270
+ show() {
271
+ var e, t, s, o;
272
+ this.popper.updatePosition(), document.addEventListener("keydown", this.handleKeyDown), document.addEventListener("click", this.handleDocumentClick), (t = (e = this.options).beforeShow) == null || t.call(e), w({
273
+ state: "open",
274
+ popper: this.contentElement,
275
+ trigger: this.triggerElement
276
+ }), this.onToggleState(false), (o = (s = this.options).onShow) == null || o.call(s);
277
+ }
278
+ /**
279
+ * Hides the overlay
280
+ * Removes event listeners and triggers related callbacks
281
+ */
282
+ hide() {
283
+ var e, t;
284
+ (t = (e = this.options).beforeHide) == null || t.call(e), w({
285
+ state: "close",
286
+ popper: this.contentElement,
287
+ trigger: this.triggerElement
288
+ }), 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({
289
+ element: this.contentElement,
290
+ callback: () => {
291
+ var s, o;
292
+ this.onToggleState(true), this.popper.cleanupEvents(), (o = (s = this.options).onHide) == null || o.call(s);
293
+ }
294
+ });
295
+ }
296
+ initInstance() {
297
+ w({
298
+ state: this.defaultState,
299
+ popper: this.contentElement,
300
+ trigger: this.triggerElement
301
+ }), this.defaultState === "open" ? this.show() : w({
302
+ state: "close",
303
+ popper: this.contentElement,
304
+ trigger: this.triggerElement
305
+ }), this.triggerElement.addEventListener("click", this.toggleStateOnClick), this.triggerStrategy === "hover" && this.triggerElement.addEventListener("mouseenter", this.showOnMouseEnter);
306
+ }
307
+ };
308
+ var x = class {
309
+ static initGlobalRegistry() {
310
+ window.$flexillaInstances || (window.$flexillaInstances = {});
311
+ }
312
+ static register(e, t, s) {
313
+ return this.initGlobalRegistry(), window.$flexillaInstances[e] || (window.$flexillaInstances[e] = []), this.getInstance(e, t) || (window.$flexillaInstances[e].push({ element: t, instance: s }), s);
314
+ }
315
+ static getInstance(e, t) {
316
+ var s, o;
317
+ return this.initGlobalRegistry(), (o = (s = window.$flexillaInstances[e]) == null ? void 0 : s.find(
318
+ (n) => n.element === t
319
+ )) == null ? void 0 : o.instance;
320
+ }
321
+ static removeInstance(e, t) {
322
+ this.initGlobalRegistry(), window.$flexillaInstances[e] && (window.$flexillaInstances[e] = window.$flexillaInstances[e].filter(
323
+ (s) => s.element !== t
324
+ ));
325
+ }
326
+ };
327
+ var P = class _P {
328
+ /**
329
+ * Creates a new Popover instance.
330
+ * @param {string | HTMLElement} popoverEl - The popover content element or its selector.
331
+ * @param {PopoverOptions} [options={}] - Configuration options for the popover.
332
+ * @example
333
+ * // Create a popover with default options
334
+ * const popover = new Popover('#my-popover');
335
+ *
336
+ * // Create a popover with custom options
337
+ * const popover = new Popover('#my-popover', {
338
+ * placement: 'top',
339
+ * triggerStrategy: 'hover',
340
+ * offsetDistance: 10
341
+ * });
342
+ */
343
+ constructor(e, t = {}) {
344
+ p(this, "triggerElement");
345
+ p(this, "contentElement");
346
+ p(this, "options");
347
+ p(this, "PopoverInstance");
348
+ p(this, "triggerStrategy");
349
+ p(this, "placement");
350
+ p(this, "offsetDistance");
351
+ p(this, "preventFromCloseOutside");
352
+ p(this, "preventFromCloseInside");
353
+ p(this, "defaultState");
354
+ p(this, "setShowOptions", ({ placement: e2, offsetDistance: t2 }) => {
355
+ this.PopoverInstance.setShowOptions({ placement: e2, offsetDistance: t2 });
356
+ });
357
+ p(this, "show", () => {
358
+ this.PopoverInstance.show(), M(this.contentElement, "popover-show", {
359
+ isHidden: false
360
+ });
361
+ });
362
+ p(this, "hide", () => {
363
+ this.PopoverInstance.hide(), M(this.contentElement, "popover-hide", {
364
+ isHidden: true
365
+ });
366
+ });
367
+ p(this, "cleanup", () => {
368
+ this.PopoverInstance.cleanup(), x.removeInstance("popover", this.contentElement);
369
+ });
370
+ const s = typeof e == "string" ? A(e) : e;
371
+ this.contentElement = s;
372
+ const o = x.getInstance("popover", this.contentElement);
373
+ if (o)
374
+ return o;
375
+ 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({
376
+ trigger: this.triggerElement,
377
+ content: this.contentElement,
378
+ options: {
379
+ placement: this.placement,
380
+ offsetDistance: this.offsetDistance,
381
+ triggerStrategy: this.triggerStrategy,
382
+ preventFromCloseOutside: this.preventFromCloseOutside,
383
+ preventCloseFromInside: this.preventFromCloseInside,
384
+ defaultState: this.defaultState,
385
+ onShow: this.options.onShow,
386
+ onHide: this.options.onHide,
387
+ onToggle: ({ isHidden: n }) => {
388
+ var r, l;
389
+ (l = (r = this.options).onToggle) == null || l.call(r, { isHidden: n }), M(this.contentElement, "popover-toggle", {
390
+ isHidden: n
391
+ });
392
+ },
393
+ popper: this.options.popper
394
+ }
395
+ }), x.register("popover", this.contentElement, this);
396
+ }
397
+ /**
398
+ * Creates a new Popover instance with the specified options.
399
+ * @param {string | HTMLElement} popoverEl - The popover content element or its selector.
400
+ * @param {PopoverOptions} [options] - Configuration options for the popover.
401
+ * @returns {Popover} A new Popover instance.
402
+ * @example
403
+ * const popover = Popover.init('#my-popover', {
404
+ * placement: 'bottom',
405
+ * triggerStrategy: 'click'
406
+ * });
407
+ */
408
+ static init(e, t) {
409
+ return new _P(e, t);
410
+ }
411
+ /**
412
+ * Automatically initializes all popover elements matching the specified selector.
413
+ * @param {string} [selector='[data-fx-popover]'] - The selector to find popover elements.
414
+ * @example
415
+ * // Initialize all popovers with default selector
416
+ * Popover.autoInit();
417
+ *
418
+ * // Initialize popovers with custom selector
419
+ * Popover.autoInit('.custom-popover');
420
+ */
421
+ static autoInit(e = "[data-fx-popover]") {
422
+ const t = j(e);
423
+ for (const s of t) new _P(s);
424
+ }
425
+ };
426
+
427
+ // src/index.js
428
+ function Popover(Alpine) {
429
+ Alpine.directive("popover", (el, {}, { cleanup }) => {
430
+ const popover_ = new P(el);
431
+ cleanup(() => {
432
+ popover_.cleanup();
433
+ });
434
+ });
435
+ }
436
+ var src_default = Popover;
437
+
438
+ // builds/module.js
439
+ var module_default = src_default;
440
+ export {
441
+ module_default as default
442
+ };
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "@flexilla/alpine-popover",
3
+ "version": "0.0.0",
4
+ "description": "AlpineJS plugin for adding Popover functionality to your AlpineJS components",
5
+ "type": "module",
6
+ "private": false,
7
+ "publishConfig": {
8
+ "access": "public"
9
+ },
10
+ "license": "MIT",
11
+ "author": {
12
+ "name": "Johnkat MJ",
13
+ "url": "https://github.com/johnkat-mj"
14
+ },
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/unoforge/alpine-plugin.git"
18
+ },
19
+ "main": "src/index.js",
20
+ "module": "dist/module.esm.js",
21
+ "scripts": {
22
+ "build": "node ./scripts/build.js",
23
+ "watch": "node ./scripts/build.js --watch",
24
+ "lint": "eslint .",
25
+ "lint-fix": "eslint . --fix"
26
+ },
27
+ "bugs": {
28
+ "url": "https://github.com/unoforge/alpine-plugin/issues"
29
+ },
30
+ "homepage": "https://github.com/unoforge/alpine-plugin/packages/alpine-popover/README.md",
31
+ "devDependencies": {
32
+ "brotli-size": "^4.0.0",
33
+ "esbuild": "^0.25.1",
34
+ "eslint-plugin-import": "^2.31.0",
35
+ "eslint-plugin-node": "^11.1.0",
36
+ "eslint-plugin-promise": "^7.2.1",
37
+ "eslint-plugin-standard": "^4.1.0",
38
+ "lint-staged": "^15.5.0"
39
+ },
40
+ "files": [
41
+ "LICENSE",
42
+ "README.md",
43
+ "src/index.js",
44
+ "package.json",
45
+ "dist"
46
+ ],
47
+ "keywords": [
48
+ "AlpineJS",
49
+ "Popover",
50
+ "Alpine Overlay",
51
+ "Toggle Popover",
52
+ "Alpine Plugin Popover",
53
+ "Alpine Plugin",
54
+ "Alpinejs Pugin",
55
+ "component",
56
+ "interactive",
57
+ "intercative component",
58
+ "Flexilla"
59
+ ],
60
+ "dependencies": {
61
+ "@flexilla/popover": "^0.2.1"
62
+ },
63
+ "gitHead": "3c7ea3f74d67ac5d9ab2817d747ad7127eb542b5"
64
+ }
package/src/index.js ADDED
@@ -0,0 +1,12 @@
1
+ import { Popover as FlexillaPopover } from "@flexilla/popover";
2
+
3
+ function Popover(Alpine) {
4
+ Alpine.directive("popover", (el, {}, { cleanup }) => {
5
+ const popover_ = new FlexillaPopover(el)
6
+ cleanup(() => {
7
+ popover_.cleanup()
8
+ });
9
+ });
10
+ }
11
+
12
+ export default Popover;