import { LocationQuery, Router } from 'vue-router';
import { DataType, GenericParsedQuery, NavigationOperation, ParsedQuery, QueryParameterDefinitions, TypedParsedQuery } from './types';
export * from './datatypes';
export * from './types';
declare const proxiedQuery: ParsedQuery;
/**
 * The main composition API entrypoint. Returns a reactive Query object with parsed values
 *
 * @typeParam T The type of the returned query object. An interface defining query parameters and their types
 * might be passed. If not a generic (untyped) interface is used.
 */
export declare function useQuery<T = GenericParsedQuery>(): TypedParsedQuery<T>;
/**
 * @internal
 */
export declare function useRawQuery(): {
    query: {
        [x: string]: any;
        define: (key: string, datatype: DataType<any>, defaultValue: any) => void;
        addValue: (key: string, value: any, datatype?: DataType<any> | undefined) => void;
        removeValue: (key: string, value: any, datatype?: DataType<any> | undefined) => void;
        __definition: QueryParameterDefinitions;
    };
    rawQuery: LocationQuery;
    enabled: boolean;
    serializedId: number;
};
export declare function watchQuery(fn: (...x: any[]) => any): void;
export declare function queryWatchSource(): number;
declare const QuerySynchronizer: {
    install(app: any, { router, datatypes, debug, navigationOperation }: {
        router: Router;
        datatypes?: DataType<any>[] | undefined;
        debug?: boolean | undefined;
        navigationOperation?: NavigationOperation | undefined;
    }): void;
};
/**
 * Vue plugin. Usage:
 * ```
 * createApp(App).use(router).use(QuerySynchronizer, { router, debug: true })
 * ```
 *
 * @param router application's router
 * @param datatypes an optional array of custom (user-defined) datatypes
 * @param debug if set to true, print library's debug messages
 */
export default QuerySynchronizer;
export { proxiedQuery as query };
