{"version":3,"file":"bravobit-bb-foundation-masking.mjs","sources":["../../../projects/bb-foundation/masking/src/lib/input-mask.interface.ts","../../../projects/bb-foundation/masking/src/lib/directives/input-mask.directive.ts","../../../projects/bb-foundation/masking/src/lib/masking.service.ts","../../../projects/bb-foundation/masking/src/lib/directives/currency-mask.directive.ts","../../../projects/bb-foundation/masking/src/lib/directives/date-mask.directive.ts","../../../projects/bb-foundation/masking/src/lib/masking.module.ts","../../../projects/bb-foundation/masking/src/bravobit-bb-foundation-masking.ts"],"sourcesContent":["import type Inputmask from 'inputmask';\n\nexport type InputMaskOptions<T> = Inputmask.Options & {\n    parser?: (value: any) => T;\n};\n\nexport type CurrencyMaskOptions = {\n    symbol: string;\n    symbolFormat: 'wide' | 'narrow';\n    spacer: string;\n    digits: number;\n    digitsOptional: boolean;\n    decimalCharacter: string;\n    groupCharacter: string;\n    min: number;\n    max: number;\n    allowMinus: boolean;\n    nullable: boolean;\n}\n\nexport type DateMaskFormat =\n    'day-month-year' |\n    'month-day-year' |\n    'year-month-day' |\n    'year-day-month';\n\nexport const createMask = <T>(options: string | InputMaskOptions<T>) => typeof options === 'string' ? {mask: options} : options;\n","import {Directive, ElementRef, HostListener, Input, NgZone, OnDestroy, OnInit, Optional, Renderer2, Self} from '@angular/core';\nimport {AbstractControl, ControlValueAccessor, NgControl, Validator} from '@angular/forms';\nimport {InputMaskOptions} from '../input-mask.interface';\nimport {fromEvent, merge, Subscription} from 'rxjs';\nimport {Platform} from '@angular/cdk/platform';\nimport type Inputmask from 'inputmask';\nimport _Inputmask from 'inputmask';\n\nconst InputmaskConstructor = (_Inputmask as unknown as { default?: Inputmask.Static }).default || _Inputmask;\n\n@Directive({\n    selector: 'input[bbInputMask],input[bbCurrencyMask],input[bbDateMask]'\n})\nexport class BbInputMask<T = any> implements OnInit, OnDestroy, ControlValueAccessor, Validator {\n\n    @Input('bbInputMask')\n    set mask(mask: InputMaskOptions<T> | string | null | undefined) {\n        if (!mask || typeof mask === 'string') {\n            return;\n        }\n\n        this._inputMaskOptions = mask;\n        this.updateMask();\n    }\n\n    // State.\n    inputMaskPlugin: Inputmask.Instance | null = null;\n    nativeInputElement: HTMLInputElement | null = null;\n    eventsSubscription: Subscription | null = null;\n\n    private _inputMaskOptions: InputMaskOptions<T> | null = null;\n    private _onChange: (value: T | null) => void = () => ({});\n\n    constructor(private _ngZone: NgZone,\n                private _platform: Platform,\n                private _renderer: Renderer2,\n                private _elementRef: ElementRef<HTMLInputElement>,\n                @Optional() @Self() private _control?: NgControl) {\n        this.nativeInputElement = this._elementRef.nativeElement;\n        if (this._control != null) {\n            this._control.valueAccessor = this;\n        }\n    }\n\n    @HostListener('input', ['$event.target.value'])\n    onInput: (value: any) => void = (_: any) => ({});\n\n    @HostListener('blur', ['$event.target.value'])\n    onTouched: () => void = () => ({});\n\n    ngOnInit() {\n        const control = this._control?.control;\n        if (!control) {\n            return;\n        }\n\n        control?.setValidators(control.validator ? [control.validator, this.validate] : [this.validate]);\n        control?.updateValueAndValidity();\n    }\n\n    ngOnDestroy() {\n        this.destroyMask();\n    }\n\n    writeValue(value: string) {\n        if (!this.nativeInputElement) {\n            return;\n        }\n        this._renderer.setProperty(this.nativeInputElement, 'value', value ?? '');\n    }\n\n    registerOnChange(fn: (value: T | null) => void) {\n        this._onChange = fn;\n        const parser = this._inputMaskOptions?.parser;\n        this.onInput = value => this._onChange(parser ? parser(value) : value);\n    }\n\n    registerOnTouched(fn: () => void) {\n        this.onTouched = fn;\n    }\n\n    setDisabledState(isDisabled: boolean) {\n        if (!this.nativeInputElement) {\n            return;\n        }\n        this._renderer.setProperty(this.nativeInputElement, 'disabled', isDisabled);\n    }\n\n    validate = (control: AbstractControl) => !control.value || !this.inputMaskPlugin || this.inputMaskPlugin?.isValid()\n        ? null\n        : {inputMask: true};\n\n    private updateMask() {\n        this.destroyMask();\n        this.createMask();\n        this.registerOnChange(this._onChange);\n    }\n\n    private createMask() {\n        if (!this._platform.isBrowser || !this.nativeInputElement || this._inputMaskOptions === null || Object.keys(this._inputMaskOptions).length === 0) {\n            return;\n        }\n\n        const {parser, ...options} = this._inputMaskOptions;\n        this.inputMaskPlugin = this._ngZone.runOutsideAngular(() => new InputmaskConstructor(options).mask(this.nativeInputElement));\n\n        const setValue$ = fromEvent(this.nativeInputElement, 'setvalue');\n        const cleared$ = fromEvent(this.nativeInputElement, 'cleared');\n\n        this.eventsSubscription = merge(setValue$, cleared$)\n            .subscribe(event => this.onInput(event?.target?.['value']));\n\n        const control = this._control?.control;\n        if (!control) {\n            return;\n        }\n        setTimeout(() => control?.updateValueAndValidity());\n    }\n\n    private destroyMask() {\n        this.eventsSubscription?.unsubscribe();\n        this.eventsSubscription = null;\n        this.inputMaskPlugin?.remove();\n        this.inputMaskPlugin = null;\n    }\n\n    // Required so that the template type checker can infer the type of the coerced inputs.\n    static ngAcceptInputType_bbInputMask: InputMaskOptions<any> | string | null | undefined;\n\n}\n","import {formatDate, getCurrencySymbol, getLocaleNumberSymbol, getNumberOfCurrencyDigits, NumberSymbol} from '@angular/common';\nimport {createMask, CurrencyMaskOptions, DateMaskFormat} from './input-mask.interface';\nimport {Localize} from '@bravobit/bb-foundation/localize';\nimport {Injectable, Optional} from '@angular/core';\n\n@Injectable({\n    providedIn: 'root'\n})\nexport class Masking {\n\n    constructor(@Optional() private _localize?: Localize) {\n    }\n\n    date(format: DateMaskFormat, separator: string = '-') {\n        const dateParts = this.getDateParts(format);\n        const inputFormat = dateParts.join(separator);\n        const outputFormat = 'yyyy-MM-dd';\n\n        const escape = /[.*+?^${}()\\/|[\\]\\\\]/g;\n        const escapedSeparator = separator.replace(escape, '\\\\$&');\n\n        const inputFormatRegexString = dateParts\n            .map(item => `(?<${item}>[0-9]{${item?.length}})`)\n            .join(escapedSeparator);\n        const inputFormatRegex = new RegExp(`^${inputFormatRegexString}$`);\n\n        return createMask({\n            alias: 'datetime',\n            inputFormat: inputFormat.toLowerCase(),\n            outputFormat: outputFormat.toLowerCase(),\n            nullable: false,\n            inputmode: 'numeric',\n            onBeforeMask: (initialValue: string) => {\n                return initialValue ? formatDate(initialValue, inputFormat, 'en-US') : null;\n            },\n            onBeforePaste: (value: string) => {\n                return value;\n            },\n            parser: (value: string) => {\n                if (!value || typeof value !== 'string' || !inputFormatRegex.test(value)) {\n                    return null;\n                }\n                const matches = value.match(inputFormatRegex);\n                const year = +matches?.groups?.['yyyy'];\n                const month = +matches?.groups?.['MM'] - 1;\n                const day = +matches?.groups?.['dd'];\n                const date = new Date(year, month, day);\n\n                return date instanceof Date && !isNaN(<any>date)\n                    ? formatDate(date, outputFormat, 'en-US')\n                    : null;\n            }\n        });\n    }\n\n    currency(code: string, options?: Partial<CurrencyMaskOptions>) {\n        const locale = this._localize?.current?.locale ?? 'en';\n        const symbol = options?.symbol ?? getCurrencySymbol(code, options?.symbolFormat ?? 'narrow', locale);\n\n        const decimal = options?.decimalCharacter ?? getLocaleNumberSymbol(locale, NumberSymbol.CurrencyDecimal);\n        const group = options?.groupCharacter ?? getLocaleNumberSymbol(locale, NumberSymbol.CurrencyGroup);\n        const digits = options?.digits ?? getNumberOfCurrencyDigits(code);\n        const spacer = options?.spacer ?? ' ';\n\n        return createMask({\n            alias: 'numeric',\n            inputType: 'number',\n            digits: digits,\n            allowMinus: options?.allowMinus ?? false,\n            min: options?.min ?? 0,\n            max: options?.max ?? Number.MAX_SAFE_INTEGER,\n            prefix: `${symbol}${spacer}`,\n            radixPoint: decimal ?? '.',\n            groupSeparator: group ?? ',',\n            digitsOptional: options?.digitsOptional ?? false,\n            nullable: options?.nullable ?? true,\n            autoUnmask: true,\n            unmaskAsNumber: true,\n            rightAlign: false,\n            showMaskOnHover: false,\n            showMaskOnFocus: false,\n            inputmode: digits > 0 ? 'decimal' : 'numeric',\n            parser: (value: string | number) => {\n                if (value === '') {\n                    return null;\n                }\n                return value;\n            }\n        });\n    }\n\n    private getDateParts(format: DateMaskFormat) {\n        switch (format) {\n            case 'day-month-year':\n                return ['dd', 'MM', 'yyyy'];\n            case 'month-day-year':\n                return ['MM', 'dd', 'yyyy'];\n            case 'year-day-month':\n                return ['yyyy', 'dd', 'MM'];\n            case 'year-month-day':\n            default:\n                return ['yyyy', 'MM', 'dd'];\n        }\n    }\n\n}\n","import {Directive, Input, OnChanges, Self, SimpleChanges} from '@angular/core';\nimport {CurrencyMaskOptions} from '../input-mask.interface';\nimport {BbInputMask} from './input-mask.directive';\nimport {Masking} from '../masking.service';\n\n@Directive({\n    selector: 'input[bbCurrencyMask]'\n})\nexport class BbCurrencyMask implements OnChanges {\n\n    // Inputs.\n    @Input('bbCurrencyMask') currencyCode: string | null = null;\n    @Input('bbCurrencyMaskOptions') options: Partial<CurrencyMaskOptions> | null = null;\n\n    constructor(private _masking: Masking,\n                @Self() private _inputMask: BbInputMask) {\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const currencyCode = changes?.['currencyCode']?.currentValue ?? this.currencyCode ?? 'USD';\n        const options = changes?.['options']?.currentValue ?? this.options ?? {};\n\n        this._inputMask.mask = this._masking.currency(currencyCode, options);\n    }\n\n    // Required so that the template type checker can infer the type of the coerced inputs.\n    static ngAcceptInputType_bbCurrencyMask: string | null | undefined;\n    static ngAcceptInputType_bbCurrencyMaskOptions: Partial<CurrencyMaskOptions> | null | undefined;\n\n}\n","import {Directive, Input, OnChanges, Self, SimpleChanges} from '@angular/core';\nimport {DateMaskFormat} from '../input-mask.interface';\nimport {BbInputMask} from './input-mask.directive';\nimport {Masking} from '../masking.service';\n\n@Directive({\n    selector: 'input[bbDateMask]'\n})\nexport class BbDateMask implements OnChanges {\n\n    // Inputs.\n    @Input('bbDateMask') format: DateMaskFormat | null = null;\n    @Input('bbDateMaskSeparator') separator: string | null = null;\n\n    constructor(private _masking: Masking,\n                @Self() private _inputMask: BbInputMask) {\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        const format = changes?.['format']?.currentValue ?? this.format ?? null;\n        const separator = changes?.['separator']?.currentValue ?? this.separator ?? '-';\n        this._inputMask.mask = this._masking.date(format, separator);\n    }\n\n    // Required so that the template type checker can infer the type of the coerced inputs.\n    static ngAcceptInputType_bbDateMask: DateMaskFormat | null | undefined;\n    static ngAcceptInputType_bbDateMaskSeparator: string | null | undefined;\n\n}\n","import {BbCurrencyMask} from './directives/currency-mask.directive';\nimport {BbInputMask} from './directives/input-mask.directive';\nimport {BbDateMask} from './directives/date-mask.directive';\nimport {NgModule} from '@angular/core';\n\n@NgModule({\n    imports: [\n        BbInputMask,\n        BbCurrencyMask,\n        BbDateMask\n    ],\n    exports: [\n        BbInputMask,\n        BbCurrencyMask,\n        BbDateMask\n    ]\n})\nexport class MaskingModule {\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i1","i1.Masking","i2.BbInputMask"],"mappings":"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"}