import { Observable } from 'rxjs';
import { OnDestroy } from '@angular/core';
import { DbxInjectionComponentConfigWithoutInjector } from '@dereekb/dbx-core';
import { ComponentStore } from '@ngrx/component-store';
import { ObservableOrValueGetter } from '@dereekb/rxjs';
import * as i0 from "@angular/core";
export type DbxMapboxInjectionKey = string;
export interface DbxMapboxInjectionConfig {
    /**
     * Unique key that identifies this config specifically.
     *
     * Keys should all be unique. The system does not expect duplicate keys. Modifications to injectionConfig should occur through the observable value.
     */
    readonly key: DbxMapboxInjectionKey;
    /**
     * Arbitrary injection type. Is used for filtering on configurations.
     */
    readonly type?: string;
    /**
     * Injection configuration. The injector is disallowed, as the parent injector must include the mapbox component.
     */
    readonly injectionConfig: ObservableOrValueGetter<DbxInjectionComponentConfigWithoutInjector>;
}
export interface DbxMapboxMapInjectionStoreState {
    /**
     * Current map of injection keys and configurations.
     */
    readonly map: Map<DbxMapboxInjectionKey, DbxMapboxInjectionConfig>;
}
/**
 * Store used for storing injectable content into the map.
 */
export declare class DbxMapboxInjectionStore extends ComponentStore<DbxMapboxMapInjectionStoreState> implements OnDestroy {
    constructor();
    readonly map$: Observable<Map<DbxMapboxInjectionKey, DbxMapboxInjectionConfig>>;
    readonly allInjectionConfigs$: Observable<DbxMapboxInjectionConfig[]>;
    readonly addInjectionConfig: (observableOrValue: DbxMapboxInjectionConfig | Observable<DbxMapboxInjectionConfig>) => import("rxjs").Subscription;
    readonly removeInjectionConfigWithKey: (observableOrValue: string | Observable<string>) => import("rxjs").Subscription;
    static ɵfac: i0.ɵɵFactoryDeclaration<DbxMapboxInjectionStore, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DbxMapboxInjectionStore>;
}
export declare function updateDbxMapboxMapInjectionStoreStateWithInjectionConfig(state: DbxMapboxMapInjectionStoreState, config: DbxMapboxInjectionConfig): {
    map: Map<string, DbxMapboxInjectionConfig>;
};
export declare function updateDbxMapboxMapInjectionStoreStateWithRemovedKey(state: DbxMapboxMapInjectionStoreState, key: DbxMapboxInjectionKey): DbxMapboxMapInjectionStoreState;
