{"version":3,"file":"taiga-ui-cdk-classes.mjs","sources":["../../../projects/cdk/classes/value-transformer.ts","../../../projects/cdk/classes/control.ts","../../../projects/cdk/classes/validation-error.ts","../../../projects/cdk/classes/taiga-ui-cdk-classes.ts"],"sourcesContent":["import {type FactoryProvider, inject, type ProviderToken} from '@angular/core';\nimport {identity} from 'rxjs';\n\nexport abstract class TuiValueTransformer<From, To = unknown> {\n    public abstract toControlValue(componentValue: From): To;\n    public abstract fromControlValue(controlValue: To): From;\n}\n\nexport function tuiValueTransformerFrom<\n    T extends {valueTransformer: TuiValueTransformer<unknown>},\n>(token: ProviderToken<T>): FactoryProvider {\n    return {\n        provide: TuiValueTransformer,\n        useFactory: () => inject(token).valueTransformer,\n    };\n}\n\nexport class TuiNonNullableValueTransformer<T> extends TuiValueTransformer<T | null, T> {\n    private prevValue!: T;\n\n    public fromControlValue(value: T): T {\n        this.prevValue = value;\n\n        return value;\n    }\n\n    public toControlValue(value: T | null): T {\n        this.prevValue = value ?? this.prevValue;\n\n        return this.prevValue;\n    }\n}\n\nexport const TUI_IDENTITY_VALUE_TRANSFORMER: TuiValueTransformer<any, any> = {\n    fromControlValue: identity,\n    toControlValue: identity,\n};\n","import {\n    ChangeDetectorRef,\n    computed,\n    Directive,\n    inject,\n    input,\n    type Provider,\n    signal,\n    type Type,\n    untracked,\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {\n    type ControlValueAccessor,\n    type FormControlStatus,\n    NgControl,\n    NgModel,\n} from '@angular/forms';\nimport {EMPTY_FUNCTION} from '@taiga-ui/cdk/constants';\nimport {TUI_FALLBACK_VALUE} from '@taiga-ui/cdk/tokens';\nimport {tuiProvide} from '@taiga-ui/cdk/utils/di';\nimport {\n    delay,\n    distinctUntilChanged,\n    EMPTY,\n    filter,\n    map,\n    merge,\n    startWith,\n    Subject,\n    switchMap,\n} from 'rxjs';\n\nimport {TUI_IDENTITY_VALUE_TRANSFORMER, TuiValueTransformer} from './value-transformer';\n\nconst FLAGS = {self: true, optional: true};\n\n/**\n * Basic ControlValueAccessor class to build form components upon\n */\n@Directive()\nexport abstract class TuiControl<T> implements ControlValueAccessor {\n    private readonly fallback = inject(TUI_FALLBACK_VALUE, FLAGS) as T;\n    private readonly refresh$ = new Subject<void>();\n    private readonly internal = signal(this.fallback);\n\n    protected readonly control = inject(NgControl, {self: true});\n    protected readonly cdr = inject(ChangeDetectorRef);\n    protected transformer =\n        inject(TuiValueTransformer, FLAGS) ?? TUI_IDENTITY_VALUE_TRANSFORMER;\n\n    public readonly value = computed(() => this.internal() ?? this.fallback);\n    public readonly readOnly = input(false);\n    public readonly pseudoInvalid = input<boolean | null>(null, {alias: 'invalid'});\n    public readonly touched = signal(false);\n    public readonly status = signal<FormControlStatus | undefined>(undefined);\n    public readonly disabled = computed(() => this.status() === 'DISABLED');\n    public readonly interactive = computed(() => !this.disabled() && !this.readOnly());\n    public readonly invalid = computed(() =>\n        this.pseudoInvalid() === null\n            ? this.interactive() && this.touched() && this.status() === 'INVALID'\n            : !!this.pseudoInvalid() && this.interactive(),\n    );\n\n    public readonly mode = computed(() =>\n        // eslint-disable-next-line no-nested-ternary\n        this.readOnly() ? 'readonly' : this.invalid() ? 'invalid' : 'valid',\n    );\n\n    public onTouched = EMPTY_FUNCTION;\n    public onChange: (value: T) => void = EMPTY_FUNCTION;\n\n    constructor() {\n        this.control.valueAccessor = this;\n        this.refresh$\n            .pipe(\n                delay(0),\n                startWith(null),\n                map(() => this.control.control),\n                filter(Boolean),\n                distinctUntilChanged(),\n                switchMap((c) =>\n                    merge(\n                        c.valueChanges,\n                        c.statusChanges,\n                        (c as any).events || EMPTY,\n                    ).pipe(startWith(null)),\n                ),\n                takeUntilDestroyed(),\n            )\n            .subscribe(() => this.update());\n    }\n\n    public registerOnChange(onChange: (value: unknown) => void): void {\n        this.refresh$.next();\n\n        this.onChange = (value: T) => {\n            const internal = untracked(() => this.internal());\n\n            if (value === internal) {\n                return;\n            }\n\n            onChange(this.transformer.toControlValue(value));\n            this.internal.set(value);\n            this.update();\n        };\n    }\n\n    public registerOnTouched(onTouched: () => void): void {\n        this.onTouched = () => {\n            onTouched();\n            this.update();\n        };\n    }\n\n    public setDisabledState(): void {\n        this.update();\n    }\n\n    public writeValue(value: T | null): void {\n        // TODO: https://github.com/angular/angular/issues/14988\n        const safe = this.control instanceof NgModel ? this.control.model : value;\n\n        this.internal.set(this.transformer.fromControlValue(safe));\n        this.update();\n    }\n\n    private update(): void {\n        this.status.set(this.control.control?.status);\n        this.touched.set(!!this.control.control?.touched);\n        this.cdr.markForCheck();\n    }\n}\n\nexport function tuiAsControl<T>(control: Type<TuiControl<T>>): Provider {\n    return tuiProvide(TuiControl, control);\n}\n","import {type PolymorpheusContent} from '@taiga-ui/polymorpheus';\n\nexport class TuiValidationError<T extends Record<string, any> = Record<string, unknown>> {\n    constructor(\n        public readonly message: PolymorpheusContent<T>,\n        public readonly context: T = {} as T,\n    ) {}\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}