{"version":3,"file":"koobiq-components-input.mjs","sources":["../../../packages/components/input/input-errors.ts","../../../packages/components/input/input-number.ts","../../../packages/components/input/input-value-accessor.ts","../../../packages/components/input/input.ts","../../../packages/components/input/input-number-validators.ts","../../../packages/components/input/input-password.ts","../../../packages/components/input/input.module.ts","../../../packages/components/input/koobiq-components-input.ts"],"sourcesContent":["export function getKbqInputUnsupportedTypeError(inputType: string): Error {\n    return Error(`Input type \"${inputType}\" isn't supported by kbqInput.`);\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n    Attribute,\n    booleanAttribute,\n    Directive,\n    ElementRef,\n    EventEmitter,\n    forwardRef,\n    Inject,\n    Input,\n    OnDestroy,\n    Optional,\n    Renderer2\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { AbstractControl, ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport {\n    BACKSPACE,\n    DASH,\n    DELETE,\n    DOWN_ARROW,\n    END,\n    ENTER,\n    ESCAPE,\n    FF_MINUS,\n    HOME,\n    isCopy,\n    isFunctionKey,\n    isNumberKey,\n    isNumpadKey,\n    isSelectAll,\n    LEFT_ARROW,\n    NUMPAD_MINUS,\n    RIGHT_ARROW,\n    TAB,\n    UP_ARROW,\n    V,\n    X,\n    Z\n} from '@koobiq/cdk/keycodes';\nimport {\n    checkAndNormalizeLocalizedNumber,\n    formatNumberWithLocale,\n    KBQ_DEFAULT_PRECISION_SEPARATOR,\n    KBQ_LOCALE_SERVICE,\n    KbqLocaleService,\n    KbqNumberInputLocaleConfig,\n    normalizeNumber,\n    ruRUFormattersData\n} from '@koobiq/components/core';\nimport { KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { Subject } from 'rxjs';\n\nexport const KBQ_INPUT_NUMBER_DEFAULT_CONFIGURATION = ruRUFormattersData.input.number;\n\nexport const BIG_STEP = 10;\nexport const SMALL_STEP = 1;\n\nexport function normalizeSplitter(value: string): string {\n    return value ? value.replace(/,/g, KBQ_DEFAULT_PRECISION_SEPARATOR) : value;\n}\n\nexport function isFloat(value: string): boolean {\n    return /^-?\\d+\\.\\d+$/.test(value);\n}\n\nexport function isInt(value: string): boolean {\n    return /^-?\\d+$/.test(value);\n}\n\nexport function isDigit(value: string): boolean {\n    return isFloat(value) || isInt(value);\n}\n\nexport function getPrecision(value: number): number {\n    const arr = value.toString().split(KBQ_DEFAULT_PRECISION_SEPARATOR);\n\n    return arr.length === 1 ? 1 : Math.pow(10, arr[1].length);\n}\n\nexport function add(value1: number, value2: number): number {\n    const precision = Math.max(getPrecision(value1), getPrecision(value2));\n\n    return (value1 * precision + value2 * precision) / precision;\n}\n\nexport const KBQ_NUMBER_INPUT_VALUE_ACCESSOR: any = {\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => KbqNumberInput),\n    multi: true\n};\n\n@Directive({\n    selector: `input[kbqNumberInput]`,\n    exportAs: 'kbqNumericalInput',\n    providers: [KBQ_NUMBER_INPUT_VALUE_ACCESSOR],\n    host: {\n        '(blur)': 'focusChanged(false)',\n        '(focus)': 'focusChanged(true)',\n        '(paste)': 'onPaste($event)',\n        '(keydown)': 'onKeyDown($event)',\n        '(input)': 'onInput($event)'\n    }\n})\nexport class KbqNumberInput implements KbqFormFieldControl<any>, ControlValueAccessor, OnDestroy {\n    /** Emits when the value changes (either due to user input or programmatic change). */\n    valueChange = new EventEmitter<number | null>();\n\n    /** Emits when the disabled state has changed */\n    disabledChange = new EventEmitter<boolean>();\n\n    readonly stateChanges: Subject<void> = new Subject<void>();\n\n    id: string;\n\n    placeholder: string;\n\n    empty: boolean;\n\n    required: boolean;\n\n    errorState: boolean;\n\n    controlType?: string | undefined;\n\n    /**\n     * Allows input and pasting of integers only.\n     */\n    @Input({ transform: booleanAttribute })\n    integer: boolean = false;\n\n    @Input()\n    bigStep: number;\n\n    @Input()\n    step: number;\n\n    @Input()\n    min: number;\n\n    @Input()\n    max: number;\n\n    @Input({ transform: booleanAttribute })\n    withThousandSeparator: boolean = true;\n\n    /**\n     * Include thousand separator from custom index. For example, it will be useful in tables.\n     */\n    @Input()\n    startFormattingFrom?: number;\n\n    @Input()\n    get value(): number | null {\n        return this._value;\n    }\n\n    set value(value: number | null) {\n        const oldValue = this.value;\n\n        this._value = value;\n\n        if (oldValue !== value) {\n            this.setViewValue(this.formatNumber(value));\n\n            this.valueChange.emit(value);\n        }\n    }\n\n    private _value: number | null;\n\n    @Input()\n    get disabled(): boolean {\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        const newValue = coerceBooleanProperty(value);\n        const element = this.nativeElement;\n\n        if (this._disabled !== newValue) {\n            this._disabled = newValue;\n            this.disabledChange.emit(newValue);\n        }\n\n        // We need to null check the `blur` method, because it's undefined during SSR.\n        if (newValue && element.blur) {\n            // Normally, native input elements automatically blur if they turn disabled. This behavior\n            // is problematic, because it would mean that it triggers another change detection cycle,\n            // which then causes a changed after checked error if the input element was focused before.\n            element.blur();\n        }\n    }\n\n    private _disabled: boolean = false;\n\n    focused: boolean = false;\n\n    get nativeElement(): HTMLInputElement {\n        return this.elementRef.nativeElement;\n    }\n\n    get viewValue(): string {\n        return this.nativeElement.value;\n    }\n\n    get ngControl(): any {\n        return this.control;\n    }\n\n    protected get fractionSeparator(): KbqNumberInputLocaleConfig['fractionSeparator'] {\n        return this.config.fractionSeparator;\n    }\n\n    protected get groupSeparator(): KbqNumberInputLocaleConfig['groupSeparator'] {\n        return this.config.groupSeparator;\n    }\n\n    private control: AbstractControl;\n\n    private config: KbqNumberInputLocaleConfig;\n\n    private valueFromPaste: number | null;\n\n    constructor(\n        private elementRef: ElementRef<HTMLInputElement>,\n        private readonly renderer: Renderer2,\n        @Attribute('step') step: string,\n        @Attribute('big-step') bigStep: string,\n        @Attribute('min') min: string,\n        @Attribute('max') max: string,\n        @Optional() @Inject(KBQ_LOCALE_SERVICE) private localeService?: KbqLocaleService\n    ) {\n        this.step = isDigit(step) ? parseFloat(step) : SMALL_STEP;\n        this.bigStep = isDigit(bigStep) ? parseFloat(bigStep) : BIG_STEP;\n        this.min = isDigit(min) ? parseFloat(min) : -Infinity;\n        this.max = isDigit(max) ? parseFloat(max) : Infinity;\n\n        if ('valueAsNumber' in this.nativeElement) {\n            Object.defineProperty(Object.getPrototypeOf(this.nativeElement), 'valueAsNumber', {\n                get() {\n                    const res = parseFloat(normalizeSplitter(this.value));\n\n                    return isNaN(res) ? null : res;\n                }\n            });\n        }\n\n        this.localeService?.changes.pipe(takeUntilDestroyed()).subscribe(this.updateLocaleParams);\n\n        if (!localeService) {\n            this.initDefaultParams();\n        }\n    }\n\n    ngOnDestroy(): void {\n        this.valueChange.complete();\n        this.disabledChange.complete();\n    }\n\n    onContainerClick(): void {\n        this.focus();\n    }\n\n    focus(): void {\n        this.nativeElement.focus();\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    writeValue(value: number | null): void {\n        this.value = value;\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    registerOnChange(fn: (value: any) => void): void {\n        this.cvaOnChange = fn;\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    registerOnTouched(fn: () => void): void {\n        this.onTouched = fn;\n    }\n\n    // Implemented as part of ControlValueAccessor.\n    setDisabledState(isDisabled: boolean): void {\n        this.disabled = isDisabled;\n    }\n\n    focusChanged(isFocused: boolean) {\n        if (isFocused !== this.focused) {\n            this.focused = isFocused;\n            this.stateChanges.next();\n        }\n\n        if (!isFocused) this.onTouched();\n    }\n\n    onTouched = () => {};\n\n    onKeyDown(event: KeyboardEvent) {\n        const keyCode = event.keyCode;\n        const minuses = [NUMPAD_MINUS, DASH, FF_MINUS];\n        const serviceKeys = [DELETE, BACKSPACE, TAB, ESCAPE, ENTER];\n        const arrows = [LEFT_ARROW, RIGHT_ARROW];\n        const allowedKeys = [HOME, END].concat(arrows).concat(serviceKeys).concat(minuses);\n\n        // should parse normalized fractionSeparator\n        const viewValueToBeChecked = normalizeNumber(this.viewValue, this.config);\n\n        const shouldSkipForIntegerMode = this.integer && this.isPeriod(event);\n        const isMinusAllowed = minuses.includes(keyCode) && (this.viewValue.includes(event.key) || this.min >= 0);\n        const isSignAndFractionSepAlreadyExists =\n            this.isPeriod(event) &&\n            [this.fractionSeparator, KBQ_DEFAULT_PRECISION_SEPARATOR].includes(event.key) &&\n            viewValueToBeChecked.indexOf(KBQ_DEFAULT_PRECISION_SEPARATOR) !== -1;\n\n        if (shouldSkipForIntegerMode || isMinusAllowed || isSignAndFractionSepAlreadyExists) {\n            event.preventDefault();\n\n            return;\n        }\n\n        if (allowedKeys.indexOf(keyCode) !== -1 || [\n                isSelectAll,\n                isCopy,\n                this.isCtrlV,\n                this.isCtrlX,\n                this.isCtrlZ,\n                isFunctionKey,\n                this.isPeriod\n            ].some((fn) => fn(event))) {\n            // let it happen, don't do anything\n            return;\n        }\n\n        const isLetter = !isNumberKey(event) && !isNumpadKey(event);\n\n        // Ensure that it is not a number and stop the keypress\n        if (event.shiftKey || isLetter) {\n            event.preventDefault();\n\n            // process steps\n            const step = event.shiftKey ? this.bigStep : this.step;\n\n            if (keyCode === UP_ARROW) {\n                this.stepUp(step);\n            }\n\n            if (keyCode === DOWN_ARROW) {\n                this.stepDown(step);\n            }\n        }\n    }\n\n    onInput(event: InputEvent) {\n        const currentValueLength = this.formatNumber(this.value)?.length || 0;\n        const previousSelectionStart = this.nativeElement.selectionStart || 0;\n\n        setTimeout(() => {\n            const fromPaste = event.inputType === 'insertFromPaste';\n            let formattedValue: string | null;\n\n            if (fromPaste) {\n                formattedValue = this.formatNumber(this.valueFromPaste);\n            } else {\n                /*this.viewValue is raw and should be reformatted to localized number */\n                formattedValue = this.formatViewValue();\n\n                if (this.withThousandSeparator) {\n                    const offsetWhenSeparatorAdded = 2;\n\n                    Promise.resolve().then(() => {\n                        if (\n                            this.value &&\n                            Math.abs(this.value) >= 1000 &&\n                            Math.abs(this.viewValue.length - currentValueLength) === offsetWhenSeparatorAdded\n                        ) {\n                            // move selection to the left/right if separator was added/removed\n                            const cursorPosition = Math.max(\n                                0,\n                                previousSelectionStart + Math.sign(this.viewValue.length - currentValueLength)\n                            );\n\n                            this.renderer.setProperty(this.nativeElement, 'selectionStart', cursorPosition);\n                            this.renderer.setProperty(this.nativeElement, 'selectionEnd', cursorPosition);\n                        }\n                    });\n                }\n            }\n\n            this.setViewValue(formattedValue, !fromPaste);\n\n            if (this.viewValue !== '-') {\n                this.viewToModelUpdate(formattedValue);\n            }\n        });\n    }\n\n    onPaste(event: ClipboardEvent) {\n        this.valueFromPaste = checkAndNormalizeLocalizedNumber(\n            event.clipboardData?.getData('text'),\n            this.localeService?.id\n        );\n\n        if (this.valueFromPaste === null || isNaN(this.valueFromPaste)) {\n            event.preventDefault();\n        } else if (this.integer && isFloat(this.valueFromPaste.toString())) {\n            event.preventDefault();\n\n            const parsedValue = Number.parseInt(this.valueFromPaste.toString());\n\n            this.setViewValue(this.formatNumber(parsedValue));\n            this.viewToModelUpdate(parsedValue.toString());\n        }\n    }\n\n    stepUp(step: number) {\n        this.nativeElement.focus();\n\n        const res = Math.max(Math.min(add(this.value || 0, step), this.max), this.min);\n\n        this.setViewValue(this.formatNumber(res));\n\n        this._value = res;\n        this.cvaOnChange(res);\n        this.valueChange.emit(res);\n    }\n\n    stepDown(step: number) {\n        this.nativeElement.focus();\n\n        const res = Math.min(Math.max(add(this.value || 0, -step), this.min), this.max);\n\n        this.setViewValue(this.formatNumber(res));\n\n        this._value = res;\n        this.cvaOnChange(res);\n        this.valueChange.emit(res);\n    }\n\n    private initDefaultParams() {\n        this.config = KBQ_INPUT_NUMBER_DEFAULT_CONFIGURATION;\n    }\n\n    private isCtrlV = (event: KeyboardEvent) => {\n        return event.keyCode === V && (event.ctrlKey || event.metaKey);\n    };\n\n    private isCtrlX = (event: KeyboardEvent) => {\n        return event.keyCode === X && (event.ctrlKey || event.metaKey);\n    };\n\n    private isCtrlZ = (event: KeyboardEvent) => {\n        return event.keyCode === Z && (event.ctrlKey || event.metaKey);\n    };\n\n    private isPeriod = (event: KeyboardEvent) => {\n        return (\n            this.groupSeparator.includes(event.key) ||\n            [this.fractionSeparator, KBQ_DEFAULT_PRECISION_SEPARATOR].includes(event.key)\n        );\n    };\n\n    private cvaOnChange: (value: any) => void = () => {};\n\n    private setViewValue(value: string | null, savePosition: boolean = false) {\n        const cursorPosition = this.nativeElement.selectionStart;\n\n        this.renderer.setProperty(this.nativeElement, 'value', value);\n\n        if (savePosition) {\n            this.renderer.setProperty(this.nativeElement, 'selectionStart', cursorPosition);\n            this.renderer.setProperty(this.nativeElement, 'selectionEnd', cursorPosition);\n        }\n    }\n\n    private viewToModelUpdate(newValue: string | null) {\n        const normalizedValue = newValue === null ? null : +normalizeNumber(newValue, this.config);\n\n        if (normalizedValue !== this.value) {\n            this._value = normalizedValue;\n            this.cvaOnChange(normalizedValue);\n            this.valueChange.emit(normalizedValue);\n        }\n\n        this.ngControl?.updateValueAndValidity({ emitEvent: false });\n    }\n\n    private formatViewValue(): string | null {\n        // we just need to skip the minus sign and not do any formatting\n        if (this.viewValue === '-') return this.viewValue;\n\n        if (\n            this.viewValue === null ||\n            this.viewValue === '' ||\n            Number.isNaN(+normalizeNumber(this.viewValue, this.config))\n        ) {\n            return null;\n        }\n\n        const separator =\n            this.groupSeparator.includes(' ') && this.fractionSeparator === ',' ? /[,.]/ : this.fractionSeparator;\n\n        const [intPart, fractionPart] = this.viewValue\n            .split(separator)\n            .map((valuePart) => normalizeNumber(valuePart, this.config));\n\n        return this.createLocalizedNumberFromParts(+intPart, fractionPart);\n    }\n\n    private formatNumber(value: number | null | undefined): string | null {\n        if (value === null || value === undefined) return null;\n\n        const [intPart, fractionPart] = value.toString().split(KBQ_DEFAULT_PRECISION_SEPARATOR);\n\n        return this.createLocalizedNumberFromParts(+intPart, fractionPart);\n    }\n\n    private createLocalizedNumberFromParts(intPart: number, fractionPart?: string): string {\n        const formatOptions = {\n            useGrouping: this.withThousandSeparator,\n            maximumFractionDigits: 20\n        };\n\n        if (this.withThousandSeparator && this.config.startFormattingFrom) {\n            formatOptions.useGrouping = intPart >= Math.pow(10, this.config.startFormattingFrom);\n        }\n\n        const localeId = !this.localeService || this.localeService.id === 'es-LA' ? 'ru-RU' : this.localeService.id;\n\n        const formatter = new Intl.NumberFormat(localeId, formatOptions);\n\n        const formattedIntPart = formatNumberWithLocale(intPart, formatter, this.config);\n\n        if (fractionPart === undefined) {\n            return formattedIntPart;\n        }\n\n        let formattedFractionPart: string = '';\n\n        for (const numChar of fractionPart) {\n            formattedFractionPart += formatter.format(+numChar);\n        }\n\n        return `${formattedIntPart}${this.fractionSeparator}${formattedFractionPart}`;\n    }\n\n    private updateLocaleParams = () => {\n        this.config = this.localeService!.getParams('input').number;\n\n        this.setViewValue(this.formatNumber(this.value));\n    };\n}\n","import { InjectionToken } from '@angular/core';\n\nexport const KBQ_INPUT_VALUE_ACCESSOR = new InjectionToken<{ value: any }>('KBQ_INPUT_VALUE_ACCESSOR');\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { getSupportedInputTypes } from '@angular/cdk/platform';\nimport {\n    Directive,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    inject,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Optional,\n    Self\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport { CanUpdateErrorState, ErrorStateMatcher, KBQ_VALIDATION } from '@koobiq/components/core';\nimport { KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { Subject } from 'rxjs';\nimport { getKbqInputUnsupportedTypeError } from './input-errors';\nimport { KbqNumberInput } from './input-number';\nimport { KBQ_INPUT_VALUE_ACCESSOR } from './input-value-accessor';\n\nconst KBQ_INPUT_INVALID_TYPES = [\n    'button',\n    'checkbox',\n    'file',\n    'hidden',\n    'image',\n    'radio',\n    'range',\n    'reset',\n    'submit'\n];\n\nlet nextUniqueId = 0;\n\n@Directive({\n    selector: `input[kbqInput],input[kbqNumberInput]`,\n    exportAs: 'kbqInput',\n    host: {\n        class: 'kbq-input',\n        // Native input properties that are overwritten by Angular inputs need to be synced with\n        // the native input element. Otherwise property bindings for those don't work.\n        '[attr.id]': 'id',\n        '[attr.placeholder]': 'placeholder',\n        '[attr.disabled]': 'disabled || null',\n        '[required]': 'required',\n        '(blur)': 'onBlur()',\n        '(focus)': 'focusChanged(true)'\n    },\n    providers: [\n        {\n            provide: KbqFormFieldControl,\n            useExisting: KbqInput\n        }\n    ]\n})\nexport class KbqInput\n    implements KbqFormFieldControl<any>, OnChanges, OnDestroy, DoCheck, OnChanges, CanUpdateErrorState\n{\n    private readonly useLegacyValidation = inject(KBQ_VALIDATION, { optional: true })?.useValidation ?? false;\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control when error messages are shown. */\n    @Input() errorStateMatcher: ErrorStateMatcher;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    focused: boolean = false;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    readonly stateChanges: Subject<void> = new Subject<void>();\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    controlType: string = 'input';\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input() placeholder: string;\n\n    protected uid = `kbq-input-${nextUniqueId++}`;\n    protected previousNativeValue: any;\n    protected neverEmptyInputTypes = [\n        'date',\n        'datetime',\n        'datetime-local',\n        'month',\n        'time',\n        'week'\n    ].filter((t) => getSupportedInputTypes().has(t));\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input()\n    get disabled(): boolean {\n        if (this.ngControl && this.ngControl.disabled !== null) {\n            return this.ngControl.disabled;\n        }\n\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        this._disabled = coerceBooleanProperty(value);\n\n        // Browsers may not fire the blur event if the input is disabled too quickly.\n        // Reset from here to ensure that the element doesn't become stuck.\n        if (this.focused) {\n            this.focused = false;\n            this.stateChanges.next();\n        }\n    }\n\n    private _disabled = false;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input()\n    get id(): string {\n        return this._id;\n    }\n\n    set id(value: string) {\n        this._id = value || this.uid;\n    }\n\n    private _id: string;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input()\n    get required(): boolean {\n        return this._required;\n    }\n\n    set required(value: boolean) {\n        this._required = coerceBooleanProperty(value);\n    }\n\n    private _required = false;\n\n    /** Input type of the element. */\n    @Input()\n    get type(): string {\n        return this._type;\n    }\n\n    set type(value: string) {\n        this._type = value || 'text';\n        this.validateType();\n\n        // When using Angular inputs, developers are no longer able to set the properties on the native\n        // input element. To ensure that bindings for `type` work, we need to sync the setter\n        // with the native property. Textarea elements don't support the type property or attribute.\n        if (getSupportedInputTypes().has(this._type)) {\n            this.elementRef.nativeElement.type = this._type;\n        }\n    }\n\n    private _type = 'text';\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input()\n    get value(): string {\n        return this.inputValueAccessor.value;\n    }\n\n    set value(value: string) {\n        if (value !== this.value) {\n            this.inputValueAccessor.value = value;\n            this.stateChanges.next();\n        }\n    }\n\n    private inputValueAccessor: { value: any };\n\n    constructor(\n        protected elementRef: ElementRef<HTMLInputElement>,\n        @Optional() @Self() public ngControl: NgControl,\n        @Optional() @Self() public numberInput: KbqNumberInput,\n        @Optional() public parentForm: NgForm,\n        @Optional() public parentFormGroup: FormGroupDirective,\n        public defaultErrorStateMatcher: ErrorStateMatcher,\n        @Optional() @Self() @Inject(KBQ_INPUT_VALUE_ACCESSOR) inputValueAccessor: any\n    ) {\n        // If no input value accessor was explicitly specified, use the element as the input value accessor.\n        this.inputValueAccessor = inputValueAccessor || this.elementRef.nativeElement;\n\n        this.previousNativeValue = this.value;\n\n        // Force setter to be called in case id was not specified.\n        this.id = this.id;\n    }\n\n    ngOnChanges() {\n        this.stateChanges.next();\n    }\n\n    ngOnDestroy() {\n        this.stateChanges.complete();\n    }\n\n    ngDoCheck() {\n        if (this.ngControl) {\n            // We need to re-evaluate this on every change detection cycle, because there are some\n            // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n            // that whatever logic is in here has to be super lean or we risk destroying the performance.\n            this.updateErrorState();\n        }\n\n        // We need to dirty-check the native element's value, because there are some cases where\n        // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n        // updating the value using `emitEvent: false`).\n        this.dirtyCheckNativeValue();\n    }\n\n    updateErrorState() {\n        const oldState = this.errorState;\n        const parent = this.parentFormGroup || this.parentForm;\n        const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n        const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n        const newState = matcher.isErrorState(control, parent);\n\n        if (newState !== oldState) {\n            this.errorState = newState;\n            this.stateChanges.next();\n        }\n    }\n\n    /** Focuses the input. */\n    focus(): void {\n        this.elementRef.nativeElement.focus();\n    }\n\n    onBlur(): void {\n        this.focusChanged(false);\n\n        if (this.useLegacyValidation && this.ngControl?.control) {\n            const control = this.ngControl.control;\n\n            control.updateValueAndValidity({ emitEvent: false });\n            (control.statusChanges as EventEmitter<string>).emit(control.status);\n        }\n    }\n\n    /** Callback for the cases where the focused state of the input changes. */\n    focusChanged(isFocused: boolean) {\n        if (this.focused !== isFocused) {\n            this.focused = isFocused;\n            this.stateChanges.next();\n        }\n    }\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    get empty(): boolean {\n        return !this.isNeverEmpty() && !this.elementRef.nativeElement.value && !this.isBadInput();\n    }\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    onContainerClick() {\n        this.focus();\n    }\n\n    /** Does some manual dirty checking on the native input `value` property. */\n    protected dirtyCheckNativeValue() {\n        const newValue = this.value;\n\n        if (this.previousNativeValue !== newValue) {\n            this.previousNativeValue = newValue;\n            this.stateChanges.next();\n        }\n    }\n\n    /** Make sure the input is a supported type. */\n    protected validateType() {\n        if (KBQ_INPUT_INVALID_TYPES.indexOf(this._type) > -1) {\n            throw getKbqInputUnsupportedTypeError(this._type);\n        }\n    }\n\n    /** Checks whether the input type is one of the types that are never empty. */\n    protected isNeverEmpty() {\n        return this.neverEmptyInputTypes.indexOf(this._type) > -1;\n    }\n\n    /** Checks whether the input is invalid based on the native validation. */\n    protected isBadInput() {\n        // The `validity` property won't be present on platform-server.\n        const validity = (this.elementRef.nativeElement as HTMLInputElement).validity;\n\n        return validity?.badInput;\n    }\n}\n\n@Directive({\n    selector: 'input[kbqInputMonospace]',\n    exportAs: 'KbqInputMonospace',\n    host: { class: 'kbq-input_monospace' }\n})\nexport class KbqInputMono {}\n","import { Directive, forwardRef, Input, OnChanges, Provider, SimpleChanges } from '@angular/core';\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator, ValidatorFn, Validators } from '@angular/forms';\n\nexport const MIN_VALIDATOR: Provider = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(() => MinValidator),\n    multi: true\n};\n\n/**\n * A directive which installs the MinValidator for any `formControlName`,\n * `formControl`, or control with `ngModel` that also has a `min` attribute.\n */\n@Directive({\n    selector: '[min][formControlName],[min][formControl],[min][ngModel]',\n    providers: [MIN_VALIDATOR],\n    host: {\n        '[attr.min]': 'min ? min : null'\n    }\n})\nexport class MinValidator implements Validator, OnChanges {\n    @Input() min: number;\n    private validator: ValidatorFn;\n    private onChange: () => void;\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('min' in changes) {\n            this.createValidator();\n\n            if (this.onChange) {\n                this.onChange();\n            }\n        }\n    }\n\n    validate(c: AbstractControl): ValidationErrors | null {\n        return this.validator(c);\n    }\n\n    registerOnValidatorChange(fn: () => void): void {\n        this.onChange = fn;\n    }\n\n    private createValidator(): void {\n        this.validator = Validators.min(parseInt(this.min as unknown as string, 10));\n    }\n}\n\nexport const MAX_VALIDATOR: Provider = {\n    provide: NG_VALIDATORS,\n    useExisting: forwardRef(() => MaxValidator),\n    multi: true\n};\n\n/**\n * A directive which installs the MaxValidator for any `formControlName`,\n * `formControl`, or control with `ngModel` that also has a `min` attribute.\n */\n@Directive({\n    selector: '[max][formControlName],[max][formControl],[max][ngModel]',\n    providers: [MAX_VALIDATOR],\n    host: {\n        '[attr.max]': 'max ? max : null'\n    }\n})\nexport class MaxValidator implements Validator, OnChanges {\n    @Input() max: number | string;\n    private validator: ValidatorFn;\n    private onChange: () => void;\n\n    ngOnChanges(changes: SimpleChanges): void {\n        if ('max' in changes) {\n            this.createValidator();\n\n            if (this.onChange) {\n                this.onChange();\n            }\n        }\n    }\n\n    validate(c: AbstractControl): ValidationErrors | null {\n        return this.validator(c);\n    }\n\n    registerOnValidatorChange(fn: () => void): void {\n        this.onChange = fn;\n    }\n\n    private createValidator(): void {\n        this.validator = Validators.max(parseInt(this.max as unknown as string, 10));\n    }\n}\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n    Directive,\n    DoCheck,\n    ElementRef,\n    EventEmitter,\n    inject,\n    Inject,\n    Input,\n    OnChanges,\n    OnDestroy,\n    Optional,\n    Self\n} from '@angular/core';\nimport { FormGroupDirective, NgControl, NgForm, UntypedFormControl } from '@angular/forms';\nimport { CanUpdateErrorState, ErrorStateMatcher, KBQ_VALIDATION } from '@koobiq/components/core';\nimport { KbqFormFieldControl } from '@koobiq/components/form-field';\nimport { Subject } from 'rxjs';\nimport { KBQ_INPUT_VALUE_ACCESSOR } from './input-value-accessor';\n\nlet nextUniqueId = 0;\n\n@Directive({\n    selector: `input[kbqInputPassword]`,\n    exportAs: 'kbqInputPassword',\n    host: {\n        class: 'kbq-input kbq-input-password',\n        // Native input properties that are overwritten by Angular inputs need to be synced with\n        // the native input element. Otherwise property bindings for those don't work.\n        '[attr.id]': 'id',\n        '[attr.type]': 'elementType',\n        '[attr.placeholder]': 'placeholder',\n        '[attr.disabled]': 'disabled || null',\n        '[required]': 'required',\n        '(blur)': 'onBlur()',\n        '(focus)': 'focusChanged(true)',\n        '(input)': 'onInput()'\n    },\n    providers: [\n        {\n            provide: KbqFormFieldControl,\n            useExisting: KbqInputPassword\n        }\n    ]\n})\nexport class KbqInputPassword\n    implements KbqFormFieldControl<any>, OnChanges, OnDestroy, DoCheck, OnChanges, CanUpdateErrorState\n{\n    private readonly useLegacyValidation = inject(KBQ_VALIDATION, { optional: true })?.useValidation ?? false;\n\n    /** Whether the component is in an error state. */\n    errorState: boolean = false;\n\n    /** An object used to control when error messages are shown. */\n    @Input() errorStateMatcher: ErrorStateMatcher;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    focused: boolean = false;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    readonly stateChanges = new Subject<any>();\n\n    readonly checkRule = new Subject<void>();\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    controlType: string = 'input-password';\n\n    elementType: string = 'password';\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input() placeholder: string;\n\n    protected uid = `kbq-input-${nextUniqueId++}`;\n    protected previousNativeValue: any;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input()\n    get disabled(): boolean {\n        if (this.ngControl && this.ngControl.disabled !== null) {\n            return this.ngControl.disabled;\n        }\n\n        return this._disabled;\n    }\n\n    set disabled(value: boolean) {\n        this._disabled = coerceBooleanProperty(value);\n\n        // Browsers may not fire the blur event if the input is disabled too quickly.\n        // Reset from here to ensure that the element doesn't become stuck.\n        if (this.focused) {\n            this.focused = false;\n            this.stateChanges.next(null);\n        }\n    }\n\n    private _disabled = false;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input()\n    get id(): string {\n        return this._id;\n    }\n\n    set id(value: string) {\n        this._id = value || this.uid;\n    }\n\n    private _id: string;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input()\n    get required(): boolean {\n        return this._required;\n    }\n\n    set required(value: boolean) {\n        this._required = coerceBooleanProperty(value);\n    }\n\n    private _required = false;\n\n    // this.elementRef.nativeElement.type = this._type;\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    @Input()\n    get value(): string {\n        return this._inputValueAccessor.value;\n    }\n\n    set value(value: string) {\n        if (value === this.value) {\n            return;\n        }\n\n        this._inputValueAccessor.value = value;\n        this.stateChanges.next(null);\n    }\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    get empty(): boolean {\n        return !this.elementRef.nativeElement.value && !this.isBadInput();\n    }\n\n    private _inputValueAccessor: { value: any };\n\n    constructor(\n        protected elementRef: ElementRef<HTMLInputElement>,\n        @Optional() @Self() public ngControl: NgControl,\n        @Optional() public parentForm: NgForm,\n        @Optional() public parentFormGroup: FormGroupDirective,\n        public defaultErrorStateMatcher: ErrorStateMatcher,\n        @Optional() @Self() @Inject(KBQ_INPUT_VALUE_ACCESSOR) inputValueAccessor: any\n    ) {\n        // If no input value accessor was explicitly specified, use the element as the input value\n        // accessor.\n        this._inputValueAccessor = inputValueAccessor || this.elementRef.nativeElement;\n\n        this.previousNativeValue = this.value;\n\n        // Force setter to be called in case id was not specified.\n        this.id = this.id;\n    }\n\n    ngOnChanges() {\n        this.stateChanges.next(null);\n    }\n\n    ngOnDestroy() {\n        this.stateChanges.complete();\n    }\n\n    ngDoCheck() {\n        if (this.ngControl) {\n            // We need to re-evaluate this on every change detection cycle, because there are some\n            // error triggers that we can't subscribe to (e.g. parent form submissions). This means\n            // that whatever logic is in here has to be super lean or we risk destroying the performance.\n            this.updateErrorState();\n        }\n\n        // We need to dirty-check the native element's value, because there are some cases where\n        // we won't be notified when it changes (e.g. the consumer isn't using forms or they're\n        // updating the value using `emitEvent: false`).\n        this.dirtyCheckNativeValue();\n    }\n\n    updateErrorState() {\n        const oldState = this.errorState;\n        const parent = this.parentFormGroup || this.parentForm;\n        const matcher = this.errorStateMatcher || this.defaultErrorStateMatcher;\n        const control = this.ngControl ? (this.ngControl.control as UntypedFormControl) : null;\n        const newState = matcher.isErrorState(control, parent);\n\n        if (newState !== oldState) {\n            this.errorState = newState;\n            this.stateChanges.next(null);\n        }\n    }\n\n    checkRules() {\n        this.checkRule.next();\n    }\n\n    toggleType() {\n        this.elementType = this.elementType === 'password' ? 'text' : 'password';\n    }\n\n    /** Focuses the input. */\n    focus(): void {\n        this.elementRef.nativeElement.focus();\n    }\n\n    onBlur(): void {\n        this.focusChanged(false);\n\n        if (this.useLegacyValidation && this.ngControl?.control) {\n            const control = this.ngControl.control;\n\n            control.updateValueAndValidity({ emitEvent: false });\n            (control.statusChanges as EventEmitter<string>).emit(control.status);\n        }\n    }\n\n    /** Callback for the cases where the focused state of the input changes. */\n    focusChanged(isFocused: boolean) {\n        if (isFocused === this.focused) {\n            return;\n        }\n\n        this.focused = isFocused;\n        this.stateChanges.next({ focused: this.focused });\n    }\n\n    onInput() {\n        // This is a noop function and is used to let Angular know whenever the value changes.\n        // Angular will run a new change detection each time the `input` event has been dispatched.\n        // It's necessary that Angular recognizes the value change, because when floatingLabel\n        // is set to false and Angular forms aren't used, the placeholder won't recognize the\n        // value changes and will not disappear.\n        // Listening to the input event wouldn't be necessary when the input is using the\n        // FormsModule or ReactiveFormsModule, because Angular forms also listens to input events.\n    }\n\n    /**\n     * Implemented as part of KbqFormFieldControl.\n     * @docs-private\n     */\n    onContainerClick() {\n        this.focus();\n    }\n\n    /** Does some manual dirty checking on the native input `value` property. */\n    protected dirtyCheckNativeValue() {\n        if (this.previousNativeValue !== this.value) {\n            this.previousNativeValue = this.value;\n            this.stateChanges.next(null);\n        }\n    }\n\n    /** Checks whether the input is invalid based on the native validation. */\n    protected isBadInput() {\n        // The `validity` property won't be present on platform-server.\n        return (this.elementRef.nativeElement as HTMLInputElement).validity?.badInput;\n    }\n}\n","import { A11yModule } from '@angular/cdk/a11y';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { KbqFormFieldModule } from '@koobiq/components/form-field';\nimport { KbqIconModule } from '@koobiq/components/icon';\nimport { KbqInput, KbqInputMono } from './input';\nimport { KbqNumberInput } from './input-number';\nimport { MaxValidator, MinValidator } from './input-number-validators';\nimport { KbqInputPassword } from './input-password';\n\n@NgModule({\n    imports: [\n        A11yModule,\n        FormsModule,\n        KbqIconModule,\n        KbqInput,\n        KbqNumberInput,\n        KbqInputPassword,\n        KbqInputMono,\n        MinValidator,\n        MaxValidator\n    ],\n    exports: [\n        KbqInput,\n        KbqNumberInput,\n        KbqInputPassword,\n        KbqInputMono,\n        MinValidator,\n        MaxValidator,\n        KbqFormFieldModule\n    ]\n})\nexport class KbqInputModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["nextUniqueId"],"mappings":"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"}