login-tsi 0.0.5 → 0.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"login-tsi.mjs","sources":["../../../projects/login-tsi/src/lib/utils/animations.ts","../../../projects/login-tsi/src/lib/components/auth/auth.component.ts","../../../projects/login-tsi/src/lib/components/auth/auth.component.html","../../../projects/login-tsi/src/lib/components/expired-password/expired-password.component.ts","../../../projects/login-tsi/src/lib/components/expired-password/expired-password.component.html","../../../projects/login-tsi/src/lib/components/recover-password/recover-password.component.ts","../../../projects/login-tsi/src/lib/components/recover-password/recover-password.component.html","../../../projects/login-tsi/src/lib/components/select-branch/select-branch.component.ts","../../../projects/login-tsi/src/lib/components/select-branch/select-branch.component.html","../../../projects/login-tsi/src/lib/models/auth-sender.ts","../../../projects/login-tsi/src/public-api.ts","../../../projects/login-tsi/src/login-tsi.ts"],"sourcesContent":["import { animate, style, transition, trigger } from \"@angular/animations\";\r\n\r\nexport const fadeInOut = trigger('fadeInOut', [\r\n transition(':enter', [\r\n style({ opacity: 0, transform: 'translateY(-5px)' }),\r\n animate('200ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\r\n ]),\r\n transition(':leave', [\r\n animate('200ms ease-in', style({ opacity: 0, transform: 'translateY(-5px)' })),\r\n ]),\r\n ])","import { NgClass } from '@angular/common';\r\nimport { Component, input, output, signal } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { AuthSender } from '../../models/auth-sender';\r\nimport { fadeInOut } from '../../utils/animations';\r\nimport { LoginEvent } from '../../models/login-event';\r\n\r\n@Component({\r\n selector: 'lib-auth-tsi',\r\n imports: [NgClass, ReactiveFormsModule],\r\n templateUrl: './auth.component.html',\r\n styleUrls: ['./auth.component.scss', '../auth.scss'],\r\n animations: [fadeInOut]\r\n})\r\nexport class AuthComponent {\r\n\r\n production = input<boolean>(true)\r\n module = input<string>('ERP') // DEFECTO ERP\r\n versionApp = input<string>('1.0.0') // DEFECTO 1.0.0\r\n product = input<string>() // DEFECTO NULL - ERP\r\n authForm = input.required<FormGroup>();\r\n \r\n loginEvent = output<LoginEvent>()\r\n\r\n showPassword = signal<boolean>(false)\r\n\r\n recover = () => this.loginEvent.emit({type: \"RECOVER\"})\r\n forget = () => this.loginEvent.emit({type: \"FORGET\"})\r\n \r\n togglePassword = () => this.showPassword.set(!this.showPassword())\r\n\r\n login = () => {\r\n if (!this.validacionInit()) return\r\n const dataForm = this.authForm().value\r\n const data: AuthSender = {\r\n ruc: dataForm.ruc,\r\n coduser: dataForm.nomuser,\r\n clave: btoa(dataForm.clave),\r\n producto: this.product()\r\n }\r\n this.loginEvent.emit({type: \"LOGIN\", data})\r\n }\r\n\r\n // authForm = this.formBuilder.group({\r\n // ruc: ['', Validators.required],\r\n // nomuser: ['', Validators.required],\r\n // clave: ['', Validators.required],\r\n // })\r\n\r\n validacion(value: string) {\r\n const authForm = this.authForm()\r\n if (authForm.get(value).touched && authForm.get(value).errors) {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n validacionInit() {\r\n const dataForm = this.authForm().value\r\n const { ruc, nomuser, clave } = dataForm\r\n\r\n if (!ruc) return this.returnError('Debe ingresar un N° de RUC')\r\n if (!nomuser) return this.returnError('Debe ingresar un usuario')\r\n if (!clave) return this.returnError('Debe ingresar una contraseña')\r\n return true\r\n }\r\n \r\n returnError = (message:string) => {\r\n this.loginEvent.emit({type: \"ERROR\", message})\r\n return false\r\n }\r\n}\r\n","<div class=\"auth-wrapper-login\">\r\n @let produccion = production();\r\n <div class=\"auth-panel-left\" [class.auth-panel-left--dev]=\"!produccion\">\r\n <span class=\"auth-blob auth-blob-1\"></span>\r\n <span class=\"auth-blob auth-blob-2\"></span>\r\n <span class=\"auth-blob auth-blob-3\"></span>\r\n <span class=\"auth-blob auth-blob-4\"></span>\r\n\r\n <div class=\"auth-brand-panel\">\r\n <div class=\"auth-brand-logo\">\r\n <img src=\"assets/images/logo-tsi-tres.png\" alt=\"TSI\" />\r\n </div>\r\n <h1 class=\"auth-brand-title\">{{module()}}</h1>\r\n <p class=\"auth-brand-subtitle\">Plataforma integrada de gestión<br>empresarial</p>\r\n\r\n <div class=\"auth-brand-divider\"></div>\r\n\r\n <div class=\"auth-brand-features\">\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Gestión de compras y logística\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Control financiero avanzado\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Reportes y análisis en tiempo real\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Integración con inteligencia artificial\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"auth-panel-right\" [class.auth-panel-right--dev]=\"!produccion\">\r\n <div class=\"auth-panel-bg\">\r\n <span class=\"auth-deco auth-deco-tl\"></span>\r\n <span class=\"auth-deco auth-deco-br\"></span>\r\n </div>\r\n\r\n <div class=\"auth-form-wrapper\">\r\n <div>\r\n @if (!produccion) {\r\n <div>\r\n <span class=\"auth-test-badge\">\r\n <span class=\"badge-dot\"></span> ENTORNO DE PRUEBAS\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"auth-card\">\r\n <h2 class=\"auth-card-title\">Bienvenido de vuelta</h2>\r\n <p class=\"auth-card-subtitle\">Ingresa tus credenciales para continuar</p>\r\n\r\n <form [formGroup]=\"authForm()\" id=\"loginform\">\r\n\r\n <div class=\"auth-field\" [class.has-error]=\"validacion('ruc')\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-building\"></i></span>\r\n <input type=\"text\" formControlName=\"ruc\" class=\"auth-input\" placeholder=\" \" maxlength=\"11\"\r\n id=\"f-ruc\" autocomplete=\"off\">\r\n <label for=\"f-ruc\" class=\"auth-label\">RUC</label>\r\n </div>\r\n @if (validacion('ruc')) {\r\n <p class=\"auth-error\" @fadeInOut>Ingresar RUC</p>\r\n }\r\n\r\n <div class=\"auth-field\" [class.has-error]=\"validacion('nomuser')\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-user\"></i></span>\r\n <input type=\"text\" formControlName=\"nomuser\" class=\"auth-input\" placeholder=\" \" id=\"f-user\"\r\n autocomplete=\"off\">\r\n <label for=\"f-user\" class=\"auth-label\">Usuario</label>\r\n </div>\r\n @if (validacion('nomuser')) {\r\n <p class=\"auth-error\" @fadeInOut>Ingresar usuario</p>\r\n }\r\n\r\n <div class=\"auth-field\" [class.has-error]=\"validacion('clave')\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-lock\"></i></span>\r\n <input [type]=\"showPassword() ? 'text' : 'password'\" formControlName=\"clave\"\r\n class=\"auth-input\" placeholder=\" \" id=\"f-clave\" autocomplete=\"new-password\">\r\n <label for=\"f-clave\" class=\"auth-label\">Contraseña</label>\r\n <button type=\"button\" class=\"auth-toggle-pw\" (click)=\"togglePassword()\">\r\n <i [class]=\"showPassword() ? 'fas fa-eye' : 'fas fa-eye-slash'\"></i>\r\n </button>\r\n </div>\r\n @if (validacion('clave')) {\r\n <p class=\"auth-error\" @fadeInOut>Ingresar clave</p>\r\n }\r\n\r\n <button class=\"auth-btn mt-2\" [class.auth-btn--red]=\"!produccion\" (click)=\"login()\">\r\n Ingresar\r\n </button>\r\n\r\n <div class=\"auth-links\">\r\n <a [ngClass]=\"produccion ? 'blue_contrasena' : 'red_contrasena'\"\r\n (click)=\"recover()\">¿Olvidaste tu contraseña?</a>\r\n <a [ngClass]=\"produccion ? 'blue_contrasena' : 'red_contrasena'\"\r\n (click)=\"forget()\">¿Contraseña vencida?</a>\r\n </div>\r\n\r\n </form>\r\n\r\n <div class=\"auth-version\">\r\n <span>v{{versionApp()}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, inject, input, output, signal } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { AuthSender } from '../../models/auth-sender';\r\nimport { fadeInOut } from '../../utils/animations';\r\nimport { LoginEvent } from '../../models/login-event';\r\n\r\n@Component({\r\n selector: 'lib-expired-password',\r\n imports: [ReactiveFormsModule],\r\n templateUrl: './expired-password.component.html',\r\n styleUrls: ['./expired-password.component.scss', '../auth.scss'],\r\n animations: [fadeInOut]\r\n})\r\nexport class ExpiredPasswordComponent {\r\n\r\n private readonly fb = inject(FormBuilder)\r\n\r\n production = input<boolean>(true)\r\n module = input<string>('ERP') // DEFECTO ERP\r\n\r\n loginEvent = output<LoginEvent>()\r\n\r\n passwordVisibility = signal({\r\n claveAntigua: false,\r\n claveNueva: false,\r\n claveNuevaConfirmar: false\r\n })\r\n\r\n expiredForm = this.fb.group({\r\n ruc: ['', [Validators.required, Validators.minLength(11), Validators.maxLength(11)]],\r\n coduser: ['', Validators.required],\r\n claveAntigua: ['', [Validators.required, Validators.maxLength(20)]],\r\n claveNueva: ['', [\r\n Validators.required,\r\n Validators.minLength(8),\r\n this.regexValidator(/[a-z]/, { minuscula: true }),\r\n this.regexValidator(/[A-Z]/, { mayuscula: true }),\r\n this.regexValidator(/[0-9]/, { numero: true }),\r\n this.regexValidator(/[!@#$%^&*(),.?\":{}|<>]/, { especial: true })\r\n ]],\r\n claveNuevaConfirmar: ['', Validators.required]\r\n }, {\r\n validators: this.validatePassword('claveNueva', 'claveNuevaConfirmar')\r\n })\r\n\r\n regexValidator(regex: RegExp, error: any) {\r\n return (control: AbstractControl) => {\r\n if (!control.value) return null\r\n return regex.test(control.value) ? null : error\r\n }\r\n }\r\n\r\n validatePassword(pass1: string, pass2: string) {\r\n return (formGroup: AbstractControl) => {\r\n const c1 = formGroup.get(pass1)?.value\r\n const c2 = formGroup.get(pass2)?.value\r\n if (c1 != c2) {\r\n formGroup.get(pass2)?.setErrors({ coinciden: true })\r\n return { coinciden: true }\r\n }\r\n return null\r\n }\r\n }\r\n\r\n togglePassword(field: 'claveAntigua' | 'claveNueva' | 'claveNuevaConfirmar') {\r\n this.passwordVisibility.update(vis => ({ ...vis, [field]: !vis[field] }));\r\n }\r\n\r\n recover = () => {\r\n if (this.expiredForm.invalid) {\r\n this.loginEvent.emit({type: \"ERROR\", message: 'Debes completar todos los campos y cumplir los requisitos.'})\r\n return\r\n }\r\n \r\n const values = this.expiredForm.value\r\n const sender: AuthSender = {\r\n ruc: values.ruc!,\r\n coduser: values.coduser!,\r\n clave: values.claveAntigua!,\r\n nuevaclave: values.claveNueva!\r\n }\r\n this.loginEvent.emit({ type: \"FORGET\", data: sender })\r\n }\r\n\r\n back = () => {\r\n this.expiredForm.reset()\r\n this.loginEvent.emit({ type: \"BACK\" })\r\n }\r\n}\r\n","<div class=\"auth-wrapper-login\">\r\n @let produccion = production();\r\n <div class=\"auth-panel-left\" [class.auth-panel-left--dev]=\"!produccion\">\r\n <span class=\"auth-blob auth-blob-1\"></span>\r\n <span class=\"auth-blob auth-blob-2\"></span>\r\n <span class=\"auth-blob auth-blob-3\"></span>\r\n <span class=\"auth-blob auth-blob-4\"></span>\r\n\r\n <div class=\"auth-brand-panel\">\r\n <div class=\"auth-brand-logo\">\r\n <img src=\"assets/images/logo-tsi-tres.png\" alt=\"TSI\" />\r\n </div>\r\n <h1 class=\"auth-brand-title\">{{module()}}</h1>\r\n <p class=\"auth-brand-subtitle\">Renueva tu contraseña y mantén tu cuenta segura</p>\r\n\r\n <div class=\"auth-brand-divider\"></div>\r\n\r\n <div class=\"auth-brand-features\">\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Mínimo 8 caracteres\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Letras mayúsculas y minúsculas\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Al menos un número y símbolo\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"auth-panel-right\" [class.auth-panel-right--dev]=\"!produccion\">\r\n <div class=\"auth-panel-bg\">\r\n <span class=\"auth-deco auth-deco-tl\"></span>\r\n <span class=\"auth-deco auth-deco-br\"></span>\r\n </div>\r\n\r\n <div class=\"auth-form-wrapper\">\r\n <div>\r\n @if (!produccion) {\r\n <div>\r\n <span class=\"auth-test-badge\">\r\n <span class=\"badge-dot\"></span> ENTORNO DE PRUEBAS\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"auth-card\">\r\n <h2 class=\"auth-card-title\">Renovar contraseña</h2>\r\n <p class=\"auth-card-subtitle\">Proporciona tus datos y elige una nueva clave</p>\r\n\r\n <form [formGroup]=\"expiredForm\">\r\n\r\n <div class=\"auth-field\"\r\n [class.has-error]=\"expiredForm.get('ruc')?.invalid && expiredForm.get('ruc')?.touched\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-building\"></i></span>\r\n <input type=\"text\" class=\"auth-input\" placeholder=\" \" maxlength=\"11\"\r\n formControlName=\"ruc\" id=\"exp-ruc\" onlyNumber autocomplete=\"off\">\r\n <label for=\"exp-ruc\" class=\"auth-label\">RUC</label>\r\n </div>\r\n @if (expiredForm.get('ruc')?.invalid && expiredForm.get('ruc')?.touched) {\r\n <p class=\"auth-error\" @fadeInOut>RUC debe tener 11 dígitos</p>\r\n }\r\n\r\n <div class=\"auth-field\"\r\n [class.has-error]=\"expiredForm.get('coduser')?.invalid && expiredForm.get('coduser')?.touched\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-user\"></i></span>\r\n <input type=\"text\" class=\"auth-input\" placeholder=\" \"\r\n formControlName=\"coduser\" id=\"exp-user\" autocomplete=\"off\">\r\n <label for=\"exp-user\" class=\"auth-label\">Usuario</label>\r\n </div>\r\n @if (expiredForm.get('coduser')?.invalid && expiredForm.get('coduser')?.touched) {\r\n <p class=\"auth-error\" @fadeInOut>El usuario es obligatorio</p>\r\n }\r\n\r\n <div class=\"auth-field\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-lock-open\"></i></span>\r\n <input [type]=\"passwordVisibility().claveAntigua ? 'text' : 'password'\"\r\n class=\"auth-input\" placeholder=\" \" maxlength=\"20\"\r\n formControlName=\"claveAntigua\" id=\"exp-old-pw\" autocomplete=\"new-password\">\r\n <label for=\"exp-old-pw\" class=\"auth-label\">Contraseña antigua</label>\r\n <button type=\"button\" class=\"auth-toggle-pw\" (click)=\"togglePassword('claveAntigua')\">\r\n <i [class]=\"passwordVisibility().claveAntigua ? 'fas fa-eye' : 'fas fa-eye-slash'\"></i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"auth-field\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-lock\"></i></span>\r\n <input [type]=\"passwordVisibility().claveNueva ? 'text' : 'password'\"\r\n class=\"auth-input\" placeholder=\" \" maxlength=\"20\"\r\n formControlName=\"claveNueva\" id=\"exp-new-pw\" autocomplete=\"new-password\">\r\n <label for=\"exp-new-pw\" class=\"auth-label\">Contraseña nueva</label>\r\n <button type=\"button\" class=\"auth-toggle-pw\" (click)=\"togglePassword('claveNueva')\">\r\n <i [class]=\"passwordVisibility().claveNueva ? 'fas fa-eye' : 'fas fa-eye-slash'\"></i>\r\n </button>\r\n </div>\r\n\r\n @if (expiredForm.get('claveNueva')?.value?.length > 0) {\r\n <ul class=\"auth-validation-list\" @fadeInOut>\r\n @if (expiredForm.get('claveNueva')?.errors?.['minlength']) {\r\n <li>Al menos 8 caracteres</li>\r\n }\r\n @if (expiredForm.get('claveNueva')?.errors?.['minuscula']) {\r\n <li>Al menos 1 letra minúscula</li>\r\n }\r\n @if (expiredForm.get('claveNueva')?.errors?.['mayuscula']) {\r\n <li>Al menos 1 letra mayúscula</li>\r\n }\r\n @if (expiredForm.get('claveNueva')?.errors?.['numero']) {\r\n <li>Al menos 1 número</li>\r\n }\r\n @if (expiredForm.get('claveNueva')?.errors?.['especial']) {\r\n <li>Al menos 1 carácter especial</li>\r\n }\r\n </ul>\r\n }\r\n\r\n <div class=\"auth-field\"\r\n [class.has-error]=\"expiredForm.get('claveNuevaConfirmar')?.errors?.['coinciden'] && expiredForm.get('claveNuevaConfirmar')?.touched\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-check-circle\"></i></span>\r\n <input [type]=\"passwordVisibility().claveNuevaConfirmar ? 'text' : 'password'\"\r\n class=\"auth-input\" placeholder=\" \" maxlength=\"20\"\r\n formControlName=\"claveNuevaConfirmar\" id=\"exp-confirm-pw\" autocomplete=\"new-password\">\r\n <label for=\"exp-confirm-pw\" class=\"auth-label\">Confirmar contraseña</label>\r\n <button type=\"button\" class=\"auth-toggle-pw\" (click)=\"togglePassword('claveNuevaConfirmar')\">\r\n <i [class]=\"passwordVisibility().claveNuevaConfirmar ? 'fas fa-eye' : 'fas fa-eye-slash'\"></i>\r\n </button>\r\n </div>\r\n @if (expiredForm.get('claveNuevaConfirmar')?.errors?.['coinciden'] && expiredForm.get('claveNuevaConfirmar')?.touched) {\r\n <p class=\"auth-error\" @fadeInOut>Las contraseñas deben coincidir</p>\r\n }\r\n\r\n <button type=\"button\" class=\"auth-btn\" [class.auth-btn--red]=\"!produccion\"\r\n [disabled]=\"expiredForm.invalid\" (click)=\"recover()\">\r\n Renovar contraseña\r\n </button>\r\n\r\n <button type=\"button\" class=\"auth-btn auth-btn--outline\" (click)=\"back()\">\r\n Volver al inicio de sesión\r\n </button>\r\n\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, inject, input, output } from '@angular/core';\r\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { AuthSender } from '../../models/auth-sender';\r\nimport { fadeInOut } from '../../utils/animations';\r\nimport { LoginEvent } from '../../models/login-event';\r\n\r\n@Component({\r\n selector: 'lib-recover-password',\r\n imports: [ReactiveFormsModule],\r\n templateUrl: './recover-password.component.html',\r\n styleUrls: ['./recover-password.component.scss', '../auth.scss'],\r\n animations: [fadeInOut]\r\n})\r\nexport class RecoverPasswordComponent {\r\n\r\n private fb = inject(FormBuilder)\r\n\r\n production = input<boolean>(true)\r\n module = input<string>('ERP') // DEFECTO ERP\r\n\r\n loginEvent = output<LoginEvent>()\r\n\r\n recoverForm = this.fb.group({\r\n ruc: ['', [Validators.required, Validators.minLength(11), Validators.maxLength(11)]],\r\n usuario: ['', Validators.required]\r\n })\r\n\r\n enviar = () => {\r\n if (this.recoverForm.invalid) {\r\n this.loginEvent.emit({ type: \"ERROR\", message: 'Debes completar todos los campos' })\r\n return\r\n }\r\n\r\n const formValues = this.recoverForm.value\r\n const sender: AuthSender = {\r\n ruc: formValues.ruc!,\r\n coduser: formValues.usuario!\r\n }\r\n\r\n this.loginEvent.emit({ type: \"RECOVER\", data: sender })\r\n }\r\n\r\n back = () => this.loginEvent.emit({ type: \"BACK\" })\r\n \r\n}\r\n","<div class=\"auth-wrapper-login\">\r\n @let produccion = production();\r\n <div class=\"auth-panel-left\" [class.auth-panel-left--dev]=\"!produccion\">\r\n <span class=\"auth-blob auth-blob-1\"></span>\r\n <span class=\"auth-blob auth-blob-2\"></span>\r\n <span class=\"auth-blob auth-blob-3\"></span>\r\n <span class=\"auth-blob auth-blob-4\"></span>\r\n\r\n <div class=\"auth-brand-panel\">\r\n <div class=\"auth-brand-logo\">\r\n <img src=\"assets/images/logo-tsi-tres.png\" alt=\"TSI\" />\r\n </div>\r\n <h1 class=\"auth-brand-title\">{{module()}}</h1>\r\n <p class=\"auth-brand-subtitle\">Recupera el acceso a tu cuenta de forma rápida y segura</p>\r\n\r\n <div class=\"auth-brand-divider\"></div>\r\n\r\n <div class=\"auth-brand-features\">\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Verificación por correo electrónico\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Proceso seguro y encriptado\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Nueva clave en minutos\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"auth-panel-right\" [class.auth-panel-right--dev]=\"!produccion\">\r\n <div class=\"auth-panel-bg\">\r\n <span class=\"auth-deco auth-deco-tl\"></span>\r\n <span class=\"auth-deco auth-deco-br\"></span>\r\n </div>\r\n\r\n <div class=\"auth-form-wrapper\">\r\n <div>\r\n @if (!produccion) {\r\n <div>\r\n <span class=\"auth-test-badge\">\r\n <span class=\"badge-dot\"></span> ENTORNO DE PRUEBAS\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"auth-card\">\r\n <h2 class=\"auth-card-title\">Recuperar contraseña</h2>\r\n <p class=\"auth-card-subtitle\">\r\n Confírmanos tu RUC y usuario. Enviaremos a tu correo registrado la nueva contraseña.\r\n </p>\r\n\r\n <form [formGroup]=\"recoverForm\">\r\n\r\n <div class=\"auth-field\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-building\"></i></span>\r\n <input type=\"text\" class=\"auth-input\" placeholder=\" \" maxlength=\"11\" formControlName=\"ruc\"\r\n id=\"rec-ruc\" onlyNumber autocomplete=\"off\">\r\n <label for=\"rec-ruc\" class=\"auth-label\">RUC</label>\r\n </div>\r\n\r\n <div class=\"auth-field\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-user\"></i></span>\r\n <input type=\"text\" class=\"auth-input\" placeholder=\" \" formControlName=\"usuario\"\r\n id=\"rec-user\" autocomplete=\"off\">\r\n <label for=\"rec-user\" class=\"auth-label\">Usuario</label>\r\n </div>\r\n\r\n <button type=\"button\" class=\"auth-btn\" [class.auth-btn--red]=\"!produccion\"\r\n [disabled]=\"recoverForm.invalid\" (click)=\"enviar()\">\r\n Enviar instrucciones\r\n </button>\r\n\r\n <button type=\"button\" class=\"auth-btn auth-btn--outline\" (click)=\"back()\">\r\n Volver al inicio de sesión\r\n </button>\r\n\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, computed, HostListener, input, model, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LoginEvent } from '../../models/login-event';\r\n\r\n@Component({\r\n selector: 'lib-select-branch',\r\n imports: [FormsModule],\r\n templateUrl: './select-branch.component.html',\r\n styleUrls: ['./select-branch.component.scss', '../auth.scss']\r\n})\r\nexport class SelectBranchComponent {\r\n\r\n production = input<boolean>(true)\r\n module = input<string>('ERP') // DEFECTO ERP\r\n title = computed(() => this.production() ? `MÓDULO: ${this.module()}` : `MÓDULO DE PRUEBA: ${this.module()}`)\r\n\r\n codsuc = model<number>(-1)\r\n sucursalesList = input<any[]>([])\r\n\r\n loginEvent = output<LoginEvent>()\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n handleEnter(_event: KeyboardEvent) {\r\n if(_event.key !== 'Enter') return\r\n if (!this.codsuc) {\r\n return\r\n }\r\n this.goMain()\r\n }\r\n\r\n goMain = () => {\r\n this.loginEvent.emit({type: \"BRANCH\", data: { codsuc: this.codsuc() }})\r\n }\r\n}\r\n","<div class=\"auth-wrapper-login\">\r\n @let produccion = production();\r\n <div class=\"auth-panel-left\" [class.auth-panel-left--dev]=\"!produccion\">\r\n <span class=\"auth-blob auth-blob-1\"></span>\r\n <span class=\"auth-blob auth-blob-2\"></span>\r\n <span class=\"auth-blob auth-blob-3\"></span>\r\n <span class=\"auth-blob auth-blob-4\"></span>\r\n\r\n <div class=\"auth-brand-panel\">\r\n <div class=\"auth-brand-logo\">\r\n <img src=\"assets/images/logo-tsi-tres.png\" alt=\"TSI\" />\r\n </div>\r\n <h1 class=\"auth-brand-title\">{{module()}}</h1>\r\n <p class=\"auth-brand-subtitle\">Selecciona la sucursal desde donde vas a operar hoy</p>\r\n\r\n <div class=\"auth-brand-divider\"></div>\r\n\r\n <div class=\"auth-brand-features\">\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Acceso segmentado por sucursal\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"auth-panel-right\" [class.auth-panel-right--dev]=\"!produccion\">\r\n <div class=\"auth-panel-bg\">\r\n <span class=\"auth-deco auth-deco-tl\"></span>\r\n <span class=\"auth-deco auth-deco-br\"></span>\r\n </div>\r\n\r\n <div class=\"auth-form-wrapper\">\r\n <div>\r\n @if (!produccion) {\r\n <div>\r\n <span class=\"auth-test-badge\">\r\n <span class=\"badge-dot\"></span> ENTORNO DE PRUEBAS\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"auth-card\">\r\n <h2 class=\"auth-card-title\">Seleccionar sucursal</h2>\r\n <p class=\"auth-card-subtitle\">{{title()}}</p>\r\n\r\n <select class=\"auth-select\" [(ngModel)]=\"codsuc\">\r\n @for (suc of sucursalesList(); track $index) {\r\n <option [value]=\"suc.codsuc\">{{suc.sucursal}}</option>\r\n }\r\n </select>\r\n\r\n <button class=\"auth-btn\" [class.auth-btn--red]=\"!produccion\" (click)=\"goMain()\">\r\n Continuar\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","export class AuthSender {\r\n ruc?: string\r\n coduser?: string\r\n clave?: string\r\n nuevaclave?: string\r\n producto?: string\r\n codsuc?: number\r\n}","/*\r\n * Public API Surface of login-tsi\r\n */\r\n\r\nexport * from './lib/components/auth/auth.component';\r\nexport * from './lib/components/expired-password/expired-password.component';\r\nexport * from './lib/components/recover-password/recover-password.component';\r\nexport * from './lib/components/select-branch/select-branch.component';\r\nexport * from './lib/models/auth-sender';\r\nexport * from './lib/models/login-event';\r\nexport * from './lib/models/login-type-event';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login-tsi.mjs","sources":["../../../projects/login-tsi/src/lib/utils/animations.ts","../../../projects/login-tsi/src/lib/pwa-install.service.ts","../../../projects/login-tsi/src/lib/components/pwa-floating/pwa-floating.component.ts","../../../projects/login-tsi/src/lib/components/pwa-floating/pwa-floating.component.html","../../../projects/login-tsi/src/lib/components/refresh-floating/refresh-floating.component.ts","../../../projects/login-tsi/src/lib/components/refresh-floating/refresh-floating.component.html","../../../projects/login-tsi/src/lib/components/auth/auth.component.ts","../../../projects/login-tsi/src/lib/components/auth/auth.component.html","../../../projects/login-tsi/src/lib/components/expired-password/expired-password.component.ts","../../../projects/login-tsi/src/lib/components/expired-password/expired-password.component.html","../../../projects/login-tsi/src/lib/components/recover-password/recover-password.component.ts","../../../projects/login-tsi/src/lib/components/recover-password/recover-password.component.html","../../../projects/login-tsi/src/lib/components/select-branch/select-branch.component.ts","../../../projects/login-tsi/src/lib/components/select-branch/select-branch.component.html","../../../projects/login-tsi/src/lib/models/auth-sender.ts","../../../projects/login-tsi/src/public-api.ts","../../../projects/login-tsi/src/login-tsi.ts"],"sourcesContent":["import { animate, style, transition, trigger } from \"@angular/animations\";\r\n\r\nexport const fadeInOut = trigger('fadeInOut', [\r\n transition(':enter', [\r\n style({ opacity: 0, transform: 'translateY(-5px)' }),\r\n animate('200ms ease-out', style({ opacity: 1, transform: 'translateY(0)' })),\r\n ]),\r\n transition(':leave', [\r\n animate('200ms ease-in', style({ opacity: 0, transform: 'translateY(-5px)' })),\r\n ]),\r\n ])","import { Injectable, signal } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class PwaInstallService {\r\n\r\n readonly isAndroid = /Android/i.test(navigator.userAgent)\r\n readonly isIOS = /iPad|iPhone|iPod/i.test(navigator.userAgent)\r\n readonly isSafariMac = /^((?!Chrome|Android).)*Safari/i.test(navigator.userAgent) && /Mac/i.test(navigator.platform)\r\n readonly isChrome = /Chrome|Chromium|Edg/i.test(navigator.userAgent) && !/Android/i.test(navigator.userAgent)\r\n\r\n readonly showButton = signal<boolean>(\r\n !window.matchMedia('(display-mode: standalone)').matches\r\n )\r\n readonly showGuide = signal<boolean>(false)\r\n\r\n private get deferredPrompt(): any { return (window as any).__pwaPrompt ?? null }\r\n\r\n get canAutoInstall(): boolean { return !!this.deferredPrompt }\r\n\r\n async tryInstall(): Promise<void> {\r\n const prompt = this.deferredPrompt\r\n if (!prompt) return\r\n prompt.prompt()\r\n const { outcome } = await prompt.userChoice\r\n if (outcome === 'accepted') this.showButton.set(false)\r\n else (window as any).__pwaPrompt = null\r\n }\r\n\r\n toggleGuide() { this.showGuide.update(v => !v) }\r\n\r\n markAsAdded() {\r\n this.showGuide.set(false)\r\n this.showButton.set(false)\r\n }\r\n}\r\n","import { Component, inject, input, output } from '@angular/core';\r\nimport { PwaInstallService } from '../../pwa-install.service';\r\n\r\n@Component({\r\n selector: 'app-pwa-floating',\r\n templateUrl: './pwa-floating.component.html',\r\n styleUrl: './pwa-floating.component.scss'\r\n})\r\n\r\nexport class PwaFloatingComponent {\r\n\r\n readonly pwa = inject(PwaInstallService)\r\n\r\n appName = input<string>('ERP TSI')\r\n logo = input<string>('assets/images/logo-tsi-tres.png')\r\n chipLabel = input<string>('Instalar app')\r\n\r\n beforeInstall = output<void>()\r\n guideClosed = output<void>()\r\n\r\n onChipClick() {\r\n if (!this.pwa.showGuide()) {\r\n this.beforeInstall.emit()\r\n } else {\r\n this.guideClosed.emit()\r\n }\r\n this.pwa.toggleGuide()\r\n }\r\n\r\n onCloseGuide() {\r\n this.guideClosed.emit()\r\n this.pwa.toggleGuide()\r\n }\r\n\r\n onMarkAsAdded() {\r\n this.guideClosed.emit()\r\n this.pwa.markAsAdded()\r\n }\r\n\r\n}\r\n","@if (pwa.showButton()) {\r\n<div class=\"pwa-wrap\">\r\n\r\n @if (pwa.showGuide()) {\r\n <div class=\"pwa-guide\">\r\n <button class=\"pwa-guide__close\" (click)=\"onCloseGuide()\">\r\n <i class=\"fas fa-xmark\"></i>\r\n </button>\r\n\r\n <div class=\"pwa-guide__header\">\r\n <img [src]=\"logo()\" alt=\"\" class=\"pwa-guide__logo\">\r\n <div>\r\n <p class=\"pwa-guide__title\">Instalar {{ appName() }}</p>\r\n <p class=\"pwa-guide__sub\">Úsalo como una app desde tu dispositivo</p>\r\n </div>\r\n </div>\r\n\r\n @if (!pwa.canAutoInstall) {\r\n <ol class=\"pwa-guide__steps\">\r\n @if (pwa.isIOS) {\r\n <li>Toca el botón <span class=\"pwa-guide__badge\"><i class=\"fas fa-arrow-up-from-bracket\"></i></span> en la barra inferior del navegador</li>\r\n <li>Desplázate y selecciona <strong>\"En la pantalla de inicio\"</strong></li>\r\n <li>Toca <strong>\"Añadir\"</strong> en la esquina superior derecha</li>\r\n } @else if (pwa.isAndroid) {\r\n <li>Toca el menú <span class=\"pwa-guide__badge\"><i class=\"fas fa-ellipsis-vertical\"></i></span> en la esquina superior derecha</li>\r\n <li>Selecciona <strong>\"Instalar aplicación\"</strong> o <strong>\"Añadir a pantalla de inicio\"</strong></li>\r\n <li>Toca <strong>\"Instalar\"</strong> para confirmar</li>\r\n } @else if (pwa.isSafariMac) {\r\n <li>Abre el menú <strong>\"Archivo\"</strong> en la barra superior del Mac</li>\r\n <li>Selecciona <strong>\"Añadir al Dock...\"</strong></li>\r\n <li>Haz clic en <strong>\"Añadir\"</strong> para confirmar</li>\r\n } @else if (pwa.isChrome) {\r\n <li>Busca el ícono <span class=\"pwa-guide__badge\"><i class=\"fas fa-display\"></i></span> al final de la barra de direcciones</li>\r\n <li>Haz clic en él y selecciona <strong>\"Instalar\"</strong></li>\r\n <li>Confirma en el diálogo que aparece</li>\r\n } @else {\r\n <li>Abre el menú <span class=\"pwa-guide__badge\"><i class=\"fas fa-ellipsis-vertical\"></i></span> de tu navegador</li>\r\n <li>Busca <strong>\"Instalar aplicación\"</strong> o <strong>\"Añadir a pantalla de inicio\"</strong></li>\r\n <li>Confirma para instalar</li>\r\n }\r\n </ol>\r\n }\r\n\r\n @if (pwa.canAutoInstall) {\r\n <button class=\"pwa-guide__install\" (click)=\"pwa.tryInstall()\">\r\n <i class=\"fas fa-download\"></i> Instalar ahora\r\n </button>\r\n }\r\n <button class=\"pwa-guide__done\" (click)=\"onMarkAsAdded()\">\r\n <i class=\"fas fa-check\"></i> Ya lo instalé\r\n </button>\r\n </div>\r\n }\r\n\r\n <button class=\"pwa-chip\" (click)=\"onChipClick()\">\r\n <img [src]=\"logo()\" alt=\"\" class=\"pwa-chip__logo\">\r\n <span>{{ chipLabel() }}</span>\r\n </button>\r\n\r\n</div>\r\n}\r\n","import { Component, signal } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-refresh-floating',\r\n templateUrl: './refresh-floating.component.html',\r\n styleUrl: './refresh-floating.component.scss'\r\n})\r\n\r\nexport class RefreshFloatingComponent {\r\n\r\n showGuide = signal<boolean>(false)\r\n\r\n toggleGuide() {\r\n this.showGuide.update(v => !v)\r\n }\r\n\r\n actualizar() {\r\n window.location.reload()\r\n }\r\n\r\n async actualizarTotal() {\r\n if ('serviceWorker' in navigator) {\r\n const registrations = await navigator.serviceWorker.getRegistrations()\r\n await Promise.all(registrations.map(r => r.unregister()))\r\n }\r\n if ('caches' in window) {\r\n const names = await caches.keys()\r\n await Promise.all(names.map(name => caches.delete(name)))\r\n }\r\n window.location.href = window.location.pathname + '?_r=' + Date.now()\r\n }\r\n}\r\n","<div class=\"refresh-wrap\">\r\n\r\n @if (showGuide()) {\r\n <div class=\"refresh-guide\">\r\n <button class=\"refresh-guide__close\" (click)=\"toggleGuide()\">\r\n <i class=\"fas fa-xmark\"></i>\r\n </button>\r\n\r\n <p class=\"refresh-guide__title\">Actualizar aplicación</p>\r\n\r\n <button class=\"refresh-guide__option\" (click)=\"actualizar()\">\r\n <i class=\"fas fa-rotate\"></i> Actualizar\r\n </button>\r\n\r\n <button class=\"refresh-guide__option refresh-guide__option--force\" (click)=\"actualizarTotal()\">\r\n <i class=\"fas fa-rotate-right\"></i> Forzar actualización\r\n </button>\r\n </div>\r\n }\r\n\r\n <button class=\"refresh-chip\" (click)=\"toggleGuide()\" title=\"Actualizar\">\r\n <i class=\"fas fa-rotate\"></i>\r\n </button>\r\n\r\n</div>\r\n","import { NgClass } from '@angular/common';\r\nimport { Component, input, output, signal } from '@angular/core';\r\nimport { FormGroup, ReactiveFormsModule } from '@angular/forms';\r\nimport { AuthSender } from '../../models/auth-sender';\r\nimport { fadeInOut } from '../../utils/animations';\r\nimport { LoginEvent } from '../../models/login-event';\r\nimport { PwaFloatingComponent } from '../pwa-floating/pwa-floating.component';\r\nimport { RefreshFloatingComponent } from '../refresh-floating/refresh-floating.component';\r\n\r\n@Component({\r\n selector: 'lib-auth-tsi',\r\n imports: [NgClass, ReactiveFormsModule, PwaFloatingComponent, RefreshFloatingComponent],\r\n templateUrl: './auth.component.html',\r\n styleUrls: ['./auth.component.scss', '../auth.scss'],\r\n animations: [fadeInOut]\r\n})\r\nexport class AuthComponent {\r\n\r\n production = input<boolean>(true)\r\n module = input<string>('ERP') // DEFECTO ERP\r\n versionApp = input<string>('1.0.0') // DEFECTO 1.0.0\r\n product = input<string>() // DEFECTO NULL - ERP\r\n authForm = input.required<FormGroup>();\r\n\r\n aboutList = input<string[]>([\r\n 'Gestión de compras y logística',\r\n 'Control financiero avanzado',\r\n 'Reportes y análisis en tiempo real',\r\n 'Integración con inteligencia artificial'\r\n ])\r\n\r\n /** Muestra el flotante de \"instalar app\" (app-pwa-floating). Por defecto siempre visible. */\r\n showFloatingApp = input<boolean>(true)\r\n /** Muestra el flotante de \"actualización disponible\" (app-refresh-floating). Por defecto siempre visible. */\r\n showFloatingUpdate = input<boolean>(true)\r\n\r\n loginEvent = output<LoginEvent>()\r\n /** Se dispara antes de instalar la PWA — el RUC/usuario ya están en authForm(), el consumidor decide qué guardar. */\r\n beforeInstall = output<void>()\r\n\r\n showPassword = signal<boolean>(false)\r\n\r\n onBeforeInstall = () => this.beforeInstall.emit()\r\n\r\n recover = () => this.loginEvent.emit({type: \"RECOVER\"})\r\n forget = () => this.loginEvent.emit({type: \"FORGET\"})\r\n \r\n togglePassword = () => this.showPassword.set(!this.showPassword())\r\n\r\n login = () => {\r\n if (!this.validacionInit()) return\r\n const dataForm = this.authForm().value\r\n const data: AuthSender = {\r\n ruc: dataForm.ruc,\r\n coduser: dataForm.nomuser,\r\n clave: btoa(dataForm.clave),\r\n producto: this.product()\r\n }\r\n this.loginEvent.emit({type: \"LOGIN\", data})\r\n }\r\n\r\n // authForm = this.formBuilder.group({\r\n // ruc: ['', Validators.required],\r\n // nomuser: ['', Validators.required],\r\n // clave: ['', Validators.required],\r\n // })\r\n\r\n validacion(value: string) {\r\n const authForm = this.authForm()\r\n if (authForm.get(value).touched && authForm.get(value).errors) {\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n validacionInit() {\r\n const dataForm = this.authForm().value\r\n const { ruc, nomuser, clave } = dataForm\r\n\r\n if (!ruc) return this.returnError('Debe ingresar un N° de RUC')\r\n if (!nomuser) return this.returnError('Debe ingresar un usuario')\r\n if (!clave) return this.returnError('Debe ingresar una contraseña')\r\n return true\r\n }\r\n \r\n returnError = (message:string) => {\r\n this.loginEvent.emit({type: \"ERROR\", message})\r\n return false\r\n }\r\n}\r\n","<div class=\"auth-wrapper-login\">\r\n @let produccion = production();\r\n <div class=\"auth-panel-left\" [class.auth-panel-left--dev]=\"!produccion\">\r\n <span class=\"auth-blob auth-blob-1\"></span>\r\n <span class=\"auth-blob auth-blob-2\"></span>\r\n <span class=\"auth-blob auth-blob-3\"></span>\r\n <span class=\"auth-blob auth-blob-4\"></span>\r\n\r\n <div class=\"auth-brand-panel\">\r\n <div class=\"auth-brand-logo\">\r\n <img src=\"assets/images/logo-tsi-tres.png\" alt=\"TSI\" />\r\n </div>\r\n <h1 class=\"auth-brand-title\">{{module()}}</h1>\r\n <p class=\"auth-brand-subtitle\">Plataforma integrada de gestión<br>empresarial</p>\r\n\r\n <div class=\"auth-brand-divider\"></div>\r\n\r\n <div class=\"auth-brand-features\">\r\n @for (item of aboutList(); track $index) {\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> {{item}}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"auth-panel-right\" [class.auth-panel-right--dev]=\"!produccion\">\r\n <div class=\"auth-panel-bg\">\r\n <span class=\"auth-deco auth-deco-tl\"></span>\r\n <span class=\"auth-deco auth-deco-br\"></span>\r\n </div>\r\n\r\n <div class=\"auth-form-wrapper\">\r\n <div>\r\n @if (!produccion) {\r\n <div>\r\n <span class=\"auth-test-badge\">\r\n <span class=\"badge-dot\"></span> ENTORNO DE PRUEBAS\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"auth-card\">\r\n <h2 class=\"auth-card-title\">Bienvenido de vuelta</h2>\r\n <p class=\"auth-card-subtitle\">Ingresa tus credenciales para continuar</p>\r\n\r\n <form [formGroup]=\"authForm()\" id=\"loginform\">\r\n\r\n <p class=\"auth-hint\">\r\n <i class=\"fas fa-circle-info\"></i>\r\n Si piensas instalar la app, te recomendamos completar el RUC y Usuario antes, estos quedarán guardados y siempre aparecerán completos al abrirla.\r\n </p>\r\n\r\n <div class=\"auth-field\" [class.has-error]=\"validacion('ruc')\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-building\"></i></span>\r\n <input type=\"text\" formControlName=\"ruc\" class=\"auth-input\" placeholder=\" \" maxlength=\"11\"\r\n id=\"f-ruc\" autocomplete=\"off\">\r\n <label for=\"f-ruc\" class=\"auth-label\">RUC</label>\r\n </div>\r\n @if (validacion('ruc')) {\r\n <p class=\"auth-error\" @fadeInOut>Ingresar RUC</p>\r\n }\r\n\r\n <div class=\"auth-field\" [class.has-error]=\"validacion('nomuser')\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-user\"></i></span>\r\n <input type=\"text\" formControlName=\"nomuser\" class=\"auth-input\" placeholder=\" \" id=\"f-user\"\r\n autocomplete=\"off\">\r\n <label for=\"f-user\" class=\"auth-label\">Usuario</label>\r\n </div>\r\n @if (validacion('nomuser')) {\r\n <p class=\"auth-error\" @fadeInOut>Ingresar usuario</p>\r\n }\r\n\r\n <div class=\"auth-field\" [class.has-error]=\"validacion('clave')\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-lock\"></i></span>\r\n <input [type]=\"showPassword() ? 'text' : 'password'\" formControlName=\"clave\"\r\n class=\"auth-input\" placeholder=\" \" id=\"f-clave\" autocomplete=\"off\" autocorrect=\"off\"\r\n autocapitalize=\"off\" spellcheck=\"false\">\r\n <label for=\"f-clave\" class=\"auth-label\">Contraseña</label>\r\n <button type=\"button\" class=\"auth-toggle-pw\" (click)=\"togglePassword()\">\r\n <i [class]=\"showPassword() ? 'fas fa-eye' : 'fas fa-eye-slash'\"></i>\r\n </button>\r\n </div>\r\n @if (validacion('clave')) {\r\n <p class=\"auth-error\" @fadeInOut>Ingresar clave</p>\r\n }\r\n\r\n <button class=\"auth-btn mt-2\" [class.auth-btn--red]=\"!produccion\" (click)=\"login()\">\r\n Ingresar\r\n </button>\r\n\r\n <div class=\"auth-links\">\r\n <a [ngClass]=\"produccion ? 'blue_contrasena' : 'red_contrasena'\"\r\n (click)=\"recover()\">¿Olvidaste tu contraseña?</a>\r\n <a [ngClass]=\"produccion ? 'blue_contrasena' : 'red_contrasena'\"\r\n (click)=\"forget()\">¿Contraseña vencida?</a>\r\n </div>\r\n\r\n </form>\r\n\r\n <div class=\"auth-version\">\r\n <span>v{{versionApp()}}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n@if (showFloatingApp()) {\r\n<app-pwa-floating [appName]=\"module()\" (beforeInstall)=\"onBeforeInstall()\" />\r\n}\r\n@if (showFloatingUpdate()) {\r\n<app-refresh-floating />\r\n}","import { Component, inject, input, output, signal } from '@angular/core';\r\nimport { AbstractControl, FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { AuthSender } from '../../models/auth-sender';\r\nimport { fadeInOut } from '../../utils/animations';\r\nimport { LoginEvent } from '../../models/login-event';\r\n\r\n@Component({\r\n selector: 'lib-expired-password',\r\n imports: [ReactiveFormsModule],\r\n templateUrl: './expired-password.component.html',\r\n styleUrls: ['./expired-password.component.scss', '../auth.scss'],\r\n animations: [fadeInOut]\r\n})\r\nexport class ExpiredPasswordComponent {\r\n\r\n private readonly fb = inject(FormBuilder)\r\n\r\n production = input<boolean>(true)\r\n module = input<string>('ERP') // DEFECTO ERP\r\n\r\n loginEvent = output<LoginEvent>()\r\n\r\n passwordVisibility = signal({\r\n claveAntigua: false,\r\n claveNueva: false,\r\n claveNuevaConfirmar: false\r\n })\r\n\r\n expiredForm = this.fb.group({\r\n ruc: ['', [Validators.required, Validators.minLength(11), Validators.maxLength(11)]],\r\n coduser: ['', Validators.required],\r\n claveAntigua: ['', [Validators.required, Validators.maxLength(20)]],\r\n claveNueva: ['', [\r\n Validators.required,\r\n Validators.minLength(8),\r\n this.regexValidator(/[a-z]/, { minuscula: true }),\r\n this.regexValidator(/[A-Z]/, { mayuscula: true }),\r\n this.regexValidator(/[0-9]/, { numero: true }),\r\n this.regexValidator(/[!@#$%^&*(),.?\":{}|<>]/, { especial: true })\r\n ]],\r\n claveNuevaConfirmar: ['', Validators.required]\r\n }, {\r\n validators: this.validatePassword('claveNueva', 'claveNuevaConfirmar')\r\n })\r\n\r\n regexValidator(regex: RegExp, error: any) {\r\n return (control: AbstractControl) => {\r\n if (!control.value) return null\r\n return regex.test(control.value) ? null : error\r\n }\r\n }\r\n\r\n validatePassword(pass1: string, pass2: string) {\r\n return (formGroup: AbstractControl) => {\r\n const c1 = formGroup.get(pass1)?.value\r\n const c2 = formGroup.get(pass2)?.value\r\n if (c1 != c2) {\r\n formGroup.get(pass2)?.setErrors({ coinciden: true })\r\n return { coinciden: true }\r\n }\r\n return null\r\n }\r\n }\r\n\r\n togglePassword(field: 'claveAntigua' | 'claveNueva' | 'claveNuevaConfirmar') {\r\n this.passwordVisibility.update(vis => ({ ...vis, [field]: !vis[field] }));\r\n }\r\n\r\n recover = () => {\r\n if (this.expiredForm.invalid) {\r\n this.loginEvent.emit({type: \"ERROR\", message: 'Debes completar todos los campos y cumplir los requisitos.'})\r\n return\r\n }\r\n \r\n const values = this.expiredForm.value\r\n const sender: AuthSender = {\r\n ruc: values.ruc!,\r\n coduser: values.coduser!,\r\n clave: values.claveAntigua!,\r\n nuevaclave: values.claveNueva!\r\n }\r\n this.loginEvent.emit({ type: \"FORGET\", data: sender })\r\n }\r\n\r\n back = () => {\r\n this.expiredForm.reset()\r\n this.loginEvent.emit({ type: \"BACK\" })\r\n }\r\n}\r\n","<div class=\"auth-wrapper-login\">\r\n @let produccion = production();\r\n <div class=\"auth-panel-left\" [class.auth-panel-left--dev]=\"!produccion\">\r\n <span class=\"auth-blob auth-blob-1\"></span>\r\n <span class=\"auth-blob auth-blob-2\"></span>\r\n <span class=\"auth-blob auth-blob-3\"></span>\r\n <span class=\"auth-blob auth-blob-4\"></span>\r\n\r\n <div class=\"auth-brand-panel\">\r\n <div class=\"auth-brand-logo\">\r\n <img src=\"assets/images/logo-tsi-tres.png\" alt=\"TSI\" />\r\n </div>\r\n <h1 class=\"auth-brand-title\">{{module()}}</h1>\r\n <p class=\"auth-brand-subtitle\">Renueva tu contraseña y mantén tu cuenta segura</p>\r\n\r\n <div class=\"auth-brand-divider\"></div>\r\n\r\n <div class=\"auth-brand-features\">\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Mínimo 8 caracteres\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Letras mayúsculas y minúsculas\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Al menos un número y símbolo\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"auth-panel-right\" [class.auth-panel-right--dev]=\"!produccion\">\r\n <div class=\"auth-panel-bg\">\r\n <span class=\"auth-deco auth-deco-tl\"></span>\r\n <span class=\"auth-deco auth-deco-br\"></span>\r\n </div>\r\n\r\n <div class=\"auth-form-wrapper\">\r\n <div>\r\n @if (!produccion) {\r\n <div>\r\n <span class=\"auth-test-badge\">\r\n <span class=\"badge-dot\"></span> ENTORNO DE PRUEBAS\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"auth-card\">\r\n <h2 class=\"auth-card-title\">Renovar contraseña</h2>\r\n <p class=\"auth-card-subtitle\">Proporciona tus datos y elige una nueva clave</p>\r\n\r\n <form [formGroup]=\"expiredForm\">\r\n\r\n <div class=\"auth-field\"\r\n [class.has-error]=\"expiredForm.get('ruc')?.invalid && expiredForm.get('ruc')?.touched\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-building\"></i></span>\r\n <input type=\"text\" class=\"auth-input\" placeholder=\" \" maxlength=\"11\"\r\n formControlName=\"ruc\" id=\"exp-ruc\" onlyNumber autocomplete=\"off\">\r\n <label for=\"exp-ruc\" class=\"auth-label\">RUC</label>\r\n </div>\r\n @if (expiredForm.get('ruc')?.invalid && expiredForm.get('ruc')?.touched) {\r\n <p class=\"auth-error\" @fadeInOut>RUC debe tener 11 dígitos</p>\r\n }\r\n\r\n <div class=\"auth-field\"\r\n [class.has-error]=\"expiredForm.get('coduser')?.invalid && expiredForm.get('coduser')?.touched\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-user\"></i></span>\r\n <input type=\"text\" class=\"auth-input\" placeholder=\" \"\r\n formControlName=\"coduser\" id=\"exp-user\" autocomplete=\"off\">\r\n <label for=\"exp-user\" class=\"auth-label\">Usuario</label>\r\n </div>\r\n @if (expiredForm.get('coduser')?.invalid && expiredForm.get('coduser')?.touched) {\r\n <p class=\"auth-error\" @fadeInOut>El usuario es obligatorio</p>\r\n }\r\n\r\n <div class=\"auth-field\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-lock-open\"></i></span>\r\n <input [type]=\"passwordVisibility().claveAntigua ? 'text' : 'password'\"\r\n class=\"auth-input\" placeholder=\" \" maxlength=\"20\"\r\n formControlName=\"claveAntigua\" id=\"exp-old-pw\" autocomplete=\"new-password\">\r\n <label for=\"exp-old-pw\" class=\"auth-label\">Contraseña antigua</label>\r\n <button type=\"button\" class=\"auth-toggle-pw\" (click)=\"togglePassword('claveAntigua')\">\r\n <i [class]=\"passwordVisibility().claveAntigua ? 'fas fa-eye' : 'fas fa-eye-slash'\"></i>\r\n </button>\r\n </div>\r\n\r\n <div class=\"auth-field\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-lock\"></i></span>\r\n <input [type]=\"passwordVisibility().claveNueva ? 'text' : 'password'\"\r\n class=\"auth-input\" placeholder=\" \" maxlength=\"20\"\r\n formControlName=\"claveNueva\" id=\"exp-new-pw\" autocomplete=\"new-password\">\r\n <label for=\"exp-new-pw\" class=\"auth-label\">Contraseña nueva</label>\r\n <button type=\"button\" class=\"auth-toggle-pw\" (click)=\"togglePassword('claveNueva')\">\r\n <i [class]=\"passwordVisibility().claveNueva ? 'fas fa-eye' : 'fas fa-eye-slash'\"></i>\r\n </button>\r\n </div>\r\n\r\n @if (expiredForm.get('claveNueva')?.value?.length > 0) {\r\n <ul class=\"auth-validation-list\" @fadeInOut>\r\n @if (expiredForm.get('claveNueva')?.errors?.['minlength']) {\r\n <li>Al menos 8 caracteres</li>\r\n }\r\n @if (expiredForm.get('claveNueva')?.errors?.['minuscula']) {\r\n <li>Al menos 1 letra minúscula</li>\r\n }\r\n @if (expiredForm.get('claveNueva')?.errors?.['mayuscula']) {\r\n <li>Al menos 1 letra mayúscula</li>\r\n }\r\n @if (expiredForm.get('claveNueva')?.errors?.['numero']) {\r\n <li>Al menos 1 número</li>\r\n }\r\n @if (expiredForm.get('claveNueva')?.errors?.['especial']) {\r\n <li>Al menos 1 carácter especial</li>\r\n }\r\n </ul>\r\n }\r\n\r\n <div class=\"auth-field\"\r\n [class.has-error]=\"expiredForm.get('claveNuevaConfirmar')?.errors?.['coinciden'] && expiredForm.get('claveNuevaConfirmar')?.touched\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-check-circle\"></i></span>\r\n <input [type]=\"passwordVisibility().claveNuevaConfirmar ? 'text' : 'password'\"\r\n class=\"auth-input\" placeholder=\" \" maxlength=\"20\"\r\n formControlName=\"claveNuevaConfirmar\" id=\"exp-confirm-pw\" autocomplete=\"new-password\">\r\n <label for=\"exp-confirm-pw\" class=\"auth-label\">Confirmar contraseña</label>\r\n <button type=\"button\" class=\"auth-toggle-pw\" (click)=\"togglePassword('claveNuevaConfirmar')\">\r\n <i [class]=\"passwordVisibility().claveNuevaConfirmar ? 'fas fa-eye' : 'fas fa-eye-slash'\"></i>\r\n </button>\r\n </div>\r\n @if (expiredForm.get('claveNuevaConfirmar')?.errors?.['coinciden'] && expiredForm.get('claveNuevaConfirmar')?.touched) {\r\n <p class=\"auth-error\" @fadeInOut>Las contraseñas deben coincidir</p>\r\n }\r\n\r\n <button type=\"button\" class=\"auth-btn\" [class.auth-btn--red]=\"!produccion\"\r\n [disabled]=\"expiredForm.invalid\" (click)=\"recover()\">\r\n Renovar contraseña\r\n </button>\r\n\r\n <button type=\"button\" class=\"auth-btn auth-btn--outline\" (click)=\"back()\">\r\n Volver al inicio de sesión\r\n </button>\r\n\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { Component, inject, input, output } from '@angular/core';\r\nimport { FormBuilder, ReactiveFormsModule, Validators } from '@angular/forms';\r\nimport { AuthSender } from '../../models/auth-sender';\r\nimport { fadeInOut } from '../../utils/animations';\r\nimport { LoginEvent } from '../../models/login-event';\r\n\r\n@Component({\r\n selector: 'lib-recover-password',\r\n imports: [ReactiveFormsModule],\r\n templateUrl: './recover-password.component.html',\r\n styleUrls: ['./recover-password.component.scss', '../auth.scss'],\r\n animations: [fadeInOut]\r\n})\r\nexport class RecoverPasswordComponent {\r\n\r\n private fb = inject(FormBuilder)\r\n\r\n production = input<boolean>(true)\r\n module = input<string>('ERP') // DEFECTO ERP\r\n\r\n loginEvent = output<LoginEvent>()\r\n\r\n recoverForm = this.fb.group({\r\n ruc: ['', [Validators.required, Validators.minLength(11), Validators.maxLength(11)]],\r\n usuario: ['', Validators.required]\r\n })\r\n\r\n enviar = () => {\r\n if (this.recoverForm.invalid) {\r\n this.loginEvent.emit({ type: \"ERROR\", message: 'Debes completar todos los campos' })\r\n return\r\n }\r\n\r\n const formValues = this.recoverForm.value\r\n const sender: AuthSender = {\r\n ruc: formValues.ruc!,\r\n coduser: formValues.usuario!\r\n }\r\n\r\n this.loginEvent.emit({ type: \"RECOVER\", data: sender })\r\n }\r\n\r\n back = () => this.loginEvent.emit({ type: \"BACK\" })\r\n \r\n}\r\n","<div class=\"auth-wrapper-login\">\r\n @let produccion = production();\r\n <div class=\"auth-panel-left\" [class.auth-panel-left--dev]=\"!produccion\">\r\n <span class=\"auth-blob auth-blob-1\"></span>\r\n <span class=\"auth-blob auth-blob-2\"></span>\r\n <span class=\"auth-blob auth-blob-3\"></span>\r\n <span class=\"auth-blob auth-blob-4\"></span>\r\n\r\n <div class=\"auth-brand-panel\">\r\n <div class=\"auth-brand-logo\">\r\n <img src=\"assets/images/logo-tsi-tres.png\" alt=\"TSI\" />\r\n </div>\r\n <h1 class=\"auth-brand-title\">{{module()}}</h1>\r\n <p class=\"auth-brand-subtitle\">Recupera el acceso a tu cuenta de forma rápida y segura</p>\r\n\r\n <div class=\"auth-brand-divider\"></div>\r\n\r\n <div class=\"auth-brand-features\">\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Verificación por correo electrónico\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Proceso seguro y encriptado\r\n </div>\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Nueva clave en minutos\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"auth-panel-right\" [class.auth-panel-right--dev]=\"!produccion\">\r\n <div class=\"auth-panel-bg\">\r\n <span class=\"auth-deco auth-deco-tl\"></span>\r\n <span class=\"auth-deco auth-deco-br\"></span>\r\n </div>\r\n\r\n <div class=\"auth-form-wrapper\">\r\n <div>\r\n @if (!produccion) {\r\n <div>\r\n <span class=\"auth-test-badge\">\r\n <span class=\"badge-dot\"></span> ENTORNO DE PRUEBAS\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"auth-card\">\r\n <h2 class=\"auth-card-title\">Recuperar contraseña</h2>\r\n <p class=\"auth-card-subtitle\">\r\n Confírmanos tu RUC y usuario. Enviaremos a tu correo registrado la nueva contraseña.\r\n </p>\r\n\r\n <form [formGroup]=\"recoverForm\">\r\n\r\n <div class=\"auth-field\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-building\"></i></span>\r\n <input type=\"text\" class=\"auth-input\" placeholder=\" \" maxlength=\"11\" formControlName=\"ruc\"\r\n id=\"rec-ruc\" onlyNumber autocomplete=\"off\">\r\n <label for=\"rec-ruc\" class=\"auth-label\">RUC</label>\r\n </div>\r\n\r\n <div class=\"auth-field\">\r\n <span class=\"auth-field-icon\"><i class=\"fas fa-user\"></i></span>\r\n <input type=\"text\" class=\"auth-input\" placeholder=\" \" formControlName=\"usuario\"\r\n id=\"rec-user\" autocomplete=\"off\">\r\n <label for=\"rec-user\" class=\"auth-label\">Usuario</label>\r\n </div>\r\n\r\n <button type=\"button\" class=\"auth-btn\" [class.auth-btn--red]=\"!produccion\"\r\n [disabled]=\"recoverForm.invalid\" (click)=\"enviar()\">\r\n Enviar instrucciones\r\n </button>\r\n\r\n <button type=\"button\" class=\"auth-btn auth-btn--outline\" (click)=\"back()\">\r\n Volver al inicio de sesión\r\n </button>\r\n\r\n </form>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","import { Component, computed, HostListener, input, model, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { LoginEvent } from '../../models/login-event';\r\n\r\n@Component({\r\n selector: 'lib-select-branch',\r\n imports: [FormsModule],\r\n templateUrl: './select-branch.component.html',\r\n styleUrls: ['./select-branch.component.scss', '../auth.scss']\r\n})\r\nexport class SelectBranchComponent {\r\n\r\n production = input<boolean>(true)\r\n module = input<string>('ERP') // DEFECTO ERP\r\n title = computed(() => this.production() ? `MÓDULO: ${this.module()}` : `MÓDULO DE PRUEBA: ${this.module()}`)\r\n\r\n codsuc = model<number>(-1)\r\n sucursalesList = input<any[]>([])\r\n\r\n loginEvent = output<LoginEvent>()\r\n\r\n @HostListener('document:keydown', ['$event'])\r\n handleEnter(_event: KeyboardEvent) {\r\n if(_event.key !== 'Enter') return\r\n if (!this.codsuc) {\r\n return\r\n }\r\n this.goMain()\r\n }\r\n\r\n goMain = () => {\r\n this.loginEvent.emit({type: \"BRANCH\", data: { codsuc: this.codsuc() }})\r\n }\r\n}\r\n","<div class=\"auth-wrapper-login\">\r\n @let produccion = production();\r\n <div class=\"auth-panel-left\" [class.auth-panel-left--dev]=\"!produccion\">\r\n <span class=\"auth-blob auth-blob-1\"></span>\r\n <span class=\"auth-blob auth-blob-2\"></span>\r\n <span class=\"auth-blob auth-blob-3\"></span>\r\n <span class=\"auth-blob auth-blob-4\"></span>\r\n\r\n <div class=\"auth-brand-panel\">\r\n <div class=\"auth-brand-logo\">\r\n <img src=\"assets/images/logo-tsi-tres.png\" alt=\"TSI\" />\r\n </div>\r\n <h1 class=\"auth-brand-title\">{{module()}}</h1>\r\n <p class=\"auth-brand-subtitle\">Selecciona la sucursal desde donde vas a operar hoy</p>\r\n\r\n <div class=\"auth-brand-divider\"></div>\r\n\r\n <div class=\"auth-brand-features\">\r\n <div class=\"auth-brand-feature\">\r\n <span class=\"feat-dot\"></span> Acceso segmentado por sucursal\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"auth-panel-right\" [class.auth-panel-right--dev]=\"!produccion\">\r\n <div class=\"auth-panel-bg\">\r\n <span class=\"auth-deco auth-deco-tl\"></span>\r\n <span class=\"auth-deco auth-deco-br\"></span>\r\n </div>\r\n\r\n <div class=\"auth-form-wrapper\">\r\n <div>\r\n @if (!produccion) {\r\n <div>\r\n <span class=\"auth-test-badge\">\r\n <span class=\"badge-dot\"></span> ENTORNO DE PRUEBAS\r\n </span>\r\n </div>\r\n }\r\n\r\n <div class=\"auth-card\">\r\n <h2 class=\"auth-card-title\">Seleccionar sucursal</h2>\r\n <p class=\"auth-card-subtitle\">{{title()}}</p>\r\n\r\n <select class=\"auth-select\" [(ngModel)]=\"codsuc\">\r\n @for (suc of sucursalesList(); track $index) {\r\n <option [value]=\"suc.codsuc\">{{suc.sucursal}}</option>\r\n }\r\n </select>\r\n\r\n <button class=\"auth-btn\" [class.auth-btn--red]=\"!produccion\" (click)=\"goMain()\">\r\n Continuar\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>","export class AuthSender {\r\n ruc?: string\r\n coduser?: string\r\n clave?: string\r\n nuevaclave?: string\r\n producto?: string\r\n codsuc?: number\r\n}","/*\r\n * Public API Surface of login-tsi\r\n */\r\n\r\nexport * from './lib/components/auth/auth.component';\r\nexport * from './lib/components/expired-password/expired-password.component';\r\nexport * from './lib/components/recover-password/recover-password.component';\r\nexport * from './lib/components/select-branch/select-branch.component';\r\nexport * from './lib/models/auth-sender';\r\nexport * from './lib/models/login-event';\r\nexport * from './lib/models/login-type-event';\r\n\r\n// PWA (instalación, guía, actualización/refresh forzado)\r\nexport * from './lib/components/pwa-floating/pwa-floating.component';\r\nexport * from './lib/components/refresh-floating/refresh-floating.component';\r\nexport * from './lib/pwa-install.service';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
@@ -7,8 +7,16 @@ export declare class AuthComponent {
7
7
  versionApp: import("@angular/core").InputSignal<string>;
8
8
  product: import("@angular/core").InputSignal<string>;
9
9
  authForm: import("@angular/core").InputSignal<FormGroup<any>>;
10
+ aboutList: import("@angular/core").InputSignal<string[]>;
11
+ /** Muestra el flotante de "instalar app" (app-pwa-floating). Por defecto siempre visible. */
12
+ showFloatingApp: import("@angular/core").InputSignal<boolean>;
13
+ /** Muestra el flotante de "actualización disponible" (app-refresh-floating). Por defecto siempre visible. */
14
+ showFloatingUpdate: import("@angular/core").InputSignal<boolean>;
10
15
  loginEvent: import("@angular/core").OutputEmitterRef<LoginEvent>;
16
+ /** Se dispara antes de instalar la PWA — el RUC/usuario ya están en authForm(), el consumidor decide qué guardar. */
17
+ beforeInstall: import("@angular/core").OutputEmitterRef<void>;
11
18
  showPassword: import("@angular/core").WritableSignal<boolean>;
19
+ onBeforeInstall: () => void;
12
20
  recover: () => void;
13
21
  forget: () => void;
14
22
  togglePassword: () => void;
@@ -17,5 +25,5 @@ export declare class AuthComponent {
17
25
  validacionInit(): boolean;
18
26
  returnError: (message: string) => boolean;
19
27
  static ɵfac: i0.ɵɵFactoryDeclaration<AuthComponent, never>;
20
- static ɵcmp: i0.ɵɵComponentDeclaration<AuthComponent, "lib-auth-tsi", never, { "production": { "alias": "production"; "required": false; "isSignal": true; }; "module": { "alias": "module"; "required": false; "isSignal": true; }; "versionApp": { "alias": "versionApp"; "required": false; "isSignal": true; }; "product": { "alias": "product"; "required": false; "isSignal": true; }; "authForm": { "alias": "authForm"; "required": true; "isSignal": true; }; }, { "loginEvent": "loginEvent"; }, never, never, true, never>;
28
+ static ɵcmp: i0.ɵɵComponentDeclaration<AuthComponent, "lib-auth-tsi", never, { "production": { "alias": "production"; "required": false; "isSignal": true; }; "module": { "alias": "module"; "required": false; "isSignal": true; }; "versionApp": { "alias": "versionApp"; "required": false; "isSignal": true; }; "product": { "alias": "product"; "required": false; "isSignal": true; }; "authForm": { "alias": "authForm"; "required": true; "isSignal": true; }; "aboutList": { "alias": "aboutList"; "required": false; "isSignal": true; }; "showFloatingApp": { "alias": "showFloatingApp"; "required": false; "isSignal": true; }; "showFloatingUpdate": { "alias": "showFloatingUpdate"; "required": false; "isSignal": true; }; }, { "loginEvent": "loginEvent"; "beforeInstall": "beforeInstall"; }, never, never, true, never>;
21
29
  }
@@ -0,0 +1,15 @@
1
+ import { PwaInstallService } from '../../pwa-install.service';
2
+ import * as i0 from "@angular/core";
3
+ export declare class PwaFloatingComponent {
4
+ readonly pwa: PwaInstallService;
5
+ appName: import("@angular/core").InputSignal<string>;
6
+ logo: import("@angular/core").InputSignal<string>;
7
+ chipLabel: import("@angular/core").InputSignal<string>;
8
+ beforeInstall: import("@angular/core").OutputEmitterRef<void>;
9
+ guideClosed: import("@angular/core").OutputEmitterRef<void>;
10
+ onChipClick(): void;
11
+ onCloseGuide(): void;
12
+ onMarkAsAdded(): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<PwaFloatingComponent, never>;
14
+ static ɵcmp: i0.ɵɵComponentDeclaration<PwaFloatingComponent, "app-pwa-floating", never, { "appName": { "alias": "appName"; "required": false; "isSignal": true; }; "logo": { "alias": "logo"; "required": false; "isSignal": true; }; "chipLabel": { "alias": "chipLabel"; "required": false; "isSignal": true; }; }, { "beforeInstall": "beforeInstall"; "guideClosed": "guideClosed"; }, never, never, true, never>;
15
+ }
@@ -0,0 +1,9 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class RefreshFloatingComponent {
3
+ showGuide: import("@angular/core").WritableSignal<boolean>;
4
+ toggleGuide(): void;
5
+ actualizar(): void;
6
+ actualizarTotal(): Promise<void>;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<RefreshFloatingComponent, never>;
8
+ static ɵcmp: i0.ɵɵComponentDeclaration<RefreshFloatingComponent, "app-refresh-floating", never, {}, {}, never, never, true, never>;
9
+ }
@@ -0,0 +1,16 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class PwaInstallService {
3
+ readonly isAndroid: boolean;
4
+ readonly isIOS: boolean;
5
+ readonly isSafariMac: boolean;
6
+ readonly isChrome: boolean;
7
+ readonly showButton: import("@angular/core").WritableSignal<boolean>;
8
+ readonly showGuide: import("@angular/core").WritableSignal<boolean>;
9
+ private get deferredPrompt();
10
+ get canAutoInstall(): boolean;
11
+ tryInstall(): Promise<void>;
12
+ toggleGuide(): void;
13
+ markAsAdded(): void;
14
+ static ɵfac: i0.ɵɵFactoryDeclaration<PwaInstallService, never>;
15
+ static ɵprov: i0.ɵɵInjectableDeclaration<PwaInstallService>;
16
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "login-tsi",
3
- "version": "0.0.5",
3
+ "version": "0.0.7",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^19.2.0",
6
6
  "@angular/core": "^19.2.0"
package/public-api.d.ts CHANGED
@@ -5,3 +5,6 @@ export * from './lib/components/select-branch/select-branch.component';
5
5
  export * from './lib/models/auth-sender';
6
6
  export * from './lib/models/login-event';
7
7
  export * from './lib/models/login-type-event';
8
+ export * from './lib/components/pwa-floating/pwa-floating.component';
9
+ export * from './lib/components/refresh-floating/refresh-floating.component';
10
+ export * from './lib/pwa-install.service';