{"version":3,"file":"koobiq-components-form-field.mjs","sources":["../../../packages/components/form-field/cleaner.ts","../../../packages/components/form-field/hint.ts","../../../packages/components/form-field/hint.html","../../../packages/components/form-field/error.ts","../../../packages/components/form-field/fieldset.ts","../../../packages/components/form-field/form-field-control.ts","../../../packages/components/form-field/label.ts","../../../packages/components/form-field/password-hint.ts","../../../packages/components/form-field/password-toggle.ts","../../../packages/components/form-field/prefix.ts","../../../packages/components/form-field/reactive-password-hint.ts","../../../packages/components/form-field/stepper.ts","../../../packages/components/form-field/suffix.ts","../../../packages/components/form-field/form-field.ts","../../../packages/components/form-field/form-field.html","../../../packages/components/form-field/validate.directive.ts","../../../packages/components/form-field/form-field.module.ts","../../../packages/components/form-field/koobiq-components-form-field.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { KbqComponentColors } from '@koobiq/components/core';\nimport { KbqIconButton } from '@koobiq/components/icon';\n\n/**\n * Element to be placed in end of the form field.\n * Resets form control by click.\n */\n@Component({\n    selector: 'kbq-cleaner',\n    template: `\n        <ng-content />\n    `,\n    styleUrls: ['cleaner.scss', '../icon/icon-button.scss', '../icon/icon-button-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqCleaner',\n    host: {\n        class: 'kbq-cleaner'\n    }\n})\nexport class KbqCleaner extends KbqIconButton {\n    constructor() {\n        super();\n\n        const initialIcon = 'kbq-circle-xmark_16';\n\n        this.iconName = initialIcon;\n        this.svgIconName.next(initialIcon);\n        this.color = KbqComponentColors.ContrastFade;\n        this.autoColor = true;\n    }\n}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { KbqColorDirective } from '@koobiq/components/core';\n\nlet nextUniqueId = 0;\n\n/** Hint text to be shown below the form field control. */\n@Component({\n    selector: 'kbq-hint',\n    exportAs: 'kbqHint',\n    templateUrl: './hint.html',\n    styleUrls: ['./hint.scss', './hint-tokens.scss'],\n    host: {\n        class: 'kbq-hint',\n        '[attr.id]': 'id',\n        '[class.kbq-hint_fill-text-off]': 'fillTextOff',\n        '[class.kbq-hint_compact]': 'compact'\n    },\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqHint extends KbqColorDirective {\n    /** Unique ID for the hint. */\n    @Input() id: string = `kbq-hint-${nextUniqueId++}`;\n\n    /** Disables `color` for the hint text. */\n    @Input({ transform: booleanAttribute }) fillTextOff: boolean = false;\n\n    /** Makes the hint size smaller. */\n    @Input({ transform: booleanAttribute }) compact: boolean = false;\n}\n","<ng-content select=\"[kbq-icon]\" />\n\n<span class=\"kbq-hint__text\">\n    <ng-content />\n</span>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\nimport { KbqComponentColors } from '@koobiq/components/core';\nimport { KbqHint } from './hint';\n\n/** Error text to be shown below the form field control. */\n@Component({\n    selector: 'kbq-error',\n    exportAs: 'kbqError',\n    templateUrl: './hint.html',\n    styleUrls: [\n        './hint.scss',\n        './hint-tokens.scss'\n    ],\n    host: {\n        class: 'kbq-error'\n    },\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class KbqError extends KbqHint {\n    constructor() {\n        super();\n\n        this.color = KbqComponentColors.Error;\n    }\n}\n","import {\n    ChangeDetectionStrategy,\n    Component,\n    computed,\n    contentChild,\n    Directive,\n    ElementRef,\n    Signal,\n    ViewEncapsulation\n} from '@angular/core';\n\n/** Directive for marking an element as legend of `KbqFieldset` */\n@Directive({\n    selector: '[kbqLegend]',\n    host: {\n        class: 'kbq-legend'\n    }\n})\nexport class KbqLegend {}\n\n/** Directive for marking elements as items inside `KbqFieldset` */\n@Directive({\n    selector: '[kbqFieldsetItem]',\n    host: {\n        class: 'kbq-fieldset-item'\n    }\n})\nexport class KbqFieldsetItem {}\n\n/**\n * A group of form-fields and related controls.\n * Container component emulating the native `fieldset` element.\n */\n@Component({\n    selector: 'kbq-fieldset',\n    template: `\n        <ng-content select=\"[kbqLegend]\" />\n\n        <div class=\"kbq-fieldset__container\">\n            <ng-content />\n        </div>\n\n        <div class=\"kbq-form-field__hint\">\n            <ng-content select=\"kbq-error\" />\n\n            <ng-content select=\"kbq-hint, kbq-password-hint, kbq-reactive-password-hint\" />\n        </div>\n    `,\n    styleUrls: ['./fieldset.scss', './fieldset-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        class: 'kbq-fieldset',\n        role: 'group',\n        '[attr.aria-label]': 'ariaLabel()'\n    }\n})\nexport class KbqFieldset {\n    private readonly legend: Signal<ElementRef<HTMLElement> | undefined> = contentChild(KbqLegend, {\n        read: ElementRef\n    });\n\n    /**\n     * Computes the aria-label from the inner text of the legend element.\n     * Used to enhance accessibility by labeling the group.\n     * @docs-private\n     */\n    protected readonly ariaLabel = computed(() => this.legend()?.nativeElement?.innerText);\n}\n","import { NgControl } from '@angular/forms';\nimport { Observable } from 'rxjs';\n\n/** An interface which allows a control to work inside of a `KbqFormField`. */\nexport abstract class KbqFormFieldControl<T> {\n    /** The value of the control. */\n    value: T | null;\n\n    /**\n     * Stream that emits whenever the state of the control changes such that the parent `KbqFormField`\n     * needs to run change detection.\n     */\n    readonly stateChanges: Observable<void>;\n\n    /** The element ID for this control. */\n    readonly id: string;\n\n    /** The placeholder for this control. */\n    readonly placeholder: string;\n\n    /** Gets the NgControl for this control. */\n    readonly ngControl: NgControl | null;\n\n    /** Whether the control is focused. */\n    readonly focused: boolean;\n\n    /** Whether the control is empty. */\n    readonly empty: boolean;\n\n    /** Whether the control is required. */\n    readonly required: boolean;\n\n    /** Whether the control is disabled. */\n    readonly disabled: boolean;\n\n    /** Whether the control is in an error state. */\n    readonly errorState: boolean;\n\n    /**\n     * An optional name for the control type that can be used to distinguish `kbq-form-field` elements\n     * based on their control type. The form field will add a class,\n     * `kbq-form-field-type-{{controlType}}` to its root element.\n     */\n    readonly controlType?: string;\n\n    /** Handles a click on the control's container. */\n    abstract onContainerClick(event: MouseEvent): void;\n\n    /** Focuses the control. */\n    abstract focus(options?: FocusOptions): void;\n\n    /** Opens control's overlay. */\n    abstract open?(): void;\n}\n","import { Directive } from '@angular/core';\n\n/** Label for the form field. */\n@Directive({\n    selector: 'kbq-label',\n    exportAs: 'kbqLabel',\n    host: {\n        class: 'kbq-label'\n    }\n})\nexport class KbqLabel {}\n","import {\n    AfterContentInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    forwardRef,\n    Inject,\n    Input,\n    Optional,\n    QueryList,\n    ViewEncapsulation\n} from '@angular/core';\nimport { KBQ_FORM_FIELD_REF, KbqComponentColors } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { Subject } from 'rxjs';\nimport { KbqFormField } from './form-field';\nimport { KbqHint } from './hint';\n\nlet nextPasswordHintUniqueId = 0;\n\nexport enum PasswordRules {\n    Length,\n    UpperLatin,\n    LowerLatin,\n    Digit,\n    LatinAndSpecialSymbols,\n    Custom\n}\n\nexport const regExpPasswordValidator = {\n    [PasswordRules.LowerLatin]: RegExp(/^(?=.*?[a-z])/),\n    [PasswordRules.UpperLatin]: RegExp(/^(?=.*?[A-Z])/),\n    [PasswordRules.Digit]: RegExp(/^(?=.*?[0-9])/),\n    [PasswordRules.LatinAndSpecialSymbols]: RegExp(/[^ !`\"'#№$%&()*+,-./\\\\:;<=>?@[\\]^_{|}~A-Za-z0-9]/)\n};\n\nexport const hasPasswordStrengthError = (passwordHints: QueryList<KbqPasswordHint>): boolean => {\n    return passwordHints.some((hint) => hint.hasError);\n};\n\n@Component({\n    selector: 'kbq-password-hint',\n    imports: [KbqIconModule],\n    template: `\n        <i class=\"kbq-password-hint__icon\" [kbq-icon]=\"icon\" [color]=\"iconColor\"></i>\n\n        <span class=\"kbq-hint__text\">\n            <ng-content />\n        </span>\n    `,\n    styleUrls: ['hint.scss', 'hint-tokens.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    host: {\n        '[attr.id]': 'id',\n        class: 'kbq-hint kbq-password-hint',\n        '[class.kbq-success]': 'checked',\n        '[class.kbq-error]': 'hasError',\n        '[class.kbq-hint_fill-text-off]': 'fillTextOff',\n        '[class.kbq-hint_compact]': 'compact'\n    }\n})\nexport class KbqPasswordHint extends KbqHint implements AfterContentInit {\n    @Input() id: string = `kbq-hint-${nextPasswordHintUniqueId++}`;\n\n    @Input() rule: PasswordRules | any;\n\n    @Input() min: number;\n    @Input() max: number;\n    @Input() regex: RegExp | null;\n    @Input('checkRule') customCheckRule: (value: string) => boolean;\n\n    @Input() viewFormField?: KbqFormField;\n\n    @Input() fillTextOff: boolean = true;\n\n    hasError: boolean = false;\n    checked: boolean = false;\n\n    get icon(): string {\n        return this.checked ? 'kbq-check-s_16' : 'kbq-xmark-s_16';\n    }\n\n    /**\n     * The form field hint icon color.\n     *\n     * @docs-private\n     */\n    protected get iconColor(): KbqComponentColors {\n        if (this.control?.ngControl.untouched && this.control?.ngControl.pristine) {\n            return KbqComponentColors.ContrastFade;\n        }\n\n        return this.checked ? KbqComponentColors.Success : KbqComponentColors.Error;\n    }\n\n    private checkRule: (value: string) => boolean;\n\n    private get control() {\n        return this.formField.control;\n    }\n\n    private lastControlValue: string;\n\n    constructor(\n        private changeDetectorRef: ChangeDetectorRef,\n        @Optional() @Inject(forwardRef(() => KBQ_FORM_FIELD_REF)) private formField: any\n    ) {\n        super();\n        this.color = KbqComponentColors.ContrastFade;\n        this.setDefaultColor(KbqComponentColors.ContrastFade);\n    }\n\n    ngAfterContentInit(): void {\n        this.formField = this.formField || this.viewFormField;\n\n        if (this.rule === PasswordRules.Custom && this.regex === undefined && this.customCheckRule === undefined) {\n            throw Error('You should set [regex] or [checkRule] for PasswordRules.Custom');\n        }\n\n        if (this.rule === PasswordRules.Length && (this.min || this.max) === null) {\n            throw Error('For [rule] \"Length\" need set [min] and [max]');\n        }\n\n        if (this.rule === PasswordRules.Length) {\n            this.checkRule = this.checkLengthRule;\n        } else if ([PasswordRules.UpperLatin, PasswordRules.LowerLatin, PasswordRules.Digit].includes(this.rule)) {\n            this.regex = regExpPasswordValidator[this.rule];\n            this.checkRule = this.checkRegexRule;\n        } else if (this.rule === PasswordRules.LatinAndSpecialSymbols) {\n            this.regex = regExpPasswordValidator[this.rule];\n            this.checkRule = this.checkSpecialSymbolsRegexRule;\n        } else if (this.rule === PasswordRules.Custom) {\n            this.checkRule = this.regex === undefined ? this.customCheckRule : this.checkRegexRule;\n        } else {\n            throw Error(`Unknown [rule]=${this.rule}`);\n        }\n\n        // prevent error when formField.control is undefined\n        setTimeout(() => {\n            this.formField.control.stateChanges.subscribe(this.checkValue);\n\n            (this.formField.control as unknown as { checkRule: Subject<any> }).checkRule.subscribe(() => {\n                this.checked = this.checkRule(this.control.value);\n                this.hasError = !this.checkRule(this.control.value);\n            });\n        });\n    }\n\n    private checkValue = () => {\n        if (this.control.focused && this.isValueChanged()) {\n            this.hasError = false;\n\n            this.checked = this.checkRule(this.control.value);\n        } else if (!this.control.focused && !this.isValueChanged()) {\n            this.hasError = !this.checkRule(this.control.value);\n        }\n\n        if (!this.control.required && !this.control.value) {\n            this.checked = this.hasError = false;\n        }\n\n        this.lastControlValue = this.control.value;\n        this.changeDetectorRef.markForCheck();\n    };\n\n    private checkLengthRule(value: string): boolean {\n        return value.length >= this.min && value.length <= this.max;\n    }\n\n    private checkRegexRule = (value: string): boolean => {\n        return !!this.regex?.test(value);\n    };\n\n    private checkSpecialSymbolsRegexRule(value: string): boolean {\n        return !!value && !this.regex?.test(value);\n    }\n\n    private isValueChanged(): boolean {\n        return this.lastControlValue !== this.formField.control.value;\n    }\n}\n","import { FocusMonitor } from '@angular/cdk/a11y';\n\nimport {\n    AfterContentInit,\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    inject,\n    Input,\n    numberAttribute,\n    OnDestroy,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { KBQ_FORM_FIELD_REF, kbqInjectNativeElement, PopUpTriggers } from '@koobiq/components/core';\nimport { KbqIconButton, KbqIconModule } from '@koobiq/components/icon';\nimport { KbqToolTipModule, KbqTooltipTrigger } from '@koobiq/components/tooltip';\nimport { KbqFormField } from './form-field';\nimport { KbqFormFieldControl } from './form-field-control';\n\n// @TODO Temporary solution to resolve circular dependency (#DS-3893)\ntype KbqInputPassword = KbqFormFieldControl<unknown> & {\n    elementType: string;\n    toggleType: () => void;\n};\n\n// @TODO Temporary solution to resolve circular dependency (#DS-3893)\nconst isInputPassword = (control: KbqFormFieldControl<unknown>): control is KbqInputPassword => {\n    return 'elementType' in control;\n};\n\nconst getKbqPasswordToggleMissingControlError = (): Error => {\n    return Error('kbq-password-toggle should use with kbqInputPassword');\n};\n\n/** Component which changes password visibility. */\n@Component({\n    selector: `kbq-password-toggle`,\n    imports: [KbqIconModule, KbqToolTipModule],\n    template: `\n        <ng-content>\n            <i [kbq-icon-button]=\"iconClass\" [color]=\"hasError ? 'error' : 'contrast-fade'\" [tabindex]=\"tabindex\"></i>\n        </ng-content>\n    `,\n    styleUrls: ['password-toggle.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqPasswordToggle',\n    host: {\n        class: 'kbq-password-toggle',\n        // legacy style for backward compatibility\n        '[style.visibility]': 'visibility',\n        '[class.cdk-visually-hidden]': 'visibility === \"hidden\"',\n        '[attr.aria-hidden]': 'visibility === \"hidden\"',\n        '(click)': 'toggle($event)',\n        '(keydown.ENTER)': 'toggle($event)',\n        '(keydown.SPACE)': 'toggle($event)'\n    }\n})\nexport class KbqPasswordToggle extends KbqTooltipTrigger implements AfterViewInit, OnDestroy, AfterContentInit {\n    protected readonly nativeElement = kbqInjectNativeElement();\n    protected readonly focusMonitor = inject(FocusMonitor);\n    protected readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n    // @TODO fix types (#DS-2915)\n    private readonly formField = inject(KBQ_FORM_FIELD_REF, { optional: true }) as unknown as KbqFormField | undefined;\n\n    @Input({ transform: numberAttribute }) tabindex: number = 0;\n\n    /**\n     * @docs-private\n     */\n    @ViewChild(KbqIconButton) readonly icon: KbqIconButton;\n\n    @Input('kbqTooltipNotHidden')\n    get content(): string | TemplateRef<any> {\n        return this.control.elementType === 'password' ? this.kbqTooltipHidden : this._content;\n    }\n\n    set content(content: string | TemplateRef<any>) {\n        this._content = content;\n\n        this.updateData();\n    }\n\n    @Input() kbqTooltipHidden: string | TemplateRef<any>;\n\n    protected hasError: boolean = false;\n\n    /** Form field password control. */\n    private get control(): KbqInputPassword {\n        const control = this.formField?.control;\n\n        if (!control || !isInputPassword(control)) {\n            throw getKbqPasswordToggleMissingControlError();\n        }\n\n        return control;\n    }\n\n    /**\n     * @docs-private\n     */\n    get hidden(): boolean {\n        return this.control.elementType === 'password';\n    }\n\n    /**\n     * @docs-private\n     */\n    get iconClass(): string {\n        return this.hidden ? 'kbq-eye_16' : 'kbq-eye-slash_16';\n    }\n\n    /**\n     * @docs-private\n     */\n    get visibility(): 'hidden' | 'visible' {\n        return this.control.disabled ? 'hidden' : 'visible';\n    }\n\n    constructor() {\n        super();\n\n        this.trigger = `${PopUpTriggers.Hover}`;\n    }\n\n    /**\n     * @docs-private\n     */\n    ngAfterContentInit(): void {\n        this.formField?.control?.stateChanges.subscribe(this.updateState);\n\n        this.updateState();\n    }\n\n    /**\n     * @docs-private\n     */\n    ngAfterViewInit(): void {\n        this.focusMonitor.monitor(this.nativeElement, true);\n    }\n\n    /**\n     * @docs-private\n     */\n    ngOnDestroy() {\n        this.focusMonitor.stopMonitoring(this.nativeElement);\n    }\n\n    /**\n     * @docs-private\n     */\n    toggle(event: KeyboardEvent) {\n        this.hide();\n\n        const input = this.control;\n\n        input.toggleType();\n\n        this.updateData();\n\n        event.preventDefault();\n    }\n\n    private updateState = () => {\n        this.hasError = !!this.formField?.control?.errorState;\n\n        this.changeDetectorRef.markForCheck();\n    };\n}\n","import { Directive } from '@angular/core';\n\n/** Element to be placed in front of the form field. */\n@Directive({\n    selector: '[kbqPrefix]',\n    exportAs: 'kbqPrefix',\n    host: {\n        class: 'kbq-prefix'\n    }\n})\nexport class KbqPrefix {}\n","import {\n    afterNextRender,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    computed,\n    DestroyRef,\n    inject,\n    input,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KBQ_FORM_FIELD_REF, KbqComponentColors } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { EMPTY } from 'rxjs';\nimport { delay } from 'rxjs/operators';\nimport { KbqFormField } from './form-field';\nimport { KbqHint } from './hint';\n\n/** Password hint to be shown below the password form field control. */\n@Component({\n    selector: 'kbq-reactive-password-hint',\n    imports: [KbqIconModule],\n    template: `\n        <i [kbq-icon]=\"icon()\" [color]=\"color\"></i>\n\n        <span class=\"kbq-hint__text\">\n            <ng-content />\n        </span>\n    `,\n    styleUrls: [\n        './hint.scss',\n        './hint-tokens.scss'\n    ],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqReactivePasswordHint',\n    host: {\n        class: 'kbq-reactive-password-hint'\n    }\n})\nexport class KbqReactivePasswordHint extends KbqHint {\n    // @TODO fix types (#DS-2915)\n    private readonly formField = inject<KbqFormField>(KBQ_FORM_FIELD_REF, { optional: true });\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly changeDetectorRef = inject(ChangeDetectorRef);\n\n    /** Whether the form field control has an error. */\n    readonly hasError = input(false, { transform: booleanAttribute });\n\n    /**\n     * The form field hint icon.\n     *\n     * @docs-private\n     */\n    protected readonly icon = computed(() => (this.hasError() ? 'kbq-xmark-s_16' : 'kbq-check-s_16'));\n\n    constructor() {\n        super();\n\n        this.fillTextOff = true;\n        this.compact = false;\n        this.color = KbqComponentColors.ContrastFade;\n\n        afterNextRender(() => {\n            (this.formField?.control?.stateChanges || EMPTY)\n                .pipe(delay(0), takeUntilDestroyed(this.destroyRef))\n                .subscribe(() => {\n                    this.color = this.makeColor();\n\n                    this.changeDetectorRef.markForCheck();\n                });\n        });\n    }\n\n    private makeColor(): KbqComponentColors {\n        if (this.formField?.control.ngControl?.untouched && this.formField.control.ngControl.pristine) {\n            return KbqComponentColors.ContrastFade;\n        }\n\n        return this.hasError() ? KbqComponentColors.Error : KbqComponentColors.Success;\n    }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, inject, Output, ViewEncapsulation } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { KBQ_FORM_FIELD_REF } from '@koobiq/components/core';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { concatMap, fromEvent, interval, Subject, timer } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { KbqFormFieldControl } from './form-field-control';\n\n// @TODO Temporary solution to resolve circular dependency (#DS-3893)\ntype KbqNumberInput = KbqFormFieldControl<unknown> & {\n    stepUp: (step: number) => void;\n    stepDown: (step: number) => void;\n    step: number;\n};\n\n// @TODO Temporary solution to resolve circular dependency (#DS-3893)\nconst isNumberInput = (control: KbqFormFieldControl<unknown>): control is KbqNumberInput => {\n    return 'stepUp' in control && 'stepDown' in control;\n};\n\nconst getKbqStepperToggleMissingControlError = (): Error => {\n    return Error('kbq-stepper should use with kbqNumberInput');\n};\n\n/**\n * Timeout duration when clicking the up/down arrow\n * @docs-private\n */\nexport const KBQ_STEPPER_INITIAL_TIMEOUT = 300;\n\n/**\n * Interval delay when clicking the up/down arrow\n * @docs-private\n */\nexport const KBQ_STEPPER_INTERVAL_DELAY = 75;\n\n/** Component which allow to increment or decrement number value. */\n@Component({\n    selector: 'kbq-stepper',\n    imports: [KbqIconModule],\n    template: `\n        <i\n            class=\"kbq-stepper-step-up\"\n            color=\"contrast-fade\"\n            kbq-icon-button=\"kbq-chevron-up-s_16\"\n            [tabindex]=\"-1\"\n            [autoColor]=\"true\"\n            [disabled]=\"control.disabled\"\n            (mousedown)=\"onStepUp($event)\"\n        ></i>\n        <i\n            class=\"kbq-stepper-step-down\"\n            color=\"contrast-fade\"\n            kbq-icon-button=\"kbq-chevron-down-s_16\"\n            [tabindex]=\"-1\"\n            [autoColor]=\"true\"\n            [disabled]=\"control.disabled\"\n            (mousedown)=\"onStepDown($event)\"\n        ></i>\n    `,\n    styleUrls: ['stepper.scss'],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqStepper',\n    host: {\n        class: 'kbq-stepper'\n    }\n})\nexport class KbqStepper {\n    private readonly formField = inject(KBQ_FORM_FIELD_REF, { optional: true });\n    private readonly document = inject<Document>(DOCUMENT);\n\n    /** Emitted when the stepper is incremented. */\n    @Output() readonly stepUp: EventEmitter<void> = new EventEmitter<void>();\n\n    /** Emitted when the stepper is decremented. */\n    @Output() readonly stepDown: EventEmitter<void> = new EventEmitter<void>();\n\n    /** @docs-private */\n    protected readonly mouseUp = new Subject<void>();\n\n    /**\n     * Timing observable simulating long press in native input-number.\n     * - Value increases/decreases by step immediately.\n     * - Brief pause (`300ms`)\n     * - Numbers start running upward/downward with selected speed\n     * (controlled by interval period)\n     * @see KBQ_STEPPER_INTERVAL_DELAY\n     * @see KBQ_STEPPER_INITIAL_TIMEOUT\n     * @docs-private\n     */\n    private readonly longPress = timer(KBQ_STEPPER_INITIAL_TIMEOUT).pipe(\n        concatMap(() => interval(KBQ_STEPPER_INTERVAL_DELAY)),\n        takeUntilDestroyed(),\n        takeUntil(this.mouseUp)\n    );\n\n    /**\n     * Form field number control.\n     *\n     * @docs-private\n     */\n    protected get control(): KbqNumberInput {\n        const control = this.formField?.control;\n        const input = control.numberInput;\n\n        if (!isNumberInput(input)) {\n            throw getKbqStepperToggleMissingControlError();\n        }\n\n        return input;\n    }\n\n    /**\n     * @docs-private\n     */\n    connectTo(numberInput: KbqNumberInput): void {\n        if (!numberInput) return;\n\n        this.stepUp.subscribe(() => {\n            numberInput.stepUp(numberInput.step);\n        });\n\n        this.stepDown.subscribe(() => {\n            numberInput.stepDown(numberInput.step);\n        });\n    }\n\n    /** @docs-private */\n    onStepUp($event: MouseEvent): void {\n        this.handleStep($event, this.stepUp);\n    }\n\n    /** @docs-private */\n    onStepDown($event: MouseEvent): void {\n        this.handleStep($event, this.stepDown);\n    }\n\n    private handleStep($event: MouseEvent, emitter: EventEmitter<void>): void {\n        if (this.control.disabled) return;\n\n        emitter.emit();\n        // handle case when cursor is out of viewport.\n        fromEvent(this.document, 'mouseup')\n            .pipe(take(1))\n            .subscribe(() => this.mouseUp.next());\n        this.longPress.subscribe(() => emitter.emit());\n        $event.preventDefault();\n    }\n}\n","import { Directive } from '@angular/core';\n\n/** Element to be placed at the end of the form field. */\n@Directive({\n    selector: '[kbqSuffix]',\n    host: {\n        class: 'kbq-suffix'\n    }\n})\nexport class KbqSuffix {}\n","import { FocusMonitor, FocusOrigin } from '@angular/cdk/a11y';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { NgClass } from '@angular/common';\nimport {\n    AfterContentChecked,\n    AfterContentInit,\n    AfterViewInit,\n    Attribute,\n    booleanAttribute,\n    ChangeDetectionStrategy,\n    ChangeDetectorRef,\n    Component,\n    ContentChild,\n    ContentChildren,\n    DestroyRef,\n    Directive,\n    ElementRef,\n    inject,\n    InjectionToken,\n    input,\n    model,\n    OnDestroy,\n    Optional,\n    Provider,\n    QueryList,\n    Self,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { NgControl } from '@angular/forms';\nimport { ESCAPE, F8 } from '@koobiq/cdk/keycodes';\nimport { KBQ_FORM_FIELD_REF, KbqColorDirective } from '@koobiq/components/core';\nimport { EMPTY, merge } from 'rxjs';\nimport { delay, startWith } from 'rxjs/operators';\nimport { KbqCleaner } from './cleaner';\nimport { KbqError } from './error';\nimport { KbqFormFieldControl } from './form-field-control';\nimport { KbqHint } from './hint';\nimport { KbqLabel } from './label';\nimport { hasPasswordStrengthError, KbqPasswordHint } from './password-hint';\nimport { KbqPasswordToggle } from './password-toggle';\nimport { KbqPrefix } from './prefix';\nimport { KbqReactivePasswordHint } from './reactive-password-hint';\nimport { KbqStepper } from './stepper';\nimport { KbqSuffix } from './suffix';\n\n/** @docs-private */\nexport function getKbqFormFieldMissingControlError(): Error {\n    return Error('kbq-form-field must contain a KbqFormFieldControl');\n}\n\n/** @docs-private */\nexport function getKbqFormFieldYouCanNotUseCleanerInNumberInputError(): Error {\n    return Error(`You can't use kbq-cleaner with input that have type=\"number\"`);\n}\n\n/**\n * Default options for the kbq-form-field that can be configured using the `KBQ_FORM_FIELD_DEFAULT_OPTIONS`\n * injection token.\n */\nexport type KbqFormFieldDefaultOptions = Partial<{\n    /** Disables form field borders and shadows. */\n    noBorders: boolean;\n    /** Use when KbqFormField is in an overlay container. */\n    inOverlay: boolean;\n    /** Whether the form field is displayed horizontally. */\n    horizontal: boolean;\n    /** Additional CSS classes applied to the label element. */\n    labelClass: string | string[] | Set<string>;\n    /** Additional CSS classes applied to the content wrapper element. */\n    contentClass: string | string[] | Set<string>;\n}>;\n\n/**\n * Injection token that can be used to configure the default options for all kbq-form-field's.\n */\nexport const KBQ_FORM_FIELD_DEFAULT_OPTIONS = new InjectionToken<KbqFormFieldDefaultOptions>(\n    'KBQ_FORM_FIELD_DEFAULT_OPTIONS'\n);\n\n/** Utility provider for `KBQ_FORM_FIELD_DEFAULT_OPTIONS`. */\nexport const kbqFormFieldDefaultOptionsProvider = (options: KbqFormFieldDefaultOptions): Provider => ({\n    provide: KBQ_FORM_FIELD_DEFAULT_OPTIONS,\n    useValue: options\n});\n\n/** Container for form controls that applies styling and behavior. */\n@Component({\n    selector: 'kbq-form-field',\n    imports: [NgClass],\n    templateUrl: 'form-field.html',\n    styleUrls: [\n        'form-field.scss',\n        'form-field-tokens.scss',\n        // KbqInput is a directive and can't have styles, so we need to include its styles here.\n        // The KbqInput styles are fairly minimal so it shouldn't be a big deal for people who aren't using KbqInput.\n        '../input/input.scss',\n        '../input/input-tokens.scss',\n        '../timepicker/timepicker.scss',\n        '../datepicker/datepicker-input.scss',\n        '../textarea/textarea.scss',\n        '../tags/tag-input-tokens.scss'\n    ],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    exportAs: 'kbqFormField',\n    host: {\n        class: 'kbq-form-field',\n\n        '[class.kbq-form-field_invalid]': 'invalid',\n        '[class.kbq-disabled]': 'disabled',\n        '[class.kbq-form-field_no-borders]': 'noBorders()',\n        '[class.kbq-form-field_in-overlay]': 'inOverlay()',\n        '[class.kbq-form-field_horizontal]': 'horizontal()',\n\n        '[class.ng-untouched]': 'shouldForward(\"untouched\")',\n        '[class.ng-touched]': 'shouldForward(\"touched\")',\n        '[class.ng-pristine]': 'shouldForward(\"pristine\")',\n        '[class.ng-dirty]': 'shouldForward(\"dirty\")',\n        '[class.ng-valid]': 'shouldForward(\"valid\")',\n        '[class.ng-invalid]': 'shouldForward(\"invalid\")',\n        '[class.ng-pending]': 'shouldForward(\"pending\")',\n\n        '(keydown)': 'onKeyDown($event)',\n        '(mouseenter)': 'onHoverChanged(true)',\n        '(mouseleave)': 'onHoverChanged(false)'\n    },\n    providers: [{ provide: KBQ_FORM_FIELD_REF, useExisting: KbqFormField }]\n})\nexport class KbqFormField\n    extends KbqColorDirective\n    implements AfterContentInit, AfterViewInit, OnDestroy, AfterContentChecked\n{\n    private readonly destroyRef = inject(DestroyRef);\n    private readonly changeDetectorRef = inject(ChangeDetectorRef);\n    private readonly focusMonitor = inject(FocusMonitor);\n    private readonly defaultOptions = inject(KBQ_FORM_FIELD_DEFAULT_OPTIONS, { optional: true });\n    /**\n     * @docs-private\n     */\n    readonly elementRef = inject<ElementRef<HTMLElement>>(ElementRef);\n\n    /** Disables form field borders and shadows. */\n    readonly noBorders = input(this.defaultOptions?.noBorders, { transform: booleanAttribute });\n\n    /** Use when KbqFormField is in an overlay container. */\n    readonly inOverlay = model(this.defaultOptions?.inOverlay);\n\n    /** Whether the form field is displayed horizontally. */\n    readonly horizontal = input(this.defaultOptions?.horizontal, { transform: booleanAttribute });\n\n    /** Additional CSS classes applied to the label element. */\n    readonly labelClass = input(this.defaultOptions?.labelClass);\n\n    /** Additional CSS classes applied to the content wrapper element. */\n    readonly contentClass = input(this.defaultOptions?.contentClass);\n\n    /**\n     * The form field control.\n     *\n     * @docs-private\n     */\n    @ContentChild(KbqFormFieldControl) control: KbqFormFieldControl<unknown>;\n    /**\n     * @docs-private\n     */\n    @ContentChild(KbqStepper) readonly stepper: KbqStepper;\n    /**\n     * @docs-private\n     *\n     * @TODO Should be readonly (#DS-3883)\n     */\n    @ContentChild(KbqCleaner, { descendants: false }) cleaner: KbqCleaner | null;\n    /**\n     * @docs-private\n     */\n    @ContentChild(KbqPasswordToggle) passwordToggle: KbqPasswordToggle | null;\n    /**\n     * @docs-private\n     */\n    @ContentChildren(KbqHint) hint: QueryList<KbqHint>;\n    /**\n     * @docs-private\n     */\n    @ContentChildren(KbqPasswordHint) passwordHints: QueryList<KbqPasswordHint>;\n    /**\n     * @docs-private\n     */\n    @ContentChildren(KbqSuffix) suffix: QueryList<KbqSuffix>;\n    /**\n     * @docs-private\n     */\n    @ContentChildren(KbqPrefix) prefix: QueryList<KbqPrefix>;\n    /**\n     * @docs-private\n     */\n    @ViewChild('connectionContainer', { static: true }) connectionContainerRef: ElementRef;\n\n    @ContentChildren(KbqReactivePasswordHint) private readonly reactivePasswordHint: QueryList<KbqReactivePasswordHint>;\n    @ContentChildren(KbqError) private readonly error: QueryList<KbqError>;\n    @ContentChild(KbqLabel) private readonly label: KbqLabel | null;\n\n    /**\n     * @docs-private\n     */\n    hovered: boolean = false;\n\n    /**\n     * @docs-private\n     */\n    canCleanerClearByEsc: boolean = true;\n\n    /** Whether the form field is invalid. */\n    get invalid(): boolean {\n        return !!this.control?.errorState;\n    }\n\n    /**\n     * Whether the form field control has an reactive password hint.\n     *\n     * @docs-private\n     */\n    protected get hasReactivePasswordHint(): boolean {\n        return this.reactivePasswordHint.length > 0;\n    }\n\n    /**\n     * Whether the form-field contains kbq-error.\n     *\n     * @docs-private\n     */\n    protected get hasError(): boolean {\n        return this.error.length > 0;\n    }\n\n    /**\n     * Whether the form-field contains kbq-label.\n     *\n     * @docs-private\n     */\n    protected get hasLabel(): boolean {\n        return !!this.label;\n    }\n\n    /**\n     * Whether the form-field contains kbq-password-hint.\n     *\n     * @docs-private\n     */\n    get hasPasswordHint(): boolean {\n        return this.passwordHints?.length > 0;\n    }\n\n    /**\n     * Current focus origin state.\n     *\n     * @docs-private\n     */\n    get focusOrigin(): FocusOrigin {\n        return this._focusOrigin;\n    }\n\n    private _focusOrigin: FocusOrigin;\n\n    /**\n     * @docs-private\n     */\n    get hasFocus(): boolean {\n        return this.control?.focused;\n    }\n\n    /**\n     * Whether the form-field contains kbq-hint.\n     *\n     * @docs-private\n     */\n    get hasHint(): boolean {\n        return this.hint?.length > 0;\n    }\n\n    /**\n     * Whether the form-field contains kbqSuffix.\n     *\n     * @docs-private\n     */\n    get hasSuffix(): boolean {\n        return this.suffix?.length > 0;\n    }\n\n    /**\n     * Whether the form-field contains kbqPrefix.\n     *\n     * @docs-private\n     */\n    get hasPrefix(): boolean {\n        return this.prefix?.length > 0;\n    }\n\n    /**\n     * Whether the form-field contains kbq-cleaner.\n     *\n     * @docs-private\n     */\n    get hasCleaner(): boolean {\n        return !!this.cleaner;\n    }\n\n    /**\n     * Whether the form-field contains kbq-stepper.\n     *\n     * @docs-private\n     */\n    get hasStepper(): boolean {\n        return !!this.stepper;\n    }\n\n    /**\n     * Whether the form-field contains kbq-password-toggle.\n     *\n     * @docs-private\n     */\n    get hasPasswordToggle(): boolean {\n        return !!this.passwordToggle;\n    }\n\n    /**\n     * @docs-private\n     */\n    get canShowCleaner(): boolean {\n        return this.hasCleaner && this.control?.ngControl ? this.control.ngControl.value && !this.disabled : false;\n    }\n\n    /** Whether the form field is disabled. */\n    get disabled(): boolean {\n        return this.control?.disabled;\n    }\n\n    /**\n     * @deprecated stepper should be always visible when provided, so this parameter is redundant,\n     * use `hasStepper` instead\n     *\n     * @docs-private\n     */\n    canShowStepper = true;\n\n    ngAfterContentInit(): void {\n        this.validateControlChild();\n\n        if ((this.control as any).numberInput && this.hasCleaner) {\n            this.cleaner = null;\n            throw getKbqFormFieldYouCanNotUseCleanerInNumberInputError();\n        }\n\n        // Subscribe to changes in the child control state in order to update the form field UI.\n        this.control.stateChanges.pipe(startWith(), delay(0)).subscribe((state: any) => {\n            if (this.passwordHints.length && !state?.focused && hasPasswordStrengthError(this.passwordHints)) {\n                this.control.ngControl?.control?.setErrors({ passwordStrength: true });\n            }\n        });\n\n        if (this.hasStepper) {\n            this.stepper.connectTo((this.control as any).numberInput);\n        }\n\n        this.initializeControl();\n        this.initializePrefixAndSuffix();\n        this.initializeHint();\n    }\n\n    ngAfterContentChecked(): void {\n        this.validateControlChild();\n    }\n\n    ngAfterViewInit(): void {\n        this.runFocusMonitor();\n\n        // Because the above changes a value used in the template after it was checked, we need\n        // to trigger CD or the change might not be reflected if there is no other CD scheduled.\n        this.changeDetectorRef.detectChanges();\n    }\n\n    ngOnDestroy(): void {\n        this.stopFocusMonitor();\n    }\n\n    /** Focuses the control. */\n    focus(options?: FocusOptions): void {\n        this.control.focus(options);\n    }\n\n    /**\n     * @deprecated Use `focus` instead.\n     *\n     * @docs-private\n     */\n    focusViaKeyboard(options?: FocusOptions): void {\n        this.control.focus(options);\n    }\n\n    /**\n     * @docs-private\n     */\n    clearValue(event: Event): void {\n        event.stopPropagation();\n\n        this.control?.ngControl?.reset();\n        this.control?.focus();\n    }\n\n    /**\n     * Handles a click on the control's container.\n     *\n     * @docs-private\n     */\n    onContainerClick(event: MouseEvent): void {\n        if (this.control?.onContainerClick) {\n            this.control.onContainerClick(event);\n        }\n    }\n\n    /**\n     * Handles keydown events.\n     *\n     * @docs-private\n     */\n    onKeyDown(event: KeyboardEvent): void {\n        if (this.control.controlType === 'input-password' && event.altKey && event.keyCode === F8) {\n            (this.control as unknown as { toggleType(): void }).toggleType();\n        }\n\n        if (this.canCleanerClearByEsc && event.keyCode === ESCAPE && this.control.focused && this.hasCleaner) {\n            this.control?.ngControl?.reset();\n\n            event.preventDefault();\n        }\n    }\n\n    /**\n     * @docs-private\n     */\n    onHoverChanged(isHovered: boolean): void {\n        if (isHovered !== this.hovered) {\n            this.hovered = isHovered;\n            this.changeDetectorRef.markForCheck();\n        }\n    }\n\n    /**\n     * Gets an ElementRef for the element that a overlay attached to the form-field should be positioned relative to.\n     */\n    getConnectedOverlayOrigin(): ElementRef {\n        return this.connectionContainerRef || this.elementRef;\n    }\n\n    /**\n     * Determines whether a class from the NgControl should be forwarded to the host element.\n     *\n     * @docs-private\n     */\n    shouldForward(prop: keyof NgControl): boolean {\n        const ngControl = this.control?.ngControl;\n\n        return ngControl && ngControl[prop];\n    }\n\n    /**\n     * Runs the focus monitor for the form field.\n     *\n     * @docs-private\n     */\n    runFocusMonitor = () => {\n        this.focusMonitor\n            .monitor(this.elementRef.nativeElement, true)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe((origin) => (this._focusOrigin = origin));\n    };\n\n    /**\n     * Stops the focus monitor for the form field.\n     *\n     * @docs-private\n     */\n    stopFocusMonitor(): void {\n        this.focusMonitor.stopMonitoring(this.elementRef.nativeElement);\n    }\n\n    /**\n     * Throws an error if the form-field control is missing.\n     *\n     * @docs-private\n     */\n    protected validateControlChild() {\n        if (!this.control) {\n            throw getKbqFormFieldMissingControlError();\n        }\n    }\n\n    /** Initializes the form field control. */\n    private initializeControl(): void {\n        if (this.control.controlType) {\n            this.elementRef.nativeElement.classList.add(`kbq-form-field-type-${this.control.controlType}`);\n        }\n\n        merge(this.control.stateChanges, this.control.ngControl?.valueChanges || EMPTY)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.changeDetectorRef.markForCheck());\n    }\n\n    /** Initializes the kbqPrefix and kbqSuffix containers. */\n    private initializePrefixAndSuffix(): void {\n        // Mark the form field as dirty whenever the prefix or suffix children change. This is necessary because we\n        // conditionally display the prefix/suffix containers based on whether there is projected content.\n        merge(this.prefix.changes, this.suffix.changes)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.changeDetectorRef.markForCheck());\n    }\n\n    /** Initializes the KbqHint, KbqPasswordHint, KbqReactivePasswordHint and KbqError containers. */\n    private initializeHint(): void {\n        merge(this.hint.changes, this.passwordHints.changes, this.reactivePasswordHint.changes, this.error.changes)\n            .pipe(takeUntilDestroyed(this.destroyRef))\n            .subscribe(() => this.changeDetectorRef.markForCheck());\n    }\n}\n\n/**\n * @docs-private\n *\n * @deprecated Will be removed in next major release, use `noBorders` input instead.\n */\n@Directive({\n    selector: 'kbq-form-field[kbqFormFieldWithoutBorders]',\n    exportAs: 'kbqFormFieldWithoutBorders',\n    host: { class: 'kbq-form-field_without-borders' }\n})\nexport class KbqFormFieldWithoutBorders {}\n\n/**\n * @docs-private\n */\n@Directive({\n    selector: '[kbqInput], [kbqTextarea]',\n    exportAs: 'KbqTrim',\n    host: { class: 'kbq-trim' }\n})\nexport class KbqTrim {\n    private original: (fn: any) => void;\n\n    constructor(\n        @Attribute('no-trim') private readonly noTrim: boolean,\n        @Optional() @Self() private ngControl: NgControl\n    ) {\n        this.noTrim = coerceBooleanProperty(noTrim);\n\n        if (this.noTrim || !this.ngControl?.valueAccessor) {\n            return;\n        }\n\n        this.original = this.ngControl.valueAccessor.registerOnChange;\n\n        this.ngControl.valueAccessor.registerOnChange = this.registerOnChange;\n    }\n\n    trim(value) {\n        if (this.noTrim) {\n            return value;\n        }\n\n        return typeof value === 'string' ? value.trim() : value;\n    }\n\n    private registerOnChange = (fn) => {\n        return this.original.call(this.ngControl.valueAccessor, (value) => fn(this.trim(value)));\n    };\n}\n","@if (hasLabel) {\n    <label class=\"kbq-form-field__label\" [ngClass]=\"labelClass()\" [attr.for]=\"control.id\">\n        <ng-content select=\"kbq-label\" />\n    </label>\n}\n\n<div class=\"kbq-form-field__content\" [ngClass]=\"contentClass()\">\n    <div #connectionContainer class=\"kbq-form-field__container\" (click)=\"onContainerClick($event)\">\n        @if (hasPrefix) {\n            <div class=\"kbq-form-field__prefix\">\n                <ng-content select=\"[kbqPrefix]\" />\n            </div>\n        }\n\n        <div class=\"kbq-form-field__infix\">\n            <ng-content />\n        </div>\n\n        @if (hasSuffix || hasCleaner || hasPasswordToggle || hasStepper) {\n            <div class=\"kbq-form-field__suffix\">\n                @if (canShowCleaner) {\n                    <div\n                        class=\"kbq-form-field__cleaner\"\n                        (click)=\"clearValue($event)\"\n                        (keydown.enter)=\"clearValue($event)\"\n                    >\n                        <ng-content select=\"kbq-cleaner\" />\n                    </div>\n                }\n\n                <ng-content select=\"kbq-password-toggle, kbq-stepper, [kbqSuffix]\" />\n            </div>\n        }\n    </div>\n\n    @if (hasHint || hasPasswordHint || hasError || hasReactivePasswordHint) {\n        <div class=\"kbq-form-field__hint\">\n            @if (invalid) {\n                <ng-content select=\"kbq-error\" />\n            }\n\n            <ng-content select=\"kbq-hint, kbq-password-hint, kbq-reactive-password-hint\" />\n        </div>\n    }\n</div>\n","import {\n    AfterContentInit,\n    ChangeDetectorRef,\n    Directive,\n    ElementRef,\n    forwardRef,\n    Host,\n    Inject,\n    Optional,\n    Self\n} from '@angular/core';\nimport {\n    AbstractControl,\n    FormControlDirective,\n    FormControlName,\n    FormGroupDirective,\n    NG_VALIDATORS,\n    NgControl,\n    NgForm,\n    NgModel,\n    RequiredValidator,\n    ValidationErrors,\n    Validator,\n    ValidatorFn\n} from '@angular/forms';\nimport { KBQ_VALIDATION, KbqValidationOptions } from '@koobiq/components/core';\nimport { KbqFormField } from './form-field';\nimport { KbqFormFieldControl } from './form-field-control';\n\n/**\n * @deprecated Will be removed in next major release (#DS-2838)\n *\n * Legacy validation directive.\n *\n * ### How to disable?\n *\n * ```typescript\n * import { kbqDisableLegacyValidationDirectiveProvider } from '@koobiq/components/core';\n *\n * @NgModule({\n *      providers: [kbqDisableLegacyValidationDirectiveProvider()]\n * })\n * ```\n *\n * @docs-private\n */\n@Directive({\n    selector: `\n        input[kbqInput],\n        input[kbqNumberInput],\n        input[kbqInputPassword],\n        input[kbqTimepicker],\n        input[kbqDatepicker],\n        textarea[kbqTextarea],\n        kbq-select,\n        kbq-tree-select,\n        kbq-tag-list\n    `,\n    exportAs: 'KbqValidate'\n})\nexport class KbqValidateDirective implements AfterContentInit {\n    get isNgModel(): boolean {\n        return this.ngControl instanceof NgModel;\n    }\n\n    get isFormControlName(): boolean {\n        return this.ngControl instanceof FormControlName;\n    }\n\n    get isFormControl(): boolean {\n        return this.ngControl instanceof FormControlDirective;\n    }\n\n    get validationControl(): any {\n        return this.ngControl?.control || this.ngControl;\n    }\n\n    get parent() {\n        return this.parentForm || this.parentFormGroup;\n    }\n\n    get hasNotSubmittedParent(): boolean {\n        return this.parent && !this.parent.submitted;\n    }\n\n    constructor(\n        @Inject(forwardRef(() => KbqFormFieldControl)) private formFieldControl: KbqFormFieldControl<any>,\n        @Optional() @Self() @Inject(NG_VALIDATORS) public rawValidators: Validator[],\n        @Optional() @Self() private ngControl: NgControl,\n        @Optional() private parentForm: NgForm,\n        @Optional() private parentFormGroup: FormGroupDirective,\n        @Optional() @Inject(KBQ_VALIDATION) private mcValidation: KbqValidationOptions,\n        private cdr: ChangeDetectorRef,\n        @Optional() @Host() private readonly parentFormField: KbqFormField | null,\n        private readonly elementRef: ElementRef\n    ) {}\n\n    ngAfterContentInit() {\n        if (this.mcValidation.useValidation) {\n            this.parentFormField?.elementRef.nativeElement.classList.add('kbq-form-field_has-validate-directive');\n            this.elementRef.nativeElement.classList.add('kbq-control_has-validate-directive');\n\n            this.setMosaicValidation();\n        }\n    }\n\n    setValidState(control: AbstractControl, validator: ValidatorFn): void {\n        if (!control) {\n            return;\n        }\n\n        control.clearValidators();\n        control.updateValueAndValidity({ emitEvent: false });\n        control.setValidators(validator);\n    }\n\n    /** This function do next:\n     * - run validation on submitting parent form\n     * - prevent validation in required validator if form doesn't submitted\n     * - if control has focus validation will be prevented\n     */\n    setMosaicValidation(): void {\n        if (!this.validationControl) {\n            return;\n        }\n\n        if (this.parent?.onSubmit) {\n            const originalSubmit = this.parent.onSubmit;\n\n            this.parent.onSubmit = ($event: Event) => {\n                this.validationControl!.updateValueAndValidity({ emitEvent: false });\n\n                return originalSubmit.call(this.parent, $event);\n            };\n        }\n\n        if (this.isNgModel) {\n            this.setMosaicValidationForModelControl();\n        } else if (this.isFormControl || this.isFormControlName) {\n            this.setMosaicValidationForFormControl();\n        }\n    }\n\n    setMosaicValidationForModelControl() {\n        if (!this.rawValidators) {\n            return;\n        }\n\n        this.rawValidators.forEach((validator: Validator) => {\n            const originalValidate = validator.validate;\n\n            if (validator instanceof RequiredValidator) {\n                // changed required validation logic\n                validator.validate = (control: AbstractControl): ValidationErrors | null => {\n                    if (this.hasNotSubmittedParent) {\n                        return null;\n                    }\n\n                    return originalValidate.call(validator, control);\n                };\n            } else {\n                // changed all other validation logic\n                validator.validate = (control: AbstractControl): ValidationErrors | null => {\n                    if (this.formFieldControl.focused) {\n                        return null;\n                    }\n\n                    return originalValidate.call(validator, control);\n                };\n            }\n        });\n    }\n\n    setMosaicValidationForFormControl() {\n        // changed required validation logic after initialization\n        if (this.validationControl.invalid && this.validationControl.errors!.required) {\n            Promise.resolve().then(() => {\n                this.setValidState(this.validationControl, this.validationControl.validator);\n                this.cdr.markForCheck();\n            });\n        }\n\n        // check dynamic updates\n        this.validationControl.statusChanges!.subscribe(() => {\n            // changed required validation logic\n            if (\n                this.validationControl.invalid &&\n                this.hasNotSubmittedParent &&\n                this.validationControl.errors!.required\n            ) {\n                this.setValidState(this.validationControl, this.validationControl.validator);\n            }\n\n            // changed all other validation logic\n            if (this.validationControl.invalid && this.formFieldControl.focused) {\n                this.setValidState(this.validationControl, this.validationControl.validator);\n            }\n        });\n    }\n}\n","import { NgModule } from '@angular/core';\nimport { KbqCleaner } from './cleaner';\nimport { KbqError } from './error';\nimport { KbqFieldset, KbqFieldsetItem, KbqLegend } from './fieldset';\nimport { KbqFormField, KbqFormFieldWithoutBorders, KbqTrim } from './form-field';\nimport { KbqHint } from './hint';\nimport { KbqLabel } from './label';\nimport { KbqPasswordHint } from './password-hint';\nimport { KbqPasswordToggle } from './password-toggle';\nimport { KbqPrefix } from './prefix';\nimport { KbqReactivePasswordHint } from './reactive-password-hint';\nimport { KbqStepper } from './stepper';\nimport { KbqSuffix } from './suffix';\nimport { KbqValidateDirective } from './validate.directive';\n\nconst COMPONENTS = [\n    KbqCleaner,\n    KbqFormField,\n    KbqPrefix,\n    KbqSuffix,\n    KbqPasswordToggle,\n    KbqStepper,\n    KbqLabel,\n    KbqHint,\n    KbqError,\n    KbqReactivePasswordHint,\n    KbqLegend,\n    KbqFieldset,\n    KbqFieldsetItem,\n\n    // Legacy components\n    KbqPasswordHint,\n    KbqFormFieldWithoutBorders,\n    KbqValidateDirective,\n    KbqTrim\n];\n\n@NgModule({\n    imports: COMPONENTS,\n    exports: COMPONENTS\n})\nexport class KbqFormFieldModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.KbqFormField"],"mappings":"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"}