@taiga-ui/core
Version:
Core library for creating Angular components and applications using Taiga UI
17 lines (16 loc) • 1.47 kB
TypeScript
import { type Injector } from '@angular/core';
import { type Observable } from 'rxjs';
import { type TuiDialogContext, type TuiDialogOptions } from './dialog.interfaces';
type SingleUnionOrNever<T, U = T> = [T] extends [never] ? never : T extends U ? [U] extends [T] ? T : never : never;
type ReplaceAny<T> = 0 extends T & 1 ? void : T;
type ContextKeys<T> = {
[K in keyof T]: ReplaceAny<T[K]> extends TuiDialogContext<any, any> | null ? K : never;
}[keyof T];
type AssertNotMultipleContexts<T, K extends keyof T> = [K] extends [never] ? new (...args: any[]) => T : [SingleUnionOrNever<K>] extends [never] ? 'Component has multiple context. Cannot determine the type...' : new (...args: any[]) => T;
type ExtractDialogData<T, K extends keyof T = ContextKeys<T>> = [K] extends [never] ? void : [SingleUnionOrNever<K>] extends [never] ? never : T[K] extends TuiDialogContext<any, infer D> | null ? D : void;
type ExtractDialogResult<T, K extends keyof T = ContextKeys<T>> = [K] extends [never] ? void : [SingleUnionOrNever<K>] extends [never] ? never : T[K] extends TuiDialogContext<infer R, any> | null ? R : void;
type Options<T> = Omit<TuiDialogOptions<T>, 'data'> & {
injector: Injector;
};
export declare function tuiDialog<T, K extends ContextKeys<T>, D extends ExtractDialogData<T, K>, R extends ExtractDialogResult<T, K>>(component: AssertNotMultipleContexts<T, K>, { injector, ...options }?: Partial<Options<D>>): (data: D) => Observable<R>;
export {};