import { type Auth, type User } from "firebase/auth";
import { Firestore, QueryConstraint, type DocumentData, type FirestoreDataConverter, type Unsubscribe } from "firebase/firestore";
import { WritableState } from "../WritableState.svelte.js";
import { type FromFirestore, type ToFirestore } from "../utils.svelte.js";
export type QueryParamsFn = (user: User | null) => QueryConstraint[];
export type PathParam = string | ((user: User | null) => string | null | undefined);
export type FirestoreStateOptions<DataDb extends DocumentData, DataApp extends DocumentData> = {
    auth?: Auth;
    firestore: Firestore;
    listen?: boolean;
    fromFirestore?: FromFirestore<DataApp, DataDb>;
    toFirestore?: ToFirestore<DataApp, DataDb>;
    pathFunctionOrString?: PathParam;
    converter?: FirestoreDataConverter<DataApp, DataDb>;
};
export declare class FirestoreState<DataDb extends DocumentData, DataApp extends DocumentData, State> {
    protected readonly auth?: Auth;
    protected readonly firestore: Firestore;
    protected readonly listen: boolean;
    protected readonly getUserPromise: Promise<User | null>;
    protected readonly converter: FirestoreDataConverter<DataApp, DataDb>;
    protected readonly pathFunctionOrString?: PathParam;
    protected readonly dataState: WritableState<State | null | undefined>;
    protected unsub: Unsubscribe | undefined;
    protected initPromise: Promise<unknown> | undefined;
    loading: boolean;
    constructor({ auth, firestore, listen, fromFirestore, toFirestore, pathFunctionOrString, converter }: FirestoreStateOptions<DataDb, DataApp>);
    get_path_string(user: User | null): string | null;
    start(): Promise<void>;
    private stop;
    get data(): State | null | undefined;
    set data(data: State | null);
    protected fetch_data(): Promise<void>;
    protected init(): Promise<void>;
    protected listen_data(): Promise<void>;
    refetch(): Promise<void>;
}
