import { z } from 'zod';

type PaginableOptions<T> = {
    page?: number;
    pageSize?: number;
    filters?: T;
};
declare const createPaginableOptionsSchema: <T extends z.ZodTypeAny>(optionsSchema: T) => z.ZodObject<{
    page: z.ZodDefault<z.ZodNumber>;
    pageSize: z.ZodDefault<z.ZodNumber>;
    filters: z.ZodDefault<T>;
}, "strip", z.ZodTypeAny, z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    page: z.ZodDefault<z.ZodNumber>;
    pageSize: z.ZodDefault<z.ZodNumber>;
    filters: z.ZodDefault<T>;
}>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
    page: z.ZodDefault<z.ZodNumber>;
    pageSize: z.ZodDefault<z.ZodNumber>;
    filters: z.ZodDefault<T>;
}>, any>[k]; } : never, z.baseObjectInputType<{
    page: z.ZodDefault<z.ZodNumber>;
    pageSize: z.ZodDefault<z.ZodNumber>;
    filters: z.ZodDefault<T>;
}> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
    page: z.ZodDefault<z.ZodNumber>;
    pageSize: z.ZodDefault<z.ZodNumber>;
    filters: z.ZodDefault<T>;
}>[k_1]; } : never>;
type PaginableResponse<T> = {
    data: T[];
    page: number;
    pageSize: number;
    total: number;
    totalPages: number;
};
type PatchAction<T extends string> = {
    op: 'add' | 'replace';
    path: T;
    value: string;
} | {
    op: 'remove';
    path: T;
};

export { type PaginableOptions, type PaginableResponse, type PatchAction, createPaginableOptionsSchema };
