@wyxos/vibe 5.1.0 → 5.3.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.
- package/lib/components/MasonryFeed.vue.d.ts +4 -2
- package/lib/components/MediaCard.vue.d.ts +2 -2
- package/lib/components/ReelFeed.vue.d.ts +2 -2
- package/lib/components/ReelLayout.vue.d.ts +2 -2
- package/lib/components/VibeSurface.vue.d.ts +2 -0
- package/lib/components/useMediaLifecycle.d.ts +19 -0
- package/lib/core/autofill.d.ts +6 -2
- package/lib/core/autofillController.d.ts +2 -0
- package/lib/core/exactMediaRemovalController.d.ts +2 -0
- package/lib/core/fill.d.ts +9 -3
- package/lib/core/fillController.d.ts +4 -0
- package/lib/core/initialAutofill.d.ts +3 -1
- package/lib/core/page.d.ts +7 -1
- package/lib/core/pageRequest.d.ts +18 -0
- package/lib/core/removalControllers.d.ts +2 -0
- package/lib/core/removalReconciliationController.d.ts +41 -0
- package/lib/core/runtime.d.ts +1 -0
- package/lib/index.cjs +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +1142 -815
- package/lib/types.d.ts +12 -2
- package/package.json +1 -1
|
@@ -6,19 +6,21 @@ declare const __VLS_export: import("vue").DefineComponent<MasonryFeedProps, {
|
|
|
6
6
|
getScrollElement: typeof getScrollElement;
|
|
7
7
|
loadIfNearBottom: typeof loadIfNearBottom;
|
|
8
8
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
9
|
-
ready: (postId: VibeItemId, mediaIndex: number) => any;
|
|
10
9
|
error: (postId: VibeItemId, mediaIndex: number) => any;
|
|
10
|
+
ready: (postId: VibeItemId, mediaIndex: number) => any;
|
|
11
11
|
loadMore: () => any;
|
|
12
12
|
retryEnd: () => any;
|
|
13
13
|
activate: (postId: VibeItemId, input: "keyboard" | "pointer") => any;
|
|
14
14
|
mediaChange: (postId: VibeItemId, mediaIndex: number) => any;
|
|
15
|
+
visible: (postId: VibeItemId, mediaIndex: number) => any;
|
|
15
16
|
}, string, import("vue").PublicProps, Readonly<MasonryFeedProps> & Readonly<{
|
|
16
|
-
onReady?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
17
17
|
onError?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
18
|
+
onReady?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
18
19
|
onLoadMore?: (() => any) | undefined;
|
|
19
20
|
onRetryEnd?: (() => any) | undefined;
|
|
20
21
|
onActivate?: ((postId: VibeItemId, input: "keyboard" | "pointer") => any) | undefined;
|
|
21
22
|
onMediaChange?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
23
|
+
onVisible?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
22
24
|
}>, {
|
|
23
25
|
leavingPostIds: ReadonlySet<VibeItemId>;
|
|
24
26
|
removalDelays: ReadonlyMap<VibeItemId, number>;
|
|
@@ -24,14 +24,14 @@ type __VLS_Props = {
|
|
|
24
24
|
total: number | null;
|
|
25
25
|
};
|
|
26
26
|
declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
27
|
-
ready: (mediaIndex: number) => any;
|
|
28
27
|
error: (mediaIndex: number) => any;
|
|
28
|
+
ready: (mediaIndex: number) => any;
|
|
29
29
|
ended: (mediaIndex: number) => any;
|
|
30
30
|
activate: (input: "keyboard" | "pointer") => any;
|
|
31
31
|
mediaChange: (mediaIndex: number) => any;
|
|
32
32
|
}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
|
|
33
|
-
onReady?: ((mediaIndex: number) => any) | undefined;
|
|
34
33
|
onError?: ((mediaIndex: number) => any) | undefined;
|
|
34
|
+
onReady?: ((mediaIndex: number) => any) | undefined;
|
|
35
35
|
onEnded?: ((mediaIndex: number) => any) | undefined;
|
|
36
36
|
onActivate?: ((input: "keyboard" | "pointer") => any) | undefined;
|
|
37
37
|
onMediaChange?: ((mediaIndex: number) => any) | undefined;
|
|
@@ -16,16 +16,16 @@ declare const __VLS_export: import("vue").DefineComponent<ReelFeedProps, {
|
|
|
16
16
|
transitionActiveMedia: typeof transitionActiveMedia;
|
|
17
17
|
transitionActivePost: typeof transitionActivePost;
|
|
18
18
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
19
|
-
ready: (postId: VibeItemId, mediaIndex: number) => any;
|
|
20
19
|
error: (postId: VibeItemId, mediaIndex: number) => any;
|
|
20
|
+
ready: (postId: VibeItemId, mediaIndex: number) => any;
|
|
21
21
|
loadMore: () => any;
|
|
22
22
|
retryEnd: () => any;
|
|
23
23
|
mediaChange: (postId: VibeItemId, mediaIndex: number) => any;
|
|
24
24
|
activeChange: (postId: VibeItemId) => any;
|
|
25
25
|
retryForward: () => any;
|
|
26
26
|
}, string, import("vue").PublicProps, Readonly<ReelFeedProps> & Readonly<{
|
|
27
|
-
onReady?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
28
27
|
onError?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
28
|
+
onReady?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
29
29
|
onLoadMore?: (() => any) | undefined;
|
|
30
30
|
onRetryEnd?: (() => any) | undefined;
|
|
31
31
|
onMediaChange?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
@@ -14,8 +14,8 @@ declare const __VLS_export: import("vue").DefineComponent<ReelLayoutProps, {
|
|
|
14
14
|
transitionActiveMedia: typeof transitionActiveMedia;
|
|
15
15
|
transitionActivePost: typeof transitionActivePost;
|
|
16
16
|
}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
17
|
-
ready: (postId: VibeItemId, mediaIndex: number) => any;
|
|
18
17
|
error: (postId: VibeItemId, mediaIndex: number) => any;
|
|
18
|
+
ready: (postId: VibeItemId, mediaIndex: number) => any;
|
|
19
19
|
loadMore: () => any;
|
|
20
20
|
retryEnd: () => any;
|
|
21
21
|
mediaChange: (postId: VibeItemId, mediaIndex: number) => any;
|
|
@@ -23,8 +23,8 @@ declare const __VLS_export: import("vue").DefineComponent<ReelLayoutProps, {
|
|
|
23
23
|
retryForward: () => any;
|
|
24
24
|
closeInfoSheet: () => any;
|
|
25
25
|
}, string, import("vue").PublicProps, Readonly<ReelLayoutProps> & Readonly<{
|
|
26
|
-
onReady?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
27
26
|
onError?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
27
|
+
onReady?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
28
28
|
onLoadMore?: (() => any) | undefined;
|
|
29
29
|
onRetryEnd?: (() => any) | undefined;
|
|
30
30
|
onMediaChange?: ((postId: VibeItemId, mediaIndex: number) => any) | undefined;
|
|
@@ -32,6 +32,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
|
32
32
|
activeReelChange: (postId: VibeItemId) => any;
|
|
33
33
|
closeReel: () => any;
|
|
34
34
|
mediaReady: (context: VibeMediaLifecycleContext) => any;
|
|
35
|
+
mediaVisible: (context: VibeMediaLifecycleContext) => any;
|
|
35
36
|
openReel: (postId: VibeItemId) => any;
|
|
36
37
|
reelMediaChange: (context: VibeMediaLifecycleContext) => any;
|
|
37
38
|
reelInfoSheetChange: (enabled: boolean) => any;
|
|
@@ -42,6 +43,7 @@ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {
|
|
|
42
43
|
onActiveReelChange?: ((postId: VibeItemId) => any) | undefined;
|
|
43
44
|
onCloseReel?: (() => any) | undefined;
|
|
44
45
|
onMediaReady?: ((context: VibeMediaLifecycleContext) => any) | undefined;
|
|
46
|
+
onMediaVisible?: ((context: VibeMediaLifecycleContext) => any) | undefined;
|
|
45
47
|
onOpenReel?: ((postId: VibeItemId) => any) | undefined;
|
|
46
48
|
onReelMediaChange?: ((context: VibeMediaLifecycleContext) => any) | undefined;
|
|
47
49
|
onReelInfoSheetChange?: ((enabled: boolean) => any) | undefined;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { MediaPreviewState } from '../core/mediaPreview';
|
|
2
|
+
import type { VibeRuntimeState } from '../core/runtime';
|
|
3
|
+
import type { VibeItemId, VibeMediaLifecycleContext } from '../types';
|
|
4
|
+
interface MediaLifecycleEvents {
|
|
5
|
+
ready: (context: VibeMediaLifecycleContext) => void;
|
|
6
|
+
reelChange: (context: VibeMediaLifecycleContext) => void;
|
|
7
|
+
visible: (context: VibeMediaLifecycleContext) => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function useMediaLifecycle(state: VibeRuntimeState, events: MediaLifecycleEvents): {
|
|
10
|
+
markMasonryVisible: (postId: VibeItemId, mediaIndex: number) => void;
|
|
11
|
+
markPreviewError: (postId: VibeItemId, mediaIndex: number) => void;
|
|
12
|
+
markPreviewReady: (postId: VibeItemId, mediaIndex: number) => void;
|
|
13
|
+
markReelError: (postId: VibeItemId, mediaIndex: number) => void;
|
|
14
|
+
markReelReady: (postId: VibeItemId, mediaIndex: number) => void;
|
|
15
|
+
originalStates: import("vue").ShallowRef<ReadonlyMap<string, MediaPreviewState>, ReadonlyMap<string, MediaPreviewState>>;
|
|
16
|
+
previewStates: import("vue").ShallowRef<ReadonlyMap<string, MediaPreviewState>, ReadonlyMap<string, MediaPreviewState>>;
|
|
17
|
+
reelStates: import("vue").ComputedRef<ReadonlyMap<string, MediaPreviewState>>;
|
|
18
|
+
};
|
|
19
|
+
export {};
|
package/lib/core/autofill.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { VibeAutofillOptions, VibeAutofillSessionSnapshot, VibeAutofillState, VibeCursor, VibeFrontendAutofillOptions, VibeItem, VibePageLoader } from '../types';
|
|
2
2
|
import type { VibeRuntimeState } from './runtime';
|
|
3
|
+
import { type LoadedPageRecord } from './page';
|
|
3
4
|
import { type RequestDelaySnapshot } from './requestDelay';
|
|
4
5
|
export declare const DEFAULT_MAX_ADDITIONAL_PAGES = 10;
|
|
5
6
|
export declare function frontendAutofillRequestLimit(options: VibeFrontendAutofillOptions, includeInitialRequest?: boolean): number;
|
|
@@ -12,10 +13,12 @@ export interface FrontendAutofillProgress {
|
|
|
12
13
|
export interface FrontendAutofillCollection extends FrontendAutofillProgress {
|
|
13
14
|
items: VibeItem[];
|
|
14
15
|
lastCursor: VibeCursor;
|
|
16
|
+
pages: LoadedPageRecord[];
|
|
15
17
|
total?: number;
|
|
16
18
|
}
|
|
17
19
|
export interface FrontendAutofillResult extends FrontendAutofillCollection {
|
|
18
|
-
|
|
20
|
+
pages: LoadedPageRecord[];
|
|
21
|
+
status: 'complete' | 'exhausted' | 'paused';
|
|
19
22
|
}
|
|
20
23
|
interface CollectFrontendAutofillOptions {
|
|
21
24
|
existingItems: readonly VibeItem[];
|
|
@@ -28,6 +31,7 @@ interface CollectFrontendAutofillOptions {
|
|
|
28
31
|
options: VibeFrontendAutofillOptions;
|
|
29
32
|
receivedOffset?: number;
|
|
30
33
|
requestOffset?: number;
|
|
34
|
+
shouldPause?: () => boolean;
|
|
31
35
|
signal: AbortSignal;
|
|
32
36
|
}
|
|
33
37
|
export declare function validateAutofillOptions(options?: VibeAutofillOptions): void;
|
|
@@ -35,5 +39,5 @@ export declare function createAutofillState(options?: VibeAutofillOptions, initi
|
|
|
35
39
|
export declare function isAutofillActive(state: VibeAutofillState): boolean;
|
|
36
40
|
export declare function cancelAutofill(options: VibeAutofillOptions | undefined, state: VibeRuntimeState, cancelRequest: () => void): Promise<void>;
|
|
37
41
|
export declare function isMatchingBackendSession(options: VibeAutofillOptions | undefined, update: Pick<VibeAutofillSessionSnapshot, 'feedKey' | 'sessionId'>, state: VibeAutofillState): boolean;
|
|
38
|
-
export declare function collectFrontendAutofill({ existingItems, initialCursor, loadPage, maximumRequests: configuredMaximumRequests, onCollection, onDelayChange, onProgress, options, receivedOffset, requestOffset, signal, }: CollectFrontendAutofillOptions): Promise<FrontendAutofillResult>;
|
|
42
|
+
export declare function collectFrontendAutofill({ existingItems, initialCursor, loadPage, maximumRequests: configuredMaximumRequests, onCollection, onDelayChange, onProgress, options, receivedOffset, requestOffset, shouldPause, signal, }: CollectFrontendAutofillOptions): Promise<FrontendAutofillResult>;
|
|
39
43
|
export {};
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { type FrontendAutofillCollection } from './autofill';
|
|
2
|
+
import type { LoadedPageRecord } from './page';
|
|
2
3
|
import type { VibeRuntimeState } from './runtime';
|
|
3
4
|
import type { VibeAutofillOptions, VibeCursor } from '../types';
|
|
4
5
|
interface AutofillControllerContext {
|
|
5
6
|
cancelRequest: () => void;
|
|
6
7
|
onLastCursor: (cursor: VibeCursor) => void;
|
|
8
|
+
onPages: (pages: readonly LoadedPageRecord[]) => void;
|
|
7
9
|
options?: VibeAutofillOptions;
|
|
8
10
|
state: VibeRuntimeState;
|
|
9
11
|
}
|
|
@@ -3,6 +3,8 @@ import type { VibeRuntimeState } from './runtime';
|
|
|
3
3
|
import type { VibeItemId, VibeMediaRemoval, VibeMediaTarget } from '../types';
|
|
4
4
|
interface ExactMediaRemovalControllerOptions {
|
|
5
5
|
onActivate: (postId: VibeItemId) => void;
|
|
6
|
+
onPostRemoved: (postId: VibeItemId) => void;
|
|
7
|
+
onPostRestored: (postId: VibeItemId) => void;
|
|
6
8
|
reelForward: ReelForwardController;
|
|
7
9
|
state: VibeRuntimeState;
|
|
8
10
|
}
|
package/lib/core/fill.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type LoadedPageRecord } from './page';
|
|
1
2
|
import type { VibeFillOptions, VibeFillSessionSnapshot, VibeFillState, VibeFillTarget, VibeCursor, VibeFrontendFillOptions, VibeItem, VibePageLoader } from '../types';
|
|
2
3
|
import { type RequestDelaySnapshot } from './requestDelay';
|
|
3
4
|
export interface FrontendFillProgress {
|
|
@@ -5,19 +6,24 @@ export interface FrontendFillProgress {
|
|
|
5
6
|
next: VibeCursor;
|
|
6
7
|
received: number;
|
|
7
8
|
}
|
|
8
|
-
export interface
|
|
9
|
+
export interface FrontendFillCollection extends FrontendFillProgress {
|
|
9
10
|
items: VibeItem[];
|
|
10
11
|
lastCursor: VibeCursor;
|
|
11
|
-
|
|
12
|
+
pages: LoadedPageRecord[];
|
|
12
13
|
total?: number;
|
|
13
14
|
}
|
|
15
|
+
export interface FrontendFillResult extends FrontendFillCollection {
|
|
16
|
+
status: 'complete' | 'exhausted' | 'paused';
|
|
17
|
+
}
|
|
14
18
|
interface CollectFrontendFillOptions {
|
|
15
19
|
existingItems: readonly VibeItem[];
|
|
16
20
|
initialCursor: VibeCursor;
|
|
17
21
|
loadPage: VibePageLoader;
|
|
22
|
+
onCollection?: (collection: FrontendFillCollection) => void;
|
|
18
23
|
onDelayChange: (snapshot: RequestDelaySnapshot) => void;
|
|
19
24
|
onProgress: (progress: FrontendFillProgress) => void;
|
|
20
25
|
options: VibeFrontendFillOptions;
|
|
26
|
+
shouldPause?: () => boolean;
|
|
21
27
|
signal: AbortSignal;
|
|
22
28
|
target: VibeFillTarget;
|
|
23
29
|
}
|
|
@@ -25,5 +31,5 @@ export declare function validateFillTarget(target: VibeFillTarget): VibeFillTarg
|
|
|
25
31
|
export declare function validateFillOptions(options?: VibeFillOptions): void;
|
|
26
32
|
export declare function createFillState(options?: VibeFillOptions, initialSession?: VibeFillSessionSnapshot, useConfiguredSession?: boolean): VibeFillState;
|
|
27
33
|
export declare function isFillActive(state: VibeFillState): boolean;
|
|
28
|
-
export declare function collectFrontendFill({ existingItems, initialCursor, loadPage, onDelayChange, onProgress, options, signal, target, }: CollectFrontendFillOptions): Promise<FrontendFillResult>;
|
|
34
|
+
export declare function collectFrontendFill({ existingItems, initialCursor, loadPage, onCollection, onDelayChange, onProgress, options, shouldPause, signal, target, }: CollectFrontendFillOptions): Promise<FrontendFillResult>;
|
|
29
35
|
export {};
|
|
@@ -1,9 +1,11 @@
|
|
|
1
|
+
import type { LoadedPageRecord } from './page';
|
|
1
2
|
import type { VibeRuntimeState } from './runtime';
|
|
2
3
|
import type { VibeBackendFillUpdate, VibeCursor, VibeFillOptions, VibeFillSessionSnapshot, VibeFillTarget, VibePageLoader } from '../types';
|
|
3
4
|
interface FillControllerOptions {
|
|
4
5
|
fill?: VibeFillOptions;
|
|
5
6
|
loadPage?: VibePageLoader;
|
|
6
7
|
onLastCursor: (cursor: VibeCursor) => void;
|
|
8
|
+
onPages: (pages: readonly LoadedPageRecord[]) => void;
|
|
7
9
|
state: VibeRuntimeState;
|
|
8
10
|
}
|
|
9
11
|
export declare class VibeFillController {
|
|
@@ -12,6 +14,7 @@ export declare class VibeFillController {
|
|
|
12
14
|
private cycle;
|
|
13
15
|
private readonly delayCountdown;
|
|
14
16
|
private requestVersion;
|
|
17
|
+
private collection;
|
|
15
18
|
constructor(options: FillControllerOptions);
|
|
16
19
|
isActive(): boolean;
|
|
17
20
|
applyUpdate(update: VibeBackendFillUpdate): boolean;
|
|
@@ -23,6 +26,7 @@ export declare class VibeFillController {
|
|
|
23
26
|
private abortLocalRequest;
|
|
24
27
|
private isCurrent;
|
|
25
28
|
private startFrontend;
|
|
29
|
+
private commitCollection;
|
|
26
30
|
private syncBackendCountdown;
|
|
27
31
|
}
|
|
28
32
|
export {};
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { type FrontendAutofillCollection } from './autofill';
|
|
2
|
+
import type { LoadedPageRecord } from './page';
|
|
2
3
|
import type { VibeRuntimeState } from './runtime';
|
|
3
4
|
import type { CreateVibeOptions, VibeCursor } from '../types';
|
|
4
5
|
interface InitialAutofillContext {
|
|
@@ -6,9 +7,10 @@ interface InitialAutofillContext {
|
|
|
6
7
|
isCurrent: () => boolean;
|
|
7
8
|
onCollection: (collection: FrontendAutofillCollection) => void;
|
|
8
9
|
onLastCursor: (cursor: VibeCursor) => void;
|
|
10
|
+
onPages: (pages: readonly LoadedPageRecord[]) => void;
|
|
9
11
|
options: CreateVibeOptions;
|
|
10
12
|
signal: AbortSignal;
|
|
11
13
|
state: VibeRuntimeState;
|
|
12
14
|
}
|
|
13
|
-
export declare function autofillInitialPage({ cycleId, isCurrent, onCollection, onLastCursor, options, signal, state, }: InitialAutofillContext): Promise<void>;
|
|
15
|
+
export declare function autofillInitialPage({ cycleId, isCurrent, onCollection, onLastCursor, onPages, options, signal, state, }: InitialAutofillContext): Promise<void>;
|
|
14
16
|
export {};
|
package/lib/core/page.d.ts
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
|
-
import type { VibeItem, VibePage } from '../types';
|
|
1
|
+
import type { VibeCursor, VibeItem, VibeItemId, VibePage } from '../types';
|
|
2
|
+
export interface LoadedPageRecord {
|
|
3
|
+
contributionIds: VibeItemId[];
|
|
4
|
+
cursor: VibeCursor;
|
|
5
|
+
next: VibeCursor;
|
|
6
|
+
returnedIds: VibeItemId[];
|
|
7
|
+
}
|
|
2
8
|
export declare function validatePage(page: VibePage): VibePage;
|
|
3
9
|
export declare function appendUniqueItems(current: readonly VibeItem[], incoming: readonly VibeItem[]): VibeItem[];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { CreateVibeOptions, VibeCursor, VibePageRequest } from '../types';
|
|
2
|
+
import type { VibeAutofillController } from './autofillController';
|
|
3
|
+
import { type LoadedPageRecord } from './page';
|
|
4
|
+
import type { VibeRuntimeState } from './runtime';
|
|
5
|
+
interface PageRequestOptions {
|
|
6
|
+
append: boolean;
|
|
7
|
+
autofillController: VibeAutofillController;
|
|
8
|
+
cursor: VibeCursor;
|
|
9
|
+
isCurrent: () => boolean;
|
|
10
|
+
loadPage: (request: VibePageRequest) => ReturnType<NonNullable<CreateVibeOptions['loadPage']>>;
|
|
11
|
+
onLastCursor: (cursor: VibeCursor) => void;
|
|
12
|
+
onPages: (pages: readonly LoadedPageRecord[]) => void;
|
|
13
|
+
options: CreateVibeOptions;
|
|
14
|
+
signal: AbortSignal;
|
|
15
|
+
state: VibeRuntimeState;
|
|
16
|
+
}
|
|
17
|
+
export declare function performPageRequest({ append, autofillController, cursor, isCurrent, loadPage, onLastCursor, onPages, options, signal, state, }: PageRequestOptions): Promise<void>;
|
|
18
|
+
export {};
|
|
@@ -9,6 +9,8 @@ interface RemovalControllerOptions {
|
|
|
9
9
|
historyLimit: number | undefined;
|
|
10
10
|
loadNext: () => Promise<void>;
|
|
11
11
|
onActivate: (postId: VibeItemId) => void;
|
|
12
|
+
onItemsRemoved: (postIds: readonly VibeItemId[]) => void;
|
|
13
|
+
onItemsRestored: (postIds: readonly VibeItemId[]) => void;
|
|
12
14
|
retryEnd: () => Promise<void>;
|
|
13
15
|
state: VibeRuntimeState;
|
|
14
16
|
surface: () => VibeSurfaceExpose | null;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { CreateVibeOptions, VibeCursor, VibeItem, VibeItemId, VibePageLoader } from '../types';
|
|
2
|
+
import { type LoadedPageRecord } from './page';
|
|
3
|
+
interface ReconciliationResult {
|
|
4
|
+
items: VibeItem[];
|
|
5
|
+
lastCursor: VibeCursor;
|
|
6
|
+
next: VibeCursor;
|
|
7
|
+
pages: LoadedPageRecord[];
|
|
8
|
+
replaceFrom: number;
|
|
9
|
+
status: 'complete' | 'paused';
|
|
10
|
+
total?: number;
|
|
11
|
+
}
|
|
12
|
+
interface ReconcileOptions {
|
|
13
|
+
existingItems: readonly VibeItem[];
|
|
14
|
+
loadPage: VibePageLoader;
|
|
15
|
+
shouldPause?: () => boolean;
|
|
16
|
+
signal: AbortSignal;
|
|
17
|
+
}
|
|
18
|
+
export declare class RemovalReconciliationController {
|
|
19
|
+
private readonly delay;
|
|
20
|
+
private readonly enabled;
|
|
21
|
+
private readonly maxReplayPages;
|
|
22
|
+
private readonly pageSize;
|
|
23
|
+
private pages;
|
|
24
|
+
private pending;
|
|
25
|
+
private readonly tombstones;
|
|
26
|
+
constructor(options: CreateVibeOptions);
|
|
27
|
+
completeReconciliation(result: ReconciliationResult): void;
|
|
28
|
+
filterItems(items: readonly VibeItem[]): VibeItem[];
|
|
29
|
+
needsReconciliation(items: readonly VibeItem[]): boolean;
|
|
30
|
+
hasPendingSession(): boolean;
|
|
31
|
+
recordPages(records: readonly LoadedPageRecord[]): void;
|
|
32
|
+
remove(postIds: readonly VibeItemId[]): void;
|
|
33
|
+
reset(): void;
|
|
34
|
+
restore(postIds: readonly VibeItemId[]): void;
|
|
35
|
+
reconcile({ existingItems, loadPage, shouldPause, signal, }: ReconcileOptions): Promise<ReconciliationResult>;
|
|
36
|
+
private createSession;
|
|
37
|
+
private result;
|
|
38
|
+
private findUnderfilledPage;
|
|
39
|
+
private recordPage;
|
|
40
|
+
}
|
|
41
|
+
export {};
|
package/lib/core/runtime.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface VibeRuntimeState {
|
|
|
14
14
|
mediaIndices: Map<VibeItemId, number>;
|
|
15
15
|
next: VibeCursor;
|
|
16
16
|
nextPageError: unknown | null;
|
|
17
|
+
phoneMode: boolean;
|
|
17
18
|
reelAutoAdvance: VibeReelAutoAdvanceState;
|
|
18
19
|
reelForward: VibeReelForwardState;
|
|
19
20
|
reelForwardIndex: number | null;
|