import { type Injector } from '@furystack/inject';
import { deserializeQueryString as defaultDeserializeQueryString, serializeToQueryString as defaultSerializeToQueryString } from '@furystack/rest';
import { ObservableValue } from '@furystack/utils';
export declare class LocationService implements Disposable {
    private readonly serializeToQueryString;
    readonly deserializeQueryString: (fullQueryString: string) => Record<string, unknown>;
    constructor(serializeToQueryString?: <T extends object>(queryObject: T) => string, deserializeQueryString?: (fullQueryString: string) => Record<string, unknown>);
    private originalPushState;
    private originalReplaceState;
    [Symbol.dispose](): void;
    /**
     * Observable value that will be updated when the location pathname (e.g. /page/1) changes
     */
    onLocationPathChanged: ObservableValue<string>;
    /**
     * Observable value that will be updated when the location hash (e.g. #hash) changes
     */
    onLocationHashChanged: ObservableValue<string>;
    /**
     * Observable value that will be updated when the location search (e.g. ?search=1) changes
     */
    onLocationSearchChanged: ObservableValue<string>;
    onDeserializedLocationSearchChanged: ObservableValue<any>;
    locationDeserializerObserver: import("@furystack/utils").ValueObserver<string>;
    updateState: () => void;
    readonly searchParamObservables: Map<string, ObservableValue<any>>;
    /**
     *
     * @param key The search param key (e.g. ?search=1 -> search)
     * @param defaultValue The default value if not provided
     * @returns An observable with the current value (or default value) of the search param
     */
    useSearchParam<T>(key: string, defaultValue: T): ObservableValue<T>;
    private popStateListener;
    private hashChangeListener;
}
export declare const useCustomSearchStateSerializer: (injector: Injector, serialize: typeof defaultSerializeToQueryString, deserialize: typeof defaultDeserializeQueryString) => void;
//# sourceMappingURL=location-service.d.ts.map