{"version":3,"file":"seniorsistemas-angular-components-input-mask.mjs","sources":["../../projects/angular-components/input-mask/src/lib/input-mask/input-mask.directive.ts","../../projects/angular-components/input-mask/src/lib/input-mask/input-mask.module.ts","../../projects/angular-components/input-mask/src/seniorsistemas-angular-components-input-mask.ts"],"sourcesContent":["import {\n    Directive,\n    ElementRef,\n    forwardRef,\n    inject,\n    input,\n    OnChanges,\n    OnInit,\n    output,\n    Renderer2,\n    SimpleChanges,\n} from '@angular/core';\nimport {\n    AbstractControl,\n    ControlValueAccessor,\n    NG_VALIDATORS,\n    NG_VALUE_ACCESSOR,\n    ValidationErrors,\n    Validator,\n} from '@angular/forms';\n\ninterface MaskToken {\n    type: 'literal' | 'digit' | 'alpha' | 'alphanumeric';\n    char?: string;\n    optional: boolean;\n}\n\n/**\n * @description Diretiva de máscara de entrada para campos de texto.\n *\n * Aplique `[sInputMask]` em qualquer `<input>` para aplicar uma máscara de formatação,\n * guiando a entrada do usuário com um padrão definido. Implementa ControlValueAccessor\n * e Validator para integração nativa com Angular Forms.\n *\n * **Slots de máscara:**\n * - `9` — dígito (0-9)\n * - `a` — letra (conforme `characterPattern`, padrão `[A-Za-z]`)\n * - `*` — alfanumérico (letra ou dígito)\n * - Outros caracteres são tratados como literais (ex: `.`, `-`, `/`, `(`, `)`)\n * - `?` — tudo após esse ponto na máscara é opcional\n *\n * @example\n * ```html\n * <!-- CPF -->\n * <input type=\"text\" [sInputMask]=\"'999.999.999-99'\" [(ngModel)]=\"cpf\" />\n *\n * <!-- Telefone com unmask -->\n * <input type=\"text\" [sInputMask]=\"'(99) 99999-9999'\" [unmask]=\"true\" [(ngModel)]=\"telefone\" />\n * ```\n * @category Input\n */\n@Directive({\n    selector: 'input[sInputMask]',\n    standalone: true,\n    host: {\n        '(keydown)': 'onKeyDown($event)',\n        '(focus)': 'onFocus($event)',\n        '(blur)': 'onBlur($event)',\n        '(paste)': 'onPaste($event)',\n        '(click)': 'onClick()',\n    },\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            useExisting: forwardRef(() => InputMaskDirective),\n            multi: true,\n        },\n        {\n            provide: NG_VALIDATORS,\n            useExisting: forwardRef(() => InputMaskDirective),\n            multi: true,\n        },\n    ],\n})\nexport class InputMaskDirective implements OnInit, OnChanges, ControlValueAccessor, Validator {\n    /**\n     * Padrão da máscara. Slots: `9` (dígito), `a` (letra), `*` (alfanumérico).\n     * Demais caracteres são literais. `?` torna o restante da máscara opcional.\n     */\n    public mask = input<string | undefined>(undefined, { alias: 'sInputMask' });\n\n    /**\n     * Caractere exibido nas posições ainda não preenchidas.\n     * @default '_'\n     */\n    public slotChar = input<string>('_');\n\n    /**\n     * Quando `true`, o modelo recebe apenas os caracteres digitados pelo usuário,\n     * sem os literais da máscara. Quando `false`, o modelo recebe o valor completo\n     * incluindo literais.\n     * @default false\n     */\n    public unmask = input<boolean>(false);\n\n    /**\n     * Expressão regular usada para validar o slot `a` (letra).\n     * @default '[A-Za-z]'\n     */\n    public characterPattern = input<string>('[A-Za-z]');\n\n    /**\n     * Quando `true`, limpa o campo ao perder o foco se a máscara estiver incompleta.\n     * @default true\n     */\n    public autoClear = input<boolean>(true);\n\n    /**\n     * Emitido quando todos os slots obrigatórios da máscara estão preenchidos.\n     * Emite o valor atual (mascarado ou não, conforme `unmask`).\n     */\n    public maskComplete = output<string>();\n\n    private readonly el = inject(ElementRef<HTMLInputElement>);\n    private readonly renderer = inject(Renderer2);\n\n    private tokens: MaskToken[] = [];\n    private buffer: string[] = [];\n    private wasComplete = false;\n    private lastValue: string | null = null;\n\n    private onChange: (value: string | null) => void = () => {};\n    private onTouched: () => void = () => {};\n\n    public ngOnInit(): void {\n        this.buildMask();\n    }\n\n    public ngOnChanges(changes: SimpleChanges): void {\n        if (changes['mask'] || changes['slotChar'] || changes['characterPattern']) {\n            this.buildMask();\n            if (this.mask()) {\n                this.writeValue(this.lastValue);\n            }\n        }\n    }\n\n    private buildMask(): void {\n        const maskStr = this.mask();\n        if (!maskStr) {\n            this.tokens = [];\n            this.buffer = [];\n            return;\n        }\n        this.tokens = this.parseMask(maskStr);\n        this.resetBuffer();\n    }\n\n    private parseMask(mask: string): MaskToken[] {\n        const tokens: MaskToken[] = [];\n        let optional = false;\n\n        for (let i = 0; i < mask.length; i++) {\n            const ch = mask[i];\n\n            if (ch === '?') {\n                optional = true;\n                continue;\n            }\n\n            switch (ch) {\n                case '9':\n                    tokens.push({ type: 'digit', optional });\n                    break;\n                case 'a':\n                    tokens.push({ type: 'alpha', optional });\n                    break;\n                case '*':\n                    tokens.push({ type: 'alphanumeric', optional });\n                    break;\n                default:\n                    tokens.push({ type: 'literal', char: ch, optional: false });\n                    break;\n            }\n        }\n\n        return tokens;\n    }\n\n    private resetBuffer(): void {\n        this.buffer = this.tokens.map((t) => (t.type === 'literal' ? t.char! : this.slotChar()));\n    }\n\n    private isValidChar(char: string, token: MaskToken): boolean {\n        switch (token.type) {\n            case 'digit':\n                return /[0-9]/.test(char);\n            case 'alpha':\n                return new RegExp(this.characterPattern()).test(char);\n            case 'alphanumeric':\n                return /[A-Za-z0-9]/.test(char);\n            default:\n                return false;\n        }\n    }\n\n    private isEditable(token: MaskToken): boolean {\n        return token.type !== 'literal';\n    }\n\n    private nextEditablePos(from: number): number {\n        for (let i = from; i < this.tokens.length; i++) {\n            if (this.isEditable(this.tokens[i])) {\n                return i;\n            }\n        }\n        return this.tokens.length;\n    }\n\n    private prevEditablePos(from: number): number {\n        for (let i = from; i >= 0; i--) {\n            if (this.tokens[i] && this.isEditable(this.tokens[i])) {\n                return i;\n            }\n        }\n        return -1;\n    }\n\n    private setCursor(pos: number): void {\n        const safePos = Math.min(pos, this.tokens.length);\n        this.el.nativeElement.setSelectionRange(safePos, safePos);\n    }\n\n    private setInputValue(value: string): void {\n        this.renderer.setProperty(this.el.nativeElement, 'value', value);\n    }\n\n    private getDisplayValue(): string {\n        return this.buffer.join('');\n    }\n\n    private getBlurDisplayValue(): string {\n        let lastFilledIndex = -1;\n        for (let i = 0; i < this.buffer.length; i++) {\n            if (this.tokens[i] && this.tokens[i].type !== 'literal' && this.buffer[i] !== this.slotChar()) {\n                lastFilledIndex = i;\n            }\n        }\n        if (lastFilledIndex === -1) return '';\n        return this.buffer.slice(0, lastFilledIndex + 1).join('');\n    }\n\n    /**\n     * Returns the value that should be set on the model.\n     * Returns null when the user has not typed anything.\n     */\n    private getModelValue(): string | null {\n        const hasInput = this.buffer.some(\n            (ch, i) => this.tokens[i] && this.tokens[i].type !== 'literal' && ch !== this.slotChar(),\n        );\n\n        if (!hasInput) {\n            return null;\n        }\n\n        if (this.unmask()) {\n            return (\n                this.buffer\n                    .filter((ch, i) => this.tokens[i] && this.tokens[i].type !== 'literal' && ch !== this.slotChar())\n                    .join('') || null\n            );\n        }\n\n        return this.buffer.join('');\n    }\n\n    private clearRange(startPos: number, endPos: number): void {\n        for (let i = startPos; i < endPos; i++) {\n            if (this.tokens[i] && this.tokens[i].type !== 'literal') {\n                this.buffer[i] = this.slotChar();\n            }\n        }\n        this.setInputValue(this.getDisplayValue());\n    }\n\n    private isMaskComplete(): boolean {\n        return this.tokens.every((token, i) => {\n            if (token.type === 'literal' || token.optional) {\n                return true;\n            }\n\n            return this.buffer[i] !== this.slotChar();\n        });\n    }\n\n    private checkAndEmitComplete(): void {\n        const complete = this.isMaskComplete();\n        if (complete && !this.wasComplete) {\n            this.wasComplete = true;\n            this.maskComplete.emit(this.getModelValue() ?? '');\n        } else if (!complete) {\n            this.wasComplete = false;\n        }\n    }\n\n    private dispatchInputEvent(): void {\n        this.el.nativeElement.dispatchEvent(new Event('input', { bubbles: true }));\n    }\n\n    public onKeyDown(event: KeyboardEvent): void {\n        if (!this.mask() || this.el.nativeElement.readOnly || this.el.nativeElement.disabled) {\n            return;\n        }\n\n        const key = event.key;\n\n        // Let the browser handle shortcuts (Ctrl/Cmd), Tab, and function keys\n        if (event.ctrlKey || event.metaKey || key === 'Tab' || key.startsWith('F')) {\n            return;\n        }\n\n        // Let the browser handle arrow navigation and Home/End natively\n        if (['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Home', 'End'].includes(key)) {\n            return;\n        }\n\n        const input = this.el.nativeElement;\n        const startPos = input.selectionStart ?? 0;\n        const endPos = input.selectionEnd ?? 0;\n\n        if (key === 'Backspace') {\n            event.preventDefault();\n            if (startPos !== endPos) {\n                this.clearRange(startPos, endPos);\n                const nextPos = this.nextEditablePos(startPos);\n                this.setCursor(nextPos < this.tokens.length ? nextPos : startPos);\n            } else if (startPos > 0) {\n                const pos = this.prevEditablePos(startPos - 1);\n                if (pos >= 0) {\n                    this.buffer[pos] = this.slotChar();\n                    this.setInputValue(this.getDisplayValue());\n                    this.setCursor(pos);\n                }\n            }\n            this.onChange(this.getModelValue());\n            this.checkAndEmitComplete();\n            this.dispatchInputEvent();\n            return;\n        }\n\n        if (key === 'Delete') {\n            event.preventDefault();\n            if (startPos !== endPos) {\n                this.clearRange(startPos, endPos);\n                const nextPos = this.nextEditablePos(startPos);\n                this.setCursor(nextPos < this.tokens.length ? nextPos : startPos);\n            } else {\n                const pos = this.nextEditablePos(startPos);\n                if (pos < this.tokens.length) {\n                    this.buffer[pos] = this.slotChar();\n                    this.setInputValue(this.getDisplayValue());\n                    this.setCursor(pos);\n                }\n            }\n            this.onChange(this.getModelValue());\n            this.checkAndEmitComplete();\n            this.dispatchInputEvent();\n            return;\n        }\n\n        // Single printable character\n        if (key.length === 1) {\n            event.preventDefault();\n\n            let insertPos = startPos;\n\n            // Clear selection range if any\n            if (startPos !== endPos) {\n                this.clearRange(startPos, endPos);\n                insertPos = startPos;\n            }\n\n            const pos = this.nextEditablePos(insertPos);\n            if (pos >= this.tokens.length) {\n                return;\n            }\n\n            const token = this.tokens[pos];\n\n            if (!this.isValidChar(key, token)) {\n                return;\n            }\n\n            this.buffer[pos] = key;\n            this.setInputValue(this.getDisplayValue());\n\n            const next = this.nextEditablePos(pos + 1);\n            this.setCursor(next <= this.tokens.length ? next : this.tokens.length);\n\n            this.onChange(this.getModelValue());\n            this.checkAndEmitComplete();\n            this.dispatchInputEvent();\n        }\n    }\n\n    public onFocus(_event: FocusEvent): void {\n        if (!this.mask()) {\n            return;\n        }\n\n        // Always restore full mask display on focus (slot chars become visible)\n        this.setInputValue(this.getDisplayValue());\n\n        // Move cursor to the first empty editable slot\n        const firstEmpty = this.buffer.findIndex(\n            (ch, i) => this.tokens[i] && this.tokens[i].type !== 'literal' && ch === this.slotChar(),\n        );\n\n        this.setCursor(firstEmpty >= 0 ? firstEmpty : this.nextEditablePos(0));\n    }\n\n    public onBlur(_event: Event): void {\n        if (!this.mask()) {\n            return;\n        }\n\n        this.onTouched();\n\n        if (!this.isMaskComplete()) {\n            if (this.autoClear()) {\n                this.resetBuffer();\n                this.onChange(null);\n            }\n            this.setInputValue(this.getBlurDisplayValue());\n        }\n    }\n\n    public onPaste(event: ClipboardEvent): void {\n        if (!this.mask() || this.el.nativeElement.readOnly || this.el.nativeElement.disabled) {\n            return;\n        }\n\n        event.preventDefault();\n\n        const pastedText = event.clipboardData?.getData('text') ?? '';\n        const input = this.el.nativeElement;\n        const startPos = input.selectionStart ?? 0;\n        const endPos = input.selectionEnd ?? 0;\n\n        if (startPos !== endPos) {\n            this.clearRange(startPos, endPos);\n        }\n\n        let pos = this.nextEditablePos(startPos);\n\n        for (const ch of pastedText) {\n            if (pos >= this.tokens.length) {\n                break;\n            }\n\n            const token = this.tokens[pos];\n\n            if (token.type === 'literal') {\n                // Skip matching literal in pasted text; skip the literal slot regardless\n                if (ch === token.char) {\n                    pos++;\n                }\n                pos = this.nextEditablePos(pos);\n                continue;\n            }\n\n            if (this.isValidChar(ch, token)) {\n                this.buffer[pos] = ch;\n                pos = this.nextEditablePos(pos + 1);\n            }\n        }\n\n        this.setInputValue(this.getDisplayValue());\n        this.setCursor(pos <= this.tokens.length ? pos : this.tokens.length);\n        this.onChange(this.getModelValue());\n        this.checkAndEmitComplete();\n        this.dispatchInputEvent();\n    }\n\n    public onClick(): void {\n        if (!this.mask() || this.el.nativeElement.readOnly || this.el.nativeElement.disabled) {\n            return;\n        }\n\n        const input = this.el.nativeElement;\n        const pos = input.selectionStart ?? 0;\n\n        // If cursor landed on a literal, nudge it to the nearest editable slot\n        if (this.tokens[pos] && this.tokens[pos].type === 'literal') {\n            this.setCursor(this.nextEditablePos(pos));\n        }\n    }\n\n    public writeValue(value: string | null): void {\n        this.lastValue = value;\n\n        if (!this.mask()) {\n            return;\n        }\n\n        this.resetBuffer();\n\n        if (!value) {\n            this.setInputValue('');\n            return;\n        }\n\n        let bufferIdx = 0;\n        let valueIdx = 0;\n\n        while (valueIdx < value.length && bufferIdx < this.tokens.length) {\n            const token = this.tokens[bufferIdx];\n            const char = value[valueIdx];\n\n            if (token.type === 'literal') {\n                // Consume the literal character from value if it matches; always advance buffer\n                if (char === token.char) valueIdx++;\n                bufferIdx++;\n            } else if (this.isValidChar(char, token)) {\n                this.buffer[bufferIdx] = char;\n                bufferIdx++;\n                valueIdx++;\n            } else {\n                // Skip characters from value that do not match the current slot\n                valueIdx++;\n            }\n        }\n\n        this.setInputValue(this.getDisplayValue());\n    }\n\n    public registerOnChange(onChange: (value: string | null) => void): void {\n        this.onChange = onChange;\n    }\n\n    public registerOnTouched(onTouched: () => void): void {\n        this.onTouched = onTouched;\n    }\n\n    public setDisabledState(isDisabled: boolean): void {\n        this.renderer.setProperty(this.el.nativeElement, 'disabled', isDisabled);\n    }\n\n    public validate(control: AbstractControl): ValidationErrors | null {\n        if (!this.mask() || !control.value) {\n            return null;\n        }\n\n        if (!this.isMaskComplete()) {\n            return { incompleteMask: { mask: this.mask() } };\n        }\n\n        return null;\n    }\n}\n\n","import { NgModule } from '@angular/core';\n\nimport { InputMaskDirective } from './input-mask.directive';\n\n@NgModule({\n    imports: [InputMaskDirective],\n    exports: [InputMaskDirective],\n})\nexport class InputMaskModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}