@wyxos/vibe 1.3.1 → 1.4.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/lib/index.js ADDED
@@ -0,0 +1,684 @@
1
+ import { nextTick as X, defineComponent as gt, computed as et, ref as B, onMounted as pt, onUnmounted as mt, createElementBlock as Y, openBlock as J, normalizeClass as nt, createElementVNode as C, normalizeStyle as ht, createVNode as yt, createCommentVNode as vt, TransitionGroup as bt, unref as q, withCtx as xt, Fragment as wt, renderList as Tt, mergeProps as at, renderSlot as Mt, toDisplayString as rt } from "vue";
2
+ function It() {
3
+ const t = document.createElement("div");
4
+ t.style.visibility = "hidden", t.style.overflow = "scroll", t.style.msOverflowStyle = "scrollbar", t.style.width = "100px", t.style.height = "100px", document.body.appendChild(t);
5
+ const a = document.createElement("div");
6
+ a.style.width = "100%", t.appendChild(a);
7
+ const o = t.offsetWidth - a.offsetWidth;
8
+ return document.body.removeChild(t), o;
9
+ }
10
+ function St(t, a, o, l = {}) {
11
+ const {
12
+ gutterX: b = 0,
13
+ gutterY: r = 0,
14
+ header: d = 0,
15
+ footer: i = 0,
16
+ paddingLeft: w = 0,
17
+ paddingRight: m = 0,
18
+ sizes: h = {
19
+ base: 1,
20
+ sm: 2,
21
+ md: 3,
22
+ lg: 4,
23
+ xl: 5,
24
+ "2xl": 6
25
+ },
26
+ placement: g = "masonry"
27
+ } = l;
28
+ let x = 0, E = 0;
29
+ try {
30
+ if (a && a.nodeType === 1 && typeof window < "u" && window.getComputedStyle) {
31
+ const u = window.getComputedStyle(a);
32
+ x = parseFloat(u.paddingLeft) || 0, E = parseFloat(u.paddingRight) || 0;
33
+ }
34
+ } catch {
35
+ }
36
+ const W = (w || 0) + x, O = (m || 0) + E, M = a.offsetWidth - a.clientWidth, T = M > 0 ? M + 2 : It() + 2, L = a.offsetWidth - T - W - O, $ = b * (o - 1), I = Math.floor((L - $) / o), p = t.map((u) => {
37
+ const k = u.width, H = u.height;
38
+ return Math.round(I * H / k) + i + d;
39
+ });
40
+ if (g === "sequential-balanced") {
41
+ const u = p.length;
42
+ if (u === 0) return [];
43
+ const k = (e, n, c) => e + (n > 0 ? r : 0) + c;
44
+ let H = Math.max(...p), N = p.reduce((e, n) => e + n, 0) + r * Math.max(0, u - 1);
45
+ const R = (e) => {
46
+ let n = 1, c = 0, f = 0;
47
+ for (let y = 0; y < u; y++) {
48
+ const P = p[y], S = k(c, f, P);
49
+ if (S <= e)
50
+ c = S, f++;
51
+ else if (n++, c = P, f = 1, P > e || n > o) return !1;
52
+ }
53
+ return n <= o;
54
+ };
55
+ for (; H < N; ) {
56
+ const e = Math.floor((H + N) / 2);
57
+ R(e) ? N = e : H = e + 1;
58
+ }
59
+ const _ = N, A = new Array(o).fill(0);
60
+ let z = o - 1, D = 0, j = 0;
61
+ for (let e = u - 1; e >= 0; e--) {
62
+ const n = p[e], c = e < z;
63
+ !(k(D, j, n) <= _) || c ? (A[z] = e + 1, z--, D = n, j = 1) : (D = k(D, j, n), j++);
64
+ }
65
+ A[0] = 0;
66
+ const V = [], U = new Array(o).fill(0);
67
+ for (let e = 0; e < o; e++) {
68
+ const n = A[e], c = e + 1 < o ? A[e + 1] : u, f = e * (I + b);
69
+ for (let y = n; y < c; y++) {
70
+ const S = { ...t[y], columnWidth: I, imageHeight: 0, columnHeight: 0, left: 0, top: 0 }, F = p[y] - (i + d);
71
+ S.imageHeight = F, S.columnHeight = p[y], S.left = f, S.top = U[e], U[e] += S.columnHeight + (y + 1 < c ? r : 0), V.push(S);
72
+ }
73
+ }
74
+ return V;
75
+ }
76
+ const s = new Array(o).fill(0), v = [];
77
+ for (let u = 0; u < t.length; u++) {
78
+ const k = t[u], H = { ...k, columnWidth: 0, imageHeight: 0, columnHeight: 0, left: 0, top: 0 }, N = s.indexOf(Math.min(...s)), R = k.width, _ = k.height;
79
+ H.columnWidth = I, H.left = N * (I + b), H.imageHeight = Math.round(I * _ / R), H.columnHeight = H.imageHeight + i + d, H.top = s[N], s[N] += H.columnHeight + r, v.push(H);
80
+ }
81
+ return v;
82
+ }
83
+ var kt = typeof global == "object" && global && global.Object === Object && global, Ht = typeof self == "object" && self && self.Object === Object && self, ft = kt || Ht || Function("return this")(), K = ft.Symbol, dt = Object.prototype, Et = dt.hasOwnProperty, Pt = dt.toString, G = K ? K.toStringTag : void 0;
84
+ function Lt(t) {
85
+ var a = Et.call(t, G), o = t[G];
86
+ try {
87
+ t[G] = void 0;
88
+ var l = !0;
89
+ } catch {
90
+ }
91
+ var b = Pt.call(t);
92
+ return l && (a ? t[G] = o : delete t[G]), b;
93
+ }
94
+ var $t = Object.prototype, Nt = $t.toString;
95
+ function Wt(t) {
96
+ return Nt.call(t);
97
+ }
98
+ var Ot = "[object Null]", At = "[object Undefined]", ot = K ? K.toStringTag : void 0;
99
+ function jt(t) {
100
+ return t == null ? t === void 0 ? At : Ot : ot && ot in Object(t) ? Lt(t) : Wt(t);
101
+ }
102
+ function Bt(t) {
103
+ return t != null && typeof t == "object";
104
+ }
105
+ var Ct = "[object Symbol]";
106
+ function zt(t) {
107
+ return typeof t == "symbol" || Bt(t) && jt(t) == Ct;
108
+ }
109
+ var Dt = /\s/;
110
+ function Ft(t) {
111
+ for (var a = t.length; a-- && Dt.test(t.charAt(a)); )
112
+ ;
113
+ return a;
114
+ }
115
+ var Rt = /^\s+/;
116
+ function _t(t) {
117
+ return t && t.slice(0, Ft(t) + 1).replace(Rt, "");
118
+ }
119
+ function Z(t) {
120
+ var a = typeof t;
121
+ return t != null && (a == "object" || a == "function");
122
+ }
123
+ var it = NaN, Vt = /^[-+]0x[0-9a-f]+$/i, qt = /^0b[01]+$/i, Gt = /^0o[0-7]+$/i, Xt = parseInt;
124
+ function st(t) {
125
+ if (typeof t == "number")
126
+ return t;
127
+ if (zt(t))
128
+ return it;
129
+ if (Z(t)) {
130
+ var a = typeof t.valueOf == "function" ? t.valueOf() : t;
131
+ t = Z(a) ? a + "" : a;
132
+ }
133
+ if (typeof t != "string")
134
+ return t === 0 ? t : +t;
135
+ t = _t(t);
136
+ var o = qt.test(t);
137
+ return o || Gt.test(t) ? Xt(t.slice(2), o ? 2 : 8) : Vt.test(t) ? it : +t;
138
+ }
139
+ var Q = function() {
140
+ return ft.Date.now();
141
+ }, Ut = "Expected a function", Yt = Math.max, Jt = Math.min;
142
+ function lt(t, a, o) {
143
+ var l, b, r, d, i, w, m = 0, h = !1, g = !1, x = !0;
144
+ if (typeof t != "function")
145
+ throw new TypeError(Ut);
146
+ a = st(a) || 0, Z(o) && (h = !!o.leading, g = "maxWait" in o, r = g ? Yt(st(o.maxWait) || 0, a) : r, x = "trailing" in o ? !!o.trailing : x);
147
+ function E(s) {
148
+ var v = l, u = b;
149
+ return l = b = void 0, m = s, d = t.apply(u, v), d;
150
+ }
151
+ function W(s) {
152
+ return m = s, i = setTimeout(T, a), h ? E(s) : d;
153
+ }
154
+ function O(s) {
155
+ var v = s - w, u = s - m, k = a - v;
156
+ return g ? Jt(k, r - u) : k;
157
+ }
158
+ function M(s) {
159
+ var v = s - w, u = s - m;
160
+ return w === void 0 || v >= a || v < 0 || g && u >= r;
161
+ }
162
+ function T() {
163
+ var s = Q();
164
+ if (M(s))
165
+ return L(s);
166
+ i = setTimeout(T, O(s));
167
+ }
168
+ function L(s) {
169
+ return i = void 0, x && l ? E(s) : (l = b = void 0, d);
170
+ }
171
+ function $() {
172
+ i !== void 0 && clearTimeout(i), m = 0, l = w = b = i = void 0;
173
+ }
174
+ function I() {
175
+ return i === void 0 ? d : L(Q());
176
+ }
177
+ function p() {
178
+ var s = Q(), v = M(s);
179
+ if (l = arguments, b = this, w = s, v) {
180
+ if (i === void 0)
181
+ return W(w);
182
+ if (g)
183
+ return clearTimeout(i), i = setTimeout(T, a), E(w);
184
+ }
185
+ return i === void 0 && (i = setTimeout(T, a)), d;
186
+ }
187
+ return p.cancel = $, p.flush = I, p;
188
+ }
189
+ function ct(t) {
190
+ const a = window.innerWidth, o = t.sizes;
191
+ return a >= 1536 && o["2xl"] ? o["2xl"] : a >= 1280 && o.xl ? o.xl : a >= 1024 && o.lg ? o.lg : a >= 768 && o.md ? o.md : a >= 640 && o.sm ? o.sm : o.base;
192
+ }
193
+ function Kt(t) {
194
+ return t.reduce((o, l) => Math.max(o, l.top + l.columnHeight), 0) + 500;
195
+ }
196
+ function Qt(t) {
197
+ return {
198
+ transform: `translate3d(${t.left}px, ${t.top}px, 0)`,
199
+ top: "0px",
200
+ left: "0px",
201
+ width: `${t.columnWidth}px`,
202
+ height: `${t.columnHeight}px`
203
+ };
204
+ }
205
+ function Zt(t, a = 0) {
206
+ return {
207
+ style: Qt(t),
208
+ "data-top": t.top,
209
+ "data-left": t.left,
210
+ "data-id": `${t.page}-${t.id}`,
211
+ "data-index": a
212
+ };
213
+ }
214
+ function tt(t, a) {
215
+ const o = new Array(a).fill(0);
216
+ for (let l = 0; l < t.length; l++) {
217
+ const b = t[l], r = l % a;
218
+ o[r] = Math.max(o[r], b.top + b.columnHeight);
219
+ }
220
+ return o;
221
+ }
222
+ function te(t) {
223
+ function a(r, d) {
224
+ const i = parseInt(r.dataset.left || "0", 10), w = parseInt(r.dataset.top || "0", 10), m = parseInt(r.dataset.index || "0", 10), h = Math.min(m * 20, 160), g = r.style.getPropertyValue("--masonry-opacity-delay");
225
+ r.style.setProperty("--masonry-opacity-delay", `${h}ms`), requestAnimationFrame(() => {
226
+ r.style.opacity = "1", r.style.transform = `translate3d(${i}px, ${w}px, 0) scale(1)`;
227
+ const x = () => {
228
+ g ? r.style.setProperty("--masonry-opacity-delay", g) : r.style.removeProperty("--masonry-opacity-delay"), r.removeEventListener("transitionend", x), d();
229
+ };
230
+ r.addEventListener("transitionend", x);
231
+ });
232
+ }
233
+ function o(r) {
234
+ const d = parseInt(r.dataset.left || "0", 10), i = parseInt(r.dataset.top || "0", 10);
235
+ r.style.opacity = "0", r.style.transform = `translate3d(${d}px, ${i + 10}px, 0) scale(0.985)`;
236
+ }
237
+ function l(r) {
238
+ const d = parseInt(r.dataset.left || "0", 10), i = parseInt(r.dataset.top || "0", 10);
239
+ r.style.transition = "none", r.style.opacity = "1", r.style.transform = `translate3d(${d}px, ${i}px, 0) scale(1)`, r.style.removeProperty("--masonry-opacity-delay"), r.offsetWidth, r.style.transition = "";
240
+ }
241
+ function b(r, d) {
242
+ const i = parseInt(r.dataset.left || "0", 10), w = parseInt(r.dataset.top || "0", 10), h = getComputedStyle(r).getPropertyValue("--masonry-leave-duration") || "", g = parseFloat(h), x = Number.isFinite(g) && g > 0 ? g : 200, E = r.style.transitionDuration, W = () => {
243
+ r.removeEventListener("transitionend", O), clearTimeout(M), r.style.transitionDuration = E || "";
244
+ }, O = (T) => {
245
+ (!T || T.target === r) && (W(), d());
246
+ }, M = setTimeout(() => {
247
+ W(), d();
248
+ }, x + 100);
249
+ requestAnimationFrame(() => {
250
+ r.style.transitionDuration = `${x}ms`, r.style.opacity = "0", r.style.transform = `translate3d(${i}px, ${w + 10}px, 0) scale(0.985)`, r.addEventListener("transitionend", O);
251
+ });
252
+ }
253
+ return {
254
+ onEnter: a,
255
+ onBeforeEnter: o,
256
+ onBeforeLeave: l,
257
+ onLeave: b
258
+ };
259
+ }
260
+ function ee({
261
+ container: t,
262
+ masonry: a,
263
+ columns: o,
264
+ containerHeight: l,
265
+ isLoading: b,
266
+ maxItems: r,
267
+ pageSize: d,
268
+ refreshLayout: i,
269
+ setItemsRaw: w,
270
+ loadNext: m,
271
+ leaveEstimateMs: h
272
+ }) {
273
+ let g = !1, x = 0;
274
+ async function E() {
275
+ if (!t.value) return;
276
+ const { scrollTop: M, clientHeight: T } = t.value, L = M + T, $ = M > x + 1;
277
+ x = M;
278
+ const I = tt(a.value, o.value), s = Math.max(...I) + 300 < L - 1, v = M + T >= l.value - 1;
279
+ if ((s || v) && $ && !b.value && !g)
280
+ try {
281
+ a.value.length > r && await W(I), await m(), await X();
282
+ } catch (u) {
283
+ console.error("Error in scroll handler:", u);
284
+ }
285
+ }
286
+ async function W(M) {
287
+ if (!a.value.length || a.value.length <= d) return;
288
+ const T = a.value.reduce((s, v) => {
289
+ const u = v.page;
290
+ return s[u] || (s[u] = []), s[u].push(v), s;
291
+ }, {}), L = Object.keys(T).sort((s, v) => parseInt(s) - parseInt(v));
292
+ if (L.length === 0) return;
293
+ let $ = 0;
294
+ const I = [];
295
+ for (const s of L)
296
+ if (I.push(s), $ += T[s].length, $ >= d) break;
297
+ const p = a.value.filter((s) => !I.includes(String(s.page)));
298
+ p.length !== a.value.length && (g = !0, w(p), await X(), await new Promise((s) => requestAnimationFrame(() => s())), i(p), await X(), await O(), g = !1);
299
+ }
300
+ async function O() {
301
+ if (!t.value) return;
302
+ const { scrollTop: M, clientHeight: T } = t.value, L = M + T * 0.4, $ = tt(a.value, o.value), I = $.indexOf(Math.max(...$)), p = a.value.filter((u, k) => k % o.value === I);
303
+ if (p.length === 0) return;
304
+ let s = p[0];
305
+ for (const u of p)
306
+ u.top <= L && u.top >= s.top && (s = u);
307
+ const v = Math.max(0, s.top - T * 0.4);
308
+ Math.abs(v - M) > 4 && t.value.scrollTo({ top: v, behavior: "auto" });
309
+ }
310
+ return {
311
+ handleScroll: E
312
+ };
313
+ }
314
+ const ne = ["src"], ae = ["onClick"], re = /* @__PURE__ */ gt({
315
+ __name: "Masonry",
316
+ props: {
317
+ getNextPage: {
318
+ type: Function,
319
+ default: () => {
320
+ }
321
+ },
322
+ loadAtPage: {
323
+ type: [Number, String],
324
+ default: null
325
+ },
326
+ items: {
327
+ type: Array,
328
+ default: () => []
329
+ },
330
+ layout: {
331
+ type: Object
332
+ },
333
+ paginationType: {
334
+ type: String,
335
+ default: "page",
336
+ // or 'cursor'
337
+ validator: (t) => ["page", "cursor"].includes(t)
338
+ },
339
+ skipInitialLoad: {
340
+ type: Boolean,
341
+ default: !1
342
+ },
343
+ maxItems: {
344
+ type: Number,
345
+ default: 100
346
+ },
347
+ pageSize: {
348
+ type: Number,
349
+ default: 40
350
+ },
351
+ // Backfill configuration
352
+ backfillEnabled: {
353
+ type: Boolean,
354
+ default: !0
355
+ },
356
+ backfillDelayMs: {
357
+ type: Number,
358
+ default: 2e3
359
+ },
360
+ backfillMaxCalls: {
361
+ type: Number,
362
+ default: 10
363
+ },
364
+ // Retry configuration
365
+ retryMaxAttempts: {
366
+ type: Number,
367
+ default: 3
368
+ },
369
+ retryInitialDelayMs: {
370
+ type: Number,
371
+ default: 2e3
372
+ },
373
+ retryBackoffStepMs: {
374
+ type: Number,
375
+ default: 2e3
376
+ },
377
+ transitionDurationMs: {
378
+ type: Number,
379
+ default: 450
380
+ },
381
+ // Shorter, snappier duration specifically for item removal (leave)
382
+ leaveDurationMs: {
383
+ type: Number,
384
+ default: 160
385
+ },
386
+ transitionEasing: {
387
+ type: String,
388
+ default: "cubic-bezier(.22,.61,.36,1)"
389
+ },
390
+ // Force motion even when user has reduced-motion enabled
391
+ forceMotion: {
392
+ type: Boolean,
393
+ default: !1
394
+ }
395
+ },
396
+ emits: [
397
+ "update:items",
398
+ "backfill:start",
399
+ "backfill:tick",
400
+ "backfill:stop",
401
+ "retry:start",
402
+ "retry:tick",
403
+ "retry:stop"
404
+ ],
405
+ setup(t, { expose: a, emit: o }) {
406
+ const l = t, b = {
407
+ sizes: { base: 1, sm: 2, md: 3, lg: 4, xl: 5, "2xl": 6 },
408
+ gutterX: 10,
409
+ gutterY: 10,
410
+ header: 0,
411
+ footer: 0,
412
+ paddingLeft: 0,
413
+ paddingRight: 0,
414
+ placement: "masonry"
415
+ }, r = et(() => {
416
+ var e;
417
+ return {
418
+ ...b,
419
+ ...l.layout,
420
+ sizes: {
421
+ ...b.sizes,
422
+ ...((e = l.layout) == null ? void 0 : e.sizes) || {}
423
+ }
424
+ };
425
+ }), d = o, i = et({
426
+ get: () => l.items,
427
+ set: (e) => d("update:items", e)
428
+ }), w = B(7), m = B(null), h = B([]);
429
+ B(null);
430
+ const g = B(!1), x = B(0), E = B({
431
+ distanceToTrigger: 0,
432
+ isNearTrigger: !1
433
+ }), W = () => {
434
+ if (!m.value) return;
435
+ const { scrollTop: e, clientHeight: n } = m.value, c = e + n, f = tt(i.value, w.value), P = Math.max(...f) + 300, S = Math.max(0, P - c), F = S <= 100;
436
+ E.value = {
437
+ distanceToTrigger: Math.round(S),
438
+ isNearTrigger: F
439
+ };
440
+ }, { onEnter: O, onBeforeEnter: M, onBeforeLeave: T, onLeave: L } = te(), { handleScroll: $ } = ee({
441
+ container: m,
442
+ masonry: i,
443
+ columns: w,
444
+ containerHeight: x,
445
+ isLoading: g,
446
+ maxItems: l.maxItems,
447
+ pageSize: l.pageSize,
448
+ refreshLayout: p,
449
+ setItemsRaw: (e) => {
450
+ i.value = e;
451
+ },
452
+ loadNext: H,
453
+ leaveEstimateMs: l.leaveDurationMs
454
+ });
455
+ a({
456
+ isLoading: g,
457
+ refreshLayout: p,
458
+ containerHeight: x,
459
+ remove: N,
460
+ removeMany: R,
461
+ loadNext: H,
462
+ loadPage: k,
463
+ reset: D,
464
+ init: U,
465
+ paginationHistory: h
466
+ });
467
+ function I(e) {
468
+ const n = Kt(e);
469
+ let c = 0;
470
+ if (m.value) {
471
+ const { scrollTop: f, clientHeight: y } = m.value;
472
+ c = f + y + 100;
473
+ }
474
+ x.value = Math.max(n, c);
475
+ }
476
+ function p(e) {
477
+ if (!m.value) return;
478
+ const n = St(e, m.value, w.value, r.value);
479
+ I(n), i.value = n;
480
+ }
481
+ function s(e, n) {
482
+ return new Promise((c) => {
483
+ const f = Math.max(0, e | 0), y = Date.now();
484
+ n(f, f);
485
+ const P = setInterval(() => {
486
+ const S = Date.now() - y, F = Math.max(0, f - S);
487
+ n(F, f), F <= 0 && (clearInterval(P), c());
488
+ }, 100);
489
+ });
490
+ }
491
+ async function v(e) {
492
+ try {
493
+ const n = await u(() => l.getNextPage(e));
494
+ return p([...i.value, ...n.items]), n;
495
+ } catch (n) {
496
+ throw console.error("Error in getContent:", n), n;
497
+ }
498
+ }
499
+ async function u(e) {
500
+ let n = 0;
501
+ const c = l.retryMaxAttempts;
502
+ let f = l.retryInitialDelayMs;
503
+ for (; ; )
504
+ try {
505
+ const y = await e();
506
+ return n > 0 && d("retry:stop", { attempt: n, success: !0 }), y;
507
+ } catch (y) {
508
+ if (n++, n > c)
509
+ throw d("retry:stop", { attempt: n - 1, success: !1 }), y;
510
+ d("retry:start", { attempt: n, max: c, totalMs: f }), await s(f, (P, S) => {
511
+ d("retry:tick", { attempt: n, remainingMs: P, totalMs: S });
512
+ }), f += l.retryBackoffStepMs;
513
+ }
514
+ }
515
+ async function k(e) {
516
+ if (!g.value) {
517
+ g.value = !0;
518
+ try {
519
+ const n = i.value.length, c = await v(e);
520
+ return h.value.push(c.nextPage), await z(n), c;
521
+ } catch (n) {
522
+ throw console.error("Error loading page:", n), n;
523
+ } finally {
524
+ g.value = !1;
525
+ }
526
+ }
527
+ }
528
+ async function H() {
529
+ if (!g.value) {
530
+ g.value = !0;
531
+ try {
532
+ const e = i.value.length, n = h.value[h.value.length - 1], c = await v(n);
533
+ return h.value.push(c.nextPage), await z(e), c;
534
+ } catch (e) {
535
+ throw console.error("Error loading next page:", e), e;
536
+ } finally {
537
+ g.value = !1;
538
+ }
539
+ }
540
+ }
541
+ async function N(e) {
542
+ var c;
543
+ const n = i.value.filter((f) => f.id !== e.id);
544
+ i.value = n, await X(), (c = m.value) == null || c.offsetHeight, requestAnimationFrame(() => {
545
+ p(n);
546
+ });
547
+ }
548
+ async function R(e) {
549
+ var f;
550
+ if (!e || e.length === 0) return;
551
+ const n = new Set(e.map((y) => y.id)), c = i.value.filter((y) => !n.has(y.id));
552
+ i.value = c, await X(), (f = m.value) == null || f.offsetHeight, requestAnimationFrame(() => {
553
+ p(c);
554
+ });
555
+ }
556
+ function _() {
557
+ w.value = ct(r.value), p(i.value);
558
+ }
559
+ let A = !1;
560
+ async function z(e) {
561
+ if (!l.backfillEnabled || A) return;
562
+ const n = (e || 0) + (l.pageSize || 0);
563
+ if (!(!l.pageSize || l.pageSize <= 0 || h.value[h.value.length - 1] == null) && !(i.value.length >= n)) {
564
+ A = !0;
565
+ try {
566
+ let f = 0;
567
+ for (d("backfill:start", { target: n, fetched: i.value.length, calls: f }); i.value.length < n && f < l.backfillMaxCalls && h.value[h.value.length - 1] != null; ) {
568
+ await s(l.backfillDelayMs, (P, S) => {
569
+ d("backfill:tick", {
570
+ fetched: i.value.length,
571
+ target: n,
572
+ calls: f,
573
+ remainingMs: P,
574
+ totalMs: S
575
+ });
576
+ });
577
+ const y = h.value[h.value.length - 1];
578
+ try {
579
+ g.value = !0;
580
+ const P = await v(y);
581
+ h.value.push(P.nextPage);
582
+ } finally {
583
+ g.value = !1;
584
+ }
585
+ f++;
586
+ }
587
+ d("backfill:stop", { fetched: i.value.length, calls: f });
588
+ } finally {
589
+ A = !1;
590
+ }
591
+ }
592
+ }
593
+ function D() {
594
+ m.value && m.value.scrollTo({
595
+ top: 0,
596
+ behavior: "smooth"
597
+ }), i.value = [], x.value = 0, h.value = [l.loadAtPage], E.value = {
598
+ distanceToTrigger: 0,
599
+ isNearTrigger: !1
600
+ };
601
+ }
602
+ const j = lt(() => {
603
+ $(), W();
604
+ }, 200), V = lt(_, 200);
605
+ function U(e, n, c) {
606
+ h.value = [n], h.value.push(c), p([...i.value, ...e]), W();
607
+ }
608
+ return pt(async () => {
609
+ var e;
610
+ try {
611
+ w.value = ct(r.value);
612
+ const n = l.loadAtPage;
613
+ h.value = [n], l.skipInitialLoad || await k(h.value[0]), W();
614
+ } catch (n) {
615
+ console.error("Error during component initialization:", n), g.value = !1;
616
+ }
617
+ (e = m.value) == null || e.addEventListener("scroll", j), window.addEventListener("resize", V);
618
+ }), mt(() => {
619
+ var e;
620
+ (e = m.value) == null || e.removeEventListener("scroll", j), window.removeEventListener("resize", V);
621
+ }), (e, n) => (J(), Y("div", {
622
+ class: nt(["overflow-auto w-full flex-1 masonry-container", { "force-motion": l.forceMotion }]),
623
+ ref_key: "container",
624
+ ref: m
625
+ }, [
626
+ C("div", {
627
+ class: "relative",
628
+ style: ht({ height: `${x.value}px`, "--masonry-duration": `${t.transitionDurationMs}ms`, "--masonry-leave-duration": `${t.leaveDurationMs}ms`, "--masonry-ease": t.transitionEasing })
629
+ }, [
630
+ yt(bt, {
631
+ name: "masonry",
632
+ css: !1,
633
+ onEnter: q(O),
634
+ onBeforeEnter: q(M),
635
+ onLeave: q(L),
636
+ onBeforeLeave: q(T)
637
+ }, {
638
+ default: xt(() => [
639
+ (J(!0), Y(wt, null, Tt(i.value, (c, f) => (J(), Y("div", at({
640
+ key: `${c.page}-${c.id}`,
641
+ class: "absolute masonry-item",
642
+ ref_for: !0
643
+ }, q(Zt)(c, f)), [
644
+ Mt(e.$slots, "item", at({ ref_for: !0 }, { item: c, remove: N }), () => [
645
+ C("img", {
646
+ src: c.src,
647
+ class: "w-full"
648
+ }, null, 8, ne),
649
+ C("button", {
650
+ class: "absolute bottom-0 right-0 bg-red-500 text-white p-2 rounded cursor-pointer",
651
+ onClick: (y) => N(c)
652
+ }, n[0] || (n[0] = [
653
+ C("i", { class: "fas fa-trash" }, null, -1)
654
+ ]), 8, ae)
655
+ ], !0)
656
+ ], 16))), 128))
657
+ ]),
658
+ _: 3
659
+ }, 8, ["onEnter", "onBeforeEnter", "onLeave", "onBeforeLeave"]),
660
+ x.value > 0 ? (J(), Y("div", {
661
+ key: 0,
662
+ class: nt(["fixed bottom-4 right-4 bg-gray-800 text-white text-xs rounded-full px-3 py-1.5 shadow-lg z-10 transition-opacity duration-300", { "opacity-50 hover:opacity-100": !E.value.isNearTrigger, "opacity-100": E.value.isNearTrigger }])
663
+ }, [
664
+ C("span", null, rt(i.value.length) + " items", 1),
665
+ n[1] || (n[1] = C("span", { class: "mx-2" }, "|", -1)),
666
+ C("span", null, rt(E.value.distanceToTrigger) + "px to load", 1)
667
+ ], 2)) : vt("", !0)
668
+ ], 4)
669
+ ], 2));
670
+ }
671
+ }), oe = (t, a) => {
672
+ const o = t.__vccOpts || t;
673
+ for (const [l, b] of a)
674
+ o[l] = b;
675
+ return o;
676
+ }, ut = /* @__PURE__ */ oe(re, [["__scopeId", "data-v-a75cd886"]]), se = {
677
+ install(t) {
678
+ t.component("WyxosMasonry", ut), t.component("WMasonry", ut);
679
+ }
680
+ };
681
+ export {
682
+ ut as Masonry,
683
+ se as default
684
+ };
package/lib/vibe.css ADDED
@@ -0,0 +1 @@
1
+ .masonry-container[data-v-a75cd886]{overflow-anchor:none}.masonry-item[data-v-a75cd886]{will-change:transform,opacity;contain:layout paint;transition:transform var(--masonry-duration, .45s) var(--masonry-ease, cubic-bezier(.22, .61, .36, 1)),opacity var(--masonry-leave-duration, .16s) ease-out var(--masonry-opacity-delay, 0ms);backface-visibility:hidden}.masonry-move[data-v-a75cd886]{transition:transform var(--masonry-duration, .45s) var(--masonry-ease, cubic-bezier(.22, .61, .36, 1))}@media (prefers-reduced-motion: reduce){.masonry-container:not(.force-motion) .masonry-item[data-v-a75cd886],.masonry-container:not(.force-motion) .masonry-move[data-v-a75cd886]{transition-duration:1ms!important}}
package/lib/vite.svg ADDED
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>