{"version":3,"file":"seniorsistemas-angular-components-password-strength.mjs","sources":["../../projects/angular-components/password-strength/src/lib/password-strength/password-strength.component.ts","../../projects/angular-components/password-strength/src/lib/password-strength/password-strength.component.html","../../projects/angular-components/password-strength/src/lib/password-strength/password-strength.directive.ts","../../projects/angular-components/password-strength/src/lib/password-strength/password-strength.module.ts","../../projects/angular-components/password-strength/src/seniorsistemas-angular-components-password-strength.ts"],"sourcesContent":["import { Component, Input, OnInit, inject } from '@angular/core';\n\nimport { TranslateService } from '@ngx-translate/core';\n\nimport { PasswordStrengthPositions } from './types/password-positions';\nimport { PasswordStrengths } from './types/password-strengths';\n\n/**\n * @description Componente interno que exibe visualmente os indicadores de força de senha.\n * Utilizado em conjunto com a diretiva {@link PasswordStrengthDirective} para fornecer\n * feedback em tempo real enquanto o usuário digita, mostrando três níveis de força\n * (fraca, média e forte) com títulos e indicadores visuais configuráveis.\n *\n * @category Inputs\n */\n@Component({\n    templateUrl: './password-strength.component.html',\n    styleUrls: ['./password-strength.component.scss'],\n})\nexport class PasswordStrengthComponent implements OnInit {\n    private readonly translate = inject(TranslateService);\n\n    /**\n     * @description Texto personalizado exibido quando a senha é classificada como fraca.\n     * Se não informado, utiliza a tradução padrão do token `platform.angular_components.weak`.\n     */\n    @Input()\n    public weakTitle?: string;\n\n    /**\n     * @description Texto personalizado exibido quando a senha é classificada como média.\n     * Se não informado, utiliza a tradução padrão do token `platform.angular_components.medium`.\n     */\n    @Input()\n    public mediumTitle?: string;\n\n    /**\n     * @description Texto personalizado exibido quando a senha é classificada como forte.\n     * Se não informado, utiliza a tradução padrão do token `platform.angular_components.strong`.\n     */\n    @Input()\n    public strongTitle?: string;\n\n    /**\n     * @description Descrição complementar exibida abaixo dos indicadores de força,\n     * orientando o usuário sobre os requisitos esperados para a senha. Campo obrigatório.\n     */\n    @Input({ required: true })\n    public description!: string;\n\n    public title?: string;\n    public position: PasswordStrengthPositions = 'right';\n    public left = 0;\n    public top = 0;\n    public visible = false;\n\n    public ngOnInit(): void {\n        this.title = this.weakTitle;\n    }\n\n    public setPasswordStrengthPosition() {\n        const passwordStrength = document.querySelector('.password-strength');\n\n        if (!passwordStrength) {\n            return;\n        }\n\n        switch (this.position) {\n            case 'top':\n                passwordStrength.classList.add('password-strength--top');\n                break;\n            case 'right':\n                passwordStrength.classList.add('password-strength--right');\n                break;\n            case 'left':\n                passwordStrength.classList.add('password-strength--left');\n                break;\n        }\n    }\n\n    public updateIndicators(passwordStrength: PasswordStrengths) {\n        const strengthIndicator1 = document.querySelector('#strength-indicator-1');\n        const strengthIndicator2 = document.querySelector('#strength-indicator-2');\n        const strengthIndicator3 = document.querySelector('#strength-indicator-3');\n\n        const onIndicators = [];\n        const indicators = [strengthIndicator1, strengthIndicator2, strengthIndicator3];\n\n        let strengthClass: string;\n\n        switch (passwordStrength) {\n            case 'veryWeak':\n                this.title = this.weakTitle ?? this.translate.instant('platform.angular_components.weak');\n                break;\n            case 'weak':\n                this.title = this.weakTitle ?? this.translate.instant('platform.angular_components.weak');\n                strengthClass = 'strength-indicator--weak';\n                onIndicators.push(strengthIndicator1);\n                break;\n            case 'medium':\n                this.title = this.mediumTitle ?? this.translate.instant('platform.angular_components.medium');\n                strengthClass = 'strength-indicator--medium';\n                onIndicators.push(strengthIndicator1);\n                onIndicators.push(strengthIndicator2);\n                break;\n            case 'strong':\n                this.title = this.strongTitle ?? this.translate.instant('platform.angular_components.strong');\n                strengthClass = 'strength-indicator--strong';\n                onIndicators.push(strengthIndicator1);\n                onIndicators.push(strengthIndicator2);\n                onIndicators.push(strengthIndicator3);\n                break;\n        }\n\n        indicators.forEach((indicator) => {\n            indicator?.classList.remove(\n                'strength-indicator--weak',\n                'strength-indicator--medium',\n                'strength-indicator--strong',\n            );\n        });\n\n        onIndicators.forEach((indicator) => {\n            indicator?.classList.add(strengthClass);\n        });\n    }\n}\n\n","<div\n    class=\"password-strength\"\n    [ngStyle]=\"{\n        left: left + 'px',\n        top: top + 'px',\n    }\"\n    [ngClass]=\"['password-strength--' + position]\"\n>\n    <span class=\"password-strength-title\">{{ title }}</span>\n    <div class=\"strength-indicators\">\n        <span\n            class=\"strength-indicator\"\n            id=\"strength-indicator-1\"\n        ></span>\n        <span\n            class=\"strength-indicator\"\n            id=\"strength-indicator-2\"\n        ></span>\n        <span\n            class=\"strength-indicator\"\n            id=\"strength-indicator-3\"\n        ></span>\n    </div>\n    <span class=\"content\">{{ description }}</span>\n</div>\n","import { ApplicationRef, \n// NOSONAR - 'ComponentFactoryResolver' is deprecated.\nComponentFactoryResolver, ComponentRef, Directive, ElementRef, EmbeddedViewRef, HostListener, Injector, Input, OnInit, inject } from '@angular/core';\nimport { isNullOrUndefined } from '@seniorsistemas/angular-components/utils';\n\nimport { PasswordStrengthComponent } from './password-strength.component';\nimport { PasswordStrengthPositions } from './types/password-positions';\nimport { PasswordStrengths } from './types/password-strengths';\n\n/**\n * @description Diretiva que adiciona o comportamento de verificação de força de senha\n * a um campo de input existente. Ao receber foco ou a cada tecla digitada, exibe o\n * componente {@link PasswordStrengthComponent} posicionado dinamicamente ao redor do campo,\n * fornecendo feedback visual sobre a força da senha informada.\n *\n * @example\n * ```html\n * <input\n *   type=\"password\"\n *   [sPasswordStrength]=\"true\"\n *   passwordStrengthDescription=\"A senha deve conter letras maiúsculas, números e caracteres especiais.\"\n *   [passwordStrengthValidation]=\"myValidator\" />\n * ```\n *\n * @category Inputs\n */\n@Directive({\n    selector: '[sPasswordStrength]',\n})\nexport class PasswordStrengthDirective implements OnInit {\n    private readonly elementRef = inject(ElementRef);\n    private readonly appRef = inject(ApplicationRef);\n    private readonly componentFactoryResolver = inject(ComponentFactoryResolver);\n    private readonly injector = inject(Injector);\n\n    /**\n     * @description Habilita ou desabilita o comportamento da diretiva.\n     * Quando `false`, o indicador de força não será exibido.\n     *\n     * @default true\n     */\n    @Input('sPasswordStrength')\n    public enabled = true;\n\n    /**\n     * @description Função customizada de validação da força da senha.\n     * Recebe o conteúdo atual do campo e deve retornar um valor do tipo {@link PasswordStrengths}\n     * (`'veryWeak'`, `'weak'`, `'medium'` ou `'strong'`).\n     * Se não informada, utiliza a validação padrão baseada em critérios de comprimento,\n     * letras maiúsculas/minúsculas, números e caracteres especiais.\n     */\n    @Input()\n    public passwordStrengthValidation?: (content: string) => PasswordStrengths;\n\n    /**\n     * @description Posição preferencial onde o indicador de força será exibido em relação ao campo.\n     * Aceita `'right'`, `'left'` ou `'top'`. O componente tenta posicionar automaticamente\n     * em outro lado caso não haja espaço suficiente na posição especificada.\n     *\n     * @default 'right'\n     */\n    @Input()\n    public passwordStrengthPosition: PasswordStrengthPositions = 'right';\n\n    /**\n     * @description Texto personalizado exibido quando a senha é classificada como fraca.\n     * Se não informado, utiliza a tradução padrão.\n     */\n    @Input()\n    public passwordStrengthWeakTitle?: string;\n\n    /**\n     * @description Texto personalizado exibido quando a senha é classificada como média.\n     * Se não informado, utiliza a tradução padrão.\n     */\n    @Input()\n    public passwordStrengthMediumTitle?: string;\n\n    /**\n     * @description Texto personalizado exibido quando a senha é classificada como forte.\n     * Se não informado, utiliza a tradução padrão.\n     */\n    @Input()\n    public passwordStrengthStrongTitle?: string;\n\n    /**\n     * @description Descrição complementar exibida no indicador de força de senha,\n     * orientando o usuário sobre os requisitos da senha. Campo obrigatório.\n     */\n    @Input({ required: true })\n    public passwordStrengthDescription!: string;\n\n    private componentRef?: null | ComponentRef<PasswordStrengthComponent>;\n\n    public ngOnInit() {\n        this.validateProperties();\n    }\n\n    @HostListener('keyup')\n    @HostListener('focus')\n    public onFocus(): void {\n        const content = this.elementRef.nativeElement.value ?? '';\n\n        this.createPasswordStrength();\n        const component = this.componentRef?.instance;\n        if (!component) {\n            return;\n        }\n        if (content) {\n            if (this.passwordStrengthValidation) {\n                component.updateIndicators(this.passwordStrengthValidation(content));\n            }\n        } else {\n            component.updateIndicators('veryWeak');\n        }\n    }\n\n    @HostListener('blur')\n    public onBlur(): void {\n        this.destroyPasswordStrength();\n    }\n\n    private createPasswordStrength() {\n        if (this.enabled && isNullOrUndefined(this.componentRef)) {\n            const componentFactory = this.componentFactoryResolver.resolveComponentFactory(PasswordStrengthComponent);\n            this.componentRef = componentFactory.create(this.injector);\n            this.appRef.attachView(this.componentRef.hostView);\n            const domElem = (this.componentRef.hostView as EmbeddedViewRef<any>).rootNodes[0] as HTMLElement;\n            document.body.appendChild(domElem);\n            this.setPasswordStrengthComponentProperties();\n            this.showPasswordStrength();\n        }\n    }\n\n    private showPasswordStrength() {\n        if (this.componentRef) {\n            this.componentRef.instance.visible = true;\n        }\n    }\n\n    // NOSONAR - Refactor this function to reduce its Cognitive Complexity from 16 to the 15 allowed.\n    private setPasswordStrengthComponentProperties() {\n        if (isNullOrUndefined(this.componentRef)) {\n            return;\n        }\n\n        this.componentRef.instance.position = this.passwordStrengthPosition;\n        this.componentRef.instance.weakTitle = this.passwordStrengthWeakTitle;\n        this.componentRef.instance.mediumTitle = this.passwordStrengthMediumTitle;\n        this.componentRef.instance.strongTitle = this.passwordStrengthStrongTitle;\n        this.componentRef.instance.description = this.passwordStrengthDescription;\n\n        const { top, right, bottom, left } = this.elementRef.nativeElement.getBoundingClientRect();\n\n        const margin = 20;\n        const elementRefHeight = bottom - top;\n        const elementRefWidth = right - left;\n        const safeSpace = 150;\n\n        let positioned = false;\n        const invalidOptions: PasswordStrengthPositions[] = [];\n\n        while (!positioned) {\n            if (invalidOptions.includes('top') && invalidOptions.includes('right') && invalidOptions.includes('left')) {\n                this.destroyPasswordStrength();\n                throw new Error('No space to show password strength');\n            }\n\n            switch (this.passwordStrengthPosition) {\n                case 'top': {\n                    const topShift = top;\n                    const rightShift = document.body.clientWidth - right;\n                    const leftShift = left;\n\n                    const MIN_HORIZONTAL_SAFE_SPACE = 50;\n\n                    if (\n                        topShift <= elementRefHeight + safeSpace ||\n                        rightShift < MIN_HORIZONTAL_SAFE_SPACE ||\n                        leftShift < MIN_HORIZONTAL_SAFE_SPACE\n                    ) {\n                        this.passwordStrengthPosition = 'right';\n                        invalidOptions.push('top');\n                        break;\n                    }\n\n                    this.componentRef.instance.top = Math.round(top - margin);\n                    this.componentRef.instance.left = Math.round(elementRefWidth / 2 + left);\n                    positioned = true;\n                    break;\n                }\n                case 'right': {\n                    const rightShift = document.body.clientWidth - right;\n\n                    if (rightShift <= elementRefWidth + safeSpace) {\n                        this.passwordStrengthPosition = 'left';\n                        invalidOptions.push('right');\n                        break;\n                    }\n\n                    this.componentRef.instance.top = Math.round(top + elementRefHeight / 2);\n                    this.componentRef.instance.left = Math.round(right + margin);\n                    positioned = true;\n                    break;\n                }\n                case 'left': {\n                    const leftShift = left;\n\n                    if (leftShift <= elementRefWidth + safeSpace) {\n                        this.passwordStrengthPosition = 'top';\n                        invalidOptions.push('left');\n                        break;\n                    }\n\n                    this.componentRef.instance.top = Math.round(top + elementRefHeight / 2);\n                    this.componentRef.instance.left = Math.round(left - margin);\n                    positioned = true;\n                    break;\n                }\n                default: {\n                    break;\n                }\n            }\n\n            this.componentRef.instance.position = this.passwordStrengthPosition;\n        }\n    }\n\n    private validateProperties() {\n        this.passwordStrengthValidation = this.passwordStrengthValidation || this.defaultValidator;\n    }\n\n    private destroyPasswordStrength(): void {\n        if (this.componentRef) {\n            this.appRef.detachView(this.componentRef.hostView);\n            this.componentRef.destroy();\n            this.componentRef = null;\n        }\n    }\n\n    private defaultValidator(content: string): PasswordStrengths {\n        let points = 0;\n        const PASSWORD_MIN_LENGTH = 6;\n        const WEEK_CRITERIA = 1;\n        const MEDIUM_CRITERIA = 4;\n        const STRONG_CRITERIA = 5;\n\n        const regExpValidations = [\n            /(?=.*\\d)/, // number\n            /(?=.*[a-z])/, // lowercase\n            /(?=.*[A-Z])/, // uppercase\n            /(?=.*[!@#$%&*.\\\\=+^~-])/, // special character\n        ];\n\n        if (content.length >= PASSWORD_MIN_LENGTH) {\n            points++;\n        }\n\n        regExpValidations.forEach((validation) => {\n            if (validation.test(content)) {\n                points++;\n            }\n        });\n\n        if (points < WEEK_CRITERIA) {\n            return 'veryWeak';\n        }\n        if (points < MEDIUM_CRITERIA) {\n            return 'weak';\n        }\n        if (points < STRONG_CRITERIA) {\n            return 'medium';\n        }\n        return 'strong';\n    }\n}\n\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { PasswordStrengthDirective } from './password-strength.directive';\nimport { PasswordStrengthComponent } from './password-strength.component';\n\n@NgModule({\n    imports: [CommonModule],\n    declarations: [PasswordStrengthComponent, PasswordStrengthDirective],\n    exports: [PasswordStrengthDirective],\n})\nexport class PasswordStrengthModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}