/**
 * Copyright (c) OpenLens Maintainers. All rights reserved.
 * Licensed under MIT License. See LICENSE in root directory for more information.
 */
import type { Runnable } from "@openlens/run-many";
import type { DiContainerForInjection, Injectable, InjectionToken } from "@ogre-tools/injectable";
export interface Initializable<T> {
    readonly rootId: string;
    readonly stateToken: InjectionToken<T, void>;
}
export declare const getInitializable: <T>(rootId: string) => Initializable<T>;
export type ImplInitializableInjectionTokensArgs<T> = {
    token: Initializable<T>;
    init: (di: DiContainerForInjection) => T | Promise<T>;
} & ({
    phase: InjectionToken<Runnable<void>, void>;
    runAfter?: Injectable<Runnable<void>, Runnable<void>, void>[];
} | {
    runAfter: Injectable<Runnable<void>, Runnable<void>, void>;
    phase?: undefined;
});
export declare const getInjectablesForInitializable: <T>({ init, token: { rootId, stateToken, }, ...rest }: ImplInitializableInjectionTokensArgs<T>) => {
    stateInjectable: Injectable<T, T, void>;
    initializationInjectable: Injectable<{
        run: () => Promise<void>;
        runAfter: Injectable<Runnable<void>, Runnable<void>, void> | Injectable<Runnable<void>, Runnable<void>, void>[] | undefined;
    }, Runnable<void>, void>;
};
