UNPKG

@taiga-ui/core

Version:

Core library for creating Angular components and applications using Taiga UI

17 lines (16 loc) 1.47 kB
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 {};