@wyxos/vibe 5.5.3 → 5.5.5
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/core/page.d.ts +1 -0
- package/lib/core/removalReconciliationController.d.ts +2 -1
- package/lib/index.cjs +1 -1
- package/lib/index.js +195 -184
- package/package.json +1 -1
package/lib/index.js
CHANGED
|
@@ -2394,34 +2394,37 @@ function Z(e, t) {
|
|
|
2394
2394
|
let n = new Set(e.map((e) => e.postId));
|
|
2395
2395
|
return [...e, ...t.filter((e) => n.has(e.postId) ? !1 : (n.add(e.postId), !0))];
|
|
2396
2396
|
}
|
|
2397
|
+
function Vt(e) {
|
|
2398
|
+
return Object.prototype.hasOwnProperty.call(e, "current") ? e.current ?? null : e.next;
|
|
2399
|
+
}
|
|
2397
2400
|
//#endregion
|
|
2398
2401
|
//#region src/core/requestDelay.ts
|
|
2399
|
-
var
|
|
2402
|
+
var Ht = 2e3, Ut = 1e4, Wt = 250, Gt = {
|
|
2400
2403
|
delayRemainingMs: null,
|
|
2401
2404
|
nextRequestAt: null
|
|
2402
2405
|
};
|
|
2403
|
-
function
|
|
2406
|
+
function Kt(e, t) {
|
|
2404
2407
|
return e === void 0 ? t : Math.floor(e);
|
|
2405
2408
|
}
|
|
2406
|
-
function
|
|
2409
|
+
function qt(e, t) {
|
|
2407
2410
|
for (let [n, r] of [["delayStepMs", e.delayStepMs], ["delayMaxMs", e.delayMaxMs]]) if (r !== void 0 && (!Number.isFinite(r) || r < 0)) throw TypeError(`Vibe ${t} ${n} must be a non-negative number.`);
|
|
2408
2411
|
}
|
|
2409
|
-
function
|
|
2410
|
-
let n =
|
|
2412
|
+
function Jt(e, t = {}) {
|
|
2413
|
+
let n = Kt(t.delayStepMs, Ht), r = Kt(t.delayMaxMs, Ut);
|
|
2411
2414
|
return Math.min(Math.max(0, e) * n, r);
|
|
2412
2415
|
}
|
|
2413
2416
|
function Q(e) {
|
|
2414
|
-
if (e == null || !Number.isFinite(e)) return { ...
|
|
2417
|
+
if (e == null || !Number.isFinite(e)) return { ...Gt };
|
|
2415
2418
|
let t = Math.max(0, Math.floor(e - Date.now()));
|
|
2416
2419
|
return t > 0 ? {
|
|
2417
2420
|
delayRemainingMs: t,
|
|
2418
2421
|
nextRequestAt: e
|
|
2419
|
-
} : { ...
|
|
2422
|
+
} : { ...Gt };
|
|
2420
2423
|
}
|
|
2421
|
-
async function
|
|
2424
|
+
async function Yt({ delayMs: e, onChange: t, signal: n }) {
|
|
2422
2425
|
if (n.aborted) throw new DOMException("Aborted", "AbortError");
|
|
2423
2426
|
if (e <= 0) {
|
|
2424
|
-
t({ ...
|
|
2427
|
+
t({ ...Gt });
|
|
2425
2428
|
return;
|
|
2426
2429
|
}
|
|
2427
2430
|
let r = Date.now() + e;
|
|
@@ -2429,9 +2432,9 @@ async function Jt({ delayMs: e, onChange: t, signal: n }) {
|
|
|
2429
2432
|
delayRemainingMs: e,
|
|
2430
2433
|
nextRequestAt: r
|
|
2431
2434
|
}), await new Promise((i, a) => {
|
|
2432
|
-
let o = !1, s = setInterval(f,
|
|
2435
|
+
let o = !1, s = setInterval(f, Wt), c = setTimeout(() => u(), e);
|
|
2433
2436
|
function l() {
|
|
2434
|
-
clearInterval(s), clearTimeout(c), n.removeEventListener("abort", d), t({ ...
|
|
2437
|
+
clearInterval(s), clearTimeout(c), n.removeEventListener("abort", d), t({ ...Gt });
|
|
2435
2438
|
}
|
|
2436
2439
|
function u(e) {
|
|
2437
2440
|
o || (o = !0, l(), e ? a(e) : i());
|
|
@@ -2446,13 +2449,13 @@ async function Jt({ delayMs: e, onChange: t, signal: n }) {
|
|
|
2446
2449
|
n.addEventListener("abort", d, { once: !0 });
|
|
2447
2450
|
});
|
|
2448
2451
|
}
|
|
2449
|
-
var
|
|
2452
|
+
var Xt = class {
|
|
2450
2453
|
interval = null;
|
|
2451
2454
|
constructor(e) {
|
|
2452
2455
|
this.onChange = e;
|
|
2453
2456
|
}
|
|
2454
2457
|
clear() {
|
|
2455
|
-
this.interval !== null && clearInterval(this.interval), this.interval = null, this.onChange({ ...
|
|
2458
|
+
this.interval !== null && clearInterval(this.interval), this.interval = null, this.onChange({ ...Gt });
|
|
2456
2459
|
}
|
|
2457
2460
|
sync(e) {
|
|
2458
2461
|
this.clear();
|
|
@@ -2460,22 +2463,22 @@ var Yt = class {
|
|
|
2460
2463
|
this.onChange(t), t.delayRemainingMs !== null && (this.interval = setInterval(() => {
|
|
2461
2464
|
let t = Q(e);
|
|
2462
2465
|
this.onChange(t), t.delayRemainingMs === null && this.clear();
|
|
2463
|
-
},
|
|
2466
|
+
}, Wt));
|
|
2464
2467
|
}
|
|
2465
2468
|
};
|
|
2466
|
-
function
|
|
2469
|
+
function Zt(e, t = !0) {
|
|
2467
2470
|
return e.maxAdditionalPages === "unlimited" ? Infinity : (e.maxAdditionalPages ?? 10) + (t ? 1 : 0);
|
|
2468
2471
|
}
|
|
2469
|
-
function
|
|
2472
|
+
function Qt(e) {
|
|
2470
2473
|
return `${typeof e}:${String(e)}`;
|
|
2471
2474
|
}
|
|
2472
|
-
function
|
|
2475
|
+
function $t(e, t) {
|
|
2473
2476
|
if (!Number.isInteger(e) || e <= 0) throw TypeError(`Vibe ${t} must be a positive integer.`);
|
|
2474
2477
|
}
|
|
2475
|
-
function
|
|
2478
|
+
function en(e) {
|
|
2476
2479
|
if (!e) return;
|
|
2477
|
-
if (
|
|
2478
|
-
|
|
2480
|
+
if ($t(e.pageSize, "autofill pageSize"), e.strategy === "frontend") {
|
|
2481
|
+
qt(e, "frontend autofill");
|
|
2479
2482
|
let t = e.maxAdditionalPages;
|
|
2480
2483
|
if (t !== void 0 && t !== "unlimited" && (!Number.isInteger(t) || t < 0)) throw TypeError("Vibe autofill maxAdditionalPages must be a non-negative integer or \"unlimited\".");
|
|
2481
2484
|
return;
|
|
@@ -2487,7 +2490,7 @@ function $t(e) {
|
|
|
2487
2490
|
if (t.pageSize !== e.pageSize) throw TypeError("Vibe backend autofill initialSession pageSize must match autofill pageSize.");
|
|
2488
2491
|
}
|
|
2489
2492
|
}
|
|
2490
|
-
function
|
|
2493
|
+
function tn(e, t, n = !0) {
|
|
2491
2494
|
if (!e) return {
|
|
2492
2495
|
cycleId: null,
|
|
2493
2496
|
delayRemainingMs: null,
|
|
@@ -2521,7 +2524,7 @@ function en(e, t, n = !0) {
|
|
|
2521
2524
|
strategy: e.strategy
|
|
2522
2525
|
};
|
|
2523
2526
|
}
|
|
2524
|
-
function
|
|
2527
|
+
function nn(e) {
|
|
2525
2528
|
return [
|
|
2526
2529
|
"cancelling",
|
|
2527
2530
|
"filling",
|
|
@@ -2529,9 +2532,9 @@ function tn(e) {
|
|
|
2529
2532
|
"waiting"
|
|
2530
2533
|
].includes(e.status);
|
|
2531
2534
|
}
|
|
2532
|
-
async function
|
|
2535
|
+
async function rn(e, t, n) {
|
|
2533
2536
|
let r = t.autofill;
|
|
2534
|
-
if (!
|
|
2537
|
+
if (!nn(r) || !r.cycleId) return;
|
|
2535
2538
|
let i = {
|
|
2536
2539
|
cycleId: r.cycleId,
|
|
2537
2540
|
feedKey: r.feedKey ?? "",
|
|
@@ -2544,16 +2547,16 @@ async function nn(e, t, n) {
|
|
|
2544
2547
|
throw r.error = e, r.status = "error", e;
|
|
2545
2548
|
}
|
|
2546
2549
|
}
|
|
2547
|
-
function
|
|
2550
|
+
function an(e, t, n) {
|
|
2548
2551
|
return e?.strategy === "backend" && t.feedKey === e.feedKey && t.sessionId === n.sessionId;
|
|
2549
2552
|
}
|
|
2550
|
-
async function
|
|
2551
|
-
let f = [], p = [...e], m = /* @__PURE__ */ new Set(), h = r ??
|
|
2553
|
+
async function on({ existingItems: e, initialCursor: t, loadPage: n, maximumRequests: r, onCollection: i, onDelayChange: a, onProgress: o, options: s, receivedOffset: c = 0, requestOffset: l = 0, shouldPause: u = () => !1, signal: d }) {
|
|
2554
|
+
let f = [], p = [...e], m = /* @__PURE__ */ new Set(), h = r ?? Zt(s), g = t, _ = t, v = t, y = 0, b = [], x;
|
|
2552
2555
|
for (; y < h;) {
|
|
2553
|
-
let e =
|
|
2556
|
+
let e = Qt(g);
|
|
2554
2557
|
if (m.has(e)) throw Error("Vibe autofill received a repeated cursor.");
|
|
2555
|
-
if (m.add(e), await
|
|
2556
|
-
delayMs:
|
|
2558
|
+
if (m.add(e), await Yt({
|
|
2559
|
+
delayMs: Jt(l + y, s),
|
|
2557
2560
|
onChange: a,
|
|
2558
2561
|
signal: d
|
|
2559
2562
|
}), y > 0 && u()) return {
|
|
@@ -2624,12 +2627,12 @@ async function an({ existingItems: e, initialCursor: t, loadPage: n, maximumRequ
|
|
|
2624
2627
|
}
|
|
2625
2628
|
//#endregion
|
|
2626
2629
|
//#region src/core/autofillController.ts
|
|
2627
|
-
var
|
|
2630
|
+
var sn = class {
|
|
2628
2631
|
collection = null;
|
|
2629
2632
|
cycle = 0;
|
|
2630
2633
|
delayCountdown;
|
|
2631
2634
|
constructor(e) {
|
|
2632
|
-
this.context = e, this.delayCountdown = new
|
|
2635
|
+
this.context = e, this.delayCountdown = new Xt((t) => Object.assign(e.state.autofill, t)), this.syncCountdown();
|
|
2633
2636
|
}
|
|
2634
2637
|
beginCycle() {
|
|
2635
2638
|
let { options: e, state: t } = this.context;
|
|
@@ -2637,14 +2640,14 @@ var on = class {
|
|
|
2637
2640
|
this.clear();
|
|
2638
2641
|
let n = `vibe-autofill-${Date.now().toString(36)}-${++this.cycle}`;
|
|
2639
2642
|
return t.autofill = {
|
|
2640
|
-
...
|
|
2643
|
+
...tn(e, void 0, !1),
|
|
2641
2644
|
cycleId: n,
|
|
2642
2645
|
status: "filling"
|
|
2643
2646
|
}, n;
|
|
2644
2647
|
}
|
|
2645
2648
|
async cancel() {
|
|
2646
2649
|
let { cancelRequest: e, options: t, state: n } = this.context;
|
|
2647
|
-
await
|
|
2650
|
+
await rn(t, n, e), this.commitCollection();
|
|
2648
2651
|
}
|
|
2649
2652
|
captureCollection(e, t) {
|
|
2650
2653
|
t && (this.collection = e);
|
|
@@ -2672,30 +2675,30 @@ var on = class {
|
|
|
2672
2675
|
requests: r.requests
|
|
2673
2676
|
}), !0) : !1;
|
|
2674
2677
|
}
|
|
2675
|
-
},
|
|
2676
|
-
function
|
|
2678
|
+
}, cn = 100;
|
|
2679
|
+
function ln(e, t) {
|
|
2677
2680
|
if (!Number.isFinite(t) || t <= 0) throw TypeError(`Vibe ${e} must be a positive number.`);
|
|
2678
2681
|
}
|
|
2679
|
-
function
|
|
2682
|
+
function un(e, t, n) {
|
|
2680
2683
|
return Math.min(n, Math.max(t, e));
|
|
2681
2684
|
}
|
|
2682
|
-
function
|
|
2685
|
+
function dn(e) {
|
|
2683
2686
|
if (!e) return;
|
|
2684
2687
|
let t = e.minSpeedPxPerSecond ?? 20, n = e.maxSpeedPxPerSecond ?? 240;
|
|
2685
|
-
if (
|
|
2686
|
-
e.speedPxPerSecond !== void 0 &&
|
|
2688
|
+
if (ln("autoScroll.minSpeedPxPerSecond", t), ln("autoScroll.maxSpeedPxPerSecond", n), t > n) throw TypeError("Vibe autoScroll.minSpeedPxPerSecond cannot exceed maxSpeedPxPerSecond.");
|
|
2689
|
+
e.speedPxPerSecond !== void 0 && ln("autoScroll.speedPxPerSecond", e.speedPxPerSecond);
|
|
2687
2690
|
}
|
|
2688
|
-
function
|
|
2691
|
+
function fn(e) {
|
|
2689
2692
|
let t = e?.minSpeedPxPerSecond ?? 20, n = e?.maxSpeedPxPerSecond ?? 240;
|
|
2690
2693
|
return {
|
|
2691
2694
|
enabled: e?.enabled ?? !1,
|
|
2692
2695
|
maxSpeedPxPerSecond: n,
|
|
2693
2696
|
minSpeedPxPerSecond: t,
|
|
2694
2697
|
paused: !1,
|
|
2695
|
-
speedPxPerSecond:
|
|
2698
|
+
speedPxPerSecond: un(e?.speedPxPerSecond ?? 80, t, n)
|
|
2696
2699
|
};
|
|
2697
2700
|
}
|
|
2698
|
-
var
|
|
2701
|
+
var pn = class {
|
|
2699
2702
|
frame = null;
|
|
2700
2703
|
lastTimestamp = null;
|
|
2701
2704
|
mounted = !1;
|
|
@@ -2715,9 +2718,9 @@ var fn = class {
|
|
|
2715
2718
|
this.options.state.enabled && (this.options.state.paused = e, this.lastTimestamp = null, e ? this.cancelFrame() : this.schedule());
|
|
2716
2719
|
}
|
|
2717
2720
|
setSpeed(e) {
|
|
2718
|
-
|
|
2721
|
+
ln("auto-scroll speed", e);
|
|
2719
2722
|
let t = this.options.state;
|
|
2720
|
-
t.speedPxPerSecond =
|
|
2723
|
+
t.speedPxPerSecond = un(e, t.minSpeedPxPerSecond, t.maxSpeedPxPerSecond);
|
|
2721
2724
|
}
|
|
2722
2725
|
tick = (e) => {
|
|
2723
2726
|
this.frame = null;
|
|
@@ -2729,7 +2732,7 @@ var fn = class {
|
|
|
2729
2732
|
return;
|
|
2730
2733
|
}
|
|
2731
2734
|
if (this.lastTimestamp !== null) {
|
|
2732
|
-
let r = Math.min(
|
|
2735
|
+
let r = Math.min(cn, Math.max(0, e - this.lastTimestamp)), i = Math.max(0, n.scrollHeight - n.clientHeight);
|
|
2733
2736
|
n.scrollTop = Math.min(i, n.scrollTop + t.speedPxPerSecond * r / 1e3);
|
|
2734
2737
|
}
|
|
2735
2738
|
this.lastTimestamp = e, this.schedule();
|
|
@@ -2743,7 +2746,7 @@ var fn = class {
|
|
|
2743
2746
|
};
|
|
2744
2747
|
//#endregion
|
|
2745
2748
|
//#region src/core/backendAutofill.ts
|
|
2746
|
-
async function
|
|
2749
|
+
async function mn(e, t, n, r) {
|
|
2747
2750
|
let i = await e.onUnderfilled(n);
|
|
2748
2751
|
if (!r()) return;
|
|
2749
2752
|
if (!i.sessionId.trim()) throw TypeError("Vibe backend autofill requires a sessionId.");
|
|
@@ -2757,19 +2760,19 @@ async function pn(e, t, n, r) {
|
|
|
2757
2760
|
status: "waiting"
|
|
2758
2761
|
});
|
|
2759
2762
|
}
|
|
2760
|
-
function
|
|
2763
|
+
function hn(e, t) {
|
|
2761
2764
|
["complete", "exhausted"].includes(t.status) && t.items && (e.items = Z(e.items, t.items)), t.next !== void 0 && (e.next = t.next), t.total !== void 0 && (e.total = t.total);
|
|
2762
2765
|
}
|
|
2763
|
-
function
|
|
2766
|
+
function gn(e, t, n) {
|
|
2764
2767
|
let r = t.autofill;
|
|
2765
|
-
return !
|
|
2768
|
+
return !an(e, n, r) || n.sequence <= r.sequence || ["cancelled", "cancelling"].includes(r.status) || ["complete", "exhausted"].includes(n.status) && n.next === void 0 ? !1 : (hn(t, n), Object.assign(r, Q(n.status === "waiting" ? n.nextRequestAt : null)), r.error = n.error ?? null, r.missing = Math.max(0, (r.pageSize ?? 0) - n.received), r.received = n.received, n.requests !== void 0 && (r.requests = n.requests), r.sequence = n.sequence, r.status = n.status, !0);
|
|
2766
2769
|
}
|
|
2767
|
-
function
|
|
2768
|
-
return e?.strategy !== "backend" || n.feedKey !== e.feedKey || n.pageSize !== e.pageSize ? !1 : (t.autofill =
|
|
2770
|
+
function _n(e, t, n) {
|
|
2771
|
+
return e?.strategy !== "backend" || n.feedKey !== e.feedKey || n.pageSize !== e.pageSize ? !1 : (t.autofill = tn(e, n), hn(t, n), !0);
|
|
2769
2772
|
}
|
|
2770
2773
|
//#endregion
|
|
2771
2774
|
//#region src/core/initialAutofill.ts
|
|
2772
|
-
async function
|
|
2775
|
+
async function vn({ cycleId: e, isCurrent: t, onCollection: n, onLastCursor: r, onPages: i, options: a, signal: o, state: s }) {
|
|
2773
2776
|
let c = a.autofill;
|
|
2774
2777
|
if (!c) return;
|
|
2775
2778
|
let l = s.items.length;
|
|
@@ -2782,7 +2785,7 @@ async function _n({ cycleId: e, isCurrent: t, onCollection: n, onLastCursor: r,
|
|
|
2782
2785
|
return;
|
|
2783
2786
|
}
|
|
2784
2787
|
if (c.strategy === "backend") {
|
|
2785
|
-
await
|
|
2788
|
+
await mn(c, s, {
|
|
2786
2789
|
cycleId: e,
|
|
2787
2790
|
feedKey: c.feedKey,
|
|
2788
2791
|
items: [...s.items],
|
|
@@ -2799,11 +2802,11 @@ async function _n({ cycleId: e, isCurrent: t, onCollection: n, onLastCursor: r,
|
|
|
2799
2802
|
s.autofill.status = "exhausted";
|
|
2800
2803
|
return;
|
|
2801
2804
|
}
|
|
2802
|
-
let u = await
|
|
2805
|
+
let u = await on({
|
|
2803
2806
|
existingItems: s.items,
|
|
2804
2807
|
initialCursor: s.next,
|
|
2805
2808
|
loadPage: a.loadPage,
|
|
2806
|
-
maximumRequests:
|
|
2809
|
+
maximumRequests: Zt(c, !1),
|
|
2807
2810
|
onCollection: n,
|
|
2808
2811
|
onDelayChange: (e) => {
|
|
2809
2812
|
t() && Object.assign(s.autofill, e);
|
|
@@ -2826,13 +2829,13 @@ async function _n({ cycleId: e, isCurrent: t, onCollection: n, onLastCursor: r,
|
|
|
2826
2829
|
}
|
|
2827
2830
|
//#endregion
|
|
2828
2831
|
//#region src/core/fill.ts
|
|
2829
|
-
function
|
|
2832
|
+
function yn(e) {
|
|
2830
2833
|
return "pages" in e ? { pages: e.pages } : { until: "end" };
|
|
2831
2834
|
}
|
|
2832
|
-
function
|
|
2835
|
+
function bn(e) {
|
|
2833
2836
|
return `${typeof e}:${String(e)}`;
|
|
2834
2837
|
}
|
|
2835
|
-
function
|
|
2838
|
+
function xn(e) {
|
|
2836
2839
|
if (!e || typeof e != "object") throw TypeError("Vibe fill target must be an object.");
|
|
2837
2840
|
if ("pages" in e) {
|
|
2838
2841
|
if (!Number.isInteger(e.pages) || e.pages <= 0) throw TypeError("Vibe fill pages must be a positive integer.");
|
|
@@ -2841,20 +2844,20 @@ function bn(e) {
|
|
|
2841
2844
|
if ("until" in e && e.until === "end") return { until: "end" };
|
|
2842
2845
|
throw TypeError("Vibe fill target must be { pages } or { until: 'end' }.");
|
|
2843
2846
|
}
|
|
2844
|
-
function
|
|
2847
|
+
function Sn(e) {
|
|
2845
2848
|
if (!e) return;
|
|
2846
2849
|
if (e.strategy === "frontend") {
|
|
2847
|
-
|
|
2850
|
+
qt(e, "frontend fill");
|
|
2848
2851
|
return;
|
|
2849
2852
|
}
|
|
2850
2853
|
if (!e.feedKey.trim()) throw TypeError("Vibe backend fill requires a feedKey.");
|
|
2851
2854
|
let t = e.initialSession;
|
|
2852
2855
|
if (t) {
|
|
2853
2856
|
if (t.feedKey !== e.feedKey) throw TypeError("Vibe backend fill initialSession feedKey must match fill feedKey.");
|
|
2854
|
-
|
|
2857
|
+
xn(t.target);
|
|
2855
2858
|
}
|
|
2856
2859
|
}
|
|
2857
|
-
function
|
|
2860
|
+
function Cn(e, t, n = !0) {
|
|
2858
2861
|
let r = e?.strategy === "backend" && n ? e.initialSession : void 0, i = t ?? r, a = Q(i?.nextRequestAt);
|
|
2859
2862
|
return {
|
|
2860
2863
|
completedPages: i?.completedPages ?? 0,
|
|
@@ -2868,10 +2871,10 @@ function Sn(e, t, n = !0) {
|
|
|
2868
2871
|
sessionId: i?.sessionId ?? null,
|
|
2869
2872
|
status: i?.status ?? "idle",
|
|
2870
2873
|
strategy: e?.strategy ?? null,
|
|
2871
|
-
target: i ?
|
|
2874
|
+
target: i ? yn(i.target) : null
|
|
2872
2875
|
};
|
|
2873
2876
|
}
|
|
2874
|
-
function
|
|
2877
|
+
function wn(e) {
|
|
2875
2878
|
return [
|
|
2876
2879
|
"cancelling",
|
|
2877
2880
|
"filling",
|
|
@@ -2879,13 +2882,13 @@ function Cn(e) {
|
|
|
2879
2882
|
"waiting"
|
|
2880
2883
|
].includes(e.status);
|
|
2881
2884
|
}
|
|
2882
|
-
async function
|
|
2885
|
+
async function Tn({ existingItems: e, initialCursor: t, loadPage: n, onCollection: r = () => void 0, onDelayChange: i, onProgress: a, options: o, shouldPause: s = () => !1, signal: c, target: l }) {
|
|
2883
2886
|
let u = [], d = [], f = [...e], p = /* @__PURE__ */ new Set(), m = 0, h = t, g = t, _ = t, v = 0, y;
|
|
2884
2887
|
for (; _ !== null;) {
|
|
2885
|
-
let e =
|
|
2888
|
+
let e = bn(h);
|
|
2886
2889
|
if (p.has(e)) throw Error("Vibe fill received a repeated cursor.");
|
|
2887
|
-
if (p.add(e), await
|
|
2888
|
-
delayMs:
|
|
2890
|
+
if (p.add(e), await Yt({
|
|
2891
|
+
delayMs: Jt(m, o),
|
|
2889
2892
|
onChange: i,
|
|
2890
2893
|
signal: c
|
|
2891
2894
|
}), m > 0 && s()) return {
|
|
@@ -2966,7 +2969,7 @@ async function wn({ existingItems: e, initialCursor: t, loadPage: n, onCollectio
|
|
|
2966
2969
|
}
|
|
2967
2970
|
//#endregion
|
|
2968
2971
|
//#region src/core/backendFill.ts
|
|
2969
|
-
async function
|
|
2972
|
+
async function En(e, t, n, r) {
|
|
2970
2973
|
let i = await e.onStart(n);
|
|
2971
2974
|
if (r()) {
|
|
2972
2975
|
if (!i.sessionId.trim()) throw TypeError("Vibe backend fill requires a sessionId.");
|
|
@@ -2980,22 +2983,22 @@ async function Tn(e, t, n, r) {
|
|
|
2980
2983
|
});
|
|
2981
2984
|
}
|
|
2982
2985
|
}
|
|
2983
|
-
function
|
|
2986
|
+
function Dn(e, t, n) {
|
|
2984
2987
|
return e?.strategy === "backend" && n.feedKey === e.feedKey && n.sessionId === t.fill.sessionId;
|
|
2985
2988
|
}
|
|
2986
|
-
function
|
|
2989
|
+
function On(e) {
|
|
2987
2990
|
return Number.isInteger(e.completedPages) && e.completedPages >= 0 && Number.isInteger(e.received) && e.received >= 0 && Number.isInteger(e.sequence) && e.sequence >= 0;
|
|
2988
2991
|
}
|
|
2989
|
-
function
|
|
2992
|
+
function kn(e, t) {
|
|
2990
2993
|
if (!["complete", "exhausted"].includes(t.status)) return !0;
|
|
2991
2994
|
let n = e.fill.target;
|
|
2992
2995
|
return !n || !Array.isArray(t.items) || t.next === void 0 || t.lastCursor === void 0 ? !1 : t.status === "exhausted" ? "pages" in n && t.completedPages < n.pages && t.next === null : "pages" in n ? t.completedPages === n.pages : t.next === null;
|
|
2993
2996
|
}
|
|
2994
|
-
function
|
|
2997
|
+
function An(e, t, n) {
|
|
2995
2998
|
t.total !== void 0 && (e.total = t.total), ["complete", "exhausted"].includes(t.status) && (e.items = Z(e.items, t.items ?? []), e.next = t.next ?? null, n(t.lastCursor ?? null));
|
|
2996
2999
|
}
|
|
2997
|
-
function
|
|
2998
|
-
return !
|
|
3000
|
+
function jn(e, t, n, r) {
|
|
3001
|
+
return !Dn(e, t, n) || !On(n) || n.sequence <= t.fill.sequence || ["cancelled", "cancelling"].includes(t.fill.status) || !kn(t, n) ? !1 : (An(t, n, r), Object.assign(t.fill, {
|
|
2999
3002
|
...Q(n.status === "waiting" ? n.nextRequestAt : null),
|
|
3000
3003
|
completedPages: n.completedPages,
|
|
3001
3004
|
error: n.error ?? null,
|
|
@@ -3004,45 +3007,45 @@ function An(e, t, n, r) {
|
|
|
3004
3007
|
status: n.status
|
|
3005
3008
|
}), !0);
|
|
3006
3009
|
}
|
|
3007
|
-
function
|
|
3010
|
+
function Mn(e, t, n, r) {
|
|
3008
3011
|
if (e?.strategy !== "backend" || n.feedKey !== e.feedKey) return !1;
|
|
3009
3012
|
let i = t.fill;
|
|
3010
|
-
return t.fill =
|
|
3013
|
+
return t.fill = Cn(e, n), !On(n) || !kn(t, n) ? (t.fill = i, !1) : (An(t, n, r), !0);
|
|
3011
3014
|
}
|
|
3012
3015
|
//#endregion
|
|
3013
3016
|
//#region src/core/fillController.ts
|
|
3014
|
-
var
|
|
3017
|
+
var Nn = class {
|
|
3015
3018
|
abortController = null;
|
|
3016
3019
|
cycle = 0;
|
|
3017
3020
|
delayCountdown;
|
|
3018
3021
|
requestVersion = 0;
|
|
3019
3022
|
collection = null;
|
|
3020
3023
|
constructor(e) {
|
|
3021
|
-
this.options = e, this.delayCountdown = new
|
|
3024
|
+
this.options = e, this.delayCountdown = new Xt((e) => {
|
|
3022
3025
|
Object.assign(this.options.state.fill, e);
|
|
3023
3026
|
}), this.syncBackendCountdown();
|
|
3024
3027
|
}
|
|
3025
3028
|
isActive() {
|
|
3026
|
-
return
|
|
3029
|
+
return wn(this.options.state.fill);
|
|
3027
3030
|
}
|
|
3028
3031
|
applyUpdate(e) {
|
|
3029
|
-
let t =
|
|
3032
|
+
let t = jn(this.options.fill, this.options.state, e, this.options.onLastCursor);
|
|
3030
3033
|
return t && this.syncBackendCountdown(), t;
|
|
3031
3034
|
}
|
|
3032
3035
|
restoreSession(e) {
|
|
3033
|
-
let t =
|
|
3036
|
+
let t = Mn(this.options.fill, this.options.state, e, this.options.onLastCursor);
|
|
3034
3037
|
return t && this.syncBackendCountdown(), t;
|
|
3035
3038
|
}
|
|
3036
3039
|
async start(e, t = {}) {
|
|
3037
3040
|
let n = this.options.fill;
|
|
3038
3041
|
if (!n) throw Error("Vibe fill is not configured.");
|
|
3039
3042
|
if (this.isActive()) throw Error("Vibe fill is already active.");
|
|
3040
|
-
let r =
|
|
3043
|
+
let r = xn(e), i = xn(t.target ?? r), a = t.progressOffset ?? {
|
|
3041
3044
|
completedPages: 0,
|
|
3042
3045
|
received: 0
|
|
3043
3046
|
}, o = t.cycleId ?? `vibe-fill-${Date.now().toString(36)}-${++this.cycle}`;
|
|
3044
3047
|
if (this.options.state.fill = {
|
|
3045
|
-
...
|
|
3048
|
+
...Cn(n, void 0, !1),
|
|
3046
3049
|
completedPages: a.completedPages,
|
|
3047
3050
|
cycleId: o,
|
|
3048
3051
|
received: a.received,
|
|
@@ -3055,7 +3058,7 @@ var Mn = class {
|
|
|
3055
3058
|
let s = ++this.requestVersion, c = new AbortController();
|
|
3056
3059
|
this.abortController = c;
|
|
3057
3060
|
try {
|
|
3058
|
-
n.strategy === "frontend" ? await this.startFrontend(n, r, c, s, t.prepareFrontend !== !1, a) : (await
|
|
3061
|
+
n.strategy === "frontend" ? await this.startFrontend(n, r, c, s, t.prepareFrontend !== !1, a) : (await En(n, this.options.state, {
|
|
3059
3062
|
cycleId: o,
|
|
3060
3063
|
feedKey: n.feedKey,
|
|
3061
3064
|
items: [...this.options.state.items],
|
|
@@ -3073,7 +3076,7 @@ var Mn = class {
|
|
|
3073
3076
|
}
|
|
3074
3077
|
async cancel() {
|
|
3075
3078
|
let { fill: e, state: t } = this.options;
|
|
3076
|
-
if (!
|
|
3079
|
+
if (!wn(t.fill) || !t.fill.cycleId) return;
|
|
3077
3080
|
let n = {
|
|
3078
3081
|
cycleId: t.fill.cycleId,
|
|
3079
3082
|
feedKey: t.fill.feedKey ?? "",
|
|
@@ -3103,7 +3106,7 @@ var Mn = class {
|
|
|
3103
3106
|
});
|
|
3104
3107
|
}
|
|
3105
3108
|
reset() {
|
|
3106
|
-
this.abortLocalRequest(), this.delayCountdown.clear(), this.options.state.fill =
|
|
3109
|
+
this.abortLocalRequest(), this.delayCountdown.clear(), this.options.state.fill = Cn(this.options.fill, void 0, !1), this.collection = null;
|
|
3107
3110
|
}
|
|
3108
3111
|
destroy() {
|
|
3109
3112
|
this.abortLocalRequest(), this.delayCountdown.clear();
|
|
@@ -3138,7 +3141,7 @@ var Mn = class {
|
|
|
3138
3141
|
s.fill.status = "pages" in t ? "exhausted" : "complete";
|
|
3139
3142
|
return;
|
|
3140
3143
|
}
|
|
3141
|
-
let c = await
|
|
3144
|
+
let c = await Tn({
|
|
3142
3145
|
existingItems: s.items,
|
|
3143
3146
|
initialCursor: s.next,
|
|
3144
3147
|
loadPage: o,
|
|
@@ -3186,7 +3189,7 @@ var Mn = class {
|
|
|
3186
3189
|
};
|
|
3187
3190
|
//#endregion
|
|
3188
3191
|
//#region src/core/fillReconciliation.ts
|
|
3189
|
-
async function
|
|
3192
|
+
async function Pn({ controller: e, isCurrent: t, loadPage: n, onDelayChange: r, setLastCursor: i, signal: a, state: o }) {
|
|
3190
3193
|
if (!e.needsReconciliation(o.items)) return "skipped";
|
|
3191
3194
|
let s = await e.reconcile({
|
|
3192
3195
|
existingItems: o.items,
|
|
@@ -3199,7 +3202,7 @@ async function Nn({ controller: e, isCurrent: t, loadPage: n, onDelayChange: r,
|
|
|
3199
3202
|
}
|
|
3200
3203
|
//#endregion
|
|
3201
3204
|
//#region src/core/feedFooter.ts
|
|
3202
|
-
function
|
|
3205
|
+
function Fn(e) {
|
|
3203
3206
|
return {
|
|
3204
3207
|
cancelAutofill: () => e.cancelAutofill(),
|
|
3205
3208
|
loadMore: () => e.loadNext(),
|
|
@@ -3210,46 +3213,46 @@ function Pn(e) {
|
|
|
3210
3213
|
retryEnd: () => e.retryEnd()
|
|
3211
3214
|
};
|
|
3212
3215
|
}
|
|
3213
|
-
function Fn(e) {
|
|
3214
|
-
if (!Number.isFinite(e) || e <= 0) throw TypeError("Vibe reelAutoAdvance.intervalMs must be a positive number.");
|
|
3215
|
-
}
|
|
3216
3216
|
function In(e) {
|
|
3217
|
-
e
|
|
3217
|
+
if (!Number.isFinite(e) || e <= 0) throw TypeError("Vibe reelAutoAdvance.intervalMs must be a positive number.");
|
|
3218
3218
|
}
|
|
3219
3219
|
function Ln(e) {
|
|
3220
|
+
e?.intervalMs !== void 0 && In(e.intervalMs);
|
|
3221
|
+
}
|
|
3222
|
+
function Rn(e) {
|
|
3220
3223
|
return {
|
|
3221
3224
|
enabled: e?.enabled ?? !1,
|
|
3222
3225
|
includePostItems: e?.includePostItems ?? !1,
|
|
3223
3226
|
intervalMs: e?.intervalMs ?? 5e3
|
|
3224
3227
|
};
|
|
3225
3228
|
}
|
|
3226
|
-
function
|
|
3229
|
+
function zn(e, t) {
|
|
3227
3230
|
if (typeof t == "boolean") {
|
|
3228
3231
|
e.enabled = t;
|
|
3229
3232
|
return;
|
|
3230
3233
|
}
|
|
3231
|
-
|
|
3234
|
+
Ln(t), t.enabled !== void 0 && (e.enabled = t.enabled), t.includePostItems !== void 0 && (e.includePostItems = t.includePostItems), t.intervalMs !== void 0 && (e.intervalMs = t.intervalMs);
|
|
3232
3235
|
}
|
|
3233
3236
|
//#endregion
|
|
3234
3237
|
//#region src/core/reelInfoSheet.ts
|
|
3235
|
-
function
|
|
3238
|
+
function Bn(e) {
|
|
3236
3239
|
return { enabled: e?.enabled ?? !1 };
|
|
3237
3240
|
}
|
|
3238
|
-
function
|
|
3241
|
+
function Vn(e, t, n) {
|
|
3239
3242
|
if (n && !t) throw Error("Vibe cannot enable reelInfoSheet without a configured component.");
|
|
3240
3243
|
e.enabled = n;
|
|
3241
3244
|
}
|
|
3242
3245
|
//#endregion
|
|
3243
3246
|
//#region src/core/initialRuntimeState.ts
|
|
3244
|
-
function
|
|
3247
|
+
function Hn(e, t) {
|
|
3245
3248
|
let n = e.initialPage;
|
|
3246
3249
|
return {
|
|
3247
3250
|
activeReelPostId: null,
|
|
3248
|
-
autoScroll:
|
|
3249
|
-
autofill:
|
|
3251
|
+
autoScroll: fn(e.autoScroll),
|
|
3252
|
+
autofill: tn(e.autofill),
|
|
3250
3253
|
current: n?.current ?? null,
|
|
3251
3254
|
error: null,
|
|
3252
|
-
fill:
|
|
3255
|
+
fill: Cn(e.fill),
|
|
3253
3256
|
infiniteScroll: e.infiniteScroll ?? !0,
|
|
3254
3257
|
isLoading: !n,
|
|
3255
3258
|
isLoadingMore: !1,
|
|
@@ -3260,14 +3263,14 @@ function Vn(e, t) {
|
|
|
3260
3263
|
next: n?.next ?? null,
|
|
3261
3264
|
nextPageError: null,
|
|
3262
3265
|
phoneMode: !1,
|
|
3263
|
-
reelAutoAdvance:
|
|
3266
|
+
reelAutoAdvance: Rn(e.reelAutoAdvance),
|
|
3264
3267
|
reelForward: {
|
|
3265
3268
|
error: null,
|
|
3266
3269
|
status: "idle"
|
|
3267
3270
|
},
|
|
3268
3271
|
reelForwardIndex: null,
|
|
3269
3272
|
reelForwardItem: null,
|
|
3270
|
-
reelInfoSheet:
|
|
3273
|
+
reelInfoSheet: Bn(e.reelInfoSheet),
|
|
3271
3274
|
reelInfoSheetOverlay: !1,
|
|
3272
3275
|
reelMediaSource: "original",
|
|
3273
3276
|
reelOrigin: null,
|
|
@@ -3276,20 +3279,20 @@ function Vn(e, t) {
|
|
|
3276
3279
|
}
|
|
3277
3280
|
//#endregion
|
|
3278
3281
|
//#region src/core/options.ts
|
|
3279
|
-
function
|
|
3282
|
+
function Un(e, t) {
|
|
3280
3283
|
if (t) {
|
|
3281
3284
|
if (!Number.isFinite(t.height) || t.height <= 0) throw TypeError(`Vibe ${e} height must be a positive number.`);
|
|
3282
3285
|
if (t.background !== void 0 && t.background !== "default" && t.background !== "transparent") throw TypeError(`Vibe ${e} background must be "default" or "transparent".`);
|
|
3283
3286
|
}
|
|
3284
3287
|
}
|
|
3285
|
-
function
|
|
3288
|
+
function Wn(e, t) {
|
|
3286
3289
|
if (t) {
|
|
3287
3290
|
if (t.background !== void 0 && t.background !== "default" && t.background !== "transparent") throw TypeError(`Vibe mediaCard ${e} background must be "default" or "transparent".`);
|
|
3288
3291
|
for (let [n, r] of [["paddingX", t.paddingX], ["paddingY", t.paddingY]]) if (r !== void 0 && (!Number.isFinite(r) || r < 0)) throw TypeError(`Vibe mediaCard ${e} ${n} must be a non-negative number.`);
|
|
3289
3292
|
}
|
|
3290
3293
|
}
|
|
3291
|
-
function
|
|
3292
|
-
if (
|
|
3294
|
+
function Gn(e) {
|
|
3295
|
+
if (dn(e.autoScroll), Un("cardHeader", e.cardHeader), Un("cardFooter", e.cardFooter), Wn("header", e.mediaCard?.header), Wn("footer", e.mediaCard?.footer), en(e.autofill), Sn(e.fill), J(e.masonry), Ln(e.reelAutoAdvance), e.removalReconciliation) {
|
|
3293
3296
|
if (!Number.isInteger(e.removalReconciliation.pageSize) || e.removalReconciliation.pageSize <= 0) throw TypeError("Vibe removalReconciliation pageSize must be a positive integer.");
|
|
3294
3297
|
let t = e.removalReconciliation.maxReplayPages ?? 5;
|
|
3295
3298
|
if (!Number.isInteger(t) || t <= 0) throw TypeError("Vibe removalReconciliation maxReplayPages must be a positive integer.");
|
|
@@ -3304,7 +3307,7 @@ function Wn(e) {
|
|
|
3304
3307
|
if (e.fill?.strategy === "frontend" && !e.loadPage) throw TypeError("Vibe frontend fill requires loadPage.");
|
|
3305
3308
|
if (e.fill?.strategy === "backend" && e.fill.initialSession && !e.initialPage) throw TypeError("Vibe backend fill restoration requires initialPage.");
|
|
3306
3309
|
}
|
|
3307
|
-
function
|
|
3310
|
+
function Kn(e) {
|
|
3308
3311
|
if (typeof e != "string") return e;
|
|
3309
3312
|
if (typeof document > "u") throw Error("Vibe cannot resolve a selector without a document.");
|
|
3310
3313
|
let t = document.querySelector(e);
|
|
@@ -3313,7 +3316,7 @@ function Gn(e) {
|
|
|
3313
3316
|
}
|
|
3314
3317
|
//#endregion
|
|
3315
3318
|
//#region src/core/pageRequest.ts
|
|
3316
|
-
async function
|
|
3319
|
+
async function qn({ append: e, autofillController: t, cursor: n, isCurrent: r, loadPage: i, onLastCursor: a, onPages: o, options: s, signal: c, state: l }) {
|
|
3317
3320
|
let u = s.autofill, d = e && u?.strategy === "frontend" && (l.autofill.status === "paused" || l.autofill.status === "error"), f = d ? {
|
|
3318
3321
|
received: l.autofill.received,
|
|
3319
3322
|
requests: l.autofill.requests
|
|
@@ -3325,11 +3328,11 @@ async function Kn({ append: e, autofillController: t, cursor: n, isCurrent: r, l
|
|
|
3325
3328
|
let m = !1;
|
|
3326
3329
|
try {
|
|
3327
3330
|
if (u?.strategy === "frontend") {
|
|
3328
|
-
let s = await
|
|
3331
|
+
let s = await on({
|
|
3329
3332
|
existingItems: e ? l.items : [],
|
|
3330
3333
|
initialCursor: n,
|
|
3331
3334
|
loadPage: i,
|
|
3332
|
-
maximumRequests: f ? Math.max(0,
|
|
3335
|
+
maximumRequests: f ? Math.max(0, Zt(u) - f.requests) : void 0,
|
|
3333
3336
|
onCollection: (e) => t.captureCollection(e, r()),
|
|
3334
3337
|
onDelayChange: (e) => {
|
|
3335
3338
|
r() && Object.assign(l.autofill, e);
|
|
@@ -3372,7 +3375,7 @@ async function Kn({ append: e, autofillController: t, cursor: n, isCurrent: r, l
|
|
|
3372
3375
|
l.autofill.status = "complete";
|
|
3373
3376
|
return;
|
|
3374
3377
|
}
|
|
3375
|
-
await
|
|
3378
|
+
await mn(u, l, {
|
|
3376
3379
|
cycleId: p,
|
|
3377
3380
|
feedKey: u.feedKey,
|
|
3378
3381
|
items: h.slice(d.length),
|
|
@@ -3397,13 +3400,13 @@ async function Kn({ append: e, autofillController: t, cursor: n, isCurrent: r, l
|
|
|
3397
3400
|
function $(e) {
|
|
3398
3401
|
return `${typeof e}:${String(e)}`;
|
|
3399
3402
|
}
|
|
3400
|
-
function
|
|
3403
|
+
function Jn(e) {
|
|
3401
3404
|
return `${typeof e}:${String(e)}`;
|
|
3402
3405
|
}
|
|
3403
|
-
function
|
|
3406
|
+
function Yn(e) {
|
|
3404
3407
|
return e.map(({ postId: e }) => e);
|
|
3405
3408
|
}
|
|
3406
|
-
var
|
|
3409
|
+
var Xn = class {
|
|
3407
3410
|
delay;
|
|
3408
3411
|
enabled;
|
|
3409
3412
|
maxReplayPages;
|
|
@@ -3433,6 +3436,14 @@ var Yn = class {
|
|
|
3433
3436
|
recordPages(e) {
|
|
3434
3437
|
!this.enabled || e.length === 0 || (e.forEach((e) => this.recordPage(e)), this.pages = this.pages.slice(-this.maxReplayPages));
|
|
3435
3438
|
}
|
|
3439
|
+
recordInitialPage(e) {
|
|
3440
|
+
e && this.recordPages([{
|
|
3441
|
+
contributionIds: Yn(e.items),
|
|
3442
|
+
cursor: Vt(e),
|
|
3443
|
+
next: e.next,
|
|
3444
|
+
returnedIds: Yn(e.items)
|
|
3445
|
+
}]);
|
|
3446
|
+
}
|
|
3436
3447
|
remove(e) {
|
|
3437
3448
|
this.enabled && e.forEach((e) => this.tombstones.add($(e)));
|
|
3438
3449
|
}
|
|
@@ -3445,10 +3456,10 @@ var Yn = class {
|
|
|
3445
3456
|
async reconcile({ existingItems: e, loadPage: t, onDelayChange: n = () => void 0, shouldPause: r = () => !1, signal: i }) {
|
|
3446
3457
|
let a = this.pending ?? this.createSession(e);
|
|
3447
3458
|
for (this.pending = a; a.remainingRequests > 0;) {
|
|
3448
|
-
let e =
|
|
3459
|
+
let e = Jn(a.cursor);
|
|
3449
3460
|
if (a.seenCursors.has(e)) throw Error("Vibe removal reconciliation received a repeated cursor.");
|
|
3450
|
-
if (await
|
|
3451
|
-
delayMs:
|
|
3461
|
+
if (await Yt({
|
|
3462
|
+
delayMs: Jt(a.pages.length, this.delay),
|
|
3452
3463
|
onChange: n,
|
|
3453
3464
|
signal: i
|
|
3454
3465
|
}), a.pages.length > 0 && r()) return this.result(a, "paused");
|
|
@@ -3465,7 +3476,7 @@ var Yn = class {
|
|
|
3465
3476
|
contributionIds: c,
|
|
3466
3477
|
cursor: a.cursor,
|
|
3467
3478
|
next: o.next,
|
|
3468
|
-
returnedIds:
|
|
3479
|
+
returnedIds: Yn(s)
|
|
3469
3480
|
}), a.lastCursor = a.cursor, a.next = o.next, --a.remainingRequests, o.total !== void 0 && (a.total = o.total), a.next === null ? a.remainingRequests = 0 : a.cursor = a.next, a.remainingRequests > 0 && r()) return this.result(a, "paused");
|
|
3470
3481
|
}
|
|
3471
3482
|
return this.result(a, "complete");
|
|
@@ -3504,7 +3515,7 @@ var Yn = class {
|
|
|
3504
3515
|
return this.pages.findIndex(({ contributionIds: e }) => e.filter((e) => t.has($(e))).length < this.pageSize);
|
|
3505
3516
|
}
|
|
3506
3517
|
recordPage(e) {
|
|
3507
|
-
let t =
|
|
3518
|
+
let t = Jn(e.cursor), n = this.pages.findIndex(({ cursor: e }) => Jn(e) === t);
|
|
3508
3519
|
n >= 0 && (this.pages = this.pages.slice(0, n)), this.pages.push({
|
|
3509
3520
|
...e,
|
|
3510
3521
|
contributionIds: [...e.contributionIds],
|
|
@@ -3514,7 +3525,7 @@ var Yn = class {
|
|
|
3514
3525
|
};
|
|
3515
3526
|
//#endregion
|
|
3516
3527
|
//#region src/core/activeItemRemoval.ts
|
|
3517
|
-
function
|
|
3528
|
+
function Zn(e, t, n, r, i) {
|
|
3518
3529
|
let a = new Set(t.map(({ item: e }) => e.postId));
|
|
3519
3530
|
if (e.activeReelPostId === null || !a.has(e.activeReelPostId)) return;
|
|
3520
3531
|
let o = e.items[Math.max(n, 0)];
|
|
@@ -3527,7 +3538,7 @@ function Xn(e, t, n, r, i) {
|
|
|
3527
3538
|
}
|
|
3528
3539
|
//#endregion
|
|
3529
3540
|
//#region src/core/exactMediaRemovalController.ts
|
|
3530
|
-
function
|
|
3541
|
+
function Qn(e, t) {
|
|
3531
3542
|
let [n, ...r] = t;
|
|
3532
3543
|
if (!n) throw Error("Vibe items must contain at least one media asset.");
|
|
3533
3544
|
return {
|
|
@@ -3536,10 +3547,10 @@ function Zn(e, t) {
|
|
|
3536
3547
|
items: r
|
|
3537
3548
|
};
|
|
3538
3549
|
}
|
|
3539
|
-
function
|
|
3550
|
+
function $n(e) {
|
|
3540
3551
|
if (!Number.isInteger(e.mediaIndex) || e.mediaIndex < 0) throw TypeError("Vibe mediaIndex must be a non-negative integer.");
|
|
3541
3552
|
}
|
|
3542
|
-
var
|
|
3553
|
+
var er = class {
|
|
3543
3554
|
generation = 0;
|
|
3544
3555
|
metadata = /* @__PURE__ */ new WeakMap();
|
|
3545
3556
|
state;
|
|
@@ -3547,7 +3558,7 @@ var $n = class {
|
|
|
3547
3558
|
this.options = e, this.state = e.state;
|
|
3548
3559
|
}
|
|
3549
3560
|
remove(e) {
|
|
3550
|
-
|
|
3561
|
+
$n(e);
|
|
3551
3562
|
let t = this.state.items.findIndex(({ postId: t }) => t === e.postId), n = this.state.items[t];
|
|
3552
3563
|
if (!n) return null;
|
|
3553
3564
|
let r = [...M(n)], i = r[e.mediaIndex];
|
|
@@ -3564,7 +3575,7 @@ var $n = class {
|
|
|
3564
3575
|
restored: !1
|
|
3565
3576
|
});
|
|
3566
3577
|
let o = this.state.mediaIndices.get(n.postId) ?? 0, s = this.isReelOpen() && this.state.activeReelPostId === n.postId, c = s && o === e.mediaIndex;
|
|
3567
|
-
return r.splice(e.mediaIndex, 1), r.length > 0 ? (this.state.items[t] =
|
|
3578
|
+
return r.splice(e.mediaIndex, 1), r.length > 0 ? (this.state.items[t] = Qn(n, r), this.updateMediaIndexAfterRemoval(n.postId, e.mediaIndex, c), a) : (this.state.items.splice(t, 1), this.options.onPostRemoved(n.postId), this.state.mediaIndices.delete(n.postId), s && this.advanceFromRemovedPost(a, n), a);
|
|
3568
3579
|
}
|
|
3569
3580
|
reset() {
|
|
3570
3581
|
this.generation += 1;
|
|
@@ -3590,7 +3601,7 @@ var $n = class {
|
|
|
3590
3601
|
}
|
|
3591
3602
|
restoreIntoPost(e, t) {
|
|
3592
3603
|
let n = this.state.items[e], r = [...M(n)], i = Math.min(t.mediaIndex, r.length);
|
|
3593
|
-
if (r.splice(i, 0, t.media), this.state.items[e] =
|
|
3604
|
+
if (r.splice(i, 0, t.media), this.state.items[e] = Qn(n, r), this.state.activeReelPostId !== t.postId) return;
|
|
3594
3605
|
let a = this.state.mediaIndices.get(t.postId) ?? 0;
|
|
3595
3606
|
a >= i && this.state.mediaIndices.set(t.postId, a + 1);
|
|
3596
3607
|
}
|
|
@@ -3603,18 +3614,18 @@ var $n = class {
|
|
|
3603
3614
|
};
|
|
3604
3615
|
//#endregion
|
|
3605
3616
|
//#region src/core/itemPlacement.ts
|
|
3606
|
-
function
|
|
3617
|
+
function tr(e, t) {
|
|
3607
3618
|
let n = new Set(t);
|
|
3608
3619
|
return e.flatMap((e, t) => n.has(e.postId) ? [{
|
|
3609
3620
|
index: t,
|
|
3610
3621
|
item: e
|
|
3611
3622
|
}] : []);
|
|
3612
3623
|
}
|
|
3613
|
-
function
|
|
3624
|
+
function nr(e, t) {
|
|
3614
3625
|
let n = new Set(t.map(({ item: e }) => e.postId));
|
|
3615
3626
|
return e.filter((e) => !n.has(e.postId));
|
|
3616
3627
|
}
|
|
3617
|
-
function
|
|
3628
|
+
function rr(e, t) {
|
|
3618
3629
|
t.forEach(({ index: e }) => {
|
|
3619
3630
|
if (!Number.isInteger(e) || e < 0) throw Error("Vibe item restore indexes must be non-negative integers.");
|
|
3620
3631
|
});
|
|
@@ -3625,7 +3636,7 @@ function nr(e, t) {
|
|
|
3625
3636
|
}
|
|
3626
3637
|
//#endregion
|
|
3627
3638
|
//#region src/core/itemRemovalController.ts
|
|
3628
|
-
var
|
|
3639
|
+
var ir = 20, ar = class {
|
|
3629
3640
|
generation = 0;
|
|
3630
3641
|
historyLimit;
|
|
3631
3642
|
metadata = /* @__PURE__ */ new WeakMap();
|
|
@@ -3634,7 +3645,7 @@ var rr = 20, ir = class {
|
|
|
3634
3645
|
itemOrder;
|
|
3635
3646
|
stopItemsWatcher;
|
|
3636
3647
|
constructor(e) {
|
|
3637
|
-
this.options = e, this.historyLimit = e.historyLimit ??
|
|
3648
|
+
this.options = e, this.historyLimit = e.historyLimit ?? ir, this.state = e.state, this.itemOrder = this.state.items.map(({ postId: e }) => e), this.stopItemsWatcher = O(() => this.state.items, (e) => this.appendUnknownItems(e), { flush: "sync" });
|
|
3638
3649
|
}
|
|
3639
3650
|
destroy() {
|
|
3640
3651
|
this.reset(), this.stopItemsWatcher();
|
|
@@ -3648,7 +3659,7 @@ var rr = 20, ir = class {
|
|
|
3648
3659
|
let a = this.options.startRemoval(i, t);
|
|
3649
3660
|
if (a > 0 && await new Promise((e) => setTimeout(e, a)), this.metadata.get(r)?.generation !== this.generation) return r;
|
|
3650
3661
|
let o = this.state.items.findIndex((e) => e.postId === this.state.activeReelPostId), s = new Set(n.map(({ item: e }) => e.postId)), c = o < 0 ? 0 : this.state.items.slice(0, o).filter(({ postId: e }) => s.has(e)).length, l = Math.max(o - c, 0);
|
|
3651
|
-
return this.state.items =
|
|
3662
|
+
return this.state.items = nr(this.state.items, n), this.options.onItemsRemoved(r, n, l), this.record(r), r;
|
|
3652
3663
|
}
|
|
3653
3664
|
reset() {
|
|
3654
3665
|
this.generation += 1, this.history = [], this.itemOrder = [];
|
|
@@ -3659,7 +3670,7 @@ var rr = 20, ir = class {
|
|
|
3659
3670
|
this.restoreRemoval(t);
|
|
3660
3671
|
return;
|
|
3661
3672
|
}
|
|
3662
|
-
let n = new Set(this.state.items.map(({ postId: e }) => e)), r = e.filter(({ item: e }) => n.has(e.postId) ? !1 : (n.add(e.postId), !0)), i =
|
|
3673
|
+
let n = new Set(this.state.items.map(({ postId: e }) => e)), r = e.filter(({ item: e }) => n.has(e.postId) ? !1 : (n.add(e.postId), !0)), i = rr(this.state.items, r);
|
|
3663
3674
|
this.registerExternalPlacements(r), this.state.items = i, r.length > 0 && this.options.onRemovalRestored(r);
|
|
3664
3675
|
}
|
|
3665
3676
|
restoreRemoval(e) {
|
|
@@ -3685,7 +3696,7 @@ var rr = 20, ir = class {
|
|
|
3685
3696
|
}
|
|
3686
3697
|
collectOrderedPlacements(e) {
|
|
3687
3698
|
let t = new Map(this.itemOrder.map((e, t) => [e, t]));
|
|
3688
|
-
return
|
|
3699
|
+
return tr(this.state.items, e).map((e) => ({
|
|
3689
3700
|
index: t.get(e.item.postId) ?? e.index,
|
|
3690
3701
|
item: e.item
|
|
3691
3702
|
}));
|
|
@@ -3716,7 +3727,7 @@ var rr = 20, ir = class {
|
|
|
3716
3727
|
let r = new Map(this.itemOrder.map((e, t) => [e, t]));
|
|
3717
3728
|
return this.state.items = [...this.state.items, ...n].sort((e, t) => (r.get(e.postId) ?? 2 ** 53 - 1) - (r.get(t.postId) ?? 2 ** 53 - 1)), !0;
|
|
3718
3729
|
}
|
|
3719
|
-
},
|
|
3730
|
+
}, or = class {
|
|
3720
3731
|
forward = null;
|
|
3721
3732
|
forwardPromise = null;
|
|
3722
3733
|
forwardVersion = 0;
|
|
@@ -3803,7 +3814,7 @@ var rr = 20, ir = class {
|
|
|
3803
3814
|
}
|
|
3804
3815
|
}
|
|
3805
3816
|
}
|
|
3806
|
-
},
|
|
3817
|
+
}, sr = class {
|
|
3807
3818
|
generation = 0;
|
|
3808
3819
|
pending = Promise.resolve();
|
|
3809
3820
|
constructor(e) {
|
|
@@ -3853,24 +3864,24 @@ var rr = 20, ir = class {
|
|
|
3853
3864
|
};
|
|
3854
3865
|
//#endregion
|
|
3855
3866
|
//#region src/core/removalControllers.ts
|
|
3856
|
-
function
|
|
3857
|
-
let t = new
|
|
3867
|
+
function cr(e) {
|
|
3868
|
+
let t = new or(e), n = new sr({
|
|
3858
3869
|
state: e.state,
|
|
3859
3870
|
transitionMedia: (t) => e.surface()?.transitionActiveReelMedia(t) ?? Promise.resolve(!1),
|
|
3860
3871
|
transitionPost: (t) => e.surface()?.transitionActiveReelPost(t) ?? Promise.resolve(!1)
|
|
3861
3872
|
});
|
|
3862
3873
|
return {
|
|
3863
|
-
exactMediaRemoval: new
|
|
3874
|
+
exactMediaRemoval: new er({
|
|
3864
3875
|
onActivate: e.onActivate,
|
|
3865
3876
|
onPostRemoved: (t) => e.onItemsRemoved([t]),
|
|
3866
3877
|
onPostRestored: (t) => e.onItemsRestored([t]),
|
|
3867
3878
|
reelForward: t,
|
|
3868
3879
|
state: e.state
|
|
3869
3880
|
}),
|
|
3870
|
-
itemRemoval: new
|
|
3881
|
+
itemRemoval: new ar({
|
|
3871
3882
|
historyLimit: e.historyLimit,
|
|
3872
3883
|
onItemsRemoved: (n, r, i) => {
|
|
3873
|
-
e.onItemsRemoved(r.map(({ item: e }) => e.postId)),
|
|
3884
|
+
e.onItemsRemoved(r.map(({ item: e }) => e.postId)), Zn(e.state, r, i, e.onActivate, (e, r) => t.start(n, e, r));
|
|
3874
3885
|
},
|
|
3875
3886
|
onRemovalRestored: (n) => {
|
|
3876
3887
|
e.onItemsRestored(n.map(({ item: e }) => e.postId));
|
|
@@ -3885,17 +3896,17 @@ function sr(e) {
|
|
|
3885
3896
|
reelRemoval: n
|
|
3886
3897
|
};
|
|
3887
3898
|
}
|
|
3888
|
-
var
|
|
3889
|
-
function
|
|
3899
|
+
var lr = 1.5;
|
|
3900
|
+
function ur(e) {
|
|
3890
3901
|
let t = Math.min(e.screenWidth, e.screenHeight);
|
|
3891
3902
|
if (t > 0 && t < 600) return !0;
|
|
3892
|
-
let n = Math.min(e.viewportWidth, e.viewportHeight), r = t >= n *
|
|
3903
|
+
let n = Math.min(e.viewportWidth, e.viewportHeight), r = t >= n * lr;
|
|
3893
3904
|
return !e.hasHover && n > 0 && n < 600 && r;
|
|
3894
3905
|
}
|
|
3895
|
-
function ur(e) {
|
|
3896
|
-
return lr(e) ? "reel" : "masonry";
|
|
3897
|
-
}
|
|
3898
3906
|
function dr(e) {
|
|
3907
|
+
return ur(e) ? "reel" : "masonry";
|
|
3908
|
+
}
|
|
3909
|
+
function fr(e) {
|
|
3899
3910
|
let t = e.ownerDocument.defaultView, n = e.ownerDocument.documentElement;
|
|
3900
3911
|
return {
|
|
3901
3912
|
hasHover: typeof t?.matchMedia == "function" && t.matchMedia("(hover: hover)").matches,
|
|
@@ -3905,15 +3916,15 @@ function dr(e) {
|
|
|
3905
3916
|
viewportWidth: n.clientWidth
|
|
3906
3917
|
};
|
|
3907
3918
|
}
|
|
3908
|
-
function fr(e) {
|
|
3909
|
-
return lr(dr(e));
|
|
3910
|
-
}
|
|
3911
3919
|
function pr(e) {
|
|
3912
|
-
return ur(
|
|
3920
|
+
return ur(fr(e));
|
|
3921
|
+
}
|
|
3922
|
+
function mr(e) {
|
|
3923
|
+
return dr(fr(e));
|
|
3913
3924
|
}
|
|
3914
3925
|
//#endregion
|
|
3915
3926
|
//#region src/core/responsiveLayoutController.ts
|
|
3916
|
-
var
|
|
3927
|
+
var hr = class {
|
|
3917
3928
|
layoutMode;
|
|
3918
3929
|
resizeObserver = null;
|
|
3919
3930
|
target = null;
|
|
@@ -3938,10 +3949,10 @@ var mr = class {
|
|
|
3938
3949
|
}
|
|
3939
3950
|
handleResponsiveLayout = () => {
|
|
3940
3951
|
if (!this.target) return;
|
|
3941
|
-
let e =
|
|
3942
|
-
this.state.phoneMode =
|
|
3952
|
+
let e = mr(this.target);
|
|
3953
|
+
this.state.phoneMode = pr(this.target), this.state.reelInfoSheetOverlay = this.state.phoneMode, this.state.reelMediaSource = e === "reel" ? "preview" : "original", this.layoutMode === "responsive" && this.applyLayout(e);
|
|
3943
3954
|
};
|
|
3944
|
-
},
|
|
3955
|
+
}, gr = class {
|
|
3945
3956
|
routedReelPostId = null;
|
|
3946
3957
|
reelRouteIsActive = !1;
|
|
3947
3958
|
constructor(e, t) {
|
|
@@ -3968,7 +3979,7 @@ var mr = class {
|
|
|
3968
3979
|
let i = this.reelRouteIsActive ? "replace" : "push";
|
|
3969
3980
|
this.reelRouteIsActive = !0, this.routedReelPostId = e, this.options.router[i](r);
|
|
3970
3981
|
}
|
|
3971
|
-
},
|
|
3982
|
+
}, _r = class {
|
|
3972
3983
|
app = null;
|
|
3973
3984
|
autoScroll;
|
|
3974
3985
|
autofillController;
|
|
@@ -3989,24 +4000,24 @@ var mr = class {
|
|
|
3989
4000
|
notificationItems;
|
|
3990
4001
|
state;
|
|
3991
4002
|
constructor(e) {
|
|
3992
|
-
this.options = e,
|
|
4003
|
+
this.options = e, Gn(e);
|
|
3993
4004
|
let t = e.layout ?? "masonry";
|
|
3994
|
-
this.state = x(
|
|
4005
|
+
this.state = x(Hn(e, t)), this.lastLoadedCursor = e.initialPage ? Vt(e.initialPage) : null, this.notificationItems = I(this.state), this.autoScroll = new pn({
|
|
3995
4006
|
getScrollElement: () => this.surface?.getAutoScrollElement() ?? null,
|
|
3996
4007
|
state: this.state.autoScroll
|
|
3997
|
-
}), this.autofillController = new
|
|
4008
|
+
}), this.autofillController = new sn({
|
|
3998
4009
|
cancelRequest: () => this.cancelRequest(),
|
|
3999
4010
|
onLastCursor: (e) => this.setCurrentCursor(e),
|
|
4000
4011
|
onPages: (e) => this.removalReconciliation.recordPages(e),
|
|
4001
4012
|
options: e.autofill,
|
|
4002
4013
|
state: this.state
|
|
4003
|
-
}), this.removalReconciliation = new
|
|
4014
|
+
}), this.removalReconciliation = new Xn(e), this.removalReconciliation.recordInitialPage(e.initialPage), this.fillController = new Nn({
|
|
4004
4015
|
fill: e.fill,
|
|
4005
4016
|
loadPage: e.loadPage ? (e) => this.loadFilteredPage(e) : void 0,
|
|
4006
4017
|
needsFrontendPreparation: () => this.removalReconciliation.needsReconciliation(this.state.items),
|
|
4007
4018
|
onLastCursor: (e) => this.setCurrentCursor(e),
|
|
4008
4019
|
onPages: (e) => this.removalReconciliation.recordPages(e),
|
|
4009
|
-
prepareFrontend: ({ isCurrent: t, onDelayChange: n, signal: r }) =>
|
|
4020
|
+
prepareFrontend: ({ isCurrent: t, onDelayChange: n, signal: r }) => Pn({
|
|
4010
4021
|
controller: this.removalReconciliation,
|
|
4011
4022
|
isCurrent: t,
|
|
4012
4023
|
loadPage: e.loadPage,
|
|
@@ -4016,8 +4027,8 @@ var mr = class {
|
|
|
4016
4027
|
state: this.state
|
|
4017
4028
|
}),
|
|
4018
4029
|
state: this.state
|
|
4019
|
-
}), this.routing = new
|
|
4020
|
-
let n =
|
|
4030
|
+
}), this.routing = new gr(e.routing, this.state);
|
|
4031
|
+
let n = cr({
|
|
4021
4032
|
historyLimit: e.removalHistoryLimit,
|
|
4022
4033
|
onActivate: (e) => this.setActiveReelPost(e),
|
|
4023
4034
|
onItemsRemoved: (e) => this.removalReconciliation.remove(e),
|
|
@@ -4026,20 +4037,20 @@ var mr = class {
|
|
|
4026
4037
|
state: this.state,
|
|
4027
4038
|
surface: () => this.surface
|
|
4028
4039
|
});
|
|
4029
|
-
this.exactMediaRemoval = n.exactMediaRemoval, this.itemRemoval = n.itemRemoval, this.reelForward = n.reelForward, this.reelRemoval = n.reelRemoval, this.responsiveLayout = new
|
|
4040
|
+
this.exactMediaRemoval = n.exactMediaRemoval, this.itemRemoval = n.itemRemoval, this.reelForward = n.reelForward, this.reelRemoval = n.reelRemoval, this.responsiveLayout = new hr(t, this.state, () => {
|
|
4030
4041
|
this.routing.syncFeed();
|
|
4031
4042
|
}), this.startStateNotifications();
|
|
4032
4043
|
}
|
|
4033
4044
|
async mount() {
|
|
4034
4045
|
if (this.app) throw Error("Vibe is already mounted.");
|
|
4035
4046
|
this.startStateNotifications();
|
|
4036
|
-
let e =
|
|
4047
|
+
let e = Kn(this.options.target);
|
|
4037
4048
|
this.responsiveLayout.mount(e), this.app = i(zt, {
|
|
4038
4049
|
canRetryEnd: !!this.options.loadPage,
|
|
4039
4050
|
cardFooter: this.options.cardFooter,
|
|
4040
4051
|
cardHeader: this.options.cardHeader,
|
|
4041
4052
|
feedFooter: this.options.feedFooter,
|
|
4042
|
-
feedFooterActions:
|
|
4053
|
+
feedFooterActions: Fn(this),
|
|
4043
4054
|
mediaCard: this.options.mediaCard,
|
|
4044
4055
|
masonry: this.options.masonry,
|
|
4045
4056
|
onMediaReady: this.options.onMediaReady,
|
|
@@ -4122,7 +4133,7 @@ var mr = class {
|
|
|
4122
4133
|
this.autoScroll.setSpeed(e);
|
|
4123
4134
|
}
|
|
4124
4135
|
applyAutofillUpdate(e) {
|
|
4125
|
-
let t =
|
|
4136
|
+
let t = gn(this.options.autofill, this.state, e);
|
|
4126
4137
|
return t && this.autofillController.syncCountdown(), t;
|
|
4127
4138
|
}
|
|
4128
4139
|
cancelAutofill() {
|
|
@@ -4133,7 +4144,7 @@ var mr = class {
|
|
|
4133
4144
|
await this.cancelFill();
|
|
4134
4145
|
return;
|
|
4135
4146
|
}
|
|
4136
|
-
if (
|
|
4147
|
+
if (nn(this.state.autofill)) {
|
|
4137
4148
|
await this.cancelAutofill();
|
|
4138
4149
|
return;
|
|
4139
4150
|
}
|
|
@@ -4147,12 +4158,12 @@ var mr = class {
|
|
|
4147
4158
|
}
|
|
4148
4159
|
async fill(e) {
|
|
4149
4160
|
if (!this.state.loadMoreLocked) {
|
|
4150
|
-
if (this.pendingRequest ||
|
|
4161
|
+
if (this.pendingRequest || nn(this.state.autofill)) throw Error("Vibe cannot fill while another page operation is active.");
|
|
4151
4162
|
await this.fillController.start(e);
|
|
4152
4163
|
}
|
|
4153
4164
|
}
|
|
4154
4165
|
restoreAutofillSession(e) {
|
|
4155
|
-
let t =
|
|
4166
|
+
let t = _n(this.options.autofill, this.state, e);
|
|
4156
4167
|
return t && this.autofillController.syncCountdown(), t;
|
|
4157
4168
|
}
|
|
4158
4169
|
restoreFillSession(e) {
|
|
@@ -4166,7 +4177,7 @@ var mr = class {
|
|
|
4166
4177
|
}
|
|
4167
4178
|
async startLoadMore(e) {
|
|
4168
4179
|
if (this.pendingRequest) return this.pendingRequest;
|
|
4169
|
-
if (this.state.loadMoreLocked ||
|
|
4180
|
+
if (this.state.loadMoreLocked || nn(this.state.autofill) || this.fillController.isActive() || !this.options.loadPage || this.state.next === null && !this.removalReconciliation.needsReconciliation(this.state.items)) return;
|
|
4170
4181
|
this.state.isLoadingMore = !0, this.state.nextPageError = null;
|
|
4171
4182
|
let t = e();
|
|
4172
4183
|
return this.pendingRequest = t, t.finally(() => {
|
|
@@ -4181,7 +4192,7 @@ var mr = class {
|
|
|
4181
4192
|
}
|
|
4182
4193
|
async replaceFeed(e, t) {
|
|
4183
4194
|
if (!this.options.loadPage) throw Error(`Vibe cannot ${t} without loadPage.`);
|
|
4184
|
-
return
|
|
4195
|
+
return nn(this.state.autofill) && await this.cancelAutofill(), this.fillController.isActive() && await this.cancelFill(), this.cancelRequest(), this.state.autofill = tn(this.options.autofill, void 0, !1), this.fillController.reset(), this.reelForward.reset(), this.reelRemoval.reset(), this.exactMediaRemoval.reset(), this.itemRemoval.reset(), this.removalReconciliation.reset(), this.state.error = null, this.state.current = null, this.state.isLoading = !0, this.state.items = [], this.state.next = null, this.state.nextPageError = null, this.state.total = null, this.startRequest(e, !1);
|
|
4185
4196
|
}
|
|
4186
4197
|
async loadFilteredPage(e) {
|
|
4187
4198
|
let t = this.options.loadPage;
|
|
@@ -4205,7 +4216,7 @@ var mr = class {
|
|
|
4205
4216
|
let t = ++this.requestVersion, n = new AbortController();
|
|
4206
4217
|
this.abortController = n;
|
|
4207
4218
|
try {
|
|
4208
|
-
let r = await
|
|
4219
|
+
let r = await Pn({
|
|
4209
4220
|
controller: this.removalReconciliation,
|
|
4210
4221
|
isCurrent: () => t === this.requestVersion,
|
|
4211
4222
|
loadPage: e,
|
|
@@ -4223,7 +4234,7 @@ var mr = class {
|
|
|
4223
4234
|
}
|
|
4224
4235
|
async retryEnd() {
|
|
4225
4236
|
if (this.pendingRequest) return this.pendingRequest;
|
|
4226
|
-
if (!this.state.loadMoreLocked && !(
|
|
4237
|
+
if (!this.state.loadMoreLocked && !(nn(this.state.autofill) || this.fillController.isActive()) && !(this.state.next !== null || !this.options.loadPage)) return this.state.isLoadingMore = !0, this.state.nextPageError = null, this.startRequest(this.lastLoadedCursor, !0);
|
|
4227
4238
|
}
|
|
4228
4239
|
setInfiniteScroll(e) {
|
|
4229
4240
|
this.state.infiniteScroll = e, e && m(() => this.surface?.loadIfNearBottom());
|
|
@@ -4247,10 +4258,10 @@ var mr = class {
|
|
|
4247
4258
|
this.state.total = e;
|
|
4248
4259
|
}
|
|
4249
4260
|
setReelAutoAdvance(e) {
|
|
4250
|
-
|
|
4261
|
+
zn(this.state.reelAutoAdvance, e);
|
|
4251
4262
|
}
|
|
4252
4263
|
setReelInfoSheet(e) {
|
|
4253
|
-
|
|
4264
|
+
Vn(this.state.reelInfoSheet, this.options.reelInfoSheet, e);
|
|
4254
4265
|
}
|
|
4255
4266
|
setLayout(e) {
|
|
4256
4267
|
this.responsiveLayout.setLayout(e);
|
|
@@ -4270,7 +4281,7 @@ var mr = class {
|
|
|
4270
4281
|
async fetchPage(e, t) {
|
|
4271
4282
|
if (!this.options.loadPage) return;
|
|
4272
4283
|
let n = ++this.requestVersion, r = new AbortController();
|
|
4273
|
-
this.abortController = r, await
|
|
4284
|
+
this.abortController = r, await qn({
|
|
4274
4285
|
append: t,
|
|
4275
4286
|
autofillController: this.autofillController,
|
|
4276
4287
|
cursor: e,
|
|
@@ -4292,7 +4303,7 @@ var mr = class {
|
|
|
4292
4303
|
startInitialAutofill() {
|
|
4293
4304
|
let e = ++this.requestVersion, t = new AbortController(), n = this.autofillController.beginCycle();
|
|
4294
4305
|
this.abortController = t, this.state.isLoadingMore = !0;
|
|
4295
|
-
let r =
|
|
4306
|
+
let r = vn({
|
|
4296
4307
|
cycleId: n,
|
|
4297
4308
|
isCurrent: () => e === this.requestVersion,
|
|
4298
4309
|
onCollection: (t) => this.autofillController.captureCollection(t, e === this.requestVersion),
|
|
@@ -4319,8 +4330,8 @@ var mr = class {
|
|
|
4319
4330
|
this.lastLoadedCursor = e, this.state.current = e;
|
|
4320
4331
|
}
|
|
4321
4332
|
};
|
|
4322
|
-
function
|
|
4323
|
-
return new
|
|
4333
|
+
function vr(e) {
|
|
4334
|
+
return new _r(e);
|
|
4324
4335
|
}
|
|
4325
4336
|
//#endregion
|
|
4326
|
-
export {
|
|
4337
|
+
export { vr as createVibe };
|