{"version":3,"file":"seniorsistemas-angular-components-bignumber-input.mjs","sources":["../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.directive.ts","../../projects/angular-components/bignumber-input/src/lib/bignumber-input/bignumber-input.module.ts","../../projects/angular-components/bignumber-input/src/seniorsistemas-angular-components-bignumber-input.ts"],"sourcesContent":["import { Directive, forwardRef, input, model, OnChanges, OnInit, output, SimpleChanges } from '@angular/core';\r\nimport { AbstractControl, NG_VALUE_ACCESSOR, ValidationErrors } from '@angular/forms';\r\n\r\nimport { NumericMaskDirective } from '@seniorsistemas/angular-components/numeric-mask';\r\n\r\n/**\r\n * @deprecated Este enum não tem mais efeito. O alinhamento do campo é sempre `'right'`.\r\n */\r\nexport enum BignumberAlignmentOption {\r\n    RIGHT = 'right',\r\n    LEFT = 'left',\r\n}\r\n\r\n/**\r\n * @deprecated Utilize a diretiva `BigNumberInput` ao invés desta.\r\n * @description Diretiva de máscara para campos de entrada de números de grande precisão,\r\n * adaptada do `CurrencyMaskDirective`. Permite configurar precisão, escala,\r\n * separadores decimais e de milhar de acordo com o locale da aplicação.\r\n *\r\n * @example\r\n * ```html\r\n * <input sBignumberInput [precision]=\"15\" [scale]=\"2\" [allowNegative]=\"false\" />\r\n * ```\r\n *\r\n * @category Inputs\r\n */\r\n@Directive({\r\n    selector: 'input[sBignumberInput]',\r\n    host: {\r\n        '[attr.placeholder]': 'placeholder()',\r\n        '[attr.maxLength]': 'maxLength',\r\n    },\r\n    providers: [\r\n        {\r\n            provide: NG_VALUE_ACCESSOR,\r\n            // NOSONAR - 'BignumberInputDirective' is deprecated.\r\n            useExisting: forwardRef(() => BignumberInputDirective),\r\n            multi: true,\r\n        },\r\n    ],\r\n    standalone: true,\r\n})\r\nexport class BignumberInputDirective extends NumericMaskDirective implements OnInit, OnChanges {\r\n    /**\r\n     * @description Número total de dígitos significativos aceitos pelo campo (parte inteira + parte decimal).\r\n     *\r\n     * Durante a digitação, o campo limita fisicamente o número de caracteres via `maxLength`.\r\n     * Ao colar um valor que ultrapasse o limite, o evento `pasteRejected` é emitido e a colagem é cancelada.\r\n     * Após sair do campo (blur) ou ao submeter o formulário, se o valor ultrapassar `precision`,\r\n     * o campo ficará inválido com o erro `exceedsPrecision: { precision, actual }`.\r\n     *\r\n     * @default 15\r\n     */\r\n    public precision = input(15);\r\n\r\n    /**\r\n     * @deprecated Use `minDecimalPlaces` e `maxDecimalPlaces` ao invés deste.\r\n     * @description Número de casas decimais exibidas e aceitas pelo campo.\r\n     * Quando informado, repassa o valor para `minDecimalPlaces` e `maxDecimalPlaces`.\r\n     *\r\n     * @default 0\r\n     */\r\n    public scale = input(0);\r\n\r\n    /**\r\n     * @description Número mínimo de casas decimais exibidas.\r\n     *\r\n     * @default 0\r\n     */\r\n    public override minDecimalPlaces = model(0);\r\n\r\n    /**\r\n     * @description Número máximo de casas decimais aceitas.\r\n     *\r\n     * @default 0\r\n     */\r\n    public override maxDecimalPlaces = model(0);\r\n\r\n    /**\r\n     * @description Separador decimal personalizado. Quando não informado,\r\n     * utiliza o separador definido pelo locale ativo da aplicação.\r\n     */\r\n    public override decimalSeparator = model(',');\r\n\r\n    /**\r\n     * @deprecated Use `thousandSeparator` ao invés deste.\r\n     * @description Separador de milhar personalizado. Recomenda-se migrar para `thousandSeparator`.\r\n     */\r\n    public thousandsSeparator = input<string | undefined>(undefined);\r\n\r\n    /**\r\n     * @description Separador de milhar personalizado. Quando não informado,\r\n     * utiliza o separador definido pelo locale ativo da aplicação.\r\n     */\r\n    public override thousandSeparator = model('.');\r\n\r\n    /**\r\n     * @deprecated Este input não tem mais efeito e pode ser removido.\r\n     * O alinhamento do campo é sempre `'right'`, conforme o comportamento padrão da máscara numérica.\r\n     */\r\n    public alignTo = input<'left' | 'right'>('right');\r\n\r\n    /**\r\n     * @description Permite a entrada de valores negativos.\r\n     *\r\n     * @default true\r\n     */\r\n    public override allowNegative = input(true);\r\n\r\n    /**\r\n     * Preserves this deprecated directive's legacy behavior: NumericMaskDirective now\r\n     * defaults to blocking decimal overflow while typing/pasting, but existing\r\n     * sBignumberInput consumers should not have their input behavior changed silently.\r\n     */\r\n    public override blockDecimalOverflow = input(false);\r\n\r\n    /**\r\n     * @description Texto de placeholder exibido quando o campo está vazio.\r\n     */\r\n    public placeholder = model<string | undefined>(undefined);\r\n\r\n    public maxLength?: number;\r\n\r\n    /**\r\n     * @description Emitido quando uma colagem (paste) é rejeitada pela validação do campo.\r\n     * Emite a string colada que foi recusada.\r\n     */\r\n    public pasteRejected = output<string>();\r\n\r\n    private _decimalSeparatorExplicit = false;\r\n    private _thousandSeparatorExplicit = false;\r\n    private _lastAutoPlaceholder: string | undefined;\r\n\r\n    constructor() {\r\n        super();\r\n    }\r\n\r\n    public override ngOnInit(): void {\r\n        super.ngOnInit();\r\n        this.updatePlaceholder();\r\n    }\r\n\r\n    // ngOnChanges handles all signal writes reactively, avoiding the need for\r\n    // effect() with allowSignalWrites. The decimalSeparator/thousandSeparator inputs\r\n    // have truthy defaults, so ngOnChanges is necessary to distinguish \"parent bound this\"\r\n    // from \"it's just the default value\".\r\n    public override ngOnChanges(changes: SimpleChanges): void {\r\n        if (changes['decimalSeparator'] && this.decimalSeparator()) {\r\n            this._decimalSeparatorExplicit = true;\r\n        }\r\n        if (changes['thousandSeparator'] && this.thousandSeparator()) {\r\n            this._thousandSeparatorExplicit = true;\r\n        }\r\n        if (changes['thousandsSeparator']) {\r\n            const val = this.thousandsSeparator();\r\n            if (val !== undefined) {\r\n                this._thousandSeparatorExplicit = true;\r\n                this.thousandSeparator.set(val);\r\n            }\r\n        }\r\n        if (changes['scale']) {\r\n            this.minDecimalPlaces.set(this.scale());\r\n            this.maxDecimalPlaces.set(this.scale());\r\n        }\r\n        if (\r\n            changes['scale'] ||\r\n            changes['decimalSeparator'] ||\r\n            changes['thousandSeparator'] ||\r\n            changes['thousandsSeparator'] ||\r\n            changes['precision']\r\n        ) {\r\n            this.calculateMaxLength();\r\n        }\r\n        if (changes['scale'] || changes['decimalSeparator']) {\r\n            this.updatePlaceholder();\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Overrides base paste handler to add precision validation.\r\n     * If the pasted value exceeds `precision` digits, the paste is rejected.\r\n     */\r\n    public override onPaste(event: ClipboardEvent): void {\r\n        const pastedText = event.clipboardData?.getData('text') ?? '';\r\n        const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();\r\n        const numericText = pastedText\r\n            .replace(new RegExp(`\\\\${effectiveThousandSep}`, 'g'), '')\r\n            .replace(this.decimalSeparator(), '.');\r\n        const [intPart, decimalPart = ''] = numericText.split('.');\r\n        const totalDigits = intPart.replace(/\\D/g, '').length + decimalPart.slice(0, this.scale()).length;\r\n\r\n        if (totalDigits > this.precision()) {\r\n            event.preventDefault();\r\n            this.pasteRejected.emit(pastedText);\r\n            return;\r\n        }\r\n\r\n        super.onPaste(event);\r\n    }\r\n\r\n    /**\r\n     * Overrides locale-derived separators with explicitly set inputs, if provided.\r\n     * If no explicit separator is set, the locale-derived value is used.\r\n     */\r\n    protected override updateSeparators(): void {\r\n        const explicitDecimal = this._decimalSeparatorExplicit ? this.decimalSeparator() : undefined;\r\n        const explicitThousand = this._thousandSeparatorExplicit\r\n            ? (this.thousandsSeparator() ?? this.thousandSeparator())\r\n            : undefined;\r\n\r\n        super.updateSeparators();\r\n\r\n        if (explicitDecimal !== undefined) {\r\n            this.decimalSeparator.set(explicitDecimal);\r\n        }\r\n        if (explicitThousand !== undefined) {\r\n            this.thousandSeparator.set(explicitThousand);\r\n        }\r\n\r\n        this.calculateMaxLength();\r\n        this.updatePlaceholder();\r\n    }\r\n\r\n    /**\r\n     * Overrides base validator to add precision validation.\r\n     * If the total number of significant digits exceeds `precision`, returns an `exceedsPrecision` error.\r\n     */\r\n    public override validate(control: AbstractControl): ValidationErrors | null {\r\n        const baseErrors = super.validate(control);\r\n\r\n        if (!control.value || !this.precision()) {\r\n            return baseErrors ?? null;\r\n        }\r\n\r\n        const numericStr = String(control.value).replace('-', '');\r\n        const [intPart, decimalPart = ''] = numericStr.split('.');\r\n        const totalDigits = intPart.length + decimalPart.length;\r\n\r\n        if (totalDigits > this.precision()) {\r\n            return {\r\n                ...baseErrors,\r\n                exceedsPrecision: {\r\n                    precision: this.precision(),\r\n                    actual: totalDigits,\r\n                },\r\n            };\r\n        }\r\n\r\n        return baseErrors ?? null;\r\n    }\r\n\r\n    /**\r\n     * Responsible to calculate the field maximum length considering the separators.\r\n     */\r\n    private calculateMaxLength(): void {\r\n        const decSepLength = this.decimalSeparator()?.length ?? 0;\r\n        const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();\r\n        const thoSepLength = effectiveThousandSep?.length ?? 0;\r\n\r\n        const DIGITS_GROUP_SIZE = 3;\r\n\r\n        let maxLength = this.precision() + (this.scale() ? decSepLength : 0);\r\n        maxLength +=\r\n            Math.ceil((this.precision() - (this.scale() ? this.scale() : 0)) / DIGITS_GROUP_SIZE - 1) * thoSepLength;\r\n\r\n        this.maxLength = maxLength;\r\n    }\r\n\r\n    private updatePlaceholder(): void {\r\n        const scale = this.scale();\r\n        const autoPlaceholder = scale ? `0${this.decimalSeparator()}${''.padEnd(scale, '0')}` : '0';\r\n\r\n        if (this.placeholder() === undefined || this.placeholder() === this._lastAutoPlaceholder) {\r\n            this.placeholder.set(autoPlaceholder);\r\n        }\r\n\r\n        this._lastAutoPlaceholder = autoPlaceholder;\r\n    }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n// NOSONAR - 'BignumberInputDirective' is deprecated.\r\nimport { BignumberInputDirective } from './bignumber-input.directive';\r\n\r\n@NgModule({\r\n    imports: [BignumberInputDirective],\r\n    // NOSONAR - 'BignumberInputDirective' is deprecated.\r\n    exports: [BignumberInputDirective],\r\n})\r\nexport class BignumberInputModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}