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