import { ChangeDetectionStrategy, Component } from '@angular/core' import { FormsModule } from '@angular/forms' import { TuiAutoFocus } from '@taiga-ui/cdk' import { TuiButton, TuiDialogContext, TuiTextfield } from '@taiga-ui/core' import { injectContext, PolymorpheusComponent } from '@taiga-ui/polymorpheus' import { i18nPipe } from '../i18n/i18n.pipe' import { i18nKey } from '../i18n/i18n.providers' @Component({ template: `

{{ options.message }}

@if (options.warning) {

{{ options.warning }}

}
@if (options.label) { } @if (options.useMask) { } @if (error) {

{{ error }}

}
`, styles: ` .warning { color: var(--tui-status-warning); } .error { color: var(--tui-status-negative); } .button { pointer-events: auto; margin-left: 0.25rem; } .masked { -webkit-text-security: disc; } `, imports: [FormsModule, TuiButton, TuiTextfield, TuiAutoFocus, i18nPipe], changeDetection: ChangeDetectionStrategy.OnPush, }) export class PromptModal { private readonly context = injectContext>() masked = this.options.useMask value = this.options.initialValue || '' error = '' get options(): PromptOptions { return this.context.data } cancel() { this.context.$implicit.complete() } submit(value: string) { if (value || !this.options.required) { const { pattern, patternError } = this.options if (pattern && !new RegExp(pattern).test(value)) { this.error = patternError || 'Invalid input' return } this.error = '' this.context.$implicit.next(value) } } } export const PROMPT = new PolymorpheusComponent(PromptModal) export interface PromptOptions { message: i18nKey label?: i18nKey warning?: i18nKey buttonText?: i18nKey placeholder?: i18nKey required?: boolean useMask?: boolean initialValue?: string | null pattern?: string patternError?: string }