import * as zod_v4_core from 'zod/v4/core';
import * as zod_mini from 'zod/mini';

type Empty = {};
type EntityId = string | number;
type Entity = {
    id: EntityId;
};
type Response<T = never> = {
    data: T;
};
type InitParams = {
    limit: number;
    parent?: string;
};
type NextParams = {
    limit: number;
    parent?: string;
    next: string;
};
type PrevParams = {
    limit: number;
    parent?: string;
    prev: string;
};
type PageParams = {
    limit: number;
    prev?: string;
    next?: string;
};
type ParentPageParams = {
    limit: number;
    parent: string;
    prev?: string;
    next?: string;
};
type Page<T = never> = {
    data: T[];
    paging: {
        next?: string;
        prev?: string;
    };
};
declare function pageParamsSchema(max?: number, defaultLimit?: number): zod_mini.ZodMiniObject<{
    limit: zod_mini.ZodMiniDefault<zod_mini.ZodMiniNumber<unknown>>;
    prev: zod_mini.ZodMiniOptional<zod_mini.ZodMiniString<string>>;
    next: zod_mini.ZodMiniOptional<zod_mini.ZodMiniString<string>>;
}, zod_v4_core.$strip>;
declare const Cursor: {
    of(prev: bigint | number | string | undefined, next: bigint | number | string | undefined): Page["paging"];
    empty(): Page["paging"];
    encode(id: bigint | number | string | undefined): string | undefined;
    decode<T extends "bigint" | "number" | "string" = "bigint">(token: string, type?: T): T extends "bigint" ? bigint : T extends "number" ? number : string;
};
declare const initialPageParam: Page['paging'];
declare function getPreviousPageParam<T = never>(first: Page<T>): Page['paging'] | null;
declare function getNextPageParam<T = never>(last: Page<T>): Page['paging'] | null;
type InfinitePageData<T> = {
    pages: Array<Page<T>>;
    pageParams: Array<Page['paging']>;
};
declare const Pages: {
    flatten<T>(data: InfinitePageData<T>): T[];
    dedupe<T extends Entity>(data: InfinitePageData<T>): T[];
    prepend<T>(item: T): (data: InfinitePageData<T> | undefined) => InfinitePageData<T> | undefined;
    append<T>(item: T): (data: InfinitePageData<T> | undefined) => InfinitePageData<T> | undefined;
    update<T>(updater: T, predicate: (item: T) => boolean): (data: InfinitePageData<T> | undefined) => InfinitePageData<T> | undefined;
    updateById<T extends Entity>(updated: T): (data: InfinitePageData<T> | undefined) => InfinitePageData<T> | undefined;
    remove<T>(predicate: (item: T) => boolean): (data: InfinitePageData<T> | undefined) => InfinitePageData<T> | undefined;
    removeById<T extends Entity>(id: EntityId): (data: InfinitePageData<T> | undefined) => InfinitePageData<T> | undefined;
};
declare const Items: {
    push<T>(newItems: T[]): (data: T[] | undefined) => T[] | undefined;
    unshift<T>(newItems: T[]): (data: T[] | undefined) => T[] | undefined;
    pushAndDedupe<T extends Entity>(newItems: T[]): (data: T[] | undefined) => T[] | undefined;
    unshiftAndDedupe<T extends Entity>(newItems: T[]): (data: T[] | undefined) => T[] | undefined;
    update<T>(updater: T, predicate: (item: T) => boolean): (data: T[] | undefined) => T[] | undefined;
    updateById<T extends Entity>(updated: T): (data: T[] | undefined) => T[] | undefined;
    remove<T>(predicate: (item: T) => boolean): (data: T[] | undefined) => T[] | undefined;
    removeById<T extends Entity>(id: EntityId): (data: T[] | undefined) => T[] | undefined;
};

export { Cursor, type Empty, type Entity, type EntityId, type InfinitePageData, type InitParams, Items, type NextParams, type Page, type PageParams, Pages, type ParentPageParams, type PrevParams, type Response, getNextPageParam, getPreviousPageParam, initialPageParam, pageParamsSchema };
