@arsedizioni/ars-utils 22.5.30 → 22.5.33
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.
- package/README.md +15 -12
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +4 -5
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs +118 -2
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +12 -12
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +320 -4
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +13 -13
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +3 -3
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +7 -7
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -1
- package/package.json +1 -5
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +3 -3
- package/types/arsedizioni-ars-utils-core.validators.d.ts +52 -1
- package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +3 -3
- package/types/arsedizioni-ars-utils-ui.dialogs.d.ts +117 -2
- package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +3 -3
- package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +1 -1
- package/types/arsedizioni-ars-utils-ui.files.d.ts +1 -1
- package/ui.application/package.json +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-ui.dialogs.auth.mjs","sources":["../../../projects/ars-utils/ui.dialogs.auth/otp/otp-input.component.ts","../../../projects/ars-utils/ui.dialogs.auth/otp/otp-input.component.html","../../../projects/ars-utils/ui.dialogs.auth/password-strength/password-strength.component.ts","../../../projects/ars-utils/ui.dialogs.auth/password-strength/password-strength.component.html","../../../projects/ars-utils/ui.dialogs.auth/credentials/credentials-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.auth/credentials/credentials-dialog.component.html","../../../projects/ars-utils/ui.dialogs.auth/reset-password/reset-password-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.auth/reset-password/reset-password-dialog.component.html","../../../projects/ars-utils/ui.dialogs.auth/recover-password/recover-password-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.auth/recover-password/recover-password-dialog.component.html","../../../projects/ars-utils/ui.dialogs.auth/prompt-otp/prompt-otp-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.auth/prompt-otp/prompt-otp-dialog.component.html","../../../projects/ars-utils/ui.dialogs.auth/public_api.ts","../../../projects/ars-utils/ui.dialogs.auth/arsedizioni-ars-utils-ui.dialogs.auth.ts"],"sourcesContent":["import { Component, ElementRef, computed, forwardRef, signal, viewChildren, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\n\n\n@Component({\n selector: 'otp-input',\n standalone: true,\n templateUrl: './otp-input.component.html',\n styleUrl: './otp-input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => OtpInputComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => OtpInputComponent),\n multi: true,\n },\n ],\n})\nexport class OtpInputComponent implements ControlValueAccessor, Validator {\n /** Signal-based query for all individual OTP digit input elements. */\n readonly otpFields = viewChildren<ElementRef<HTMLInputElement>>('otpField');\n\n /** `true` when every digit slot contains a valid single decimal digit. */\n readonly isValid = computed(() => this.otpArray().every(d => /^\\d$/.test(d)));\n\n /** Array of per-digit values backing the OTP display. */\n readonly otpArray = signal<string[]>(Array(6).fill(''));\n\n /** Whether the control is currently disabled. */\n readonly disabled = signal<boolean>(false);\n\n private onChange: (val: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ── ControlValueAccessor ───────────────────────────────────────────────────\n\n /**\n * Writes a new value into the control from the model.\n * @param value - A string of up to 6 digits to pre-fill the OTP fields.\n */\n writeValue(value: string): void {\n const arr = Array(6).fill('');\n if (value) {\n value.split('').forEach((c, i) => {\n if (i < 6) arr[i] = c;\n });\n }\n this.otpArray.set(arr);\n }\n\n /**\n * Registers the callback invoked when the control value changes.\n * @param fn - The callback function.\n */\n registerOnChange(fn: (val: string) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the callback invoked when the control is touched.\n * @param fn - The callback function.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Enables or disables the control.\n * @param isDisabled - `true` to disable all OTP inputs.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // ── Validator ──────────────────────────────────────────────────────────────\n\n /**\n * Validates the OTP value: an empty code is left to `required`, while a\n * PARTIAL code (e.g. \"12\") is reported as invalid. Without this, the joined\n * value \"12\" was a non-empty string and `required` let the form submit\n * with an incomplete OTP.\n * @param control - The form control bound to this component.\n * @returns `null` when empty or complete (6 digits), `{ otp: true }` otherwise.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const value: string = control.value ?? '';\n if (value.length === 0) return null; // let `required` handle emptiness\n return /^\\d{6}$/.test(value) ? null : { otp: true };\n }\n\n /**\n * Marks the control as touched when an OTP field loses focus.\n */\n onBlur(): void {\n this.onTouched();\n }\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n\n /**\n * Blocks non-digit characters before they are inserted.\n * @param event - The `beforeinput` event from the input element.\n */\n onBeforeInput(event: InputEvent): void {\n if (event.data && !/^\\d$/.test(event.data)) {\n event.preventDefault();\n }\n }\n\n/**\n * Handles digit input, sanitizes it, syncs the DOM, updates the OTP array, and advances focus.\n * @param event - The `input` event from the digit field.\n * @param index - Zero-based index of the field that received input.\n */\n onInput(event: Event, index: number): void {\n const input = event.target as HTMLInputElement;\n const val = input.value.replace(/\\D/g, '').slice(-1);\n\n // Force-sync the DOM: [value] won't rewrite it when the model value is unchanged.\n input.value = val;\n\n const arr = [...this.otpArray()];\n arr[index] = val;\n this.otpArray.set(arr);\n\n this.updateModel();\n\n if (val && index < 5) {\n this.focusField(index + 1);\n }\n }\n\n /**\n * Handles the Backspace key by moving focus to the previous field when the current one is empty.\n * @param event - The `keydown` event.\n * @param index - Zero-based index of the field that received the keydown.\n */\n onKeyDown(event: KeyboardEvent, index: number): void {\n if (event.key === 'Backspace' && !this.otpArray()[index] && index > 0) {\n this.focusField(index - 1);\n }\n }\n\n /**\n * Handles paste events by extracting up to 6 digits and distributing them across the OTP fields.\n * @param event - The `ClipboardEvent` from the paste action.\n */\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const pasted = event.clipboardData?.getData('text') ?? '';\n const digits = pasted.replace(/\\D/g, '').slice(0, 6).split('');\n\n if (digits.length > 0) {\n const arr = Array(6).fill('');\n digits.forEach((d, i) => (arr[i] = d));\n this.otpArray.set(arr);\n this.updateModel();\n this.focusField(Math.min(digits.length, 5));\n }\n }\n\n\n \n // ── Public API ─────────────────────────────────────────────────────────────\n\n /**\n * Clears every digit field, propagates the empty value to the form model and\n * moves focus back to the first field. Does not mark the control as touched,\n * so no validation error is shown right after the reset.\n */\n clear(): void {\n this.otpArray.set(Array(6).fill(''));\n // Force-sync the DOM: [value] won't rewrite fields whose bound value is unchanged.\n this.otpFields().forEach(f => (f.nativeElement.value = ''));\n this.onChange('');\n this.focusField(0);\n }\n\n /**\n * Moves focus to the OTP field at the given index.\n * @param index - Zero-based index of the target field.\n */\n private focusField(index: number): void {\n const field = this.otpFields()[index];\n field?.nativeElement.focus();\n field?.nativeElement.select();\n }\n\n /**\n * Notifies the form model of the current OTP value and marks the control as touched.\n */\n private updateModel(): void {\n const code = this.otpArray().join('');\n this.onChange(code);\n this.onTouched();\n }\n}\n","<div class=\"otp-container\">\n @for (digit of otpArray(); track $index) {\n <input\n #otpField\n type=\"text\"\n maxlength=\"1\"\n inputmode=\"numeric\"\n pattern=\"[0-9]*\"\n autocomplete=\"one-time-code\"\n class=\"otp-box\"\n [value]=\"digit\"\n (beforeinput)=\"onBeforeInput($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeyDown($event, $index)\"\n (blur)=\"onBlur()\"\n (paste)=\"onPaste($event)\"\n [disabled]=\"disabled()\"\n required\n />\n }\n</div>\n\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PasswordStrength, SystemUtils } from '@arsedizioni/ars-utils/core';\n\nconst DEFAULT_STRENGTH: PasswordStrength = { score: 0, label: '', color: '', suggestions: [], isValid: false };\n\n/**\n * Displays a password-strength indicator for the provided password string.\n * Uses `SystemUtils.calculatePasswordStrength` to derive the score and label.\n */\n@Component({\n selector: 'password-strength',\n templateUrl: './password-strength.component.html',\n styleUrl: './password-strength.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatTooltipModule]\n})\nexport class PasswordStrengthComponent {\n /** The password to evaluate. An empty string renders the default (score 0) state. */\n readonly password = input<string>('');\n\n /**\n * Computed strength result for the current password.\n * Falls back to `DEFAULT_STRENGTH` when the password is empty.\n */\n protected readonly strength = computed<PasswordStrength>(() => {\n const pwd = this.password();\n return pwd ? SystemUtils.calculatePasswordStrength(pwd) : DEFAULT_STRENGTH;\n });\n\n /**\n * CSS class applied to the label element based on the numeric score (1–6 bands).\n * Scores ≤ 2 → `'score-2'`, ≤ 3 → `'score-3'`, etc.\n */\n protected readonly scoreClass = computed<string>(() => {\n const score = this.strength().score;\n if (score <= 2) return 'score-2';\n if (score <= 3) return 'score-3';\n if (score <= 4) return 'score-4';\n if (score <= 5) return 'score-5';\n return 'score-6';\n });\n}\n","<div class=\"wide x-small bold\" style=\"white-space: nowrap; padding-top:4px\" [matTooltip]=\"strength().suggestions?.join('\\n ')\">\r\n <span [class]=\"scoreClass()\">{{strength().label}}</span>\r\n</div>","import { Component, inject, output, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { CredentialsDialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { email, form, FormField, FormRoot, required } from '@angular/forms/signals';\nimport { notEmpty, otp, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { PasswordStrengthComponent } from '../password-strength/password-strength.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { OtpInputComponent } from '../otp/otp-input.component';\n\nexport interface CredentialsDialogData {\n title?: string;\n message?: string;\n remember?: boolean;\n recoverPassword?: boolean;\n recoverPasswordUrl?: string;\n user?: string;\n okCaption?: string;\n mode?: 'email' | 'user' | 'otp';\n appearance?: MatFormFieldAppearance;\n}\n\n@Component({\n templateUrl: './credentials-dialog.component.html',\n styleUrl: './credentials-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormField, FormRoot,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatCheckboxModule,\n MatDialogActions,\n FlexLayoutModule,\n MatButtonModule,\n MatDialogClose,\n PasswordStrengthComponent,\n OtpInputComponent,\n SafeHtmlPipe,\n ],\n})\nexport class CredentialsDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getFieldErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n /** Emitted when the user submits the form. Carries the entered credentials. */\n readonly done = output<CredentialsDialogResult>();\n\n /** Emitted when the user requests a password-recovery flow. */\n readonly recoveringPassword = output<CredentialsDialogResult>();\n\n /** Dialog configuration with defaults applied at construction time. */\n protected readonly dialogData = signal<CredentialsDialogData>((() => {\n const raw = (inject(MAT_DIALOG_DATA) as CredentialsDialogData | null) ?? {};\n const data: CredentialsDialogData = {\n appearance: 'fill',\n title: 'Informazioni',\n okCaption: 'Salva',\n mode: 'email',\n ...raw,\n };\n data.appearance ??= 'fill';\n data.title ??= 'Informazioni';\n data.okCaption ??= 'Salva';\n data.mode ??= 'email';\n if (data.mode === 'otp' && !data.message) {\n data.message = '<div class=\"small\">Inserisci il codice di verifica di 6 cifre che ti abbiamo inviato ora per email<br><span class=\"x-small\">(controlla anche la posta indesiderata)</span>.</div>';\n }\n return data;\n })());\n\n /** Model backing the signal form, pre-filled with the user name from dialog data when provided. */\n private readonly model = signal<CredentialsDialogResult>({\n user: (inject(MAT_DIALOG_DATA) as CredentialsDialogData | null)?.user ?? '',\n password: '',\n rememberMe: false,\n code: '',\n });\n\n /**\n * Signal form for the credentials. Validators follow the active mode: the user\n * field is a required email in `email` mode and plain required in `user` mode,\n * the password is required outside `otp` mode, and the OTP code is a required\n * complete 6-digit code in `otp` mode.\n */\n protected readonly form = form(this.model, p => {\n required(p.user, { when: () => this.dialogData().mode !== 'otp' });\n notEmpty(p.user, { when: () => this.dialogData().mode !== 'otp' });\n email(p.user, { when: () => this.dialogData().mode === 'email' });\n required(p.password, { when: () => this.dialogData().mode !== 'otp' });\n notEmpty(p.password, { when: () => this.dialogData().mode !== 'otp' });\n required(p.code, { when: () => this.dialogData().mode === 'otp' });\n notEmpty(p.code, { when: () => this.dialogData().mode === 'otp' });\n otp(p.code);\n });\n\n /** Whether the password field is currently shown as plain text. */\n protected readonly showPassword = signal<boolean>(false);\n\n /**\n * Switches the input mode of the dialog at runtime (e.g. from login to OTP).\n * Intended to be called from outside via the dialog component reference.\n * @param mode - The new input mode (`'email'`, `'user'`, or `'otp'`).\n * @param message - Optional new message to display above the form.\n */\n public changeMode(mode: 'email' | 'user' | 'otp', message?: string): void {\n this.dialogData.update(d => ({\n ...d,\n mode,\n message: message ?? d.message,\n }));\n }\n\n /**\n * Emits the current form result and closes the dialog.\n */\n protected ok(): void {\n this.done.emit(this.model());\n }\n\n /**\n * Emits the current form result for the password-recovery flow and optionally\n * opens the recovery URL in a new tab.\n */\n protected recoverPassword(): void {\n this.recoveringPassword.emit(this.model());\n const url = this.dialogData().recoverPasswordUrl;\n if (url) {\n window.open(url, '_blank');\n }\n }\n}\n","<div class=\"dialog-info\">\n @if (form().invalid()) {\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\n } @else {\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\n }\n</div>\n<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<mat-dialog-content class=\"dialog-content\">\n @if (dialogData().message) {\n <div [innerHtml]=\"dialogData().message | safeHtml\" style=\"padding-bottom: 20px;\"></div>\n }\n <form [formRoot]=\"form\" (keyup.enter)=\"!form().invalid() ? ok() : undefined\" novalidate>\n @if(dialogData().mode !== 'otp') {\n @if (dialogData().mode === 'email') {\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\n <mat-label>Email</mat-label>\n <input type=\"email\" matInput [formField]=\"form.user\" [attr.aria-label]=\"'Email'\">\n @if (form.user().invalid()) {\n <mat-error>{{ getFieldErrorMessage(form.user().errors()) }}</mat-error>\n }\n </mat-form-field>\n } @else if (dialogData().mode === 'user') {\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\n <mat-label>Utente</mat-label>\n <input matInput [formField]=\"form.user\" [attr.aria-label]=\"'user'\">\n @if (form.user().invalid()) {\n <mat-error>{{ getFieldErrorMessage(form.user().errors()) }}</mat-error>\n }\n </mat-form-field>\n }\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\n <mat-label>La tua password abilitata</mat-label>\n <input matInput [type]=\"!showPassword() ? 'password' : 'text'\"\n [formField]=\"form.password\" [attr.aria-label]=\"'La tua password abilitata'\" autocomplete=\"on\">\n @if(form.password().value()) {\n <password-strength [password]=\"form.password().value()\"></password-strength>\n }\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\n </button>\n <mat-hint>Attento a maiuscole e minuscole</mat-hint>\n @if (form.password().invalid()) {\n <mat-error>{{ getFieldErrorMessage(form.password().errors()) }}</mat-error>\n }\n </mat-form-field>\n @if (dialogData().remember || dialogData().recoverPassword) {\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxFill style=\"margin-top: 20px;\">\n <div>\n @if (dialogData().remember) {\n <mat-checkbox fxFlexAlign=\"center\" [formField]=\"form.rememberMe\"> Ricordami</mat-checkbox>\n }\n </div>\n <div fxLayoutAlign=\"end\">\n @if (dialogData().recoverPassword) {\n <button fxFlexAlign=\"center\" mat-button (click)=\"recoverPassword()\" title=\"Recupero password\"\n >Non riesco ad accedere</button>\n }\n </div>\n </div>\n }\n } @else {\n <otp-input [formField]=\"form.code\"></otp-input>\n }\n </form>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n </div>\n</mat-dialog-actions>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n output,\n signal\n} from '@angular/core';\nimport { email, form, FormField, FormRoot, maxLength, minLength, required } from '@angular/forms/signals';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { equals, notEmpty, otp, password, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { PasswordStrengthComponent } from '../password-strength/password-strength.component';\nimport { ResetPasswordDialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\nimport { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';\nimport { OtpInputComponent } from '../otp/otp-input.component';\n\nexport type ResetPasswordDialogMode = 'admin' |'old' | 'otp' | 'forgot';\n\nexport interface ResetPasswordDialogData {\n mode: ResetPasswordDialogMode;\n userId?: number;\n userEmail?: string;\n appearance?: MatFormFieldAppearance;\n}\n\n@Component({\n templateUrl: './reset-password-dialog.component.html',\n styleUrl: './reset-password-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormField, FormRoot,\n FlexLayoutModule,\n MatFormFieldModule,\n MatInputModule,\n PasswordStrengthComponent,\n MatIconModule,\n MatDialogActions,\n MatButtonModule,\n MatDialogClose,\n OtpInputComponent\n ],\n})\nexport class ResetPasswordDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getFieldErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n /** Emitted when the user submits the new password. Carries the entered password data. */\n readonly done = output<ResetPasswordDialogResult>();\n\n private readonly dialogService = inject(DialogService);\n private readonly dialogRef = inject(MatDialogRef<ResetPasswordDialogComponent>);\n\n /** Dialog configuration with defaults applied at construction time. */\n protected readonly dialogData = signal<ResetPasswordDialogData>((() => {\n const raw = (inject(MAT_DIALOG_DATA) as ResetPasswordDialogData | null);\n return { mode: 'admin' as ResetPasswordDialogMode, appearance: 'fill' as MatFormFieldAppearance, ...raw };\n })());\n\n /** Model backing the signal form. */\n private readonly model = signal<ResetPasswordDialogResult>({\n userEmail: '',\n oldPassword: '',\n password: '',\n password2: '',\n code: '',\n });\n\n /**\n * Signal form for the password reset. Validators follow the active mode:\n * the email is required in `forgot` mode, the old password in `old` mode,\n * a complete 6-digit OTP code in `otp` mode; the new password is always\n * required, at least 10 characters and strong enough, and its confirmation\n * (required outside `admin` mode) must match it.\n */\n protected readonly form = form(this.model, p => {\n required(p.userEmail, { when: () => this.dialogData().mode === 'forgot' });\n notEmpty(p.userEmail, { when: () => this.dialogData().mode === 'forgot' });\n email(p.userEmail, { when: () => this.dialogData().mode === 'forgot' });\n required(p.oldPassword, { when: () => this.dialogData().mode === 'old' });\n notEmpty(p.oldPassword, { when: () => this.dialogData().mode === 'old' });\n maxLength(p.oldPassword, 30);\n required(p.code, { when: () => this.dialogData().mode === 'otp' });\n notEmpty(p.code, { when: () => this.dialogData().mode === 'otp' });\n otp(p.code);\n required(p.password);\n notEmpty(p.password);\n minLength(p.password, 10);\n maxLength(p.password, 30);\n password(p.password);\n required(p.password2, { when: () => this.dialogData().mode !== 'admin' });\n notEmpty(p.password2, { when: () => this.dialogData().mode !== 'admin' });\n minLength(p.password2, 10);\n maxLength(p.password2, 30);\n password(p.password2);\n equals(p.password2, p.password);\n });\n\n /** Whether the old-password field is currently shown as plain text. */\n protected readonly showOldPassword = signal<boolean>(false);\n\n /** Whether the new-password field is currently shown as plain text. */\n protected readonly showPassword = signal<boolean>(false);\n\n /** Whether the confirm-password field is currently shown as plain text. */\n protected readonly showPassword2 = signal<boolean>(false);\n\n constructor() {\n const data = this.dialogData();\n const requireUserId = data.mode !== 'forgot' && data.mode !== 'otp' && data.mode !== 'old';\n if (requireUserId && !data.userId) {\n this.dialogRef.close();\n this.dialogService.error('Utente non specificato.');\n return;\n } else if ((data.mode === 'forgot' || data.mode === 'otp' || data.mode === 'old') && !data.userEmail) {\n this.dialogRef.close();\n this.dialogService.error('Email utente non specificata.');\n return;\n }\n this.model.update(m => ({\n ...m,\n userEmail: data.userEmail ?? '',\n userId: data.userId,\n code: '',\n }));\n }\n\n /**\n * Emits the current form result to trigger the password-reset flow.\n */\n protected ok(): void {\n this.done.emit(this.model());\n }\n\n /**\n * Generates a random password and populates both password fields with it.\n */\n protected generatePassword(): void {\n const password = SystemUtils.generatePassword();\n this.model.update(m => ({ ...m, password, password2: password }));\n }\n}\n","<div class=\"dialog-info\">\r\n @if (form().invalid()) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title>Reimposta password</div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form [formRoot]=\"form\" novalidate >\r\n @if (dialogData().mode === 'forgot') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email che hai scelto quando ti sei registrato</mat-label>\r\n <input type=\"email\" matInput [formField]=\"form.userEmail\"\r\n [attr.aria-label]=\"'Email con cui ti sei registrato'\">\r\n @if (form.userEmail().invalid()) {\r\n <mat-error>{{ getFieldErrorMessage(form.userEmail().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else if (dialogData().mode === 'old') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Vecchia password</mat-label>\r\n <input [type]=\"!showOldPassword() ? 'password' : 'text'\" matInput autocomplete=\"on\"\r\n [formField]=\"form.oldPassword\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix\r\n (click)=\"showOldPassword.set(!showOldPassword())\">\r\n <mat-icon>{{showOldPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(form.oldPassword().value()) {\r\n <password-strength [password]=\"form.oldPassword().value()\"></password-strength>\r\n }\r\n @if (form.oldPassword().invalid()) {\r\n <mat-error>{{ getFieldErrorMessage(form.oldPassword().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else if (dialogData().mode === 'otp') {\r\n <div style=\"font-size: small;\">Inserisci il codice di verifica di 6 cifre che ti abbiamo inviato ora per\r\n email<br><span style=\"font-size:x-small\">(controlla anche la posta indesiderata)</span>.</div>\r\n <otp-input [formField]=\"form.code\"></otp-input>\r\n }\r\n <mat-form-field style=\"width: 100%;\" hintLabel=\"Minimo 10 car. con 1 simbolo e 1 maiuscola\"\r\n [appearance]=\"dialogData().appearance\">\r\n <mat-label>Nuova password</mat-label>\r\n <input [type]=\"!showPassword() ? 'password' : 'text'\" matInput [formField]=\"form.password\">\r\n @if(form.password().value()) {\r\n <password-strength [password]=\"form.password().value()\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix\r\n (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint align=\"end\">{{form.password().value()?.length || 0}}/30</mat-hint>\r\n @if (form.password().invalid()) {\r\n <mat-error>{{ getFieldErrorMessage(form.password().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field style=\"width: 100%;\" hintLabel=\"Minimo 10 car. con 1 simbolo e 1 maiuscola\"\r\n [appearance]=\"dialogData().appearance\">\r\n <mat-label>Conferma nuova password</mat-label>\r\n <input [type]=\"!showPassword2() ? 'password' : 'text'\" matInput [formField]=\"form.password2\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix\r\n (click)=\"showPassword2.set(!showPassword2())\">\r\n <mat-icon>{{showPassword2() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(form.password2().value()) {\r\n <password-strength [password]=\"form.password2().value()\"></password-strength>\r\n }\r\n <mat-hint align=\"end\">{{form.password2().value()?.length || 0}}/30</mat-hint>\r\n @if (form.password2().invalid()) {\r\n <mat-error>{{ getFieldErrorMessage(form.password2().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n @if (dialogData().mode === 'admin') {\r\n <button mat-stroked-button (click)=\"generatePassword()\">Genera</button>\r\n }\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">Salva</button>\r\n @if (dialogData().mode !== 'forgot') {\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n }\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { email, form, FormField, FormRoot, maxLength, required } from '@angular/forms/signals';\nimport { notEmpty, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FlexLayoutModule, RecoverPasswordDialogResult } from '@arsedizioni/ars-utils/ui';\n\nexport interface RecoverPasswordDialogData {\n appearance?: MatFormFieldAppearance;\n}\n\n@Component({\n templateUrl: './recover-password-dialog.component.html',\n styleUrl: './recover-password-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormField, FormRoot,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatDialogActions,\n FlexLayoutModule,\n MatDialogClose,\n ],\n})\nexport class RecoverPasswordDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getFieldErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n\n /** Emitted when the user submits the recovery request. Carries the entered email and recaptcha state. */\n readonly done = output<RecoverPasswordDialogResult>();\n\n /** Dialog configuration with defaults applied at construction time. */\n protected readonly dialogData = signal<RecoverPasswordDialogData>({\n appearance: 'fill',\n ...((inject(MAT_DIALOG_DATA) as RecoverPasswordDialogData | null) ?? {}),\n });\n\n /** Model backing the signal form. */\n private readonly model = signal<RecoverPasswordDialogResult>({\n email: '',\n recaptcha: false,\n });\n\n /**\n * Signal form for the recovery request: the email is required and must be valid.\n */\n protected readonly form = form(this.model, p => {\n required(p.email);\n notEmpty(p.email);\n email(p.email);\n maxLength(p.email, 200);\n });\n\n /**\n * Emits the current form result to trigger the password-recovery flow.\n */\n protected ok(): void {\n this.done.emit(this.model());\n }\n}\n","<div class=\"dialog-info\">\n @if (form().invalid()) {\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\n } @else {\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\n }\n</div>\n<div mat-dialog-title>Per quale ragione non sei in grado di effettuare l'accesso?</div>\n<mat-dialog-content class=\"dialog-content\">\n\n <b>1. Ho dimenticato la password</b>\n <p>\n Puoi recuperarla facilmente inserendo l'email a cui la password è collegata. Non è possibile recuperare password\n aziendali (non collegate ad un email).</p>\n <form [formRoot]=\"form\" (keyup.enter)=\"!form().invalid() ? ok() : undefined\" novalidate>\n\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData().appearance\">\n <mat-label>Email con cui ti sei registrato</mat-label>\n <input type=\"email\" matInput [formField]=\"form.email\" />\n @if (form.email().invalid()) {\n <mat-error>{{ getFieldErrorMessage(form.email().errors()) }}</mat-error>\n }\n </mat-form-field>\n\n <div style=\"margin-top:20px; margin-bottom:20px;\">\n <button type=\"button\" mat-flat-button (click)=\"ok()\" [disabled]=\"form().invalid()\"\n aria-label=\"Recupera password\">Recupera password</button>\n </div>\n </form>\n <p></p>\n <b>2. Il sistema mi dice che la password non è corretta.</b>\n <p>\n E' molto probabile che ci sia stato un difetto di digitazione. Per favore controlla bene che non vi siano spazi non\n richiesti e che la password rispetti perfettamente le maiuscole e minuscole. Nel caso in cui la digitazione fosse\n corretta, verifica che la data del tuo abbonamento non sia scaduta.\n </p>\n <p></p>\n <b>3. Il sistema mi dice che non può accettare connessioni dal mio indirizzo IP</b>\n <p>\n Il tuo abbonamento è stato vincolato ad un indirizzo IP (indirizzo dal quale ti colleghi). Capita sovente che\n questi indirizzi siano cambiati da parte del reparto IT per questioni di sicurezza informatica.\n Per risolvere il problema, contattate il reparto IT e fatevi dire qual'è il nuovo indirizzo IP e comunicatelo ad\n ARS Edizioni Informatiche.\n </p>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\n </div>\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, PromptDialogData, PromptDialogType, PromptOtpDialogResult } from '@arsedizioni/ars-utils/ui';\nimport { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';\nimport { OtpInputComponent } from '../otp/otp-input.component';\nimport { form, FormField, FormRoot, required } from '@angular/forms/signals';\nimport { notEmpty } from '@arsedizioni/ars-utils/core.validators';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\n\n@Component({\n templateUrl: './prompt-otp-dialog.component.html',\n styleUrl: './prompt-otp-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormField, FormRoot, FlexLayoutModule, MatButtonModule, MatIconModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe, OtpInputComponent]\n})\nexport class PromptOtpDialogComponent {\n readonly done = output<PromptOtpDialogResult>();\n private readonly dialogService = inject(DialogService);\n protected readonly dialogData = signal<PromptDialogData>((() => {\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Conferma la tua identità',\n type: data.type ?? PromptDialogType.Default,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n\n /** Model backing the signal form. `value` holds the 6-digit OTP code. */\n private readonly model = signal<{ value: string }>({ value: '' });\n\n /**\n * Signal form for the OTP code. The code is always required here; the\n * \"complete 6 digits\" rule comes from the OtpInputComponent validator,\n * honoured through the ControlValueAccessor interop.\n */\n protected readonly form = form(this.model, p => {\n required(p.value);\n notEmpty(p.value);\n });\n\n /**\n * Validates the form and emits the OTP result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.form().invalid()) {\n this.form().markAsTouched();\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n this.done.emit({ value: this.form.value().value() });\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n @if (dialogData().description) {\r\n <div [innerHtml]=\"dialogData().description | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <otp-input [formField]=\"form.value\"></otp-input>\r\n </div>\r\n <br>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.dialogs.auth\n */\nexport * from './otp/otp-input.component';\nexport * from './password-strength/password-strength.component';\nexport * from './credentials/credentials-dialog.component';\nexport * from './reset-password/reset-password-dialog.component';\nexport * from './recover-password/recover-password-dialog.component';\nexport * from './prompt-otp/prompt-otp-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i5","i1","i2","i3","i4"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-ui.dialogs.auth.mjs","sources":["../../../projects/ars-utils/ui.dialogs.auth/otp/otp-input.component.ts","../../../projects/ars-utils/ui.dialogs.auth/otp/otp-input.component.html","../../../projects/ars-utils/ui.dialogs.auth/password-strength/password-strength.component.ts","../../../projects/ars-utils/ui.dialogs.auth/password-strength/password-strength.component.html","../../../projects/ars-utils/ui.dialogs.auth/credentials/credentials-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.auth/credentials/credentials-dialog.component.html","../../../projects/ars-utils/ui.dialogs.auth/reset-password/reset-password-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.auth/reset-password/reset-password-dialog.component.html","../../../projects/ars-utils/ui.dialogs.auth/recover-password/recover-password-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.auth/recover-password/recover-password-dialog.component.html","../../../projects/ars-utils/ui.dialogs.auth/prompt-otp/prompt-otp-dialog.component.ts","../../../projects/ars-utils/ui.dialogs.auth/prompt-otp/prompt-otp-dialog.component.html","../../../projects/ars-utils/ui.dialogs.auth/public_api.ts","../../../projects/ars-utils/ui.dialogs.auth/arsedizioni-ars-utils-ui.dialogs.auth.ts"],"sourcesContent":["import { Component, ElementRef, computed, forwardRef, signal, viewChildren, ChangeDetectionStrategy } from '@angular/core';\nimport { AbstractControl, ControlValueAccessor, NG_VALIDATORS, NG_VALUE_ACCESSOR, ValidationErrors, Validator } from '@angular/forms';\n\n\n@Component({\n selector: 'otp-input',\n standalone: true,\n templateUrl: './otp-input.component.html',\n styleUrl: './otp-input.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => OtpInputComponent),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => OtpInputComponent),\n multi: true,\n },\n ],\n})\nexport class OtpInputComponent implements ControlValueAccessor, Validator {\n /** Signal-based query for all individual OTP digit input elements. */\n readonly otpFields = viewChildren<ElementRef<HTMLInputElement>>('otpField');\n\n /** `true` when every digit slot contains a valid single decimal digit. */\n readonly isValid = computed(() => this.otpArray().every(d => /^\\d$/.test(d)));\n\n /** Array of per-digit values backing the OTP display. */\n readonly otpArray = signal<string[]>(Array(6).fill(''));\n\n /** Whether the control is currently disabled. */\n readonly disabled = signal<boolean>(false);\n\n private onChange: (val: string) => void = () => {};\n private onTouched: () => void = () => {};\n\n // ── ControlValueAccessor ───────────────────────────────────────────────────\n\n /**\n * Writes a new value into the control from the model.\n * @param value - A string of up to 6 digits to pre-fill the OTP fields.\n */\n writeValue(value: string): void {\n const arr = Array(6).fill('');\n if (value) {\n value.split('').forEach((c, i) => {\n if (i < 6) arr[i] = c;\n });\n }\n this.otpArray.set(arr);\n }\n\n /**\n * Registers the callback invoked when the control value changes.\n * @param fn - The callback function.\n */\n registerOnChange(fn: (val: string) => void): void {\n this.onChange = fn;\n }\n\n /**\n * Registers the callback invoked when the control is touched.\n * @param fn - The callback function.\n */\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n /**\n * Enables or disables the control.\n * @param isDisabled - `true` to disable all OTP inputs.\n */\n setDisabledState(isDisabled: boolean): void {\n this.disabled.set(isDisabled);\n }\n\n // ── Validator ──────────────────────────────────────────────────────────────\n\n /**\n * Validates the OTP value: an empty code is left to `required`, while a\n * PARTIAL code (e.g. \"12\") is reported as invalid. Without this, the joined\n * value \"12\" was a non-empty string and `required` let the form submit\n * with an incomplete OTP.\n * @param control - The form control bound to this component.\n * @returns `null` when empty or complete (6 digits), `{ otp: true }` otherwise.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const value: string = control.value ?? '';\n if (value.length === 0) return null; // let `required` handle emptiness\n return /^\\d{6}$/.test(value) ? null : { otp: true };\n }\n\n /**\n * Marks the control as touched when an OTP field loses focus.\n */\n onBlur(): void {\n this.onTouched();\n }\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n\n /**\n * Blocks non-digit characters before they are inserted.\n * @param event - The `beforeinput` event from the input element.\n */\n onBeforeInput(event: InputEvent): void {\n if (event.data && !/^\\d$/.test(event.data)) {\n event.preventDefault();\n }\n }\n\n/**\n * Handles digit input, sanitizes it, syncs the DOM, updates the OTP array, and advances focus.\n * @param event - The `input` event from the digit field.\n * @param index - Zero-based index of the field that received input.\n */\n onInput(event: Event, index: number): void {\n const input = event.target as HTMLInputElement;\n const val = input.value.replace(/\\D/g, '').slice(-1);\n\n // Force-sync the DOM: [value] won't rewrite it when the model value is unchanged.\n input.value = val;\n\n const arr = [...this.otpArray()];\n arr[index] = val;\n this.otpArray.set(arr);\n\n this.updateModel();\n\n if (val && index < 5) {\n this.focusField(index + 1);\n }\n }\n\n /**\n * Handles the Backspace key by moving focus to the previous field when the current one is empty.\n * @param event - The `keydown` event.\n * @param index - Zero-based index of the field that received the keydown.\n */\n onKeyDown(event: KeyboardEvent, index: number): void {\n if (event.key === 'Backspace' && !this.otpArray()[index] && index > 0) {\n this.focusField(index - 1);\n }\n }\n\n /**\n * Handles paste events by extracting up to 6 digits and distributing them across the OTP fields.\n * @param event - The `ClipboardEvent` from the paste action.\n */\n onPaste(event: ClipboardEvent): void {\n event.preventDefault();\n const pasted = event.clipboardData?.getData('text') ?? '';\n const digits = pasted.replace(/\\D/g, '').slice(0, 6).split('');\n\n if (digits.length > 0) {\n const arr = Array(6).fill('');\n digits.forEach((d, i) => (arr[i] = d));\n this.otpArray.set(arr);\n this.updateModel();\n this.focusField(Math.min(digits.length, 5));\n }\n }\n\n\n \n // ── Public API ─────────────────────────────────────────────────────────────\n\n /**\n * Clears every digit field, propagates the empty value to the form model and\n * moves focus back to the first field. Does not mark the control as touched,\n * so no validation error is shown right after the reset.\n */\n clear(): void {\n this.otpArray.set(Array(6).fill(''));\n // Force-sync the DOM: [value] won't rewrite fields whose bound value is unchanged.\n this.otpFields().forEach(f => (f.nativeElement.value = ''));\n this.onChange('');\n this.focusField(0);\n }\n\n /**\n * Moves focus to the OTP field at the given index.\n * @param index - Zero-based index of the target field.\n */\n private focusField(index: number): void {\n const field = this.otpFields()[index];\n field?.nativeElement.focus();\n field?.nativeElement.select();\n }\n\n /**\n * Notifies the form model of the current OTP value and marks the control as touched.\n */\n private updateModel(): void {\n const code = this.otpArray().join('');\n this.onChange(code);\n this.onTouched();\n }\n}\n","<div class=\"otp-container\">\n @for (digit of otpArray(); track $index) {\n <input\n #otpField\n type=\"text\"\n maxlength=\"1\"\n inputmode=\"numeric\"\n pattern=\"[0-9]*\"\n autocomplete=\"one-time-code\"\n class=\"otp-box\"\n [value]=\"digit\"\n (beforeinput)=\"onBeforeInput($event)\"\n (input)=\"onInput($event, $index)\"\n (keydown)=\"onKeyDown($event, $index)\"\n (blur)=\"onBlur()\"\n (paste)=\"onPaste($event)\"\n [disabled]=\"disabled()\"\n required\n />\n }\n</div>\n\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { PasswordStrength, SystemUtils } from '@arsedizioni/ars-utils/core';\n\nconst DEFAULT_STRENGTH: PasswordStrength = { score: 0, label: '', color: '', suggestions: [], isValid: false };\n\n/**\n * Displays a password-strength indicator for the provided password string.\n * Uses `SystemUtils.calculatePasswordStrength` to derive the score and label.\n */\n@Component({\n selector: 'password-strength',\n templateUrl: './password-strength.component.html',\n styleUrl: './password-strength.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatTooltipModule]\n})\nexport class PasswordStrengthComponent {\n /** The password to evaluate. An empty string renders the default (score 0) state. */\n readonly password = input<string>('');\n\n /**\n * Computed strength result for the current password.\n * Falls back to `DEFAULT_STRENGTH` when the password is empty.\n */\n protected readonly strength = computed<PasswordStrength>(() => {\n const pwd = this.password();\n return pwd ? SystemUtils.calculatePasswordStrength(pwd) : DEFAULT_STRENGTH;\n });\n\n /**\n * CSS class applied to the label element based on the numeric score (1–6 bands).\n * Scores ≤ 2 → `'score-2'`, ≤ 3 → `'score-3'`, etc.\n */\n protected readonly scoreClass = computed<string>(() => {\n const score = this.strength().score;\n if (score <= 2) return 'score-2';\n if (score <= 3) return 'score-3';\n if (score <= 4) return 'score-4';\n if (score <= 5) return 'score-5';\n return 'score-6';\n });\n}\n","<div class=\"wide x-small bold\" style=\"white-space: nowrap; padding-top:4px\" [matTooltip]=\"strength().suggestions?.join('\\n ')\">\r\n <span [class]=\"scoreClass()\">{{strength().label}}</span>\r\n</div>","import { Component, inject, output, signal, ChangeDetectionStrategy } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { CredentialsDialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatButtonModule } from '@angular/material/button';\n\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { email, form, FormField, FormRoot, required } from '@angular/forms/signals';\nimport { notEmpty, otp, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { PasswordStrengthComponent } from '../password-strength/password-strength.component';\nimport { MatIconModule } from '@angular/material/icon';\nimport { OtpInputComponent } from '../otp/otp-input.component';\n\nexport interface CredentialsDialogData {\n title?: string;\n message?: string;\n remember?: boolean;\n recoverPassword?: boolean;\n recoverPasswordUrl?: string;\n user?: string;\n okCaption?: string;\n mode?: 'email' | 'user' | 'otp';\n appearance?: MatFormFieldAppearance;\n}\n\n@Component({\n templateUrl: './credentials-dialog.component.html',\n styleUrl: './credentials-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormField, FormRoot,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatCheckboxModule,\n MatDialogActions,\n FlexLayoutModule,\n MatButtonModule,\n MatDialogClose,\n PasswordStrengthComponent,\n OtpInputComponent,\n SafeHtmlPipe,\n ],\n})\nexport class CredentialsDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n /** Emitted when the user submits the form. Carries the entered credentials. */\n readonly done = output<CredentialsDialogResult>();\n\n /** Emitted when the user requests a password-recovery flow. */\n readonly recoveringPassword = output<CredentialsDialogResult>();\n\n /** Dialog configuration with defaults applied at construction time. */\n protected readonly dialogData = signal<CredentialsDialogData>((() => {\n const raw = (inject(MAT_DIALOG_DATA) as CredentialsDialogData | null) ?? {};\n const data: CredentialsDialogData = {\n appearance: 'fill',\n title: 'Informazioni',\n okCaption: 'Salva',\n mode: 'email',\n ...raw,\n };\n data.appearance ??= 'fill';\n data.title ??= 'Informazioni';\n data.okCaption ??= 'Salva';\n data.mode ??= 'email';\n if (data.mode === 'otp' && !data.message) {\n data.message = '<div class=\"small\">Inserisci il codice di verifica di 6 cifre che ti abbiamo inviato ora per email<br><span class=\"x-small\">(controlla anche la posta indesiderata)</span>.</div>';\n }\n return data;\n })());\n\n /** Model backing the signal form, pre-filled with the user name from dialog data when provided. */\n private readonly model = signal<CredentialsDialogResult>({\n user: (inject(MAT_DIALOG_DATA) as CredentialsDialogData | null)?.user ?? '',\n password: '',\n rememberMe: false,\n code: '',\n });\n\n /**\n * Signal form for the credentials. Validators follow the active mode: the user\n * field is a required email in `email` mode and plain required in `user` mode,\n * the password is required outside `otp` mode, and the OTP code is a required\n * complete 6-digit code in `otp` mode.\n */\n protected readonly form = form(this.model, p => {\n required(p.user, { when: () => this.dialogData().mode !== 'otp' });\n notEmpty(p.user, { when: () => this.dialogData().mode !== 'otp' });\n email(p.user, { when: () => this.dialogData().mode === 'email' });\n required(p.password, { when: () => this.dialogData().mode !== 'otp' });\n notEmpty(p.password, { when: () => this.dialogData().mode !== 'otp' });\n required(p.code, { when: () => this.dialogData().mode === 'otp' });\n notEmpty(p.code, { when: () => this.dialogData().mode === 'otp' });\n otp(p.code);\n });\n\n /** Whether the password field is currently shown as plain text. */\n protected readonly showPassword = signal<boolean>(false);\n\n /**\n * Switches the input mode of the dialog at runtime (e.g. from login to OTP).\n * Intended to be called from outside via the dialog component reference.\n * @param mode - The new input mode (`'email'`, `'user'`, or `'otp'`).\n * @param message - Optional new message to display above the form.\n */\n public changeMode(mode: 'email' | 'user' | 'otp', message?: string): void {\n this.dialogData.update(d => ({\n ...d,\n mode,\n message: message ?? d.message,\n }));\n }\n\n /**\n * Emits the current form result and closes the dialog.\n */\n protected ok(): void {\n this.done.emit(this.model());\n }\n\n /**\n * Emits the current form result for the password-recovery flow and optionally\n * opens the recovery URL in a new tab.\n */\n protected recoverPassword(): void {\n this.recoveringPassword.emit(this.model());\n const url = this.dialogData().recoverPasswordUrl;\n if (url) {\n window.open(url, '_blank');\n }\n }\n}\n","<div class=\"dialog-info\">\n @if (form().invalid()) {\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\n } @else {\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\n }\n</div>\n<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n<mat-dialog-content class=\"dialog-content\">\n @if (dialogData().message) {\n <div [innerHtml]=\"dialogData().message | safeHtml\" style=\"padding-bottom: 20px;\"></div>\n }\n <form [formRoot]=\"form\" (keyup.enter)=\"!form().invalid() ? ok() : undefined\" novalidate>\n @if(dialogData().mode !== 'otp') {\n @if (dialogData().mode === 'email') {\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\n <mat-label>Email</mat-label>\n <input type=\"email\" matInput [formField]=\"form.user\" [attr.aria-label]=\"'Email'\">\n @if (form.user().invalid()) {\n <mat-error>{{ getErrorMessage(form.user().errors()) }}</mat-error>\n }\n </mat-form-field>\n } @else if (dialogData().mode === 'user') {\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\n <mat-label>Utente</mat-label>\n <input matInput [formField]=\"form.user\" [attr.aria-label]=\"'user'\">\n @if (form.user().invalid()) {\n <mat-error>{{ getErrorMessage(form.user().errors()) }}</mat-error>\n }\n </mat-form-field>\n }\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\n <mat-label>La tua password abilitata</mat-label>\n <input matInput [type]=\"!showPassword() ? 'password' : 'text'\"\n [formField]=\"form.password\" [attr.aria-label]=\"'La tua password abilitata'\" autocomplete=\"on\">\n @if(form.password().value()) {\n <password-strength [password]=\"form.password().value()\"></password-strength>\n }\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\n </button>\n <mat-hint>Attento a maiuscole e minuscole</mat-hint>\n @if (form.password().invalid()) {\n <mat-error>{{ getErrorMessage(form.password().errors()) }}</mat-error>\n }\n </mat-form-field>\n @if (dialogData().remember || dialogData().recoverPassword) {\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxFill style=\"margin-top: 20px;\">\n <div>\n @if (dialogData().remember) {\n <mat-checkbox fxFlexAlign=\"center\" [formField]=\"form.rememberMe\"> Ricordami</mat-checkbox>\n }\n </div>\n <div fxLayoutAlign=\"end\">\n @if (dialogData().recoverPassword) {\n <button fxFlexAlign=\"center\" mat-button (click)=\"recoverPassword()\" title=\"Recupero password\"\n >Non riesco ad accedere</button>\n }\n </div>\n </div>\n }\n } @else {\n <otp-input [formField]=\"form.code\"></otp-input>\n }\n </form>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n </div>\n</mat-dialog-actions>\n","import {\n ChangeDetectionStrategy,\n Component,\n inject,\n output,\n signal\n} from '@angular/core';\nimport { email, form, FormField, FormRoot, maxLength, minLength, required } from '@angular/forms/signals';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { equals, notEmpty, otp, password, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { PasswordStrengthComponent } from '../password-strength/password-strength.component';\nimport { ResetPasswordDialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { OtpInputComponent } from '../otp/otp-input.component';\n\nexport type ResetPasswordDialogMode = 'admin' |'old' | 'otp' | 'forgot';\n\nexport interface ResetPasswordDialogData {\n mode: ResetPasswordDialogMode;\n userId?: number;\n userEmail?: string;\n appearance?: MatFormFieldAppearance;\n}\n\n@Component({\n templateUrl: './reset-password-dialog.component.html',\n styleUrl: './reset-password-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormField, FormRoot,\n FlexLayoutModule,\n MatFormFieldModule,\n MatInputModule,\n PasswordStrengthComponent,\n MatIconModule,\n MatDialogActions,\n MatButtonModule,\n MatDialogClose,\n OtpInputComponent\n ],\n})\nexport class ResetPasswordDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n /** Emitted when the user submits the new password. Carries the entered password data. */\n readonly done = output<ResetPasswordDialogResult>();\n\n private readonly dialogService = inject(ShellService);\n private readonly dialogRef = inject(MatDialogRef<ResetPasswordDialogComponent>);\n\n /** Dialog configuration with defaults applied at construction time. */\n protected readonly dialogData = signal<ResetPasswordDialogData>((() => {\n const raw = (inject(MAT_DIALOG_DATA) as ResetPasswordDialogData | null);\n return { mode: 'admin' as ResetPasswordDialogMode, appearance: 'fill' as MatFormFieldAppearance, ...raw };\n })());\n\n /** Model backing the signal form. */\n private readonly model = signal<ResetPasswordDialogResult>({\n userEmail: '',\n oldPassword: '',\n password: '',\n password2: '',\n code: '',\n });\n\n /**\n * Signal form for the password reset. Validators follow the active mode:\n * the email is required in `forgot` mode, the old password in `old` mode,\n * a complete 6-digit OTP code in `otp` mode; the new password is always\n * required, at least 10 characters and strong enough, and its confirmation\n * (required outside `admin` mode) must match it.\n */\n protected readonly form = form(this.model, p => {\n required(p.userEmail, { when: () => this.dialogData().mode === 'forgot' });\n notEmpty(p.userEmail, { when: () => this.dialogData().mode === 'forgot' });\n email(p.userEmail, { when: () => this.dialogData().mode === 'forgot' });\n required(p.oldPassword, { when: () => this.dialogData().mode === 'old' });\n notEmpty(p.oldPassword, { when: () => this.dialogData().mode === 'old' });\n maxLength(p.oldPassword, 30);\n required(p.code, { when: () => this.dialogData().mode === 'otp' });\n notEmpty(p.code, { when: () => this.dialogData().mode === 'otp' });\n otp(p.code);\n required(p.password);\n notEmpty(p.password);\n minLength(p.password, 10);\n maxLength(p.password, 30);\n password(p.password);\n required(p.password2, { when: () => this.dialogData().mode !== 'admin' });\n notEmpty(p.password2, { when: () => this.dialogData().mode !== 'admin' });\n minLength(p.password2, 10);\n maxLength(p.password2, 30);\n password(p.password2);\n equals(p.password2, p.password);\n });\n\n /** Whether the old-password field is currently shown as plain text. */\n protected readonly showOldPassword = signal<boolean>(false);\n\n /** Whether the new-password field is currently shown as plain text. */\n protected readonly showPassword = signal<boolean>(false);\n\n /** Whether the confirm-password field is currently shown as plain text. */\n protected readonly showPassword2 = signal<boolean>(false);\n\n constructor() {\n const data = this.dialogData();\n const requireUserId = data.mode !== 'forgot' && data.mode !== 'otp' && data.mode !== 'old';\n if (requireUserId && !data.userId) {\n this.dialogRef.close();\n this.dialogService.error('Utente non specificato.');\n return;\n } else if ((data.mode === 'forgot' || data.mode === 'otp' || data.mode === 'old') && !data.userEmail) {\n this.dialogRef.close();\n this.dialogService.error('Email utente non specificata.');\n return;\n }\n this.model.update(m => ({\n ...m,\n userEmail: data.userEmail ?? '',\n userId: data.userId,\n code: '',\n }));\n }\n\n /**\n * Emits the current form result to trigger the password-reset flow.\n */\n protected ok(): void {\n this.done.emit(this.model());\n }\n\n /**\n * Generates a random password and populates both password fields with it.\n */\n protected generatePassword(): void {\n const password = SystemUtils.generatePassword();\n this.model.update(m => ({ ...m, password, password2: password }));\n }\n}\n","<div class=\"dialog-info\">\r\n @if (form().invalid()) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title>Reimposta password</div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form [formRoot]=\"form\" novalidate >\r\n @if (dialogData().mode === 'forgot') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email che hai scelto quando ti sei registrato</mat-label>\r\n <input type=\"email\" matInput [formField]=\"form.userEmail\"\r\n [attr.aria-label]=\"'Email con cui ti sei registrato'\">\r\n @if (form.userEmail().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.userEmail().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else if (dialogData().mode === 'old') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Vecchia password</mat-label>\r\n <input [type]=\"!showOldPassword() ? 'password' : 'text'\" matInput autocomplete=\"on\"\r\n [formField]=\"form.oldPassword\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix\r\n (click)=\"showOldPassword.set(!showOldPassword())\">\r\n <mat-icon>{{showOldPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(form.oldPassword().value()) {\r\n <password-strength [password]=\"form.oldPassword().value()\"></password-strength>\r\n }\r\n @if (form.oldPassword().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.oldPassword().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else if (dialogData().mode === 'otp') {\r\n <div style=\"font-size: small;\">Inserisci il codice di verifica di 6 cifre che ti abbiamo inviato ora per\r\n email<br><span style=\"font-size:x-small\">(controlla anche la posta indesiderata)</span>.</div>\r\n <otp-input [formField]=\"form.code\"></otp-input>\r\n }\r\n <mat-form-field style=\"width: 100%;\" hintLabel=\"Minimo 10 car. con 1 simbolo e 1 maiuscola\"\r\n [appearance]=\"dialogData().appearance\">\r\n <mat-label>Nuova password</mat-label>\r\n <input [type]=\"!showPassword() ? 'password' : 'text'\" matInput [formField]=\"form.password\">\r\n @if(form.password().value()) {\r\n <password-strength [password]=\"form.password().value()\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix\r\n (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint align=\"end\">{{form.password().value()?.length || 0}}/30</mat-hint>\r\n @if (form.password().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.password().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field style=\"width: 100%;\" hintLabel=\"Minimo 10 car. con 1 simbolo e 1 maiuscola\"\r\n [appearance]=\"dialogData().appearance\">\r\n <mat-label>Conferma nuova password</mat-label>\r\n <input [type]=\"!showPassword2() ? 'password' : 'text'\" matInput [formField]=\"form.password2\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix\r\n (click)=\"showPassword2.set(!showPassword2())\">\r\n <mat-icon>{{showPassword2() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(form.password2().value()) {\r\n <password-strength [password]=\"form.password2().value()\"></password-strength>\r\n }\r\n <mat-hint align=\"end\">{{form.password2().value()?.length || 0}}/30</mat-hint>\r\n @if (form.password2().invalid()) {\r\n <mat-error>{{ getErrorMessage(form.password2().errors()) }}</mat-error>\r\n }\r\n </mat-form-field>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"30\">\r\n @if (dialogData().mode === 'admin') {\r\n <button mat-stroked-button (click)=\"generatePassword()\">Genera</button>\r\n }\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">Salva</button>\r\n @if (dialogData().mode !== 'forgot') {\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n }\r\n </div>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { email, form, FormField, FormRoot, maxLength, required } from '@angular/forms/signals';\nimport { notEmpty, SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { FlexLayoutModule, RecoverPasswordDialogResult } from '@arsedizioni/ars-utils/ui';\n\nexport interface RecoverPasswordDialogData {\n appearance?: MatFormFieldAppearance;\n}\n\n@Component({\n templateUrl: './recover-password-dialog.component.html',\n styleUrl: './recover-password-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormField, FormRoot,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n MatDialogActions,\n FlexLayoutModule,\n MatDialogClose,\n ],\n})\nexport class RecoverPasswordDialogComponent {\n /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n\n /** Emitted when the user submits the recovery request. Carries the entered email and recaptcha state. */\n readonly done = output<RecoverPasswordDialogResult>();\n\n /** Dialog configuration with defaults applied at construction time. */\n protected readonly dialogData = signal<RecoverPasswordDialogData>({\n appearance: 'fill',\n ...((inject(MAT_DIALOG_DATA) as RecoverPasswordDialogData | null) ?? {}),\n });\n\n /** Model backing the signal form. */\n private readonly model = signal<RecoverPasswordDialogResult>({\n email: '',\n recaptcha: false,\n });\n\n /**\n * Signal form for the recovery request: the email is required and must be valid.\n */\n protected readonly form = form(this.model, p => {\n required(p.email);\n notEmpty(p.email);\n email(p.email);\n maxLength(p.email, 200);\n });\n\n /**\n * Emits the current form result to trigger the password-recovery flow.\n */\n protected ok(): void {\n this.done.emit(this.model());\n }\n}\n","<div class=\"dialog-info\">\n @if (form().invalid()) {\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\n } @else {\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\n }\n</div>\n<div mat-dialog-title>Per quale ragione non sei in grado di effettuare l'accesso?</div>\n<mat-dialog-content class=\"dialog-content\">\n\n <b>1. Ho dimenticato la password</b>\n <p>\n Puoi recuperarla facilmente inserendo l'email a cui la password è collegata. Non è possibile recuperare password\n aziendali (non collegate ad un email).</p>\n <form [formRoot]=\"form\" (keyup.enter)=\"!form().invalid() ? ok() : undefined\" novalidate>\n\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData().appearance\">\n <mat-label>Email con cui ti sei registrato</mat-label>\n <input type=\"email\" matInput [formField]=\"form.email\" />\n @if (form.email().invalid()) {\n <mat-error>{{ getErrorMessage(form.email().errors()) }}</mat-error>\n }\n </mat-form-field>\n\n <div style=\"margin-top:20px; margin-bottom:20px;\">\n <button type=\"button\" mat-flat-button (click)=\"ok()\" [disabled]=\"form().invalid()\"\n aria-label=\"Recupera password\">Recupera password</button>\n </div>\n </form>\n <p></p>\n <b>2. Il sistema mi dice che la password non è corretta.</b>\n <p>\n E' molto probabile che ci sia stato un difetto di digitazione. Per favore controlla bene che non vi siano spazi non\n richiesti e che la password rispetti perfettamente le maiuscole e minuscole. Nel caso in cui la digitazione fosse\n corretta, verifica che la data del tuo abbonamento non sia scaduta.\n </p>\n <p></p>\n <b>3. Il sistema mi dice che non può accettare connessioni dal mio indirizzo IP</b>\n <p>\n Il tuo abbonamento è stato vincolato ad un indirizzo IP (indirizzo dal quale ti colleghi). Capita sovente che\n questi indirizzi siano cambiati da parte del reparto IT per questioni di sicurezza informatica.\n Per risolvere il problema, contattate il reparto IT e fatevi dire qual'è il nuovo indirizzo IP e comunicatelo ad\n ARS Edizioni Informatiche.\n </p>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\n </div>\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, PromptDialogData, PromptDialogType, PromptOtpDialogResult } from '@arsedizioni/ars-utils/ui';\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { OtpInputComponent } from '../otp/otp-input.component';\nimport { form, FormField, FormRoot, required } from '@angular/forms/signals';\nimport { notEmpty } from '@arsedizioni/ars-utils/core.validators';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\n\n@Component({\n templateUrl: './prompt-otp-dialog.component.html',\n styleUrl: './prompt-otp-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormField, FormRoot, FlexLayoutModule, MatButtonModule, MatIconModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe, OtpInputComponent]\n})\nexport class PromptOtpDialogComponent {\n readonly done = output<PromptOtpDialogResult>();\n private readonly dialogService = inject(ShellService);\n protected readonly dialogData = signal<PromptDialogData>((() => {\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Conferma la tua identità',\n type: data.type ?? PromptDialogType.Default,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n\n /** Model backing the signal form. `value` holds the 6-digit OTP code. */\n private readonly model = signal<{ value: string }>({ value: '' });\n\n /**\n * Signal form for the OTP code. The code is always required here; the\n * \"complete 6 digits\" rule comes from the OtpInputComponent validator,\n * honoured through the ControlValueAccessor interop.\n */\n protected readonly form = form(this.model, p => {\n required(p.value);\n notEmpty(p.value);\n });\n\n /**\n * Validates the form and emits the OTP result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.form().invalid()) {\n this.form().markAsTouched();\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n this.done.emit({ value: this.form.value().value() });\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n @if (dialogData().description) {\r\n <div [innerHtml]=\"dialogData().description | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form [formRoot]=\"form\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <otp-input [formField]=\"form.value\"></otp-input>\r\n </div>\r\n <br>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"form().invalid()\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.dialogs.auth\n */\nexport * from './otp/otp-input.component';\nexport * from './password-strength/password-strength.component';\nexport * from './credentials/credentials-dialog.component';\nexport * from './reset-password/reset-password-dialog.component';\nexport * from './recover-password/recover-password-dialog.component';\nexport * from './prompt-otp/prompt-otp-dialog.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i5","i1","i2","i3","i4"],"mappings":"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"}
|