import { type Provider, type Type } from '@angular/core';
import { type TuiContext } from '@taiga-ui/cdk/types';
import { PolymorpheusComponent, type PolymorpheusContent } from '@taiga-ui/polymorpheus';
import { Observable, type Observer } from 'rxjs';
import { type TuiPortalService } from './service';
import * as i0 from "@angular/core";
export type TuiPortalContext<T, O = void> = T & TuiContext<Observer<O>> & {
    readonly content: PolymorpheusContent<TuiPortalContext<T, O>>;
    readonly createdAt: number;
    readonly id: string;
    completeWith(value: O): void;
};
export declare abstract class TuiPortal<T, K = void> {
    protected readonly service: TuiPortalService;
    protected abstract readonly component: Type<any>;
    protected abstract readonly options: T;
    private readonly injector;
    constructor(service: TuiPortalService);
    open<G = void>(content: PolymorpheusContent<TuiPortalContext<T, K extends void ? G : K>>, options?: Partial<T>): Observable<K extends void ? G : K>;
    protected add(component: PolymorpheusComponent<unknown>): () => void;
    static ɵfac: i0.ɵɵFactoryDeclaration<TuiPortal<any, any>, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<TuiPortal<any, any>>;
}
export declare function tuiAsPortal(portal: typeof TuiPortal<any>): Provider;
