{"version":3,"file":"seniorsistemas-angular-components-localized-number-input.mjs","sources":["../../projects/angular-components/localized-number-input/src/lib/localized-number-input/localized-number-input.directive.ts","../../projects/angular-components/localized-number-input/src/lib/localized-number-input/localized-number-input.module.ts","../../projects/angular-components/localized-number-input/src/seniorsistemas-angular-components-localized-number-input.ts"],"sourcesContent":["import { Directive, DestroyRef, forwardRef, Input, OnInit, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { AbstractControl, NG_VALIDATORS, ValidationErrors, Validator } from '@angular/forms';\r\nimport { LocaleService } from '@seniorsistemas/angular-components/locale';\r\n\r\nimport { first } from 'rxjs/operators';\r\n\r\n/**\r\n * @description Diretiva de validação para campos `<input>` que verificam se o valor digitado\r\n * é um número localizado válido (considerando separadores decimal e de milhar do locale ativo).\r\n * Ao ser integrada ao `NG_VALIDATORS`, adiciona o erro `invalidNumber` ao control quando\r\n * o valor não corresponde ao formato esperado.\r\n *\r\n * @example\r\n * ```html\r\n * <input sLocalizedNumberInput [precision]=\"4\" formControlName=\"valor\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Directive({\r\n    selector: 'input[sLocalizedNumberInput]',\r\n    providers: [\r\n        {\r\n            provide: NG_VALIDATORS,\r\n            useExisting: forwardRef(() => LocalizedNumberInputDirective),\r\n            multi: true,\r\n        },\r\n    ],\r\n    standalone: true,\r\n})\r\nexport class LocalizedNumberInputDirective implements OnInit, Validator {\r\n    private readonly localeService = inject(LocaleService);\r\n    private readonly _destroyRef = inject(DestroyRef);\r\n\r\n    /** @description Separador decimal personalizado. Usa o do locale ativo se não informado. */\r\n    @Input()\r\n    public decimalSeparator?: string;\r\n\r\n    /** @description Separador de milhar personalizado. Usa o do locale ativo se não informado. */\r\n    @Input()\r\n    public thousandsSeparator?: string;\r\n\r\n    /** @description Número máximo de casas decimais aceitas na validação. @default 2 */\r\n    @Input()\r\n    public precision = 2;\r\n\r\n    private numberRegex?: string;\r\n\r\n    public ngOnInit(): void {\r\n        // Gera a expressão regular para validar números de acordo com os separadores decimais e de milhares.\r\n        // Exemplo: /^(\\+?)(\\-?)([0-9]{0,3})*((\\,[0-9]{3,3})|((\\,[0-9]{3,3})+(\\,[0-9]{3,3}))|((\\,[0-9]{3,3})+(\\.[0-9]{1,10})))?$/g\r\n        // tslint:disable-next-line: max-line-length\r\n        this.numberRegex = `^((\\\\+?)|(-?))([0-9]{1,3})+((\\\\${this.thousandsSeparator}[0-9]{3,3})|((\\\\${this.thousandsSeparator}[0-9]{3,3})+(\\\\${this.thousandsSeparator}[0-9]{3,3}))|((\\\\${this.thousandsSeparator}[0-9]{3,3})+(\\\\${this.decimalSeparator}[0-9]{1,2}))|(\\\\${this.decimalSeparator}[0-9]{1,${this.precision}}))?$`;\r\n\r\n        this.localeService\r\n            .getLocale()\r\n            .pipe(first(), takeUntilDestroyed(this._destroyRef))\r\n            .subscribe(() => {\r\n                this.decimalSeparator = this.decimalSeparator ?? this.localeService.getDecimalSeparator();\r\n                this.thousandsSeparator = this.thousandsSeparator ?? this.localeService.getGroupingSeparator();\r\n\r\n                this.numberRegex = `^((\\\\+?)|(-?))([0-9]{1,3})+((\\\\${this.thousandsSeparator}[0-9]{3,3})|((\\\\${this.thousandsSeparator}[0-9]{3,3})+(\\\\${this.thousandsSeparator}[0-9]{3,3}))|((\\\\${this.thousandsSeparator}[0-9]{3,3})+(\\\\${this.decimalSeparator}[0-9]{1,2}))|(\\\\${this.decimalSeparator}[0-9]{1,${this.precision}}))?$`;\r\n            });\r\n    }\r\n\r\n    public validate(control: AbstractControl): ValidationErrors | null {\r\n        if (control.value && !String(control.value).match(new RegExp(this.numberRegex ?? '', 'g'))) {\r\n            return { invalidNumber: true };\r\n        }\r\n        return null;\r\n    }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { LocalizedNumberInputDirective } from './localized-number-input.directive';\r\n\r\n@NgModule({\r\n    imports: [LocalizedNumberInputDirective],\r\n    exports: [LocalizedNumberInputDirective],\r\n})\r\nexport class LocalizedNumberInputModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;AAOA;;;;;;;;;;;;AAYG;MAYU,6BAA6B,CAAA;AACrB,IAAA,aAAa,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC;AACtC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;;AAI3C,IAAA,gBAAgB,CAAU;;AAI1B,IAAA,kBAAkB,CAAU;;IAI5B,SAAS,GAAG,CAAC,CAAC;AAEb,IAAA,WAAW,CAAU;IAEtB,QAAQ,GAAA;;;;AAIX,QAAA,IAAI,CAAC,WAAW,GAAG,CAAA,+BAAA,EAAkC,IAAI,CAAC,kBAAkB,CAAmB,gBAAA,EAAA,IAAI,CAAC,kBAAkB,CAAkB,eAAA,EAAA,IAAI,CAAC,kBAAkB,CAAA,iBAAA,EAAoB,IAAI,CAAC,kBAAkB,CAAA,eAAA,EAAkB,IAAI,CAAC,gBAAgB,CAAmB,gBAAA,EAAA,IAAI,CAAC,gBAAgB,CAAW,QAAA,EAAA,IAAI,CAAC,SAAS,OAAO,CAAC;AAE1T,QAAA,IAAI,CAAC,aAAa;AACb,aAAA,SAAS,EAAE;aACX,IAAI,CAAC,KAAK,EAAE,EAAE,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;aACnD,SAAS,CAAC,MAAK;AACZ,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC,aAAa,CAAC,mBAAmB,EAAE,CAAC;AAC1F,YAAA,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,CAAC,oBAAoB,EAAE,CAAC;AAE/F,YAAA,IAAI,CAAC,WAAW,GAAG,CAAA,+BAAA,EAAkC,IAAI,CAAC,kBAAkB,CAAmB,gBAAA,EAAA,IAAI,CAAC,kBAAkB,CAAkB,eAAA,EAAA,IAAI,CAAC,kBAAkB,CAAA,iBAAA,EAAoB,IAAI,CAAC,kBAAkB,CAAA,eAAA,EAAkB,IAAI,CAAC,gBAAgB,CAAmB,gBAAA,EAAA,IAAI,CAAC,gBAAgB,CAAW,QAAA,EAAA,IAAI,CAAC,SAAS,OAAO,CAAC;AAC9T,SAAC,CAAC,CAAC;KACV;AAEM,IAAA,QAAQ,CAAC,OAAwB,EAAA;QACpC,IAAI,OAAO,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,EAAE;AACxF,YAAA,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;SAClC;AACD,QAAA,OAAO,IAAI,CAAC;KACf;wGAxCQ,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAA7B,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,6BAA6B,EAT3B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,8BAAA,EAAA,MAAA,EAAA,EAAA,gBAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,oBAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,SAAA,EAAA;AACP,YAAA;AACI,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,6BAA6B,CAAC;AAC5D,gBAAA,KAAK,EAAE,IAAI;AACd,aAAA;AACJ,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;4FAGQ,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAXzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,8BAA8B;AACxC,oBAAA,SAAS,EAAE;AACP,wBAAA;AACI,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAE,UAAU,CAAC,mCAAmC,CAAC;AAC5D,4BAAA,KAAK,EAAE,IAAI;AACd,yBAAA;AACJ,qBAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;8BAOU,gBAAgB,EAAA,CAAA;sBADtB,KAAK;gBAKC,kBAAkB,EAAA,CAAA;sBADxB,KAAK;gBAKC,SAAS,EAAA,CAAA;sBADf,KAAK;;;MCrCG,0BAA0B,CAAA;wGAA1B,0BAA0B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;yGAA1B,0BAA0B,EAAA,OAAA,EAAA,CAHzB,6BAA6B,CAAA,EAAA,OAAA,EAAA,CAC7B,6BAA6B,CAAA,EAAA,CAAA,CAAA;yGAE9B,0BAA0B,EAAA,CAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBAJtC,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;oBACN,OAAO,EAAE,CAAC,6BAA6B,CAAC;oBACxC,OAAO,EAAE,CAAC,6BAA6B,CAAC;AAC3C,iBAAA,CAAA;;;ACND;;AAEG;;;;"}