@arsedizioni/ars-utils 22.0.2 → 22.0.4

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.
Files changed (28) hide show
  1. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +4 -7
  2. package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
  3. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +19 -16
  4. package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
  5. package/fesm2022/arsedizioni-ars-utils-core.mjs +13 -25
  6. package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
  7. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +4 -7
  8. package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
  9. package/fesm2022/arsedizioni-ars-utils-help.mjs +4 -7
  10. package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
  11. package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
  12. package/fesm2022/arsedizioni-ars-utils-ui.mjs +3650 -37
  13. package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
  14. package/fesm2022/arsedizioni-ars-utils.mjs +0 -2
  15. package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
  16. package/package.json +1 -9
  17. package/types/arsedizioni-ars-utils-clipper.common.d.ts +1 -3
  18. package/types/arsedizioni-ars-utils-clipper.ui.d.ts +6 -6
  19. package/types/arsedizioni-ars-utils-evolution.common.d.ts +1 -1
  20. package/types/arsedizioni-ars-utils-support.common.d.ts +1 -1
  21. package/types/arsedizioni-ars-utils-ui.d.ts +1576 -8
  22. package/types/arsedizioni-ars-utils.d.ts +0 -2
  23. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +0 -3350
  24. package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +0 -1
  25. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +0 -287
  26. package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +0 -1
  27. package/types/arsedizioni-ars-utils-ui.application.d.ts +0 -1497
  28. package/types/arsedizioni-ars-utils-ui.oauth.d.ts +0 -74
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-ui.mjs","sources":["../../../projects/ars-utils/ui/ui/paginatorIntl.ts","../../../projects/ars-utils/ui/ui/dialogs/busy/busy-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/busy/busy-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/confirm/confirm-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/confirm/confirm-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/info/info-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/info/info-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/toast/toast.component.ts","../../../projects/ars-utils/ui/ui/dialogs/toast/toast.component.html","../../../projects/ars-utils/ui/ui/services/ui.service.ts","../../../projects/ars-utils/ui/ui/dialogs/delete/delete-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/delete/delete-dialog.component.html","../../../projects/ars-utils/ui/ui/services/dialog.service.ts","../../../projects/ars-utils/ui/ui/ui.module.ts","../../../projects/ars-utils/ui/ui/components/password-strength/password-strength.component.ts","../../../projects/ars-utils/ui/ui/components/password-strength/password-strength.component.html","../../../projects/ars-utils/ui/ui/components/otp/otp-input.component.ts","../../../projects/ars-utils/ui/ui/components/otp/otp-input.component.html","../../../projects/ars-utils/ui/ui/dialogs/credentials/credentials-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/credentials/credentials-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/recover-password/recover-password-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/recover-password/recover-password-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/reset-password/reset-password-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/reset-password/reset-password-dialog.component.html","../../../projects/ars-utils/ui/ui/directives/flex/breakpoints.ts","../../../projects/ars-utils/ui/ui/directives/flex/media-observer.service.ts","../../../projects/ars-utils/ui/ui/directives/flex/if-bp.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/responsive-base.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-flex-extras.directives.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-flex.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-grid.directives.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-layout-align.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-layout-gap.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-layout.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-show-hide.directives.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-style-class.directives.ts","../../../projects/ars-utils/ui/ui/directives/flex/flex-module.ts","../../../projects/ars-utils/ui/public_api.ts","../../../projects/ars-utils/ui/arsedizioni-ars-utils-ui.ts"],"sourcesContent":["import { MatPaginatorIntl } from '@angular/material/paginator';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/** Italian localisation for the Material paginator labels. */\r\n@Injectable()\r\nexport class PaginatorIntl extends MatPaginatorIntl {\r\n override itemsPerPageLabel = 'Elementi per pagina';\r\n override nextPageLabel = 'Prossima pagina';\r\n override previousPageLabel = 'Pagina precedente';\r\n override lastPageLabel = 'Ultima pagina';\r\n override firstPageLabel = 'Prima pagina';\r\n\r\n /**\r\n * Returns the human-readable range label shown inside the paginator.\r\n * @param page - Zero-based index of the current page.\r\n * @param pageSize - Number of items displayed per page.\r\n * @param length - Total number of items, or `-1` when the total is still being calculated.\r\n * @returns A formatted string such as `\"1 - 25 di 100\"`.\r\n */\r\n override getRangeLabel = (page: number, pageSize: number, length: number): string => {\r\n if (length === -1) {\r\n return '0 di calcolo...';\r\n }\r\n if (length === 0 || pageSize === 0) {\r\n return `0 di ${length}`;\r\n }\r\n const totalLength = Math.max(length, 0);\r\n const startIndex = page * pageSize;\r\n // If the start index exceeds the list length, do not try to fix the end index.\r\n const endIndex =\r\n startIndex < totalLength\r\n ? Math.min(startIndex + pageSize, totalLength)\r\n : startIndex + pageSize;\r\n return `${startIndex + 1} - ${endIndex} di ${totalLength}`;\r\n };\r\n}\r\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n/**\r\n * Overlay dialog that blocks interaction while a background operation is in progress.\r\n * Supports four visual styles: progress bar, spinner, hourglass, and wait icon.\r\n */\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './busy-dialog.component.html',\r\n styleUrl: './busy-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatProgressBarModule, MatProgressSpinnerModule, MatIcon, SafeHtmlPipe]\r\n})\r\nexport class BusyDialogComponent {\r\n /** Visual style of the busy indicator. */\r\n readonly type = signal<'bar' | 'spinner' | 'wait' | 'hourglass'>('bar');\r\n\r\n /** Current progress value (0–100). Used when `progressMode` is `'determinate'`. */\r\n readonly progress = signal<number>(0);\r\n\r\n /** Progress mode passed to the Material progress components. */\r\n readonly progressMode = signal<'determinate' | 'indeterminate'>('indeterminate');\r\n\r\n /** Message displayed above the progress indicator. */\r\n readonly message = signal<string>('');\r\n\r\n /**\r\n * Updates the busy dialog state.\r\n * @param message - New message to display. Ignored when empty, preserving the previous text.\r\n * @param progress - Current progress value (0–100). A value > 0 forces `'determinate'` mode.\r\n * @param progressMode - Progress bar/spinner mode (default: `'indeterminate'`).\r\n * @param type - Visual style to use (default: `'bar'`).\r\n */\r\n set(\r\n message: string,\r\n progress: number,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n type: 'bar' | 'spinner' | 'wait' | 'hourglass' = 'bar'\r\n ): void {\r\n if (message) {\r\n this.message.set(message);\r\n }\r\n if (type) {\r\n this.type.set(type);\r\n }\r\n this.progress.set(progress);\r\n this.progressMode.set(progress > 0 ? 'determinate' : progressMode);\r\n }\r\n}\r\n","@if(type() === 'hourglass') {\r\n<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div><mat-icon class=\"mat-icon-spinner\">hourglass</mat-icon></div>\r\n @if (message()) {\r\n <div [innerHTML]=\"message() | safeHtml\" class=\"busy-message\"></div>\r\n }\r\n</div>\r\n} @else if (type() === 'wait') {\r\n<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div><mat-icon class=\"mat-icon-spinner\">hourglass</mat-icon></div>\r\n</div>\r\n} @else {\r\n<div class=\"busy-panel\">\r\n <div fxLayout=\"column\" fxFill>\r\n @if (message()) {\r\n <div [innerHTML]=\"message() | safeHtml\" class=\"busy-message\"></div>\r\n }\r\n @if (type() === 'bar') {\r\n <div>\r\n <mat-progress-bar [mode]=\"progressMode()\" [value]=\"progress()\"\r\n style=\"margin:15px auto 0 auto; max-width: 350px;\"></mat-progress-bar>\r\n </div>\r\n } @else if (type() === 'spinner') {\r\n <div>\r\n <mat-progress-spinner [mode]=\"progressMode()\" diameter=\"70\" [value]=\"progress()\"\r\n style=\"margin:15px auto 0 auto;\"></mat-progress-spinner>\r\n </div>\r\n }\r\n @if (progress() > 0) {\r\n <div>\r\n <span style=\"font-size: smaller;\"><b>{{progress()}}%</b></span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n}","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { DialogOption, DialogResult } from '../../definitions';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ConfirmDialogOption extends DialogOption {}\r\n\r\nexport interface ConfirmDialogData {\r\n title?: string;\r\n message: string;\r\n okCaption?: string;\r\n cancelCaption?: string;\r\n otherCaption?: string;\r\n options?: ConfirmDialogOption[];\r\n details?: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrl: './confirm-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatButtonModule, SafeHtmlPipe]\r\n})\r\nexport class ConfirmDialogComponent {\r\n /** Emitted when the user makes a choice. Carries the selected result and any option state. */\r\n readonly choosen = output<DialogResult>();\r\n\r\n private readonly dialogRef = inject(MatDialogRef<ConfirmDialogComponent>);\r\n\r\n /** Dialog configuration, with sensible defaults applied at construction time. */\r\n protected readonly dialogData = signal<ConfirmDialogData>({\r\n title: 'Conferma',\r\n okCaption: 'Si',\r\n cancelCaption: 'No',\r\n message: '',\r\n ...((inject(MAT_DIALOG_DATA) as ConfirmDialogData | null) ?? {}),\r\n });\r\n\r\n constructor() {\r\n // Ensure optional captions always have a value even when the caller omits them\r\n this.dialogData.update(d => ({\r\n ...d,\r\n title: d.title ?? 'Conferma',\r\n okCaption: d.okCaption ?? 'Si',\r\n cancelCaption: d.cancelCaption ?? 'No',\r\n }));\r\n }\r\n\r\n /**\r\n * Confirms the dialog, emitting `'ok'` together with the current option selections.\r\n */\r\n ok(): void {\r\n this.choosen.emit({ result: 'ok', options: this.dialogData().options });\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Cancels the dialog, emitting `'cancel'`.\r\n */\r\n cancel(): void {\r\n this.choosen.emit({ result: 'cancel' });\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Triggers the tertiary action, emitting `'other'`.\r\n */\r\n other(): void {\r\n this.choosen.emit({ result: 'other' });\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n @if (dialogData().options) {\r\n <div>\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <br>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"30\">\r\n @if (dialogData().otherCaption) {\r\n <button mat-flat-button (click)=\"other()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().otherCaption}}</button>\r\n }\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button (click)=\"ok()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" (click)=\"cancel()\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { DialogService } from '../../services/dialog.service';\r\n\r\nexport interface InfoDialogData {\r\n title?: string;\r\n message: string;\r\n details?: string;\r\n okCaption?: string;\r\n dismissAfter?: number;\r\n onNavigate?: (url: string) => void;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './info-dialog.component.html',\r\n styleUrl: './info-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, FlexModule,\r\n MatButtonModule, MatIconModule, MatDialogClose, MatTooltipModule, SafeHtmlPipe]\r\n})\r\nexport class InfoDialogComponent {\r\n private readonly dialogService = inject(DialogService);\r\n private readonly dialogRef = inject(MatDialogRef<InfoDialogComponent>);\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<InfoDialogData>((() => {\r\n const raw = (inject(MAT_DIALOG_DATA) as InfoDialogData | null) ?? { message: '' };\r\n return { title: 'Informazioni', ...raw };\r\n })());\r\n\r\n constructor() {\r\n // Schedule auto-dismiss if configured\r\n const dismissAfter = this.dialogData().dismissAfter;\r\n if (dismissAfter) {\r\n setTimeout(() => this.dialogRef.close(), dismissAfter);\r\n }\r\n }\r\n\r\n /**\r\n * Replaces the dialog data at runtime (e.g. after an async operation resolves).\r\n * Also re-schedules the auto-dismiss timer if `dismissAfter` is set.\r\n * @param data - The new dialog data to display.\r\n */\r\n public setData(data: InfoDialogData): void {\r\n this.dialogData.set({ title: 'Informazioni', ...data });\r\n if (data.dismissAfter) {\r\n setTimeout(() => this.dialogRef.close(), data.dismissAfter);\r\n }\r\n }\r\n\r\n /**\r\n * Invokes the optional navigation callback provided by the caller.\r\n * @param url - The URL to navigate to.\r\n */\r\n protected navigate(url: string): void {\r\n this.dialogData().onNavigate?.(url);\r\n }\r\n\r\n /**\r\n * Copy to clipboard\r\n */\r\n protected async copy(): Promise<void> {\r\n const elem = document.getElementById('info-dialog-content');\r\n if (!elem) return;\r\n const htmlBlob = new Blob([elem.innerHTML], { type: 'text/html' });\r\n const textBlob = new Blob([elem.innerText], { type: 'text/plain' });\r\n try {\r\n const data = [\r\n new ClipboardItem({\r\n 'text/html': htmlBlob,\r\n 'text/plain': textBlob\r\n })\r\n ];\r\n setTimeout(async () => {\r\n window.focus();\r\n await navigator.clipboard.write(data);\r\n }, 0);\r\n this.dialogService.toast('Copiato negli appunti.');\r\n } catch (err) {\r\n this.dialogService.toast(`Errore copiando negli appunti: ${err}`);\r\n }\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill id=\"info-dialog-content\">\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <br>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <button mat-icon-button (click)=\"copy()\" matTooltip=\"Copia negli appunti\"><mat-icon>content_copy</mat-icon></button>\r\n <button mat-flat-button [mat-dialog-close]=\"true\" cdkFocusInitial>{{dialogData().okCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { Component, ChangeDetectionStrategy, inject, output, signal } from '@angular/core';\r\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\nexport interface ToastData {\r\n message: string;\r\n icon?: string;\r\n actionCaption?: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './toast.component.html',\r\n styleUrl: './toast.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatIconModule, MatButtonModule, SafeHtmlPipe]\r\n})\r\nexport class ToastComponent {\r\n /** Emitted when the user clicks the optional action button. */\r\n readonly action = output<void>();\r\n\r\n /** Snack-bar payload with a safe fallback to an empty message when no data is injected. */\r\n protected readonly dialogData = signal<ToastData>(\r\n (inject(MAT_SNACK_BAR_DATA) as ToastData | null) ?? { message: '' }\r\n );\r\n\r\n /**\r\n * Emits the `action` event to notify the caller that the action button was clicked.\r\n */\r\n protected do(): void {\r\n this.action.emit();\r\n }\r\n}\r\n","<div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n @if (dialogData().icon) {\r\n <div fxFlex='30px' fxLayoutAlign=\"start\" fxFlexAlign=\"center\">\r\n <mat-icon>{{dialogData().icon}}</mat-icon>\r\n </div>\r\n }\r\n <div fxFlex='*' fxLayoutAlign=\"start\" fxFlexAlign=\"center\">\r\n @if (dialogData().message) {\r\n <span [innerHTML]=\"dialogData().message | safeHtml\"></span>\r\n }\r\n </div>\r\n @if (dialogData().actionCaption) {\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <div style=\"padding-left: 20px;\">\r\n <button type=\"button\" mat-flat-button (click)=\"do()\"\r\n [innerHTML]=\"dialogData().actionCaption\"></button>\r\n </div>\r\n </div>\r\n }\r\n</div>","import { Injectable, signal } from '@angular/core';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UIService {\r\n\r\n /**\r\n * The default Material form-field appearance used across dialogs and forms.\r\n * Defaults to `'fill'`.\r\n */\r\n readonly appearance = signal<'fill' | 'outline'>('fill');\r\n\r\n /**\r\n * Updates the global form-field appearance.\r\n * @param value - The new appearance value. Falls back to `'fill'` when `undefined` is passed.\r\n */\r\n setAppearance(value: 'fill' | 'outline' | undefined): void {\r\n this.appearance.set(value ?? 'fill');\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { DialogResult } from '../../definitions';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\n\r\nexport enum DeleteDialogConfirmMode {\r\n None = 0,\r\n Simple = 1,\r\n Strong = 2\r\n}\r\n\r\nexport interface DeleteDialogData {\r\n title?: string;\r\n message: string;\r\n confirmMode: DeleteDialogConfirmMode;\r\n okCaption?: string;\r\n cancelCaption?: string;\r\n details?: string;\r\n appearance?: MatFormFieldAppearance;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './delete-dialog.component.html',\r\n styleUrl: './delete-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatButtonModule, MatFormFieldModule, MatInputModule, SafeHtmlPipe]\r\n})\r\nexport class DeleteDialogComponent {\r\n /** Emitted when the user makes a choice. Carries the selected result. */\r\n readonly choosen = output<DialogResult>();\r\n\r\n private readonly dialogRef = inject(MatDialogRef<DeleteDialogComponent>);\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<DeleteDialogData>((() => {\r\n const raw = (inject(MAT_DIALOG_DATA) as DeleteDialogData | null) ?? {};\r\n return {\r\n title: 'Attenzione',\r\n okCaption: 'Si',\r\n cancelCaption: 'No',\r\n confirmMode: DeleteDialogConfirmMode.None,\r\n message: '',\r\n ...raw,\r\n };\r\n })());\r\n\r\n /**\r\n * Whether the user has confirmed the deletion.\r\n * Starts as `true` for all modes except `Simple`, which requires explicit checkbox confirmation.\r\n */\r\n protected readonly confirmed = signal<boolean>(\r\n this.dialogData().confirmMode !== DeleteDialogConfirmMode.Simple\r\n );\r\n\r\n /** Current value typed into the strong-confirmation text field. */\r\n protected confirmValue?: string;\r\n\r\n /**\r\n * Confirms the deletion, emitting `'ok'` and closing the dialog.\r\n */\r\n ok(): void {\r\n this.choosen.emit({ result: 'ok' });\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Cancels the operation, emitting `'cancel'` and closing the dialog.\r\n */\r\n cancel(): void {\r\n this.choosen.emit({ result: 'cancel' });\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n @if (dialogData().confirmMode === 1) {\r\n <div>\r\n <mat-checkbox (change)=\"confirmed.set($event.checked)\" [checked]=\"confirmed()\">\r\n Confermo la cancellazione\r\n </mat-checkbox>\r\n </div>\r\n } @else if (dialogData().confirmMode === 2) {\r\n <p>Per confermare la cancellazione digita la parola <i><b>elimina</b></i>.</p>\r\n <mat-form-field style=\"width: 200px\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Conferma</mat-label>\r\n <input matInput #field_confirm=\"ngModel\" [(ngModel)]=\"confirmValue\" name=\"field_confirm\" required\r\n [attr.aria-label]=\"'Digita la parola -elimina-'\">\r\n @if (field_confirm.invalid) {\r\n <mat-error>Digita la parola \"elimina\"</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <br>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\"\r\n [disabled]=\"f.form.invalid || (confirmValue && confirmValue.toLowerCase() !== 'elimina') || !confirmed()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\"\r\n (click)=\"cancel()\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\r\nimport { PlatformLocation } from '@angular/common';\r\nimport { ComponentRef, inject, Injectable } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSnackBar, MatSnackBarRef } from '@angular/material/snack-bar';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { Observable, Subscription, timer } from 'rxjs';\r\nimport { first, tap } from 'rxjs/operators';\r\nimport { BusyDialogComponent } from '../dialogs/busy/busy-dialog.component';\r\nimport {\r\n ConfirmDialogComponent,\r\n ConfirmDialogData,\r\n ConfirmDialogOption\r\n} from '../dialogs/confirm/confirm-dialog.component';\r\nimport {\r\n InfoDialogComponent,\r\n InfoDialogData\r\n} from '../dialogs/info/info-dialog.component';\r\nimport { ToastComponent, ToastData } from '../dialogs/toast/toast.component';\r\nimport { UIService } from './ui.service';\r\nimport { DeleteDialogComponent, DeleteDialogConfirmMode, DeleteDialogData } from '../dialogs/delete/delete-dialog.component';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface IDialogService {}\r\n\r\ninterface PopHistoryEntry {\r\n id: string;\r\n value: number;\r\n}\r\n\r\nexport class BusyTimer {\r\n private readonly subscription: Subscription;\r\n\r\n constructor(\r\n private readonly dialogService: DialogService,\r\n due: number = 100,\r\n message: string = 'Operazione in corso...'\r\n ) {\r\n this.subscription = timer(due).pipe(tap(() => this.dialogService.busy(message))).subscribe();\r\n }\r\n\r\n /** Dispose object */\r\n clear(): void {\r\n this.subscription.unsubscribe();\r\n this.dialogService.clearBusy();\r\n }\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DialogService extends UIService {\r\n\r\n private readonly dialog = inject(MatDialog);\r\n private readonly overlay = inject(Overlay);\r\n private readonly snackBar = inject(MatSnackBar);\r\n private readonly location = inject(PlatformLocation);\r\n\r\n private busyDialogRef?: OverlayRef;\r\n private busyComponentRef?: ComponentRef<BusyDialogComponent>;\r\n private errorDialogRef?: MatDialogRef<InfoDialogComponent>;\r\n private readonly popHistory: PopHistoryEntry[] = [];\r\n private popState = true;\r\n private poppingState = false;\r\n\r\n constructor() {\r\n super();\r\n\r\n // Handle dialog close when back button is clicked\r\n this.location.onPopState(() => {\r\n if (!this.poppingState) {\r\n const count = this.dialog.openDialogs.length;\r\n if (count > 0) {\r\n // Disable pop state if needed\r\n this.popState = false;\r\n // Close dialog\r\n this.dialog.openDialogs[count - 1].close();\r\n }\r\n } else {\r\n this.poppingState = false;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Removes trailing `#` characters from the current URL (e.g. after a page reload).\r\n * @param resetPoppingState - When `true`, resets the internal popping-state flag.\r\n */\r\n clearUrl(resetPoppingState: boolean = false): void {\r\n const url = location.href;\r\n let l = url.length;\r\n while (l >= 0 && url[l - 1] === '#') l--;\r\n if (l < url.length)\r\n history.replaceState({}, '', url.substring(0, l));\r\n if (resetPoppingState)\r\n this.poppingState = false;\r\n }\r\n\r\n /**\r\n * Close all dialogs\r\n */\r\n closeAll(): void {\r\n this.dialog.closeAll();\r\n }\r\n\r\n\r\n /**\r\n * Opens a Material dialog. Returns `null` when not running in a browser.\r\n * @param component - The component to open as a dialog.\r\n * @param config - The dialog configuration.\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n open<T>(component: ComponentType<T>, config: MatDialogConfig<unknown>): MatDialogRef<T> | null {\r\n if (!SystemUtils.isBrowser()) return null;\r\n this.clearBusy();\r\n return this.openDialog(component, config);\r\n }\r\n\r\n\r\n /**\r\n * Internal helper that wraps `MatDialog.open`, subscribes to lifecycle hooks\r\n * and manages browser-history push/pop entries.\r\n * @param component - The component to open.\r\n * @param config - The dialog configuration.\r\n * @returns The dialog reference.\r\n */\r\n private openDialog<T>(component: ComponentType<T>, config: MatDialogConfig<unknown>): MatDialogRef<T> {\r\n // We will take care of navigation\r\n config.closeOnNavigation = false;\r\n const d = this.dialog.open(component, config);\r\n d.afterOpened().pipe(first()).subscribe(() => this.pushDialog(d.id));\r\n d.beforeClosed().pipe(first()).subscribe(() => this.popDialog(d.id));\r\n d.afterClosed().pipe(first()).subscribe(() => {\r\n // Final cleanup of middle objects\r\n this.errorDialogRef = undefined;\r\n });\r\n return d;\r\n }\r\n\r\n /**\r\n * Returns the element height including margins\r\n * @param element - element\r\n * @returns the height\r\n */\r\n private outerHeight(element: HTMLElement): number {\r\n if (!SystemUtils.isBrowser()) return 0;\r\n const height = element.offsetHeight;\r\n const style = window.getComputedStyle(element);\r\n return (['top', 'bottom'] as const)\r\n .map(side => parseInt(style.getPropertyValue(`margin-${side}`), 10))\r\n .reduce((total, margin) => total + margin, height);\r\n }\r\n\r\n /**\r\n * Return current dialog height\r\n */\r\n getCurrentDialogHeight(): number {\r\n if (!SystemUtils.isBrowser()) return 0;\r\n const count = this.popHistory.length;\r\n if (count > 0) {\r\n let id = this.popHistory[count - 1].id;\r\n let elem = document.getElementById(id);\r\n if (elem && elem.clientHeight > 0) return elem.clientHeight;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Returns the scrollable content area height for the topmost open dialog.\r\n * @param fixedPartsClassName - CSS class names of fixed (non-scrollable) elements whose heights are subtracted.\r\n * @param minimalHeight - Minimum height floor to use when the dialog height is smaller.\r\n * @returns The computed scrollable height in pixels.\r\n */\r\n getCurrentDialogScrollableHeight(\r\n fixedPartsClassName: string[],\r\n minimalHeight: number\r\n ): number {\r\n if (!SystemUtils.isBrowser()) return 0;\r\n let h = Math.max(this.getCurrentDialogHeight(), minimalHeight);\r\n if (fixedPartsClassName) {\r\n fixedPartsClassName.forEach(n => {\r\n const elems = document.getElementsByClassName(n);\r\n if (elems) {\r\n for (let i = 0; i < elems.length; i++) {\r\n h -= this.outerHeight(elems[i] as HTMLElement);\r\n }\r\n }\r\n });\r\n }\r\n return h;\r\n }\r\n\r\n /**\r\n * Push a dialog into the browser history\r\n */\r\n private pushDialog(id: string): void {\r\n if (!SystemUtils.isBrowser()) return;\r\n const index = history.length;\r\n history.pushState({ index }, '', location.href + '#');\r\n this.popHistory.push({ id, value: index });\r\n }\r\n\r\n /**\r\n * Pop a dialog from the history\r\n */\r\n private popDialog(id?: string): void {\r\n if (!SystemUtils.isBrowser()) return;\r\n if (this.popState) {\r\n this.poppingState = true;\r\n let popped = 1;\r\n if (id) {\r\n const p = this.popHistory.findIndex(n => n.id === id);\r\n if (p !== -1) {\r\n popped = this.popHistory[p].value - (history.state?.index ?? 0);\r\n popped = popped ? popped + 1 : 1;\r\n this.popHistory.splice(p, 1);\r\n }\r\n const url = location.href;\r\n let l = url.length;\r\n while (l >= 0 && url[l - 1] === '#' && popped > 0) {\r\n l--;\r\n popped--;\r\n }\r\n if (l < url.length)\r\n history.replaceState({}, '', url.substring(0, l));\r\n }\r\n }\r\n this.popState = true;\r\n }\r\n\r\n /**\r\n * Creates the CDK overlay used to host the busy indicator.\r\n * @returns The new `OverlayRef`.\r\n */\r\n private createBusy(): OverlayRef {\r\n return this.overlay.create({\r\n hasBackdrop: true,\r\n backdropClass: 'busy-backdrop',\r\n positionStrategy: this.overlay.position()\r\n .global()\r\n .centerHorizontally()\r\n .centerVertically()\r\n });\r\n }\r\n\r\n /**\r\n * Clear busy dialog\r\n */\r\n clearBusy() {\r\n setTimeout(() => {\r\n this.busyDialogRef?.detach();\r\n this.busyComponentRef?.destroy();\r\n }, 500);\r\n\r\n }\r\n\r\n /**\r\n * Shows or updates the busy overlay.\r\n * @param message - Text to display inside the overlay.\r\n * @param progress - Progress value (`-1` = indeterminate). Defaults to `-1`.\r\n * @param progressMode - Progress bar mode. Defaults to `'indeterminate'`.\r\n * @param type - Visual style of the overlay. Defaults to `'bar'`.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created, `false` if an existing one was updated.\r\n */\r\n setBusy(\r\n message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n type: 'bar' | 'spinner' | 'wait' | 'hourglass' = 'bar',\r\n action?: Observable<unknown>\r\n ): boolean {\r\n const exists = this.busyDialogRef?.hasAttached();\r\n if (exists) {\r\n this.busyComponentRef?.instance.set(message, progress, progressMode, type); // update existing\r\n } else {\r\n // Open new\r\n if (!this.busyDialogRef) {\r\n this.busyDialogRef = this.createBusy();\r\n }\r\n this.busyComponentRef = this.busyDialogRef.attach(new ComponentPortal(BusyDialogComponent));\r\n this.busyComponentRef.instance.set(message, progress, progressMode, type);\r\n if (action) {\r\n action\r\n .pipe(first())\r\n .subscribe(() => {\r\n this.clearBusy();\r\n });\r\n }\r\n }\r\n return !exists;\r\n }\r\n\r\n /**\r\n * Shows or updates the busy overlay using the progress-bar style.\r\n * @param message - Text to display inside the overlay.\r\n * @param progress - Progress value (`-1` = indeterminate). Defaults to `-1`.\r\n * @param progressMode - Progress bar mode. Defaults to `'indeterminate'`.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created.\r\n */\r\n busy(\r\n message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n action?: Observable<unknown>\r\n ): boolean {\r\n return this.setBusy(message, progress, progressMode, 'bar', action);\r\n }\r\n\r\n \r\n /**\r\n * Returns a `BusyTimer` that shows the busy overlay after a debounce delay.\r\n * @param message - Text to display. Defaults to `'Operazione in corso...'`.\r\n * @param due - Delay in milliseconds before the overlay appears. Defaults to `100`.\r\n * @returns A `BusyTimer` that must be disposed with `clear()` when the operation ends.\r\n */\r\n busyTimer(message: string = \"Operazione in corso...\", due: number = 100): BusyTimer {\r\n return new BusyTimer(this, due, message);\r\n }\r\n\r\n\r\n /**\r\n * Shows or updates the busy overlay using the hourglass style.\r\n * @param message - Text to display inside the overlay.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created.\r\n */\r\n busyHourglass(\r\n message: string,\r\n action?: Observable<unknown>\r\n ): boolean {\r\n return this.setBusy(message, -1, 'indeterminate', 'hourglass', action);\r\n }\r\n\r\n /**\r\n * Shows or updates the busy overlay using the spinner style.\r\n * @param message - Text to display inside the overlay.\r\n * @param progress - Progress value (`-1` = indeterminate). Defaults to `-1`.\r\n * @param progressMode - Progress mode. Defaults to `'indeterminate'`.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created.\r\n */\r\n busySpinner(\r\n message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n action?: Observable<unknown>\r\n ): boolean {\r\n return this.setBusy(message, progress, progressMode, 'spinner', action);\r\n }\r\n\r\n /**\r\n * Shows a minimal wait spinner overlay.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created.\r\n */\r\n wait(action?: Observable<unknown>): boolean {\r\n return this.setBusy('', -1, 'indeterminate', 'wait', action);\r\n }\r\n\r\n\r\n /**\r\n * Opens an informational dialog.\r\n * @param message - HTML message to display.\r\n * @param title - Dialog title. Defaults to `'Informazioni'`.\r\n * @param okCaption - Confirmation button label. Defaults to `'Ok'`.\r\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\r\n * @param dismissAfter - Auto-close delay in milliseconds (optional).\r\n * @param details - Optional secondary details text.\r\n * @param onNavigate - Optional navigation callback invoked when the user clicks a link.\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n info(\r\n message: string,\r\n title: string = 'Informazioni',\r\n okCaption: string = 'Ok',\r\n width: number = 500,\r\n dismissAfter?: number,\r\n details?: string,\r\n onNavigate?: (url: string) => void\r\n ): MatDialogRef<InfoDialogComponent> | null {\r\n this.clearBusy();\r\n return this.open(InfoDialogComponent, {\r\n ariaLabel: 'informazioni',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n data: {\r\n message,\r\n title,\r\n okCaption,\r\n dismissAfter,\r\n details,\r\n onNavigate,\r\n appearance: 'fill'\r\n } as InfoDialogData,\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Opens an error dialog. If one is already open, its content is updated in place.\r\n * @param message - HTML error message to display.\r\n * @param log - Optional technical log / stack trace shown in the details panel.\r\n * @param title - Dialog title. Defaults to `'Errore'`.\r\n * @param okCaption - Confirmation button label. Defaults to `'Ok'`.\r\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\r\n * @param dismissAfter - Auto-close delay in milliseconds (optional).\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n error(\r\n message: string,\r\n log?: string,\r\n title: string = 'Errore',\r\n okCaption: string = 'Ok',\r\n width: number = 500,\r\n dismissAfter?: number,\r\n ): MatDialogRef<InfoDialogComponent> | null {\r\n this.clearBusy();\r\n if (this.errorDialogRef) {\r\n // Just change current error\r\n this.errorDialogRef.componentInstance.setData({\r\n message,\r\n title,\r\n details: log,\r\n okCaption,\r\n dismissAfter\r\n });\r\n return this.errorDialogRef;\r\n }\r\n const ref = this.open(InfoDialogComponent, {\r\n ariaLabel: 'errore',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n message,\r\n title,\r\n details: log,\r\n okCaption,\r\n dismissAfter,\r\n appearance: 'fill'\r\n } as InfoDialogData,\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n });\r\n this.errorDialogRef = ref ?? undefined;\r\n return ref;\r\n }\r\n\r\n /**\r\n * Shows a snack-bar toast notification.\r\n * @param message - HTML message to display.\r\n * @param duration - Visible duration in milliseconds. Defaults to `2000`.\r\n * @param icon - Material icon name shown beside the message. Defaults to `'check'`.\r\n * @param actionCaption - Optional label for the action button.\r\n * @returns The snack-bar reference.\r\n */\r\n toast(\r\n message: string,\r\n duration: number = 2000,\r\n icon: string = 'check',\r\n actionCaption?: string\r\n ): MatSnackBarRef<ToastComponent> {\r\n this.clearBusy();\r\n if (duration === -1) duration = 2000; // default\r\n const toastRef = this.snackBar.openFromComponent(ToastComponent, {\r\n duration,\r\n data: { message, icon, actionCaption } as ToastData\r\n });\r\n toastRef.instance.action.subscribe(() => toastRef.dismiss());\r\n return toastRef;\r\n }\r\n\r\n /**\r\n * Opens a confirmation dialog.\r\n * @param message - HTML message to display.\r\n * @param title - Dialog title. Defaults to `'Conferma'`.\r\n * @param okCaption - Primary action button label. Defaults to `'Si'`.\r\n * @param cancelCaption - Cancel button label. Defaults to `'No'`.\r\n * @param otherCaption - Optional tertiary action button label.\r\n * @param options - Optional list of checkbox options shown to the user.\r\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\r\n * @param details - Optional secondary details text.\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n confirm(\r\n message: string,\r\n title: string = 'Conferma',\r\n okCaption: string = 'Si',\r\n cancelCaption: string = 'No',\r\n otherCaption?: string,\r\n options?: ConfirmDialogOption[],\r\n width: number = 500,\r\n details?: string\r\n ): MatDialogRef<ConfirmDialogComponent> | null {\r\n return this.open(ConfirmDialogComponent, {\r\n ariaLabel: 'conferma',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n message,\r\n title,\r\n okCaption,\r\n cancelCaption,\r\n otherCaption,\r\n options,\r\n details,\r\n appearance: 'fill'\r\n } as ConfirmDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Opens a deletion-confirmation dialog.\r\n * @param message - HTML message to display.\r\n * @param title - Dialog title. Defaults to `'Attenzione'`.\r\n * @param confirmMode - Confirmation mode (none / checkbox / type-to-confirm). Defaults to `None`.\r\n * @param okCaption - Primary action button label. Defaults to `'Si'`.\r\n * @param cancelCaption - Cancel button label. Defaults to `'No'`.\r\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\r\n * @param details - Optional secondary details text.\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n delete(\r\n message: string,\r\n title: string = 'Attenzione',\r\n confirmMode: DeleteDialogConfirmMode = DeleteDialogConfirmMode.None,\r\n okCaption: string = 'Si',\r\n cancelCaption: string = 'No',\r\n width: number = 500,\r\n details?: string\r\n ): MatDialogRef<DeleteDialogComponent> | null {\r\n return this.open(DeleteDialogComponent, {\r\n ariaLabel: 'attenzione',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n message,\r\n title,\r\n confirmMode,\r\n okCaption,\r\n cancelCaption,\r\n details,\r\n appearance: 'fill'\r\n } as DeleteDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n });\r\n }\r\n\r\n}\r\n\r\n","import { NgModule } from \"@angular/core\";\r\nimport { ArsCoreModule } from '@arsedizioni/ars-utils/core';\r\n\r\n@NgModule({\r\n imports: [\r\n ArsCoreModule,\r\n ],\r\n exports: [\r\n \r\n ]\r\n})\r\nexport class ArsUIModule { }\r\n\r\nexport * from \"./definitions\";\r\nexport * from \"./paginatorIntl\";\r\nexport * from \"./services/dialog.service\";\r\nexport * from \"./services/ui.service\";\r\n\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { PasswordStrength, SystemUtils } from '@arsedizioni/ars-utils/core';\r\n\r\nconst DEFAULT_STRENGTH: PasswordStrength = { score: 0, label: '', color: '', suggestions: [], isValid: false };\r\n\r\n/**\r\n * Displays a password-strength indicator for the provided password string.\r\n * Uses `SystemUtils.calculatePasswordStrength` to derive the score and label.\r\n */\r\n@Component({\r\n selector: 'password-strength',\r\n templateUrl: './password-strength.component.html',\r\n styleUrl: './password-strength.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatTooltipModule]\r\n})\r\nexport class PasswordStrengthComponent {\r\n /** The password to evaluate. An empty string renders the default (score 0) state. */\r\n readonly password = input<string>('');\r\n\r\n /**\r\n * Computed strength result for the current password.\r\n * Falls back to `DEFAULT_STRENGTH` when the password is empty.\r\n */\r\n protected readonly strength = computed<PasswordStrength>(() => {\r\n const pwd = this.password();\r\n return pwd ? SystemUtils.calculatePasswordStrength(pwd) : DEFAULT_STRENGTH;\r\n });\r\n\r\n /**\r\n * CSS class applied to the label element based on the numeric score (1–6 bands).\r\n * Scores ≤ 2 → `'score-2'`, ≤ 3 → `'score-3'`, etc.\r\n */\r\n protected readonly scoreClass = computed<string>(() => {\r\n const score = this.strength().score;\r\n if (score <= 2) return 'score-2';\r\n if (score <= 3) return 'score-3';\r\n if (score <= 4) return 'score-4';\r\n if (score <= 5) return 'score-5';\r\n return 'score-6';\r\n });\r\n}\r\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, ElementRef, computed, forwardRef, signal, viewChildren, ChangeDetectionStrategy } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\n\r\n\r\n@Component({\r\n selector: 'otp-input',\r\n standalone: true,\r\n imports: [FormsModule],\r\n templateUrl: './otp-input.component.html',\r\n styleUrl: './otp-input.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => OtpInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class OtpInputComponent implements ControlValueAccessor {\r\n /** Signal-based query for all individual OTP digit input elements. */\r\n readonly otpFields = viewChildren<ElementRef<HTMLInputElement>>('otpField');\r\n\r\n /** `true` when every digit slot contains a valid single decimal digit. */\r\n readonly isValid = computed(() => this.otpArray().every(d => /^\\d$/.test(d)));\r\n\r\n /** Array of per-digit values backing the OTP display. */\r\n readonly otpArray = signal<string[]>(Array(6).fill(''));\r\n\r\n /** Whether the control is currently disabled. */\r\n readonly disabled = signal<boolean>(false);\r\n\r\n private onChange: (val: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n // ── ControlValueAccessor ───────────────────────────────────────────────────\r\n\r\n /**\r\n * Writes a new value into the control from the model.\r\n * @param value - A string of up to 6 digits to pre-fill the OTP fields.\r\n */\r\n writeValue(value: string): void {\r\n const arr = Array(6).fill('');\r\n if (value) {\r\n value.split('').forEach((c, i) => {\r\n if (i < 6) arr[i] = c;\r\n });\r\n }\r\n this.otpArray.set(arr);\r\n }\r\n\r\n /**\r\n * Registers the callback invoked when the control value changes.\r\n * @param fn - The callback function.\r\n */\r\n registerOnChange(fn: (val: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n /**\r\n * Registers the callback invoked when the control is touched.\r\n * @param fn - The callback function.\r\n */\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /**\r\n * Enables or disables the control.\r\n * @param isDisabled - `true` to disable all OTP inputs.\r\n */\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n // ── Event handlers ─────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Blocks non-digit characters before they are inserted.\r\n * @param event - The `beforeinput` event from the input element.\r\n */\r\n onBeforeInput(event: InputEvent): void {\r\n if (event.data && !/^\\d$/.test(event.data)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n /**\r\n * Handles digit input, updates the OTP array, and advances focus.\r\n * @param event - The `input` event from the digit field.\r\n * @param index - Zero-based index of the field that received input.\r\n */\r\n onInput(event: Event, index: number): void {\r\n let val = (event.target as HTMLInputElement).value;\r\n val = val.replace(/\\D/g, '').slice(-1);\r\n\r\n const arr = [...this.otpArray()];\r\n arr[index] = val;\r\n this.otpArray.set(arr);\r\n\r\n this.updateModel();\r\n\r\n if (val && index < 5) {\r\n this.focusField(index + 1);\r\n }\r\n }\r\n\r\n /**\r\n * Handles the Backspace key by moving focus to the previous field when the current one is empty.\r\n * @param event - The `keydown` event.\r\n * @param index - Zero-based index of the field that received the keydown.\r\n */\r\n onKeyDown(event: KeyboardEvent, index: number): void {\r\n if (event.key === 'Backspace' && !this.otpArray()[index] && index > 0) {\r\n this.focusField(index - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Handles paste events by extracting up to 6 digits and distributing them across the OTP fields.\r\n * @param event - The `ClipboardEvent` from the paste action.\r\n */\r\n onPaste(event: ClipboardEvent): void {\r\n event.preventDefault();\r\n const pasted = event.clipboardData?.getData('text') ?? '';\r\n const digits = pasted.replace(/\\D/g, '').slice(0, 6).split('');\r\n\r\n if (digits.length > 0) {\r\n const arr = Array(6).fill('');\r\n digits.forEach((d, i) => (arr[i] = d));\r\n this.otpArray.set(arr);\r\n this.updateModel();\r\n this.focusField(Math.min(digits.length, 5));\r\n }\r\n }\r\n\r\n /**\r\n * Moves focus to the OTP field at the given index.\r\n * @param index - Zero-based index of the target field.\r\n */\r\n private focusField(index: number): void {\r\n const field = this.otpFields()[index];\r\n field?.nativeElement.focus();\r\n field?.nativeElement.select();\r\n }\r\n\r\n /**\r\n * Notifies the form model of the current OTP value and marks the control as touched.\r\n */\r\n private updateModel(): void {\r\n const code = this.otpArray().join('');\r\n this.onChange(code);\r\n this.onTouched();\r\n }\r\n}\r\n","<div class=\"otp-container\">\r\n @for (digit of otpArray(); track $index) {\r\n <input\r\n #otpField\r\n type=\"text\"\r\n maxlength=\"1\"\r\n inputmode=\"numeric\"\r\n pattern=\"[0-9]*\"\r\n class=\"otp-box\"\r\n [value]=\"digit\"\r\n (beforeinput)=\"onBeforeInput($event)\"\r\n (input)=\"onInput($event, $index)\"\r\n (keydown)=\"onKeyDown($event, $index)\"\r\n (paste)=\"onPaste($event)\"\r\n [disabled]=\"disabled()\"\r\n required\r\n />\r\n }\r\n</div>\r\n\r\n","import { Component, inject, output, signal, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { CredentialsDialogResult } from '../../definitions';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { PasswordStrengthComponent } from '../../components/password-strength/password-strength.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { OtpInputComponent } from '../../components/otp/otp-input.component';\r\n\r\nexport interface CredentialsDialogData {\r\n title?: string;\r\n message?: string;\r\n remember?: boolean;\r\n recoverPassword?: boolean;\r\n recoverPasswordUrl?: string;\r\n user?: string;\r\n okCaption?: string;\r\n mode?: 'email' | 'user' | 'otp';\r\n appearance?: MatFormFieldAppearance;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './credentials-dialog.component.html',\r\n styleUrl: './credentials-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatCheckboxModule,\r\n MatDialogActions,\r\n FlexModule,\r\n MatButtonModule,\r\n MatDialogClose,\r\n PasswordStrengthComponent,\r\n OtpInputComponent,\r\n SafeHtmlPipe,\r\n ],\r\n})\r\nexport class CredentialsDialogComponent {\r\n /** Emitted when the user submits the form. Carries the entered credentials. */\r\n readonly done = output<CredentialsDialogResult>();\r\n\r\n /** Emitted when the user requests a password-recovery flow. */\r\n readonly recoveringPassword = output<CredentialsDialogResult>();\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<CredentialsDialogData>((() => {\r\n const raw = (inject(MAT_DIALOG_DATA) as CredentialsDialogData | null) ?? {};\r\n const data: CredentialsDialogData = {\r\n appearance: 'fill',\r\n title: 'Informazioni',\r\n okCaption: 'Salva',\r\n mode: 'email',\r\n ...raw,\r\n };\r\n data.appearance ??= 'fill';\r\n data.title ??= 'Informazioni';\r\n data.okCaption ??= 'Salva';\r\n data.mode ??= 'email';\r\n if (data.mode === 'otp' && !data.message) {\r\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>';\r\n }\r\n return data;\r\n })());\r\n\r\n /** Current form model, pre-filled with the user name from dialog data when provided. */\r\n protected item: CredentialsDialogResult = {\r\n user: (inject(MAT_DIALOG_DATA) as CredentialsDialogData | null)?.user,\r\n };\r\n\r\n /** Whether the password field is currently shown as plain text. */\r\n protected readonly showPassword = signal<boolean>(false);\r\n\r\n /**\r\n * Switches the input mode of the dialog at runtime (e.g. from login to OTP).\r\n * Intended to be called from outside via the dialog component reference.\r\n * @param mode - The new input mode (`'email'`, `'user'`, or `'otp'`).\r\n * @param message - Optional new message to display above the form.\r\n */\r\n public changeMode(mode: 'email' | 'user' | 'otp', message?: string): void {\r\n this.dialogData.update(d => ({\r\n ...d,\r\n mode,\r\n message: message ?? d.message,\r\n }));\r\n }\r\n\r\n /**\r\n * Emits the current form result and closes the dialog.\r\n */\r\n protected ok(): void {\r\n this.done.emit(this.item);\r\n }\r\n\r\n /**\r\n * Emits the current form result for the password-recovery flow and optionally\r\n * opens the recovery URL in a new tab.\r\n */\r\n protected recoverPassword(): void {\r\n this.recoveringPassword.emit(this.item);\r\n const url = this.dialogData().recoverPasswordUrl;\r\n if (url) {\r\n window.open(url, '_blank');\r\n }\r\n }\r\n}\r\n\r\n","<div class=\"dialog-info\">\r\n @if (f.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 [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n @if(dialogData().mode !== 'otp') {\r\n @if (dialogData().mode === 'email') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email</mat-label>\r\n <input type=\"email\" matInput [(ngModel)]=\"item.user\" name=\"email\" #email=\"ngModel\" email required\r\n [attr.aria-label]=\"'Email'\">\r\n @if (email.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else if (dialogData().mode === 'user') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Utente</mat-label>\r\n <input matInput [(ngModel)]=\"item.user\" name=\"user\" #user=\"ngModel\" required [attr.aria-label]=\"'user'\">\r\n @if (user.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>La tua password abilitata</mat-label>\r\n <input matInput name=\"password\" #password=\"ngModel\" [type]=\"!showPassword() ? 'password' : 'text'\"\r\n [(ngModel)]=\"item.password\" required [attr.aria-label]=\"'La tua password abilitata'\" autocomplete=\"on\">\r\n @if(item.password) {\r\n <password-strength [password]=\"item.password\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint>Attento a maiuscole e minuscole</mat-hint>\r\n @if (password.invalid) {\r\n <mat-error>Password non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n @if (dialogData().remember || dialogData().recoverPassword) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxFill style=\"margin-top: 20px;\">\r\n <div>\r\n @if (dialogData().remember) {\r\n <mat-checkbox fxFlexAlign=\"center\" [(ngModel)]=\"item.rememberMe\" name=\"rememberMe\"> Ricordami</mat-checkbox>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (dialogData().recoverPassword) {\r\n <button fxFlexAlign=\"center\" mat-button (click)=\"recoverPassword()\" title=\"Recupero password\"\r\n >Non riesco ad accedere</button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <otp-input name=\"otp\" [(ngModel)]=\"item.code\" required></otp-input>\r\n }\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]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { RecoverPasswordDialogResult } from '../../definitions';\r\n\r\nexport interface RecoverPasswordDialogData {\r\n appearance?: MatFormFieldAppearance;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './recover-password-dialog.component.html',\r\n styleUrl: './recover-password-dialog.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatDialogActions,\r\n FlexModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class RecoverPasswordDialogComponent {\r\n\r\n /** Emitted when the user submits the recovery request. Carries the entered email and recaptcha state. */\r\n readonly done = output<RecoverPasswordDialogResult>();\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<RecoverPasswordDialogData>({\r\n appearance: 'fill',\r\n ...((inject(MAT_DIALOG_DATA) as RecoverPasswordDialogData | null) ?? {}),\r\n });\r\n\r\n /** Current form model bound to the template inputs. */\r\n protected item: RecoverPasswordDialogResult = {\r\n email: '',\r\n recaptcha: false,\r\n };\r\n\r\n /**\r\n * Emits the current form result to trigger the password-recovery flow.\r\n */\r\n protected ok(): void {\r\n this.done.emit(this.item);\r\n }\r\n}\r\n","<div class=\"dialog-info\">\r\n @if (f.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>Per quale ragione non sei in grado di effettuare l'accesso?</div>\r\n<mat-dialog-content>\r\n\r\n <b>1. Ho dimenticato la password</b>\r\n <p>\r\n Puoi recuperarla facilmente inserendo l'email a cui la password è collegata. Non è possibile recuperare password\r\n aziendali (non collegate ad un email).</p>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n\r\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email con cui ti sei registrato</mat-label>\r\n <input type=\"email\" matInput name=\"email\" #email=\"ngModel\" [(ngModel)]=\"item.email\" required email\r\n maxlength=\"200\" />\r\n @if (email.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <div style=\"margin-top:20px; margin-bottom:20px;\">\r\n <button type=\"button\" mat-flat-button (click)=\"ok()\" [disabled]=\"f.form.invalid\"\r\n aria-label=\"Recupera password\">Recupera password</button>\r\n </div>\r\n </form>\r\n <p></p>\r\n <b>2. Il sistema mi dice che la password non è corretta.</b>\r\n <p>\r\n E' molto probabile che ci sia stato un difetto di digitazione. Per favore controlla bene che non vi siano spazi non\r\n richiesti e che la password rispetti perfettamente le maiuscole e minuscole. Nel caso in cui la digitazione fosse\r\n corretta, verifica che la data del tuo abbonamento non sia scaduta.\r\n </p>\r\n <p></p>\r\n <b>3. Il sistema mi dice che non può accettare connessioni dal mio indirizzo IP</b>\r\n <p>\r\n Il tuo abbonamento è stato vincolato ad un indirizzo IP (indirizzo dal quale ti colleghi). Capita sovente che\r\n questi indirizzi siano cambiati da parte del reparto IT per questioni di sicurezza informatica.\r\n Per risolvere il problema, contattate il reparto IT e fatevi dire qual'è il nuovo indirizzo IP e comunicatelo ad\r\n ARS Edizioni Informatiche.\r\n </p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n</mat-dialog-actions>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n output,\r\n signal\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { EqualsValidatorDirective, PasswordValidatorDirective, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { ResetPasswordDialogResult } from '../../definitions';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { PasswordStrengthComponent } from '../../components/password-strength/password-strength.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n\r\nexport type ResetPasswordDialogMode = 'admin' | 'change' | 'forgot';\r\n\r\nexport interface ResetPasswordDialogData {\r\n mode: ResetPasswordDialogMode;\r\n userId?: number;\r\n userEmail?: string;\r\n appearance?: MatFormFieldAppearance;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './reset-password-dialog.component.html',\r\n styleUrl: './reset-password-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n FlexModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n PasswordValidatorDirective,\r\n PasswordStrengthComponent,\r\n EqualsValidatorDirective,\r\n MatIconModule,\r\n MatDialogActions,\r\n MatButtonModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class ResetPasswordDialogComponent {\r\n /** Emitted when the user submits the new password. Carries the entered password data. */\r\n readonly done = output<ResetPasswordDialogResult>();\r\n\r\n private readonly dialogService = inject(DialogService);\r\n private readonly dialogRef = inject(MatDialogRef<ResetPasswordDialogComponent>);\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<ResetPasswordDialogData>((() => {\r\n const raw = (inject(MAT_DIALOG_DATA) as ResetPasswordDialogData | null);\r\n return { mode: 'admin' as ResetPasswordDialogMode, appearance: 'fill' as MatFormFieldAppearance, ...raw };\r\n })());\r\n\r\n /** Current form model bound to the template inputs. */\r\n protected item: ResetPasswordDialogResult = {};\r\n\r\n /** Whether the old-password field is currently shown as plain text. */\r\n protected readonly showOldPassword = signal<boolean>(false);\r\n\r\n /** Whether the new-password field is currently shown as plain text. */\r\n protected readonly showPassword = signal<boolean>(false);\r\n\r\n /** Whether the confirm-password field is currently shown as plain text. */\r\n protected readonly showPassword2 = signal<boolean>(false);\r\n\r\n constructor() {\r\n const data = this.dialogData();\r\n if (data.mode !== 'forgot' && !data.userId) {\r\n this.dialogRef.close();\r\n this.dialogService.error('Utente non specificato.');\r\n return;\r\n }\r\n if (data.mode === 'forgot' && !data.userEmail) {\r\n this.dialogRef.close();\r\n this.dialogService.error('Email utente non specificata.');\r\n return;\r\n }\r\n this.item.userEmail = data.userEmail;\r\n this.item.userId = data.userId;\r\n }\r\n\r\n /**\r\n * Emits the current form result to trigger the password-reset flow.\r\n */\r\n protected ok(): void {\r\n this.done.emit(this.item);\r\n }\r\n\r\n /**\r\n * Generates a random password and populates both password fields with it.\r\n */\r\n protected generatePassword(): void {\r\n const password = SystemUtils.generatePassword();\r\n this.item.password = password;\r\n this.item.password2 = password;\r\n }\r\n}\r\n\r\n\r\n","<div class=\"dialog-info\">\r\n @if (f.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>\r\n <form name=\"form\" #f=\"ngForm\" 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 [(ngModel)]=\"item.userEmail\" name=\"userEmail\" #userEmail=\"ngModel\" email required\r\n [attr.aria-label]=\"'Email con cui ti sei registrato'\">\r\n @if (userEmail.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().mode !== 'admin') {\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 name=\"oldPwd\" autocomplete=\"on\"\r\n [(ngModel)]=\"item.oldPassword\" required maxlength=\"30\" #oldPwd=\"ngModel\">\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(item.oldPassword) {\r\n <password-strength [password]=\"item.oldPassword\"></password-strength>\r\n }\r\n @if (oldPwd.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\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 name=\"newPwd\" [(ngModel)]=\"item.password\" required\r\n password minlength=\"10\" maxlength=\"30\" #newPwd=\"ngModel\">\r\n @if(item.password) {\r\n <password-strength [password]=\"item.password\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint align=\"end\">{{newPwd.value?.length || 0}}/30</mat-hint>\r\n @if (newPwd.invalid) {\r\n <mat-error>Non valido.</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 name=\"newPwd2\" [(ngModel)]=\"item.password2\"\r\n [required]=\"dialogData().mode !== 'admin'\" password minlength=\"10\" maxlength=\"30\" [equals]=\"newPwd.control\" #newPwd2=\"ngModel\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword2.set(!showPassword2())\">\r\n <mat-icon>{{showPassword2() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(item.password2) {\r\n <password-strength [password]=\"item.password2\"></password-strength>\r\n }\r\n <mat-hint align=\"end\">{{newPwd2.value?.length || 0}}/30</mat-hint>\r\n @if (newPwd2.invalid) {\r\n <mat-error>Non valido.</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]=\"f.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>","/**\n * @file breakpoints.ts\n * Bootstrap 5 breakpoint definitions as CDK-compatible MediaQuery strings.\n *\n * CDK's BreakpointObserver already handles the actual matching — we only define aliases.\n *\n * Bootstrap 5 grid tiers:\n * xs < 576px\n * sm >= 576px\n * md >= 768px\n * lg >= 992px\n * xl >= 1200px\n * xxl >= 1400px\n *\n * Supported alias families:\n *\n * Canonical ranges xs | sm | md | lg | xl | xxl\n * \"and up\" sm-up | md-up | lg-up | xl-up | xxl-up\n * gt-xs | gt-sm | gt-md | gt-lg | gt-xl (ngx-layout compat)\n * \"and down\" sm-down | md-down | lg-down | xl-down\n * lt-sm | lt-md | lt-lg | lt-xl | lt-xxl (ngx-layout compat)\n *\n * The lt-* / gt-* aliases are exact mirrors of the -down / -up aliases.\n * They share the same media query string so CDK deduplicates them internally.\n */\n\nimport { InjectionToken } from '@angular/core';\n\nexport const BS5_BREAKPOINTS: Record<string, string> = {\n // ── Canonical ranges ────────────────────────────────────────────────────────\n 'xs': '(max-width: 575.98px)',\n 'sm': '(min-width: 576px) and (max-width: 767.98px)',\n 'md': '(min-width: 768px) and (max-width: 991.98px)',\n 'lg': '(min-width: 992px) and (max-width: 1199.98px)',\n 'xl': '(min-width: 1200px) and (max-width: 1399.98px)',\n 'xxl': '(min-width: 1400px)',\n\n // ── \"and up\" — Bootstrap style ───────────────────────────────────────────────\n 'sm-up': '(min-width: 576px)',\n 'md-up': '(min-width: 768px)',\n 'lg-up': '(min-width: 992px)',\n 'xl-up': '(min-width: 1200px)',\n 'xxl-up': '(min-width: 1400px)',\n\n // ── \"and up\" — ngx-layout gt-* style ────────────────────────────────────────\n 'gt-xs': '(min-width: 576px)',\n 'gt-sm': '(min-width: 768px)',\n 'gt-md': '(min-width: 992px)',\n 'gt-lg': '(min-width: 1200px)',\n 'gt-xl': '(min-width: 1400px)',\n\n // ── \"and down\" — Bootstrap style ─────────────────────────────────────────────\n 'sm-down': '(max-width: 767.98px)',\n 'md-down': '(max-width: 991.98px)',\n 'lg-down': '(max-width: 1199.98px)',\n 'xl-down': '(max-width: 1399.98px)',\n\n // ── \"and down\" — ngx-layout lt-* style ──────────────────────────────────────\n // lt-sm = everything below sm = xs only\n 'lt-sm': '(max-width: 575.98px)',\n // lt-md = everything below md = xs + sm\n 'lt-md': '(max-width: 767.98px)',\n // lt-lg = everything below lg = xs + sm + md\n 'lt-lg': '(max-width: 991.98px)',\n // lt-xl = everything below xl = xs + sm + md + lg\n 'lt-xl': '(max-width: 1199.98px)',\n // lt-xxl = everything below xxl = xs through xl\n 'lt-xxl': '(max-width: 1399.98px)',\n};\n\n/** InjectionToken — override to customise or extend breakpoints */\nexport const LAYOUT_BREAKPOINTS = new InjectionToken<Record<string, string>>(\n 'LAYOUT_BREAKPOINTS',\n { providedIn: 'root', factory: () => BS5_BREAKPOINTS }\n);\n\n/** Ordered canonical aliases, smallest → largest (used for mobile-first cascade) */\nexport const CANONICAL_ALIASES = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'] as const;\nexport type BreakpointAlias = typeof CANONICAL_ALIASES[number];\n\n/**\n * All non-canonical alias families.\n * Used by ResponsiveBaseDirective.resolveNonCanonical() to handle lt-* / gt-* / *-up / *-down\n * inputs without polluting the mobile-first cascade logic.\n */\nexport const ALIAS_FAMILIES = {\n up: ['sm-up', 'md-up', 'lg-up', 'xl-up', 'xxl-up'],\n down: ['sm-down', 'md-down', 'lg-down', 'xl-down'],\n gt: ['gt-xs', 'gt-sm', 'gt-md', 'gt-lg', 'gt-xl'],\n lt: ['lt-sm', 'lt-md', 'lt-lg', 'lt-xl', 'lt-xxl'],\n} as const;\n","/**\n * @file media-observer.service.ts (v2 — optimized)\n *\n * ── Optimizations over v1 ─────────────────────────────────────────────────\n *\n * ✅ Single bo.observe() call for all 6 canonical breakpoints.\n * CDK internally uses one MediaQueryList listener per query string.\n * Calling observe() N times creates N listeners — here we create only one.\n *\n * ✅ currentBp$ is shared (shareReplay(1)): all subscribers (effects in\n * directives) receive the same value without redundant re-computations.\n *\n * ✅ The currentBp Signal is derived from the Observable via toSignal():\n * Angular manages the subscription internally and tears it down with root.\n *\n * ✅ isActive() delegates to bo.isMatched() — synchronous, O(1), no extra observer.\n *\n * ✅ isActive$() reuses the shared currentBp$ stream instead of opening\n * a new bo.observe() for every requested alias.\n */\n\nimport { Injectable, inject, Signal } from '@angular/core';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { Observable, map, distinctUntilChanged, shareReplay } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { LAYOUT_BREAKPOINTS, CANONICAL_ALIASES, BreakpointAlias } from './breakpoints';\n\n@Injectable({ providedIn: 'root' })\nexport class MediaObserver {\n private readonly bo = inject(BreakpointObserver);\n private readonly bp = inject(LAYOUT_BREAKPOINTS);\n\n /**\n * A SINGLE CDK observation for all 6 canonical breakpoints.\n * Each breakpoint change emits → we resolve the current alias → shared.\n *\n * shareReplay(1): all subscribers (N directives in the DOM) receive\n * the same value without N separate recomputations.\n */\n readonly currentBp$: Observable<BreakpointAlias> = this.bo\n .observe(CANONICAL_ALIASES.map(a => this.bp[a]))\n .pipe(\n map(() => this._resolve()),\n distinctUntilChanged(), // does not emit if the breakpoint hasn't actually changed\n shareReplay(1) // multicast: N directives, 1 single execution\n );\n\n /**\n * Signal derived from currentBp$.\n * Directives read it via effect() — zero manual subscriptions.\n * providedIn: 'root' ensures the Signal is a singleton.\n */\n readonly currentBp: Signal<BreakpointAlias> = toSignal(this.currentBp$, {\n initialValue: this._resolve(),\n });\n\n /**\n * Returns true if the given alias (or raw media query) is currently active.\n * Delegates to bo.isMatched() — synchronous, O(1), no extra observer created.\n *\n * @example\n * media.isActive('md') // true on 768–991px screens\n * media.isActive('lg-up') // true on 992px+\n */\n isActive(alias: string): boolean {\n const query = this.bp[alias] ?? alias; // fallback: treat as raw media query\n return this.bo.isMatched(query);\n }\n\n /**\n * Observable true/false for a specific alias.\n * Reuses currentBp$ instead of opening a new bo.observe():\n * no additional MediaQueryList listener is created.\n */\n isActive$(alias: string): Observable<boolean> {\n return this.currentBp$.pipe(\n map(() => this.isActive(alias)),\n distinctUntilChanged()\n );\n }\n\n /** Resolves the active canonical alias (from xxl down to xs, mobile-first) */\n private _resolve(): BreakpointAlias {\n for (let i = CANONICAL_ALIASES.length - 1; i >= 0; i--) {\n if (this.bo.isMatched(this.bp[CANONICAL_ALIASES[i]])) {\n return CANONICAL_ALIASES[i];\n }\n }\n return 'xs';\n }\n}\n","/**\r\n * @file if-bp.directive.ts (Angular 21 — signals)\r\n *\r\n * *ifBp — structural directive that adds/removes an element from the DOM\r\n * based on the active Bootstrap 5 breakpoint.\r\n *\r\n * Unlike [fxShow]/[fxHide] (which use display:none), *ifBp actually adds and\r\n * removes the element from the DOM — ideal for heavy components like mat-sidenav.\r\n *\r\n * Angular 21 changes:\r\n * • @Input setters replaced by input() / input.required()\r\n * • computed() derives alias list and active state reactively\r\n * • effect() in constructor handles DOM add/remove (no OnInit/OnChanges)\r\n * • No Injector, EffectRef, _initialized guard or manual subscriptions\r\n *\r\n * Usage:\r\n * <mat-sidenav *ifBp=\"'lg-up'\"> only rendered on lg and above\r\n * <div *ifBp=\"'xs'\">Mobile only</div>\r\n * <div *ifBp=\"'sm md'\">sm and md only (space-separated list of aliases)</div>\r\n * <div *ifBp=\"'lg-up'; else mobileRef\">Desktop view</div>\r\n * <ng-template #mobileRef>Mobile fallback</ng-template>\r\n *\r\n * Accepted alias values:\r\n * xs | sm | md | lg | xl | xxl\r\n * sm-up | md-up | lg-up | xl-up | xxl-up\r\n * sm-down | md-down | lg-down | xl-down\r\n * Space-separated list of any of the above\r\n */\r\n\r\nimport {\r\n Directive, TemplateRef, ViewContainerRef,\r\n computed, effect, inject, input,\r\n} from '@angular/core';\r\nimport { MediaObserver } from './media-observer.service';\r\n\r\n@Directive({\r\n selector: '[ifBp]',\r\n standalone: true,\r\n})\r\nexport class IfBpDirective {\r\n private readonly tpl = inject(TemplateRef<unknown>);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly media = inject(MediaObserver);\r\n\r\n /** Space-separated list of breakpoint aliases, e.g. `'lg xl xxl-up'` */\r\n readonly ifBp = input.required<string>();\r\n /** Optional else-template shown when no alias is active */\r\n readonly ifBpElse = input<TemplateRef<unknown>>();\r\n\r\n private readonly _aliases = computed(() => this.ifBp().trim().split(/\\s+/));\r\n private readonly _isActive = computed(() => {\r\n this.media.currentBp(); // reactive dependency — re-evaluates on breakpoint change\r\n return this._aliases().some(alias => this.media.isActive(alias));\r\n });\r\n\r\n /** Tracks whether the main view is currently embedded — plain field, not a signal. */\r\n private _hasView = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const active = this._isActive();\r\n const elseTpl = this.ifBpElse();\r\n\r\n if (active === this._hasView) return; // dirty-check\r\n\r\n this.vcr.clear();\r\n if (active) {\r\n this.vcr.createEmbeddedView(this.tpl);\r\n } else if (elseTpl) {\r\n this.vcr.createEmbeddedView(elseTpl);\r\n }\r\n this._hasView = active;\r\n });\r\n }\r\n}\r\n","/**\n * @file responsive-base.directive.ts (v5 — Angular 21 signals)\n *\n * ── What changed in v5 ────────────────────────────────────────────────────\n *\n * Full Angular 21 signals refactor:\n *\n * • resolve(), resolveNonCanonical(), resolveAll() are now PURE EXPORTED\n * FUNCTIONS that accept currentBp and isActive as parameters.\n * Directives call them from computed() or effect() with no \"this\" binding.\n *\n * • ResponsiveBaseDirective is now a thin utility base:\n * – Only injects ElementRef, Renderer2, MediaObserver, PLATFORM_ID.\n * – Exposes safeSetStyle() helper.\n * – No lifecycle hooks, no Injector, no EffectRef, no abstract apply().\n *\n * • Each concrete directive uses:\n * – input() for every @Input (signals, no more setters + _v/_nc maps)\n * – computed() to build BpValues / NcValues maps and derive resolved CSS\n * – effect() in the constructor to write to the DOM\n *\n * Benefits vs v4:\n * ✅ Zero manual lifecycle/subscription management (no OnInit/OnChanges/EffectRef)\n * ✅ Angular's reactive graph provides built-in dirty-checking and memoization\n * ✅ DOM writes happen only when the resolved CSS value actually changes\n * ✅ No more Injector injection just to create effects\n *\n * ── Resolution strategy (unchanged) ──────────────────────────────────────\n *\n * Canonical aliases (xs … xxl) → mobile-first cascade via resolve()\n * Non-canonical (lt-*, gt-*, *-up, *-down) → point-in-time isActive() checks\n * Final order: resolveNonCanonical() wins over resolve()\n */\n\nimport {\n Directive,\n inject, ElementRef, Renderer2, PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MediaObserver } from './media-observer.service';\nimport { CANONICAL_ALIASES, BreakpointAlias } from './breakpoints';\nimport { BpValues, NcValues } from './responsive-inputs.mixin';\n\n// ── O(1) alias → index lookup (module-level constant, shared across instances) ──\nexport const ALIAS_INDEX = new Map<string, number>(\n CANONICAL_ALIASES.map((a, i) => [a, i])\n);\n\n/**\n * All non-canonical alias keys in priority order (most specific first).\n * lt-sm is \"below sm\" (= xs only), lt-md is \"below md\" (= xs+sm), etc.\n * Narrower range = higher priority = checked first.\n */\nexport const NON_CANONICAL_PRIORITY = [\n // lt-* from narrowest to widest\n 'lt-sm', 'lt-md', 'lt-lg', 'lt-xl', 'lt-xxl',\n // gt-* from widest to narrowest\n 'gt-xs', 'gt-sm', 'gt-md', 'gt-lg', 'gt-xl',\n // Bootstrap *-down from narrowest to widest\n 'sm-down', 'md-down', 'lg-down', 'xl-down',\n // Bootstrap *-up from widest to narrowest\n 'sm-up', 'md-up', 'lg-up', 'xl-up', 'xxl-up',\n] as const;\n\n// ── Pure resolution functions ─────────────────────────────────────────────────\n// These are standalone functions (not class methods) so they can be called\n// from computed() closures without capturing `this`.\n\n/**\n * Resolution with three-tier priority:\n *\n * 1. Exact breakpoint match (e.g. currentBp='sm' → values['sm'])\n * 2. Generic `default` value (e.g. [fxFlex]=\"49\" — applies to all unspecified bps)\n * 3. Mobile-first cascade down (e.g. [fxFlex.xs]=\"X\" [fxFlex.md]=\"Y\" → lg cascades to md)\n *\n * This ensures [fxFlex]=\"49\" [fxFlex.xs]=\"100\" gives xs→100 and sm+→49,\n * instead of `xs` cascading up and shadowing the default on sm/md/lg.\n */\nexport function resolve<T>(\n values: BpValues<T>,\n currentBp: BreakpointAlias,\n): T | undefined {\n // 1. Exact match\n const exact = values[currentBp as keyof BpValues<T>];\n if (exact !== undefined) return exact;\n\n // 2. Generic default (wins over cascade — it's the \"applies everywhere\" value)\n const def = (values as Record<string, T | undefined>)['default'];\n if (def !== undefined) return def;\n\n // 3. Mobile-first cascade (only when no default — e.g. [fxFlex.xs]=\"X\" [fxFlex.md]=\"Y\")\n const idx = ALIAS_INDEX.get(currentBp) ?? 0;\n for (let i = idx - 1; i >= 0; i--) {\n const v = values[CANONICAL_ALIASES[i] as keyof BpValues<T>];\n if (v !== undefined) return v;\n }\n return undefined;\n}\n\n/**\n * Non-canonical point-in-time check: iterates NON_CANONICAL_PRIORITY and\n * returns the value for the first alias that isActive().\n */\nexport function resolveNonCanonical<T>(\n nc: NcValues<T>,\n isActive: (alias: string) => boolean,\n): T | undefined {\n for (const alias of NON_CANONICAL_PRIORITY) {\n const v = (nc as Record<string, T | undefined>)[alias];\n if (v !== undefined && isActive(alias)) return v;\n }\n return undefined;\n}\n\n/**\n * Full resolution: non-canonical overrides win over the canonical cascade.\n *\n * Usage inside computed():\n * const resolved = computed(() =>\n * resolveAll(this._v(), this._nc(), this.media.currentBp(), a => this.media.isActive(a))\n * );\n */\nexport function resolveAll<T>(\n canonical: BpValues<T>,\n nonCanonical: NcValues<T>,\n currentBp: BreakpointAlias,\n isActive: (alias: string) => boolean,\n): T | undefined {\n return resolveNonCanonical(nonCanonical, isActive) ?? resolve(canonical, currentBp);\n}\n\n// ── Base directive ─────────────────────────────────────────────────────────────\n\n@Directive()\nexport abstract class ResponsiveBaseDirective {\n protected readonly el = inject(ElementRef<HTMLElement>);\n protected readonly r2 = inject(Renderer2);\n protected readonly media = inject(MediaObserver);\n\n /** true in browser, false in SSR */\n protected readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /** SSR-safe style setter. Pass null/empty string to remove the property. */\n protected safeSetStyle(prop: string, value: string | null): void {\n if (value === null || value === '') {\n this.r2.removeStyle(this.el.nativeElement, prop);\n } else {\n this.r2.setStyle(this.el.nativeElement, prop, value);\n }\n }\n}\n","/**\r\n * @file fx-flex-extras.directives.ts (Angular 21 — signals)\r\n *\r\n * Flex child helper directives:\r\n * [fxFlexOrder] — CSS order\r\n * [fxFlexOffset] — margin-inline-start (RTL-safe)\r\n * [fxFlexAlign] — align-self override\r\n * [fxFlexFill] — fills the container (width/height 100%)\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • computed() derives the resolved CSS values\r\n * • effect() in constructor writes to DOM — no lifecycle hooks\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input, isDevMode } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\n@Directive({\r\n selector: `\r\n [fxFlexOrder],\r\n [fxFlexOrder.xs],[fxFlexOrder.sm],[fxFlexOrder.md],[fxFlexOrder.lg],[fxFlexOrder.xl],[fxFlexOrder.xxl],\r\n [fxFlexOrder.lt-sm],[fxFlexOrder.lt-md],[fxFlexOrder.lt-lg],[fxFlexOrder.lt-xl],[fxFlexOrder.lt-xxl],\r\n [fxFlexOrder.gt-xs],[fxFlexOrder.gt-sm],[fxFlexOrder.gt-md],[fxFlexOrder.gt-lg],[fxFlexOrder.gt-xl],\r\n [fxFlexOrder.sm-up],[fxFlexOrder.md-up],[fxFlexOrder.lg-up],[fxFlexOrder.xl-up],[fxFlexOrder.xxl-up],\r\n [fxFlexOrder.sm-down],[fxFlexOrder.md-down],[fxFlexOrder.lg-down],[fxFlexOrder.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxFlexOrderDirective extends ResponsiveBaseDirective {\r\n readonly fxFlexOrder = input<string>(undefined, { alias: 'fxFlexOrder' });\r\n readonly xs = input<string>(undefined, { alias: 'fxFlexOrder.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxFlexOrder.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxFlexOrder.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxFlexOrder.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxFlexOrder.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxFlexOrder.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxFlexOrder.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxFlexOrder.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxFlexOrder.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxFlexOrder.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxFlexOrder.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxFlexOrder.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxFlexOrder.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxFlexOrder.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxFlexOrder.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxFlexOrder.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxFlexOrder.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxFlexOrder.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxFlexOrder.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxFlexOrder.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxFlexOrder.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxFlexOrder.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxFlexOrder.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxFlexOrder.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxFlexOrder.xl-down' });\r\n\r\n private readonly _order = computed(() =>\r\n resolveAll(\r\n { default: this.fxFlexOrder(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? '0'\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const v = this._order();\r\n if (isDevMode() && isNaN(Number(v))) console.warn(`[fxFlexOrder] Non-numeric value: \"${v}\"`);\r\n this.safeSetStyle('order', v);\r\n });\r\n }\r\n}\r\n\r\n// ─── fxFlexOffset ────────────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxFlexOffset],\r\n [fxFlexOffset.xs],[fxFlexOffset.sm],[fxFlexOffset.md],[fxFlexOffset.lg],[fxFlexOffset.xl],[fxFlexOffset.xxl],\r\n [fxFlexOffset.lt-sm],[fxFlexOffset.lt-md],[fxFlexOffset.lt-lg],[fxFlexOffset.lt-xl],[fxFlexOffset.lt-xxl],\r\n [fxFlexOffset.gt-xs],[fxFlexOffset.gt-sm],[fxFlexOffset.gt-md],[fxFlexOffset.gt-lg],[fxFlexOffset.gt-xl],\r\n [fxFlexOffset.sm-up],[fxFlexOffset.md-up],[fxFlexOffset.lg-up],[fxFlexOffset.xl-up],[fxFlexOffset.xxl-up],\r\n [fxFlexOffset.sm-down],[fxFlexOffset.md-down],[fxFlexOffset.lg-down],[fxFlexOffset.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxFlexOffsetDirective extends ResponsiveBaseDirective {\r\n readonly fxFlexOffset = input<string>(undefined, { alias: 'fxFlexOffset' });\r\n readonly xs = input<string>(undefined, { alias: 'fxFlexOffset.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxFlexOffset.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxFlexOffset.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxFlexOffset.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxFlexOffset.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxFlexOffset.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxFlexOffset.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxFlexOffset.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxFlexOffset.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxFlexOffset.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxFlexOffset.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxFlexOffset.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxFlexOffset.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxFlexOffset.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxFlexOffset.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxFlexOffset.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxFlexOffset.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxFlexOffset.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxFlexOffset.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxFlexOffset.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxFlexOffset.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxFlexOffset.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxFlexOffset.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxFlexOffset.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxFlexOffset.xl-down' });\r\n\r\n private readonly _offset = computed(() =>\r\n resolveAll(\r\n { default: this.fxFlexOffset(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? '0'\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const v = this._offset();\r\n // ngx-layout parity: when the parent flex container is a column, offset\r\n // means push down on the cross axis -> margin-top. Otherwise (row or any\r\n // non-flex parent, e.g. plain block) push on the inline axis -> margin-inline-start\r\n // (RTL-safe). Detection is done via getComputedStyle so it works both with\r\n // [fxLayout] and with plain CSS flex containers.\r\n if (!this.isBrowser) {\r\n this.safeSetStyle('margin-inline-start', v);\r\n return;\r\n }\r\n const parent = this.el.nativeElement.parentElement;\r\n const isColumn = !!parent &&\r\n /^column/.test(getComputedStyle(parent).flexDirection || '');\r\n if (isColumn) {\r\n this.safeSetStyle('margin-inline-start', null);\r\n this.safeSetStyle('margin-top', v);\r\n } else {\r\n this.safeSetStyle('margin-top', null);\r\n this.safeSetStyle('margin-inline-start', v);\r\n }\r\n });\r\n }\r\n}\r\n\r\n// ─── fxFlexAlign ─────────────────────────────────────────────────────────────\r\n\r\ntype AlignSelf = 'auto' | 'start' | 'center' | 'end' | 'stretch' | 'baseline';\r\nconst ALIGN_SELF_MAP: Record<string, string> = {\r\n start: 'flex-start', end: 'flex-end', center: 'center',\r\n stretch: 'stretch', baseline: 'baseline', auto: 'auto',\r\n};\r\n\r\n@Directive({\r\n selector: `\r\n [fxFlexAlign],\r\n [fxFlexAlign.xs],[fxFlexAlign.sm],[fxFlexAlign.md],[fxFlexAlign.lg],[fxFlexAlign.xl],[fxFlexAlign.xxl],\r\n [fxFlexAlign.lt-sm],[fxFlexAlign.lt-md],[fxFlexAlign.lt-lg],[fxFlexAlign.lt-xl],[fxFlexAlign.lt-xxl],\r\n [fxFlexAlign.gt-xs],[fxFlexAlign.gt-sm],[fxFlexAlign.gt-md],[fxFlexAlign.gt-lg],[fxFlexAlign.gt-xl],\r\n [fxFlexAlign.sm-up],[fxFlexAlign.md-up],[fxFlexAlign.lg-up],[fxFlexAlign.xl-up],[fxFlexAlign.xxl-up],\r\n [fxFlexAlign.sm-down],[fxFlexAlign.md-down],[fxFlexAlign.lg-down],[fxFlexAlign.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxFlexAlignDirective extends ResponsiveBaseDirective {\r\n readonly fxFlexAlign = input<AlignSelf>(undefined, { alias: 'fxFlexAlign' });\r\n readonly xs = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xs' });\r\n readonly sm = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.sm' });\r\n readonly md = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.md' });\r\n readonly lg = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lg' });\r\n readonly xl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xl' });\r\n readonly xxl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xxl' });\r\n readonly ltSm = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-sm' });\r\n readonly ltMd = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-md' });\r\n readonly ltLg = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-lg' });\r\n readonly ltXl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-xl' });\r\n readonly ltXxl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-xxl' });\r\n readonly gtXs = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-xs' });\r\n readonly gtSm = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-sm' });\r\n readonly gtMd = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-md' });\r\n readonly gtLg = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-lg' });\r\n readonly gtXl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-xl' });\r\n readonly smUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.sm-up' });\r\n readonly mdUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.md-up' });\r\n readonly lgUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lg-up' });\r\n readonly xlUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xl-up' });\r\n readonly xxlUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xxl-up' });\r\n readonly smDown = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.sm-down' });\r\n readonly mdDown = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.md-down' });\r\n readonly lgDown = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lg-down' });\r\n readonly xlDown = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xl-down' });\r\n\r\n private readonly _alignSelf = computed(() => {\r\n const v = resolveAll(\r\n { default: this.fxFlexAlign(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? 'stretch';\r\n if (isDevMode() && !ALIGN_SELF_MAP[v]) console.warn(`[fxFlexAlign] Unknown value: \"${v}\". Valid: ${Object.keys(ALIGN_SELF_MAP).join(', ')}`);\r\n return ALIGN_SELF_MAP[v] ?? v;\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => { this.safeSetStyle('align-self', this._alignSelf()); });\r\n }\r\n}\r\n\r\n// ─── fxFlexFill ──────────────────────────────────────────────────────────────\r\n// fxFlexFill is intentionally non-responsive in its most common usage,\r\n// but supports breakpoint suffixes for edge cases where fill must be toggled.\r\n\r\ntype FillValue = 'fill' | 'none' | '' | boolean;\r\nfunction toBool(v: FillValue | undefined): boolean | undefined {\r\n if (v === undefined) return undefined;\r\n if (typeof v === 'boolean') return v;\r\n if (v === '') return true;\r\n return v !== 'none';\r\n}\r\n\r\n@Directive({\r\n selector: `\r\n [fxFlexFill],[fxFill],\r\n [fxFlexFill.xs],[fxFlexFill.sm],[fxFlexFill.md],[fxFlexFill.lg],[fxFlexFill.xl],[fxFlexFill.xxl],\r\n [fxFlexFill.lt-sm],[fxFlexFill.lt-md],[fxFlexFill.lt-lg],[fxFlexFill.lt-xl],[fxFlexFill.lt-xxl],\r\n [fxFlexFill.gt-xs],[fxFlexFill.gt-sm],[fxFlexFill.gt-md],[fxFlexFill.gt-lg],[fxFlexFill.gt-xl],\r\n [fxFlexFill.sm-up],[fxFlexFill.md-up],[fxFlexFill.lg-up],[fxFlexFill.xl-up],[fxFlexFill.xxl-up],\r\n [fxFlexFill.sm-down],[fxFlexFill.md-down],[fxFlexFill.lg-down],[fxFlexFill.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxFlexFillDirective extends ResponsiveBaseDirective {\r\n readonly fxFlexFill = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill', transform: toBool });\r\n readonly fxFill = input<boolean, FillValue>(undefined, { alias: 'fxFill', transform: toBool });\r\n readonly xs = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xs', transform: toBool });\r\n readonly sm = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.sm', transform: toBool });\r\n readonly md = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.md', transform: toBool });\r\n readonly lg = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lg', transform: toBool });\r\n readonly xl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xl', transform: toBool });\r\n readonly xxl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xxl', transform: toBool });\r\n readonly ltSm = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-sm', transform: toBool });\r\n readonly ltMd = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-md', transform: toBool });\r\n readonly ltLg = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-lg', transform: toBool });\r\n readonly ltXl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-xl', transform: toBool });\r\n readonly ltXxl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-xxl', transform: toBool });\r\n readonly gtXs = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-xs', transform: toBool });\r\n readonly gtSm = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-sm', transform: toBool });\r\n readonly gtMd = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-md', transform: toBool });\r\n readonly gtLg = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-lg', transform: toBool });\r\n readonly gtXl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-xl', transform: toBool });\r\n readonly smUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.sm-up', transform: toBool });\r\n readonly mdUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.md-up', transform: toBool });\r\n readonly lgUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lg-up', transform: toBool });\r\n readonly xlUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xl-up', transform: toBool });\r\n readonly xxlUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xxl-up', transform: toBool });\r\n readonly smDown = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.sm-down', transform: toBool });\r\n readonly mdDown = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.md-down', transform: toBool });\r\n readonly lgDown = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lg-down', transform: toBool });\r\n readonly xlDown = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xl-down', transform: toBool });\r\n\r\n private readonly _active = computed(() =>\r\n (resolveAll(\r\n // fxFill is a shorthand alias for the default; fxFlexFill wins if both set\r\n { default: this.fxFlexFill() ?? this.fxFill(),\r\n xs: this.xs() as boolean | undefined, sm: this.sm() as boolean | undefined,\r\n md: this.md() as boolean | undefined, lg: this.lg() as boolean | undefined,\r\n xl: this.xl() as boolean | undefined, xxl: this.xxl() as boolean | undefined },\r\n { 'lt-sm': this.ltSm() as boolean | undefined, 'lt-md': this.ltMd() as boolean | undefined,\r\n 'lt-lg': this.ltLg() as boolean | undefined, 'lt-xl': this.ltXl() as boolean | undefined,\r\n 'lt-xxl': this.ltXxl() as boolean | undefined,\r\n 'gt-xs': this.gtXs() as boolean | undefined, 'gt-sm': this.gtSm() as boolean | undefined,\r\n 'gt-md': this.gtMd() as boolean | undefined, 'gt-lg': this.gtLg() as boolean | undefined,\r\n 'gt-xl': this.gtXl() as boolean | undefined,\r\n 'sm-up': this.smUp() as boolean | undefined, 'md-up': this.mdUp() as boolean | undefined,\r\n 'lg-up': this.lgUp() as boolean | undefined, 'xl-up': this.xlUp() as boolean | undefined,\r\n 'xxl-up': this.xxlUp() as boolean | undefined,\r\n 'sm-down': this.smDown() as boolean | undefined, 'md-down': this.mdDown() as boolean | undefined,\r\n 'lg-down': this.lgDown() as boolean | undefined, 'xl-down': this.xlDown() as boolean | undefined },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) as boolean | undefined) ?? true\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const active = this._active();\r\n const v = active ? '100%' : null;\r\n this.safeSetStyle('margin', active ? '0' : null);\r\n // align-self: stretch ensures this element fills the parent's cross axis even\r\n // when the parent flex container has align-items: center (e.g. mat-toolbar).\r\n // Without this, height: 100% collapses to content height and align-items on\r\n // this container has no visible centering space.\r\n this.safeSetStyle('align-self', active ? 'stretch' : null);\r\n this.safeSetStyle('width', v);\r\n this.safeSetStyle('height', v);\r\n this.safeSetStyle('min-width', v);\r\n this.safeSetStyle('min-height', v);\r\n });\r\n }\r\n}\r\n","/**\n * @file fx-flex.directive.ts (Angular 21 — signals)\n *\n * [fxFlex] — flex shorthand on a flex child element.\n *\n * Angular 21 changes:\n * • All @Input setters replaced by input() signals\n * • computed() builds the BpValues / NcValues maps reactively\n * • effect() in constructor writes to the DOM — no lifecycle hooks needed\n * • resolveAll() is the pure function from responsive-base.directive.ts\n *\n * Accepted values:\n * (empty) → flex: 1 1 0%\n * \"auto\" → flex: 1 1 auto\n * \"none\" → flex: none\n * \"grow\" → flex: 1 1 100%\n * \"nogrow\" → flex: 0 1 auto\n * \"noshrink\" → flex: 1 0 auto\n * \"50%\" → flex: 1 1 50%\n * \"50\" → flex: 1 1 50% (unitless normalized to %)\n * \"200px\" → flex: 1 1 200px\n * \"0 0 200px\" → flex: 0 0 200px (full shorthand passthrough)\n *\n * Breakpoint suffixes:\n * Canonical : .xs .sm .md .lg .xl .xxl\n * lt-* : .lt-sm .lt-md .lt-lg .lt-xl .lt-xxl\n * gt-* : .gt-xs .gt-sm .gt-md .gt-lg .gt-xl\n * *-up : .sm-up .md-up .lg-up .xl-up .xxl-up\n * *-down : .sm-down .md-down .lg-down .xl-down\n */\n\nimport { Directive, computed, effect, input } from '@angular/core';\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\n\nfunction toFlexCss(raw: string | undefined): string {\n if (raw === undefined || raw === '' || raw === '*') return '1 1 auto';\n if (raw === 'none') return 'none';\n if (raw === 'auto') return '1 1 auto';\n if (raw === 'grow') return '1 1 100%';\n if (raw === 'nogrow') return '0 1 auto';\n if (raw === 'noshrink') return '1 0 auto';\n const parts = raw.trim().split(/\\s+/);\n if (parts.length === 3) return raw.trim();\n let basis = parts[0];\n if (/^\\d+(\\.\\d+)?$/.test(basis)) basis = basis + '%';\n // Fixed units (px, em, rem, vh, vw…) → 0 0 (no grow/shrink); % → 1 1\n const fixed = /px|em|rem|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc/.test(basis);\n return `${fixed ? '0 0' : '1 1'} ${basis}`;\n}\n\n/** Returns true if any sibling element in the same parent has fxFlex=\"*\" */\nfunction parentHasStar(el: HTMLElement): boolean {\n const parent = el.parentElement;\n if (!parent) return false;\n return Array.from(parent.children).some(\n c => c !== el && (c.getAttribute('fxflex') === '*' || c.getAttribute('fxFlex') === '*')\n );\n}\n\n@Directive({\n selector: `\n [fxFlex],\n [fxFlex.xs],[fxFlex.sm],[fxFlex.md],[fxFlex.lg],[fxFlex.xl],[fxFlex.xxl],\n [fxFlex.lt-sm],[fxFlex.lt-md],[fxFlex.lt-lg],[fxFlex.lt-xl],[fxFlex.lt-xxl],\n [fxFlex.gt-xs],[fxFlex.gt-sm],[fxFlex.gt-md],[fxFlex.gt-lg],[fxFlex.gt-xl],\n [fxFlex.sm-up],[fxFlex.md-up],[fxFlex.lg-up],[fxFlex.xl-up],[fxFlex.xxl-up],\n [fxFlex.sm-down],[fxFlex.md-down],[fxFlex.lg-down],[fxFlex.xl-down]\n `,\n standalone: true,\n})\nexport class FxFlexDirective extends ResponsiveBaseDirective {\n // ── Canonical signal inputs ───────────────────────────────────────────────\n readonly fxFlex = input<string>(undefined, { alias: 'fxFlex' });\n readonly xs = input<string>(undefined, { alias: 'fxFlex.xs' });\n readonly sm = input<string>(undefined, { alias: 'fxFlex.sm' });\n readonly md = input<string>(undefined, { alias: 'fxFlex.md' });\n readonly lg = input<string>(undefined, { alias: 'fxFlex.lg' });\n readonly xl = input<string>(undefined, { alias: 'fxFlex.xl' });\n readonly xxl = input<string>(undefined, { alias: 'fxFlex.xxl' });\n // ── lt-* ─────────────────────────────────────────────────────────────────\n readonly ltSm = input<string>(undefined, { alias: 'fxFlex.lt-sm' });\n readonly ltMd = input<string>(undefined, { alias: 'fxFlex.lt-md' });\n readonly ltLg = input<string>(undefined, { alias: 'fxFlex.lt-lg' });\n readonly ltXl = input<string>(undefined, { alias: 'fxFlex.lt-xl' });\n readonly ltXxl = input<string>(undefined, { alias: 'fxFlex.lt-xxl' });\n // ── gt-* ─────────────────────────────────────────────────────────────────\n readonly gtXs = input<string>(undefined, { alias: 'fxFlex.gt-xs' });\n readonly gtSm = input<string>(undefined, { alias: 'fxFlex.gt-sm' });\n readonly gtMd = input<string>(undefined, { alias: 'fxFlex.gt-md' });\n readonly gtLg = input<string>(undefined, { alias: 'fxFlex.gt-lg' });\n readonly gtXl = input<string>(undefined, { alias: 'fxFlex.gt-xl' });\n // ── *-up ─────────────────────────────────────────────────────────────────\n readonly smUp = input<string>(undefined, { alias: 'fxFlex.sm-up' });\n readonly mdUp = input<string>(undefined, { alias: 'fxFlex.md-up' });\n readonly lgUp = input<string>(undefined, { alias: 'fxFlex.lg-up' });\n readonly xlUp = input<string>(undefined, { alias: 'fxFlex.xl-up' });\n readonly xxlUp = input<string>(undefined, { alias: 'fxFlex.xxl-up' });\n // ── *-down ───────────────────────────────────────────────────────────────\n readonly smDown = input<string>(undefined, { alias: 'fxFlex.sm-down' });\n readonly mdDown = input<string>(undefined, { alias: 'fxFlex.md-down' });\n readonly lgDown = input<string>(undefined, { alias: 'fxFlex.lg-down' });\n readonly xlDown = input<string>(undefined, { alias: 'fxFlex.xl-down' });\n\n // ── Derived CSS value ──────────────────────────────────────────────────────\n // Inlined single computed: Angular tracks each input() individually,\n // so _flexCss only recomputes when a signal it actually reads changes.\n private readonly _rawFlex = computed(() =>\n resolveAll(\n { default: this.fxFlex(), xs: this.xs(), sm: this.sm(), md: this.md(),\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\n this.media.currentBp(), a => this.media.isActive(a)\n )\n );\n\n constructor() {\n super();\n effect(() => {\n const raw = this._rawFlex();\n // undefined means no rule matched the current breakpoint (e.g. only fxFlex.lt-md=\"100\"\n // is set and the current bp is lg+). Remove flex entirely so the browser default\n // (flex: 0 1 auto) applies and justify-content can distribute the remaining space.\n if (raw === undefined) {\n this.safeSetStyle('flex', null);\n this.safeSetStyle('box-sizing', null);\n return;\n }\n // empty string / \"*\" → equal distribution (1 1 auto), unless a star-sibling is present\n const css = raw === ''\n ? (parentHasStar(this.el.nativeElement) ? '0 0 auto' : '1 1 auto')\n : toFlexCss(raw);\n this.safeSetStyle('flex', css);\n this.safeSetStyle('box-sizing', 'border-box');\n });\n }\n}\n","/**\r\n * @file fx-grid.directives.ts (Angular 21 — signals)\r\n *\r\n * CSS Grid responsive directives.\r\n *\r\n * [fxGrid] — display:grid + responsive grid-template-columns.\r\n * Accepts [fxGridRows] and [fxGridGap] inputs on same host.\r\n * [fxGridColumn] — grid-column on a child\r\n * [fxGridArea] — grid-area on a child\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • FxGridDirective uses 3 pairs of computed() for cols/rows/gap maps\r\n * • Single effect() in constructor writes all 3 CSS props\r\n * • Null/undefined props are removed (no style leak)\r\n *\r\n * Unitless numeric gap values are normalized to px (\"16\" → \"16px\").\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\nfunction normalizeGap(raw: string | undefined): string | undefined {\r\n if (!raw) return undefined;\r\n return raw.trim().split(/\\s+/)\r\n .map(v => /^\\d+(\\.\\d+)?$/.test(v) ? `${v}px` : v)\r\n .join(' ');\r\n}\r\n\r\n// ─── fxGrid (container) ──────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxGrid],\r\n [fxGrid.xs],[fxGrid.sm],[fxGrid.md],[fxGrid.lg],[fxGrid.xl],[fxGrid.xxl],\r\n [fxGrid.lt-sm],[fxGrid.lt-md],[fxGrid.lt-lg],[fxGrid.lt-xl],[fxGrid.lt-xxl],\r\n [fxGrid.gt-xs],[fxGrid.gt-sm],[fxGrid.gt-md],[fxGrid.gt-lg],[fxGrid.gt-xl],\r\n [fxGrid.sm-up],[fxGrid.md-up],[fxGrid.lg-up],[fxGrid.xl-up],[fxGrid.xxl-up],\r\n [fxGrid.sm-down],[fxGrid.md-down],[fxGrid.lg-down],[fxGrid.xl-down]\r\n `,\r\n standalone: true,\r\n host: { '[style.display]': '\"grid\"' },\r\n})\r\nexport class FxGridDirective extends ResponsiveBaseDirective {\r\n // ── grid-template-columns ──────────────────────────────────────────────────\r\n readonly fxGrid = input<string>(undefined, { alias: 'fxGrid' });\r\n readonly xs = input<string>(undefined, { alias: 'fxGrid.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxGrid.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxGrid.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxGrid.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxGrid.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxGrid.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxGrid.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxGrid.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxGrid.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxGrid.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxGrid.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxGrid.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxGrid.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxGrid.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxGrid.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxGrid.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxGrid.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxGrid.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxGrid.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxGrid.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxGrid.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxGrid.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxGrid.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxGrid.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxGrid.xl-down' });\r\n\r\n // ── grid-template-rows ────────────────────────────────────────────────────\r\n readonly fxGridRows = input<string>(undefined, { alias: 'fxGridRows' });\r\n readonly rowsXs = input<string>(undefined, { alias: 'fxGridRows.xs' });\r\n readonly rowsSm = input<string>(undefined, { alias: 'fxGridRows.sm' });\r\n readonly rowsMd = input<string>(undefined, { alias: 'fxGridRows.md' });\r\n readonly rowsLg = input<string>(undefined, { alias: 'fxGridRows.lg' });\r\n readonly rowsXl = input<string>(undefined, { alias: 'fxGridRows.xl' });\r\n readonly rowsXxl = input<string>(undefined, { alias: 'fxGridRows.xxl' });\r\n readonly rowsLtSm = input<string>(undefined, { alias: 'fxGridRows.lt-sm' });\r\n readonly rowsLtMd = input<string>(undefined, { alias: 'fxGridRows.lt-md' });\r\n readonly rowsLtLg = input<string>(undefined, { alias: 'fxGridRows.lt-lg' });\r\n readonly rowsLtXl = input<string>(undefined, { alias: 'fxGridRows.lt-xl' });\r\n readonly rowsLtXxl = input<string>(undefined, { alias: 'fxGridRows.lt-xxl' });\r\n readonly rowsGtXs = input<string>(undefined, { alias: 'fxGridRows.gt-xs' });\r\n readonly rowsGtSm = input<string>(undefined, { alias: 'fxGridRows.gt-sm' });\r\n readonly rowsGtMd = input<string>(undefined, { alias: 'fxGridRows.gt-md' });\r\n readonly rowsGtLg = input<string>(undefined, { alias: 'fxGridRows.gt-lg' });\r\n readonly rowsGtXl = input<string>(undefined, { alias: 'fxGridRows.gt-xl' });\r\n readonly rowsSmUp = input<string>(undefined, { alias: 'fxGridRows.sm-up' });\r\n readonly rowsMdUp = input<string>(undefined, { alias: 'fxGridRows.md-up' });\r\n readonly rowsLgUp = input<string>(undefined, { alias: 'fxGridRows.lg-up' });\r\n readonly rowsXlUp = input<string>(undefined, { alias: 'fxGridRows.xl-up' });\r\n readonly rowsXxlUp = input<string>(undefined, { alias: 'fxGridRows.xxl-up' });\r\n readonly rowsSmDown = input<string>(undefined, { alias: 'fxGridRows.sm-down' });\r\n readonly rowsMdDown = input<string>(undefined, { alias: 'fxGridRows.md-down' });\r\n readonly rowsLgDown = input<string>(undefined, { alias: 'fxGridRows.lg-down' });\r\n readonly rowsXlDown = input<string>(undefined, { alias: 'fxGridRows.xl-down' });\r\n\r\n // ── gap ───────────────────────────────────────────────────────────────────\r\n readonly fxGridGap = input<string>(undefined, { alias: 'fxGridGap' });\r\n readonly gapXs = input<string>(undefined, { alias: 'fxGridGap.xs' });\r\n readonly gapSm = input<string>(undefined, { alias: 'fxGridGap.sm' });\r\n readonly gapMd = input<string>(undefined, { alias: 'fxGridGap.md' });\r\n readonly gapLg = input<string>(undefined, { alias: 'fxGridGap.lg' });\r\n readonly gapXl = input<string>(undefined, { alias: 'fxGridGap.xl' });\r\n readonly gapXxl = input<string>(undefined, { alias: 'fxGridGap.xxl' });\r\n readonly gapLtSm = input<string>(undefined, { alias: 'fxGridGap.lt-sm' });\r\n readonly gapLtMd = input<string>(undefined, { alias: 'fxGridGap.lt-md' });\r\n readonly gapLtLg = input<string>(undefined, { alias: 'fxGridGap.lt-lg' });\r\n readonly gapLtXl = input<string>(undefined, { alias: 'fxGridGap.lt-xl' });\r\n readonly gapLtXxl = input<string>(undefined, { alias: 'fxGridGap.lt-xxl' });\r\n readonly gapGtXs = input<string>(undefined, { alias: 'fxGridGap.gt-xs' });\r\n readonly gapGtSm = input<string>(undefined, { alias: 'fxGridGap.gt-sm' });\r\n readonly gapGtMd = input<string>(undefined, { alias: 'fxGridGap.gt-md' });\r\n readonly gapGtLg = input<string>(undefined, { alias: 'fxGridGap.gt-lg' });\r\n readonly gapGtXl = input<string>(undefined, { alias: 'fxGridGap.gt-xl' });\r\n readonly gapSmUp = input<string>(undefined, { alias: 'fxGridGap.sm-up' });\r\n readonly gapMdUp = input<string>(undefined, { alias: 'fxGridGap.md-up' });\r\n readonly gapLgUp = input<string>(undefined, { alias: 'fxGridGap.lg-up' });\r\n readonly gapXlUp = input<string>(undefined, { alias: 'fxGridGap.xl-up' });\r\n readonly gapXxlUp = input<string>(undefined, { alias: 'fxGridGap.xxl-up' });\r\n readonly gapSmDown = input<string>(undefined, { alias: 'fxGridGap.sm-down' });\r\n readonly gapMdDown = input<string>(undefined, { alias: 'fxGridGap.md-down' });\r\n readonly gapLgDown = input<string>(undefined, { alias: 'fxGridGap.lg-down' });\r\n readonly gapXlDown = input<string>(undefined, { alias: 'fxGridGap.xl-down' });\r\n\r\n // ── resolved values (flat computed — no intermediate object computed) ──────\r\n private readonly _cols = computed(() =>\r\n resolveAll<string>(\r\n { default: this.fxGrid(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n )\r\n );\r\n private readonly _rows = computed(() =>\r\n resolveAll<string>(\r\n { default: this.fxGridRows(), xs: this.rowsXs(), sm: this.rowsSm(),\r\n md: this.rowsMd(), lg: this.rowsLg(), xl: this.rowsXl(), xxl: this.rowsXxl() },\r\n { 'lt-sm': this.rowsLtSm(), 'lt-md': this.rowsLtMd(), 'lt-lg': this.rowsLtLg(),\r\n 'lt-xl': this.rowsLtXl(), 'lt-xxl': this.rowsLtXxl(),\r\n 'gt-xs': this.rowsGtXs(), 'gt-sm': this.rowsGtSm(), 'gt-md': this.rowsGtMd(),\r\n 'gt-lg': this.rowsGtLg(), 'gt-xl': this.rowsGtXl(),\r\n 'sm-up': this.rowsSmUp(), 'md-up': this.rowsMdUp(), 'lg-up': this.rowsLgUp(),\r\n 'xl-up': this.rowsXlUp(), 'xxl-up': this.rowsXxlUp(),\r\n 'sm-down': this.rowsSmDown(), 'md-down': this.rowsMdDown(),\r\n 'lg-down': this.rowsLgDown(), 'xl-down': this.rowsXlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n )\r\n );\r\n private readonly _gap = computed(() =>\r\n normalizeGap(resolveAll<string>(\r\n { default: this.fxGridGap(), xs: this.gapXs(), sm: this.gapSm(),\r\n md: this.gapMd(), lg: this.gapLg(), xl: this.gapXl(), xxl: this.gapXxl() },\r\n { 'lt-sm': this.gapLtSm(), 'lt-md': this.gapLtMd(), 'lt-lg': this.gapLtLg(),\r\n 'lt-xl': this.gapLtXl(), 'lt-xxl': this.gapLtXxl(),\r\n 'gt-xs': this.gapGtXs(), 'gt-sm': this.gapGtSm(), 'gt-md': this.gapGtMd(),\r\n 'gt-lg': this.gapGtLg(), 'gt-xl': this.gapGtXl(),\r\n 'sm-up': this.gapSmUp(), 'md-up': this.gapMdUp(), 'lg-up': this.gapLgUp(),\r\n 'xl-up': this.gapXlUp(), 'xxl-up': this.gapXxlUp(),\r\n 'sm-down': this.gapSmDown(), 'md-down': this.gapMdDown(),\r\n 'lg-down': this.gapLgDown(), 'xl-down': this.gapXlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ))\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const cols = this._cols();\r\n const rows = this._rows();\r\n const gap = this._gap();\r\n cols ? this.safeSetStyle('grid-template-columns', cols)\r\n : this.r2.removeStyle(this.el.nativeElement, 'grid-template-columns');\r\n rows ? this.safeSetStyle('grid-template-rows', rows)\r\n : this.r2.removeStyle(this.el.nativeElement, 'grid-template-rows');\r\n gap ? this.safeSetStyle('gap', gap)\r\n : this.r2.removeStyle(this.el.nativeElement, 'gap');\r\n });\r\n }\r\n}\r\n\r\n// ─── fxGridColumn ─────────────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxGridColumn],\r\n [fxGridColumn.xs],[fxGridColumn.sm],[fxGridColumn.md],[fxGridColumn.lg],[fxGridColumn.xl],[fxGridColumn.xxl],\r\n [fxGridColumn.lt-sm],[fxGridColumn.lt-md],[fxGridColumn.lt-lg],[fxGridColumn.lt-xl],[fxGridColumn.lt-xxl],\r\n [fxGridColumn.gt-xs],[fxGridColumn.gt-sm],[fxGridColumn.gt-md],[fxGridColumn.gt-lg],[fxGridColumn.gt-xl],\r\n [fxGridColumn.sm-up],[fxGridColumn.md-up],[fxGridColumn.lg-up],[fxGridColumn.xl-up],[fxGridColumn.xxl-up],\r\n [fxGridColumn.sm-down],[fxGridColumn.md-down],[fxGridColumn.lg-down],[fxGridColumn.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxGridColumnDirective extends ResponsiveBaseDirective {\r\n readonly fxGridColumn = input<string>(undefined, { alias: 'fxGridColumn' });\r\n readonly xs = input<string>(undefined, { alias: 'fxGridColumn.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxGridColumn.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxGridColumn.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxGridColumn.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxGridColumn.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxGridColumn.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxGridColumn.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxGridColumn.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxGridColumn.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxGridColumn.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxGridColumn.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxGridColumn.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxGridColumn.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxGridColumn.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxGridColumn.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxGridColumn.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxGridColumn.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxGridColumn.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxGridColumn.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxGridColumn.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxGridColumn.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxGridColumn.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxGridColumn.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxGridColumn.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxGridColumn.xl-down' });\r\n\r\n private readonly _resolved = computed(() =>\r\n resolveAll<string>(\r\n { default: this.fxGridColumn(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n )\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const v = this._resolved();\r\n v ? this.safeSetStyle('grid-column', v)\r\n : this.r2.removeStyle(this.el.nativeElement, 'grid-column');\r\n });\r\n }\r\n}\r\n\r\n// ─── fxGridArea ───────────────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxGridArea],\r\n [fxGridArea.xs],[fxGridArea.sm],[fxGridArea.md],[fxGridArea.lg],[fxGridArea.xl],[fxGridArea.xxl],\r\n [fxGridArea.lt-sm],[fxGridArea.lt-md],[fxGridArea.lt-lg],[fxGridArea.lt-xl],[fxGridArea.lt-xxl],\r\n [fxGridArea.gt-xs],[fxGridArea.gt-sm],[fxGridArea.gt-md],[fxGridArea.gt-lg],[fxGridArea.gt-xl],\r\n [fxGridArea.sm-up],[fxGridArea.md-up],[fxGridArea.lg-up],[fxGridArea.xl-up],[fxGridArea.xxl-up],\r\n [fxGridArea.sm-down],[fxGridArea.md-down],[fxGridArea.lg-down],[fxGridArea.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxGridAreaDirective extends ResponsiveBaseDirective {\r\n readonly fxGridArea = input<string>(undefined, { alias: 'fxGridArea' });\r\n readonly xs = input<string>(undefined, { alias: 'fxGridArea.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxGridArea.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxGridArea.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxGridArea.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxGridArea.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxGridArea.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxGridArea.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxGridArea.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxGridArea.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxGridArea.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxGridArea.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxGridArea.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxGridArea.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxGridArea.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxGridArea.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxGridArea.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxGridArea.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxGridArea.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxGridArea.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxGridArea.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxGridArea.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxGridArea.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxGridArea.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxGridArea.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxGridArea.xl-down' });\r\n\r\n private readonly _resolved = computed(() =>\r\n resolveAll<string>(\r\n { default: this.fxGridArea(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n )\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const v = this._resolved();\r\n v ? this.safeSetStyle('grid-area', v)\r\n : this.r2.removeStyle(this.el.nativeElement, 'grid-area');\r\n });\r\n }\r\n}\r\n","/**\r\n * @file fx-layout-align.directive.ts (Angular 21 — signals)\r\n *\r\n * [fxLayoutAlign] — sets justify-content + align-items on a flex container.\r\n *\r\n * Format: \"mainAxis crossAxis\"\r\n * mainAxis : start | center | end | space-between | space-around | space-evenly\r\n * crossAxis : start | center | end | stretch | baseline (default: stretch)\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • computed() derives the resolved CSS pair\r\n * • effect() in constructor writes to DOM\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input, isDevMode } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\nconst MAIN_MAP: Record<string, string> = {\r\n 'start': 'flex-start', 'end': 'flex-end', 'center': 'center',\r\n 'space-between': 'space-between', 'space-around': 'space-around', 'space-evenly': 'space-evenly',\r\n};\r\nconst CROSS_MAP: Record<string, string> = {\r\n 'start': 'flex-start', 'end': 'flex-end', 'center': 'center',\r\n 'stretch': 'stretch', 'baseline': 'baseline',\r\n};\r\n\r\nfunction parseAlign(raw: string): [string, string] {\r\n const [main = 'start', cross = 'stretch'] = raw.trim().split(/\\s+/);\r\n if (isDevMode() && !MAIN_MAP[main]) console.warn(`[fxLayoutAlign] Unknown mainAxis: \"${main}\"`);\r\n if (isDevMode() && !CROSS_MAP[cross]) console.warn(`[fxLayoutAlign] Unknown crossAxis: \"${cross}\"`);\r\n return [MAIN_MAP[main] ?? 'flex-start', CROSS_MAP[cross] ?? 'stretch'];\r\n}\r\n\r\n@Directive({\r\n selector: `\r\n [fxLayoutAlign],\r\n [fxLayoutAlign.xs],[fxLayoutAlign.sm],[fxLayoutAlign.md],[fxLayoutAlign.lg],[fxLayoutAlign.xl],[fxLayoutAlign.xxl],\r\n [fxLayoutAlign.lt-sm],[fxLayoutAlign.lt-md],[fxLayoutAlign.lt-lg],[fxLayoutAlign.lt-xl],[fxLayoutAlign.lt-xxl],\r\n [fxLayoutAlign.gt-xs],[fxLayoutAlign.gt-sm],[fxLayoutAlign.gt-md],[fxLayoutAlign.gt-lg],[fxLayoutAlign.gt-xl],\r\n [fxLayoutAlign.sm-up],[fxLayoutAlign.md-up],[fxLayoutAlign.lg-up],[fxLayoutAlign.xl-up],[fxLayoutAlign.xxl-up],\r\n [fxLayoutAlign.sm-down],[fxLayoutAlign.md-down],[fxLayoutAlign.lg-down],[fxLayoutAlign.xl-down]\r\n `,\r\n standalone: true,\r\n // fxLayoutAlign implies a flex container. The host binding makes this SSR-safe\r\n // and avoids racing with fxLayout (which also sets display:flex via host binding):\r\n // when both directives are on the same element Angular sets the property once.\r\n host: { '[style.display]': '\"flex\"' },\r\n})\r\nexport class FxLayoutAlignDirective extends ResponsiveBaseDirective {\r\n readonly fxLayoutAlign = input<string>(undefined, { alias: 'fxLayoutAlign' });\r\n readonly xs = input<string>(undefined, { alias: 'fxLayoutAlign.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxLayoutAlign.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxLayoutAlign.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxLayoutAlign.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxLayoutAlign.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxLayoutAlign.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxLayoutAlign.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxLayoutAlign.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxLayoutAlign.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxLayoutAlign.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxLayoutAlign.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxLayoutAlign.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxLayoutAlign.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxLayoutAlign.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxLayoutAlign.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxLayoutAlign.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxLayoutAlign.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxLayoutAlign.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxLayoutAlign.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxLayoutAlign.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxLayoutAlign.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxLayoutAlign.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxLayoutAlign.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxLayoutAlign.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxLayoutAlign.xl-down' });\r\n\r\n private readonly _parsed = computed(() =>\r\n parseAlign(resolveAll(\r\n { default: this.fxLayoutAlign(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? 'start stretch')\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const [jc, ai] = this._parsed();\r\n this.safeSetStyle('justify-content', jc);\r\n this.safeSetStyle('align-items', ai);\r\n });\r\n }\r\n}\r\n","/**\r\n * @file fx-layout-gap.directive.ts (Angular 21 — signals)\r\n *\r\n * [fxLayoutGap] — sets gap on a flex or grid container.\r\n * Unitless numbers are normalized to px (e.g. \"16\" → \"16px\").\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • computed() derives the normalized gap value\r\n * • effect() in constructor writes to DOM\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\nfunction normalizeGap(raw: string): string {\r\n return raw.trim().split(/\\s+/)\r\n .map(v => /^\\d+(\\.\\d+)?$/.test(v) ? `${v}px` : v)\r\n .join(' ');\r\n}\r\n\r\n@Directive({\r\n selector: `\r\n [fxLayoutGap],\r\n [fxLayoutGap.xs],[fxLayoutGap.sm],[fxLayoutGap.md],[fxLayoutGap.lg],[fxLayoutGap.xl],[fxLayoutGap.xxl],\r\n [fxLayoutGap.lt-sm],[fxLayoutGap.lt-md],[fxLayoutGap.lt-lg],[fxLayoutGap.lt-xl],[fxLayoutGap.lt-xxl],\r\n [fxLayoutGap.gt-xs],[fxLayoutGap.gt-sm],[fxLayoutGap.gt-md],[fxLayoutGap.gt-lg],[fxLayoutGap.gt-xl],\r\n [fxLayoutGap.sm-up],[fxLayoutGap.md-up],[fxLayoutGap.lg-up],[fxLayoutGap.xl-up],[fxLayoutGap.xxl-up],\r\n [fxLayoutGap.sm-down],[fxLayoutGap.md-down],[fxLayoutGap.lg-down],[fxLayoutGap.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxLayoutGapDirective extends ResponsiveBaseDirective {\r\n readonly fxLayoutGap = input<string>(undefined, { alias: 'fxLayoutGap' });\r\n readonly xs = input<string>(undefined, { alias: 'fxLayoutGap.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxLayoutGap.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxLayoutGap.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxLayoutGap.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxLayoutGap.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxLayoutGap.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxLayoutGap.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxLayoutGap.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxLayoutGap.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxLayoutGap.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxLayoutGap.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxLayoutGap.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxLayoutGap.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxLayoutGap.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxLayoutGap.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxLayoutGap.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxLayoutGap.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxLayoutGap.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxLayoutGap.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxLayoutGap.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxLayoutGap.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxLayoutGap.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxLayoutGap.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxLayoutGap.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxLayoutGap.xl-down' });\r\n\r\n private readonly _gap = computed(() =>\r\n normalizeGap(resolveAll(\r\n { default: this.fxLayoutGap(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? '0')\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => { this.safeSetStyle('gap', this._gap()); });\r\n }\r\n}\r\n","/**\n * @file fx-layout.directive.ts (Angular 21 - signals)\n *\n * [fxLayout] -- sets flex-direction (and optionally flex-wrap) on the host.\n * [fxLayoutWrap] -- dedicated alias for flex-wrap (original ngx-layout compat).\n *\n * Angular 21 changes:\n * - All @Input setters replaced by input() signals\n * - computed() builds reactive BP maps and derives CSS values\n * - effect() in constructor writes to DOM -- no lifecycle hooks\n *\n * Breakpoint suffixes:\n * Canonical : .xs .sm .md .lg .xl .xxl\n * lt-* : .lt-sm .lt-md .lt-lg .lt-xl .lt-xxl\n * gt-* : .gt-xs .gt-sm .gt-md .gt-lg .gt-xl\n * *-up : .sm-up .md-up .lg-up .xl-up .xxl-up\n * *-down : .sm-down .md-down .lg-down .xl-down\n */\n\nimport { Directive, computed, effect, input } from '@angular/core';\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\n\nconst VALID_DIRECTIONS = new Set(['row', 'column', 'row-reverse', 'column-reverse']);\nconst VALID_WRAPS = new Set(['wrap', 'wrap-reverse', 'nowrap']);\n\nfunction parseLayout(raw: string): [string, string] {\n const parts = raw.trim().split(/\\s+/);\n const dir = VALID_DIRECTIONS.has(parts[0]) ? parts[0] : 'row';\n const wrap = VALID_WRAPS.has(parts[1]) ? parts[1] : 'nowrap';\n return [dir, wrap];\n}\n\n@Directive({\n selector: `\n [fxLayout],\n [fxLayout.xs],[fxLayout.sm],[fxLayout.md],[fxLayout.lg],[fxLayout.xl],[fxLayout.xxl],\n [fxLayout.lt-sm],[fxLayout.lt-md],[fxLayout.lt-lg],[fxLayout.lt-xl],[fxLayout.lt-xxl],\n [fxLayout.gt-xs],[fxLayout.gt-sm],[fxLayout.gt-md],[fxLayout.gt-lg],[fxLayout.gt-xl],\n [fxLayout.sm-up],[fxLayout.md-up],[fxLayout.lg-up],[fxLayout.xl-up],[fxLayout.xxl-up],\n [fxLayout.sm-down],[fxLayout.md-down],[fxLayout.lg-down],[fxLayout.xl-down]\n `,\n standalone: true,\n host: { '[style.display]': '\"flex\"' },\n})\nexport class FxLayoutDirective extends ResponsiveBaseDirective {\n readonly fxLayout = input<string>('row', { alias: 'fxLayout' });\n readonly xs = input<string>(undefined, { alias: 'fxLayout.xs' });\n readonly sm = input<string>(undefined, { alias: 'fxLayout.sm' });\n readonly md = input<string>(undefined, { alias: 'fxLayout.md' });\n readonly lg = input<string>(undefined, { alias: 'fxLayout.lg' });\n readonly xl = input<string>(undefined, { alias: 'fxLayout.xl' });\n readonly xxl = input<string>(undefined, { alias: 'fxLayout.xxl' });\n readonly ltSm = input<string>(undefined, { alias: 'fxLayout.lt-sm' });\n readonly ltMd = input<string>(undefined, { alias: 'fxLayout.lt-md' });\n readonly ltLg = input<string>(undefined, { alias: 'fxLayout.lt-lg' });\n readonly ltXl = input<string>(undefined, { alias: 'fxLayout.lt-xl' });\n readonly ltXxl = input<string>(undefined, { alias: 'fxLayout.lt-xxl' });\n readonly gtXs = input<string>(undefined, { alias: 'fxLayout.gt-xs' });\n readonly gtSm = input<string>(undefined, { alias: 'fxLayout.gt-sm' });\n readonly gtMd = input<string>(undefined, { alias: 'fxLayout.gt-md' });\n readonly gtLg = input<string>(undefined, { alias: 'fxLayout.gt-lg' });\n readonly gtXl = input<string>(undefined, { alias: 'fxLayout.gt-xl' });\n readonly smUp = input<string>(undefined, { alias: 'fxLayout.sm-up' });\n readonly mdUp = input<string>(undefined, { alias: 'fxLayout.md-up' });\n readonly lgUp = input<string>(undefined, { alias: 'fxLayout.lg-up' });\n readonly xlUp = input<string>(undefined, { alias: 'fxLayout.xl-up' });\n readonly xxlUp = input<string>(undefined, { alias: 'fxLayout.xxl-up' });\n readonly smDown = input<string>(undefined, { alias: 'fxLayout.sm-down' });\n readonly mdDown = input<string>(undefined, { alias: 'fxLayout.md-down' });\n readonly lgDown = input<string>(undefined, { alias: 'fxLayout.lg-down' });\n readonly xlDown = input<string>(undefined, { alias: 'fxLayout.xl-down' });\n\n private readonly _parsed = computed(() =>\n parseLayout(resolveAll(\n { default: this.fxLayout(), xs: this.xs(), sm: this.sm(), md: this.md(),\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\n this.media.currentBp(), a => this.media.isActive(a)\n ) ?? 'row')\n );\n constructor() {\n super();\n effect(() => {\n const [dir, wrap] = this._parsed();\n this.safeSetStyle('flex-direction', dir);\n this.safeSetStyle('flex-wrap', wrap);\n });\n }\n}\n\ntype FlexWrap = 'wrap' | 'wrap-reverse' | 'nowrap';\n\n@Directive({\n selector: `\n [fxLayoutWrap],\n [fxLayoutWrap.xs],[fxLayoutWrap.sm],[fxLayoutWrap.md],[fxLayoutWrap.lg],[fxLayoutWrap.xl],[fxLayoutWrap.xxl],\n [fxLayoutWrap.lt-sm],[fxLayoutWrap.lt-md],[fxLayoutWrap.lt-lg],[fxLayoutWrap.lt-xl],[fxLayoutWrap.lt-xxl],\n [fxLayoutWrap.gt-xs],[fxLayoutWrap.gt-sm],[fxLayoutWrap.gt-md],[fxLayoutWrap.gt-lg],[fxLayoutWrap.gt-xl],\n [fxLayoutWrap.sm-up],[fxLayoutWrap.md-up],[fxLayoutWrap.lg-up],[fxLayoutWrap.xl-up],[fxLayoutWrap.xxl-up],\n [fxLayoutWrap.sm-down],[fxLayoutWrap.md-down],[fxLayoutWrap.lg-down],[fxLayoutWrap.xl-down]\n `,\n standalone: true,\n})\nexport class FxLayoutWrapDirective extends ResponsiveBaseDirective {\n readonly fxLayoutWrap = input<FlexWrap>('wrap', { alias: 'fxLayoutWrap' });\n readonly xs = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xs' });\n readonly sm = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.sm' });\n readonly md = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.md' });\n readonly lg = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lg' });\n readonly xl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xl' });\n readonly xxl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xxl' });\n readonly ltSm = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-sm' });\n readonly ltMd = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-md' });\n readonly ltLg = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-lg' });\n readonly ltXl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-xl' });\n readonly ltXxl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-xxl' });\n readonly gtXs = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-xs' });\n readonly gtSm = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-sm' });\n readonly gtMd = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-md' });\n readonly gtLg = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-lg' });\n readonly gtXl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-xl' });\n readonly smUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.sm-up' });\n readonly mdUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.md-up' });\n readonly lgUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lg-up' });\n readonly xlUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xl-up' });\n readonly xxlUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xxl-up' });\n readonly smDown = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.sm-down' });\n readonly mdDown = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.md-down' });\n readonly lgDown = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lg-down' });\n readonly xlDown = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xl-down' });\n\n private readonly _wrap = computed(() => {\n const w = resolveAll(\n { default: this.fxLayoutWrap(), xs: this.xs(), sm: this.sm(), md: this.md(),\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\n this.media.currentBp(), a => this.media.isActive(a)\n ) ?? 'wrap';\n return VALID_WRAPS.has(w) ? w : 'wrap';\n });\n constructor() {\n super();\n effect(() => { this.safeSetStyle('flex-wrap', this._wrap()); });\n }\n}\n","/**\r\n * @file fx-show-hide.directives.ts (Angular 21 — signals)\r\n *\r\n * [fxShow] / [fxHide] — responsive visibility via display:none.\r\n * Elements stay in the DOM (unlike *ifBp which removes them).\r\n *\r\n * IMPORTANT: fxShow and fxHide are implemented as a SINGLE directive class\r\n * (FxShowHideDirective) so that mixed patterns like\r\n * <div fxHide fxShow.xs> ← hidden everywhere, shown on xs\r\n * <div fxShow fxHide.lt-lg> ← shown everywhere, hidden below lg\r\n * work correctly.\r\n *\r\n * Resolution algorithm (no mobile-first cascade — semantics for show/hide\r\n * are point-in-time, not cumulative):\r\n * 1. Non-canonical (lt-*, gt-*, *-up, *-down) isActive checks — most specific first\r\n * 2. Exact canonical match for current bp\r\n * 3. Default values (fxShow / fxHide without suffix)\r\n * 4. Fallback: visible (true)\r\n *\r\n * When both show and hide match at the same priority level, show wins.\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, effect, input, computed } from '@angular/core';\r\nimport { ResponsiveBaseDirective, NON_CANONICAL_PRIORITY } from './responsive-base.directive';\r\n\r\nfunction toBool(v: string | boolean | '' | undefined | null): boolean | undefined {\r\n if (v === undefined || v === null) return undefined;\r\n if (typeof v === 'boolean') return v;\r\n if (v === '') return true;\r\n if (v === 'false' || v === '0') return false;\r\n return true;\r\n}\r\n\r\n// ─── Unified fxShow + fxHide ─────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxShow],[fxHide],\r\n [fxShow.xs],[fxShow.sm],[fxShow.md],[fxShow.lg],[fxShow.xl],[fxShow.xxl],\r\n [fxShow.lt-sm],[fxShow.lt-md],[fxShow.lt-lg],[fxShow.lt-xl],[fxShow.lt-xxl],\r\n [fxShow.gt-xs],[fxShow.gt-sm],[fxShow.gt-md],[fxShow.gt-lg],[fxShow.gt-xl],\r\n [fxShow.sm-up],[fxShow.md-up],[fxShow.lg-up],[fxShow.xl-up],[fxShow.xxl-up],\r\n [fxShow.sm-down],[fxShow.md-down],[fxShow.lg-down],[fxShow.xl-down],\r\n [fxHide.xs],[fxHide.sm],[fxHide.md],[fxHide.lg],[fxHide.xl],[fxHide.xxl],\r\n [fxHide.lt-sm],[fxHide.lt-md],[fxHide.lt-lg],[fxHide.lt-xl],[fxHide.lt-xxl],\r\n [fxHide.gt-xs],[fxHide.gt-sm],[fxHide.gt-md],[fxHide.gt-lg],[fxHide.gt-xl],\r\n [fxHide.sm-up],[fxHide.md-up],[fxHide.lg-up],[fxHide.xl-up],[fxHide.xxl-up],\r\n [fxHide.sm-down],[fxHide.md-down],[fxHide.lg-down],[fxHide.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxShowHideDirective extends ResponsiveBaseDirective {\r\n // ── fxShow inputs ─────────────────────────────────────────────────────────\r\n readonly fxShow = input<boolean, string | boolean>(undefined, { alias: 'fxShow', transform: toBool });\r\n readonly showXs = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xs', transform: toBool });\r\n readonly showSm = input<boolean, string | boolean>(undefined, { alias: 'fxShow.sm', transform: toBool });\r\n readonly showMd = input<boolean, string | boolean>(undefined, { alias: 'fxShow.md', transform: toBool });\r\n readonly showLg = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lg', transform: toBool });\r\n readonly showXl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xl', transform: toBool });\r\n readonly showXxl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xxl', transform: toBool });\r\n readonly showLtSm = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-sm', transform: toBool });\r\n readonly showLtMd = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-md', transform: toBool });\r\n readonly showLtLg = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-lg', transform: toBool });\r\n readonly showLtXl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-xl', transform: toBool });\r\n readonly showLtXxl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-xxl', transform: toBool });\r\n readonly showGtXs = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-xs', transform: toBool });\r\n readonly showGtSm = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-sm', transform: toBool });\r\n readonly showGtMd = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-md', transform: toBool });\r\n readonly showGtLg = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-lg', transform: toBool });\r\n readonly showGtXl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-xl', transform: toBool });\r\n readonly showSmUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.sm-up', transform: toBool });\r\n readonly showMdUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.md-up', transform: toBool });\r\n readonly showLgUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lg-up', transform: toBool });\r\n readonly showXlUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xl-up', transform: toBool });\r\n readonly showXxlUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xxl-up', transform: toBool });\r\n readonly showSmDown = input<boolean, string | boolean>(undefined, { alias: 'fxShow.sm-down', transform: toBool });\r\n readonly showMdDown = input<boolean, string | boolean>(undefined, { alias: 'fxShow.md-down', transform: toBool });\r\n readonly showLgDown = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lg-down', transform: toBool });\r\n readonly showXlDown = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xl-down', transform: toBool });\r\n\r\n // ── fxHide inputs ─────────────────────────────────────────────────────────\r\n readonly fxHide = input<boolean, string | boolean>(undefined, { alias: 'fxHide', transform: toBool });\r\n readonly hideXs = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xs', transform: toBool });\r\n readonly hideSm = input<boolean, string | boolean>(undefined, { alias: 'fxHide.sm', transform: toBool });\r\n readonly hideMd = input<boolean, string | boolean>(undefined, { alias: 'fxHide.md', transform: toBool });\r\n readonly hideLg = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lg', transform: toBool });\r\n readonly hideXl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xl', transform: toBool });\r\n readonly hideXxl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xxl', transform: toBool });\r\n readonly hideLtSm = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-sm', transform: toBool });\r\n readonly hideLtMd = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-md', transform: toBool });\r\n readonly hideLtLg = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-lg', transform: toBool });\r\n readonly hideLtXl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-xl', transform: toBool });\r\n readonly hideLtXxl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-xxl', transform: toBool });\r\n readonly hideGtXs = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-xs', transform: toBool });\r\n readonly hideGtSm = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-sm', transform: toBool });\r\n readonly hideGtMd = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-md', transform: toBool });\r\n readonly hideGtLg = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-lg', transform: toBool });\r\n readonly hideGtXl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-xl', transform: toBool });\r\n readonly hideSmUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.sm-up', transform: toBool });\r\n readonly hideMdUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.md-up', transform: toBool });\r\n readonly hideLgUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lg-up', transform: toBool });\r\n readonly hideXlUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xl-up', transform: toBool });\r\n readonly hideXxlUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xxl-up', transform: toBool });\r\n readonly hideSmDown = input<boolean, string | boolean>(undefined, { alias: 'fxHide.sm-down', transform: toBool });\r\n readonly hideMdDown = input<boolean, string | boolean>(undefined, { alias: 'fxHide.md-down', transform: toBool });\r\n readonly hideLgDown = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lg-down', transform: toBool });\r\n readonly hideXlDown = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xl-down', transform: toBool });\r\n\r\n private readonly _visible = computed((): boolean => {\r\n const bp = this.media.currentBp();\r\n const isActive = (a: string) => this.media.isActive(a);\r\n\r\n // Non-canonical maps (alias → show value / hide value)\r\n const showNc: Record<string, boolean | undefined> = {\r\n 'lt-sm': this.showLtSm(), 'lt-md': this.showLtMd(), 'lt-lg': this.showLtLg(),\r\n 'lt-xl': this.showLtXl(), 'lt-xxl': this.showLtXxl(),\r\n 'gt-xs': this.showGtXs(), 'gt-sm': this.showGtSm(), 'gt-md': this.showGtMd(),\r\n 'gt-lg': this.showGtLg(), 'gt-xl': this.showGtXl(),\r\n 'sm-up': this.showSmUp(), 'md-up': this.showMdUp(), 'lg-up': this.showLgUp(),\r\n 'xl-up': this.showXlUp(), 'xxl-up': this.showXxlUp(),\r\n 'sm-down': this.showSmDown(), 'md-down': this.showMdDown(),\r\n 'lg-down': this.showLgDown(), 'xl-down': this.showXlDown(),\r\n };\r\n const hideNc: Record<string, boolean | undefined> = {\r\n 'lt-sm': this.hideLtSm(), 'lt-md': this.hideLtMd(), 'lt-lg': this.hideLtLg(),\r\n 'lt-xl': this.hideLtXl(), 'lt-xxl': this.hideLtXxl(),\r\n 'gt-xs': this.hideGtXs(), 'gt-sm': this.hideGtSm(), 'gt-md': this.hideGtMd(),\r\n 'gt-lg': this.hideGtLg(), 'gt-xl': this.hideGtXl(),\r\n 'sm-up': this.hideSmUp(), 'md-up': this.hideMdUp(), 'lg-up': this.hideLgUp(),\r\n 'xl-up': this.hideXlUp(), 'xxl-up': this.hideXxlUp(),\r\n 'sm-down': this.hideSmDown(), 'md-down': this.hideMdDown(),\r\n 'lg-down': this.hideLgDown(), 'xl-down': this.hideXlDown(),\r\n };\r\n\r\n // 1. Non-canonical (lt-*, gt-*, *-up, *-down) — most specific first\r\n for (const alias of NON_CANONICAL_PRIORITY) {\r\n const sv = showNc[alias];\r\n const hv = hideNc[alias];\r\n if ((sv !== undefined || hv !== undefined) && isActive(alias)) {\r\n if (sv !== undefined) return sv; // show beats hide at same priority\r\n return !hv!;\r\n }\r\n }\r\n\r\n // Canonical maps (bp → value) — exact only, NO cascade\r\n const showV: Record<string, boolean | undefined> = {\r\n xs: this.showXs(), sm: this.showSm(), md: this.showMd(),\r\n lg: this.showLg(), xl: this.showXl(), xxl: this.showXxl(),\r\n };\r\n const hideV: Record<string, boolean | undefined> = {\r\n xs: this.hideXs(), sm: this.hideSm(), md: this.hideMd(),\r\n lg: this.hideLg(), xl: this.hideXl(), xxl: this.hideXxl(),\r\n };\r\n\r\n // 2. Exact canonical match for current bp\r\n const showExact = showV[bp];\r\n const hideExact = hideV[bp];\r\n if (showExact !== undefined) return showExact;\r\n if (hideExact !== undefined) return !hideExact;\r\n\r\n // 3. Default values (fxShow / fxHide without suffix)\r\n const showDef = this.fxShow();\r\n const hideDef = this.fxHide();\r\n if (showDef !== undefined) return showDef;\r\n if (hideDef !== undefined) return !hideDef;\r\n\r\n // 4. Neither directive active → visible\r\n return true;\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n this._visible()\r\n ? this.r2.removeStyle(this.el.nativeElement, 'display')\r\n : this.r2.setStyle(this.el.nativeElement, 'display', 'none');\r\n });\r\n }\r\n}\r\n\r\n\r\n","/**\r\n * @file fx-style-class.directives.ts (Angular 21 — signals)\r\n *\r\n * [fxStyle] — responsive inline style binding (Record<string,string>)\r\n * [fxClass] — responsive CSS class binding (string | string[] | Record<string,boolean>)\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • computed() derives resolved StyleMap / ClassInput value\r\n * • effect() in constructor handles DOM writes with diff\r\n *\r\n * Style/class leak prevention:\r\n * _appliedProps / _appliedClasses are regular Set<string> fields\r\n * (NOT signals) — they track what was actively applied so the\r\n * effect can remove stale properties/classes on the next run.\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\n// ─── fxStyle ─────────────────────────────────────────────────────────────────\r\n\r\ntype StyleMap = Record<string, string>;\r\n\r\n@Directive({\r\n selector: `\r\n [fxStyle],\r\n [fxStyle.xs],[fxStyle.sm],[fxStyle.md],[fxStyle.lg],[fxStyle.xl],[fxStyle.xxl],\r\n [fxStyle.lt-sm],[fxStyle.lt-md],[fxStyle.lt-lg],[fxStyle.lt-xl],[fxStyle.lt-xxl],\r\n [fxStyle.gt-xs],[fxStyle.gt-sm],[fxStyle.gt-md],[fxStyle.gt-lg],[fxStyle.gt-xl],\r\n [fxStyle.sm-up],[fxStyle.md-up],[fxStyle.lg-up],[fxStyle.xl-up],[fxStyle.xxl-up],\r\n [fxStyle.sm-down],[fxStyle.md-down],[fxStyle.lg-down],[fxStyle.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxStyleDirective extends ResponsiveBaseDirective {\r\n readonly fxStyle = input<StyleMap>(undefined, { alias: 'fxStyle' });\r\n readonly xs = input<StyleMap>(undefined, { alias: 'fxStyle.xs' });\r\n readonly sm = input<StyleMap>(undefined, { alias: 'fxStyle.sm' });\r\n readonly md = input<StyleMap>(undefined, { alias: 'fxStyle.md' });\r\n readonly lg = input<StyleMap>(undefined, { alias: 'fxStyle.lg' });\r\n readonly xl = input<StyleMap>(undefined, { alias: 'fxStyle.xl' });\r\n readonly xxl = input<StyleMap>(undefined, { alias: 'fxStyle.xxl' });\r\n readonly ltSm = input<StyleMap>(undefined, { alias: 'fxStyle.lt-sm' });\r\n readonly ltMd = input<StyleMap>(undefined, { alias: 'fxStyle.lt-md' });\r\n readonly ltLg = input<StyleMap>(undefined, { alias: 'fxStyle.lt-lg' });\r\n readonly ltXl = input<StyleMap>(undefined, { alias: 'fxStyle.lt-xl' });\r\n readonly ltXxl = input<StyleMap>(undefined, { alias: 'fxStyle.lt-xxl' });\r\n readonly gtXs = input<StyleMap>(undefined, { alias: 'fxStyle.gt-xs' });\r\n readonly gtSm = input<StyleMap>(undefined, { alias: 'fxStyle.gt-sm' });\r\n readonly gtMd = input<StyleMap>(undefined, { alias: 'fxStyle.gt-md' });\r\n readonly gtLg = input<StyleMap>(undefined, { alias: 'fxStyle.gt-lg' });\r\n readonly gtXl = input<StyleMap>(undefined, { alias: 'fxStyle.gt-xl' });\r\n readonly smUp = input<StyleMap>(undefined, { alias: 'fxStyle.sm-up' });\r\n readonly mdUp = input<StyleMap>(undefined, { alias: 'fxStyle.md-up' });\r\n readonly lgUp = input<StyleMap>(undefined, { alias: 'fxStyle.lg-up' });\r\n readonly xlUp = input<StyleMap>(undefined, { alias: 'fxStyle.xl-up' });\r\n readonly xxlUp = input<StyleMap>(undefined, { alias: 'fxStyle.xxl-up' });\r\n readonly smDown = input<StyleMap>(undefined, { alias: 'fxStyle.sm-down' });\r\n readonly mdDown = input<StyleMap>(undefined, { alias: 'fxStyle.md-down' });\r\n readonly lgDown = input<StyleMap>(undefined, { alias: 'fxStyle.lg-down' });\r\n readonly xlDown = input<StyleMap>(undefined, { alias: 'fxStyle.xl-down' });\r\n\r\n private readonly _resolved = computed(() =>\r\n (resolveAll<StyleMap>(\r\n { default: this.fxStyle(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? {})\r\n );\r\n\r\n /** Tracks which CSS properties were last applied — plain field, not a signal. */\r\n private _appliedProps = new Set<string>();\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (!this.isBrowser) return;\r\n const next = this._resolved();\r\n const nextKeys = new Set(Object.keys(next));\r\n for (const prop of this._appliedProps) {\r\n if (!nextKeys.has(prop)) this.r2.removeStyle(this.el.nativeElement, prop);\r\n }\r\n for (const [prop, value] of Object.entries(next)) {\r\n this.r2.setStyle(this.el.nativeElement, prop, value);\r\n }\r\n this._appliedProps = nextKeys;\r\n });\r\n }\r\n}\r\n\r\n// ─── fxClass ─────────────────────────────────────────────────────────────────\r\n\r\ntype ClassInput = string | string[] | Record<string, boolean>;\r\n\r\nfunction toClassSet(v: ClassInput | undefined): Set<string> {\r\n if (!v) return new Set();\r\n if (typeof v === 'string') return new Set(v.split(/\\s+/).filter(Boolean));\r\n if (Array.isArray(v)) return new Set(v.filter(Boolean));\r\n return new Set(Object.entries(v).filter(([, on]) => on).map(([cls]) => cls));\r\n}\r\n\r\n@Directive({\r\n selector: `\r\n [fxClass],\r\n [fxClass.xs],[fxClass.sm],[fxClass.md],[fxClass.lg],[fxClass.xl],[fxClass.xxl],\r\n [fxClass.lt-sm],[fxClass.lt-md],[fxClass.lt-lg],[fxClass.lt-xl],[fxClass.lt-xxl],\r\n [fxClass.gt-xs],[fxClass.gt-sm],[fxClass.gt-md],[fxClass.gt-lg],[fxClass.gt-xl],\r\n [fxClass.sm-up],[fxClass.md-up],[fxClass.lg-up],[fxClass.xl-up],[fxClass.xxl-up],\r\n [fxClass.sm-down],[fxClass.md-down],[fxClass.lg-down],[fxClass.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxClassDirective extends ResponsiveBaseDirective {\r\n readonly fxClass = input<ClassInput>(undefined, { alias: 'fxClass' });\r\n readonly xs = input<ClassInput>(undefined, { alias: 'fxClass.xs' });\r\n readonly sm = input<ClassInput>(undefined, { alias: 'fxClass.sm' });\r\n readonly md = input<ClassInput>(undefined, { alias: 'fxClass.md' });\r\n readonly lg = input<ClassInput>(undefined, { alias: 'fxClass.lg' });\r\n readonly xl = input<ClassInput>(undefined, { alias: 'fxClass.xl' });\r\n readonly xxl = input<ClassInput>(undefined, { alias: 'fxClass.xxl' });\r\n readonly ltSm = input<ClassInput>(undefined, { alias: 'fxClass.lt-sm' });\r\n readonly ltMd = input<ClassInput>(undefined, { alias: 'fxClass.lt-md' });\r\n readonly ltLg = input<ClassInput>(undefined, { alias: 'fxClass.lt-lg' });\r\n readonly ltXl = input<ClassInput>(undefined, { alias: 'fxClass.lt-xl' });\r\n readonly ltXxl = input<ClassInput>(undefined, { alias: 'fxClass.lt-xxl' });\r\n readonly gtXs = input<ClassInput>(undefined, { alias: 'fxClass.gt-xs' });\r\n readonly gtSm = input<ClassInput>(undefined, { alias: 'fxClass.gt-sm' });\r\n readonly gtMd = input<ClassInput>(undefined, { alias: 'fxClass.gt-md' });\r\n readonly gtLg = input<ClassInput>(undefined, { alias: 'fxClass.gt-lg' });\r\n readonly gtXl = input<ClassInput>(undefined, { alias: 'fxClass.gt-xl' });\r\n readonly smUp = input<ClassInput>(undefined, { alias: 'fxClass.sm-up' });\r\n readonly mdUp = input<ClassInput>(undefined, { alias: 'fxClass.md-up' });\r\n readonly lgUp = input<ClassInput>(undefined, { alias: 'fxClass.lg-up' });\r\n readonly xlUp = input<ClassInput>(undefined, { alias: 'fxClass.xl-up' });\r\n readonly xxlUp = input<ClassInput>(undefined, { alias: 'fxClass.xxl-up' });\r\n readonly smDown = input<ClassInput>(undefined, { alias: 'fxClass.sm-down' });\r\n readonly mdDown = input<ClassInput>(undefined, { alias: 'fxClass.md-down' });\r\n readonly lgDown = input<ClassInput>(undefined, { alias: 'fxClass.lg-down' });\r\n readonly xlDown = input<ClassInput>(undefined, { alias: 'fxClass.xl-down' });\r\n\r\n private readonly _resolved = computed(() =>\r\n toClassSet(resolveAll<ClassInput>(\r\n { default: this.fxClass(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ))\r\n );\r\n\r\n /** Tracks which CSS classes were last applied — plain field, not a signal. */\r\n private _appliedClasses = new Set<string>();\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (!this.isBrowser) return;\r\n const next = this._resolved();\r\n for (const cls of this._appliedClasses) {\r\n if (!next.has(cls)) this.r2.removeClass(this.el.nativeElement, cls);\r\n }\r\n for (const cls of next) {\r\n this.r2.addClass(this.el.nativeElement, cls);\r\n }\r\n this._appliedClasses = next;\r\n });\r\n }\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\n// ── Tokens ───────────────────────────────────────────────────────────────────\r\nexport { BS5_BREAKPOINTS, LAYOUT_BREAKPOINTS, CANONICAL_ALIASES } from './breakpoints';\r\nexport type { BreakpointAlias } from './breakpoints';\r\nexport { ALIAS_FAMILIES } from './breakpoints';\r\n\r\n// ── Input type helpers (useful for custom directive extensions) ──────────────\r\nexport type { CanonicalKey, NonCanonicalKey, BpValues, NcValues } from './responsive-inputs.mixin';\r\n\r\n// ── Service ──────────────────────────────────────────────────────────────────\r\nexport { MediaObserver } from './media-observer.service';\r\n\r\n// ── Base (re-export for extension) ───────────────────────────────────────────\r\nexport { ResponsiveBaseDirective, NON_CANONICAL_PRIORITY } from './responsive-base.directive';\r\n\r\n// ── Flex directives ──────────────────────────────────────────────────────────\r\nexport { FxLayoutDirective, FxLayoutWrapDirective } from './fx-layout.directive';\r\nexport { FxFlexDirective } from './fx-flex.directive';\r\nexport { FxLayoutAlignDirective } from './fx-layout-align.directive';\r\nexport { FxLayoutGapDirective } from './fx-layout-gap.directive';\r\nexport {\r\n FxFlexOrderDirective,\r\n FxFlexOffsetDirective,\r\n FxFlexAlignDirective,\r\n FxFlexFillDirective,\r\n} from './fx-flex-extras.directives';\r\n\r\n// ── Visibility directives ─────────────────────────────────────────────────────\r\nexport { FxShowHideDirective } from './fx-show-hide.directives';\r\n\r\n// ── Style / Class directives ─────────────────────────────────────────────────\r\nexport { FxStyleDirective, FxClassDirective } from './fx-style-class.directives';\r\n\r\n// ── Grid directives (bonus — not in original ngx-layout) ─────────────────────\r\nexport {\r\n FxGridDirective,\r\n FxGridColumnDirective,\r\n FxGridAreaDirective,\r\n} from './fx-grid.directives';\r\n\r\n// ── Structural directives ─────────────────────────────────────────────────────\r\nexport { IfBpDirective } from './if-bp.directive';\r\n\r\n// ── Convenience module (for non-standalone NgModule apps) ────────────────────\r\nimport { FxLayoutDirective, FxLayoutWrapDirective } from './fx-layout.directive';\r\nimport { FxFlexDirective } from './fx-flex.directive';\r\nimport { FxLayoutAlignDirective } from './fx-layout-align.directive';\r\nimport { FxLayoutGapDirective } from './fx-layout-gap.directive';\r\nimport {\r\n FxFlexOrderDirective, FxFlexOffsetDirective,\r\n FxFlexAlignDirective, FxFlexFillDirective,\r\n} from './fx-flex-extras.directives';\r\nimport { FxStyleDirective, FxClassDirective } from './fx-style-class.directives';\r\nimport {\r\n FxGridDirective, FxGridColumnDirective, FxGridAreaDirective,\r\n} from './fx-grid.directives';\r\nimport { IfBpDirective } from './if-bp.directive';\r\nimport { FxShowHideDirective } from \"./fx-show-hide.directives\";\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n FxLayoutDirective,\r\n FxLayoutWrapDirective,\r\n FxFlexDirective,\r\n FxShowHideDirective,\r\n FxLayoutAlignDirective,\r\n FxLayoutGapDirective,\r\n FxFlexOrderDirective,\r\n FxFlexOffsetDirective,\r\n FxFlexAlignDirective,\r\n FxFlexFillDirective,\r\n FxStyleDirective,\r\n FxClassDirective,\r\n FxGridDirective,\r\n FxGridColumnDirective,\r\n FxGridAreaDirective,\r\n IfBpDirective,\r\n ],\r\n exports: [\r\n FxLayoutDirective,\r\n FxLayoutWrapDirective,\r\n FxFlexDirective,\r\n FxShowHideDirective,\r\n FxLayoutAlignDirective,\r\n FxLayoutGapDirective,\r\n FxFlexOrderDirective,\r\n FxFlexOffsetDirective,\r\n FxFlexAlignDirective,\r\n FxFlexFillDirective,\r\n FxStyleDirective,\r\n FxClassDirective,\r\n FxGridDirective,\r\n FxGridColumnDirective,\r\n FxGridAreaDirective,\r\n IfBpDirective,\r\n ],\r\n\r\n})\r\nexport class ArsUIFlexModule { }\r\n\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './ui/ui.module';\r\nexport * from './ui/definitions';\r\nexport * from './ui/paginatorIntl';\r\nexport * from './ui/services/index';\r\nexport * from './ui/dialogs/index';\r\nexport * from './ui/components/index';\r\nexport * from './ui/directives/flex/index';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i3","i4","i5","i6","i1","i7","toBool","normalizeGap"],"mappings":"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AA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,cAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,KAAA,EAAA,EAA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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-ui.mjs","sources":["../../../projects/ars-utils/ui/ui/definitions.ts","../../../projects/ars-utils/ui/ui/paginatorIntl.ts","../../../projects/ars-utils/ui/ui/dialogs/busy/busy-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/busy/busy-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/confirm/confirm-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/confirm/confirm-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/info/info-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/info/info-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/toast/toast.component.ts","../../../projects/ars-utils/ui/ui/dialogs/toast/toast.component.html","../../../projects/ars-utils/ui/ui/services/ui.service.ts","../../../projects/ars-utils/ui/ui/dialogs/delete/delete-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/delete/delete-dialog.component.html","../../../projects/ars-utils/ui/ui/services/dialog.service.ts","../../../projects/ars-utils/ui/ui/ui.module.ts","../../../projects/ars-utils/ui/ui/filters.ts","../../../projects/ars-utils/ui/ui/components/password-strength/password-strength.component.ts","../../../projects/ars-utils/ui/ui/components/password-strength/password-strength.component.html","../../../projects/ars-utils/ui/ui/components/otp/otp-input.component.ts","../../../projects/ars-utils/ui/ui/components/otp/otp-input.component.html","../../../projects/ars-utils/ui/ui/dialogs/credentials/credentials-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/credentials/credentials-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/recover-password/recover-password-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/recover-password/recover-password-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/reset-password/reset-password-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/reset-password/reset-password-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/prompt/prompt-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/prompt/prompt-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/prompt-otp/prompt-otp-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/prompt-otp/prompt-otp-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/select/select-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/select/select-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/select-file/select-file-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/select-file/select-file-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/select-picture/select-picture-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/select-picture/select-picture-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/select-tree/select-tree-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/select-tree/select-tree-dialog.component.html","../../../projects/ars-utils/ui/ui/dialogs/send-to/send-to-dialog.component.ts","../../../projects/ars-utils/ui/ui/dialogs/send-to/send-to-dialog.component.html","../../../projects/ars-utils/ui/ui/components/button-selector/button-selector.component.ts","../../../projects/ars-utils/ui/ui/components/button-selector/button-selector.component.html","../../../projects/ars-utils/ui/ui/components/button-toggle/button-toggle.component.ts","../../../projects/ars-utils/ui/ui/components/button-toggle/button-toggle.component.html","../../../projects/ars-utils/ui/ui/components/calendar-empty-header/calendar-empy-header.component.ts","../../../projects/ars-utils/ui/ui/components/chips-selector/chips-selector.component.ts","../../../projects/ars-utils/ui/ui/components/chips-selector/chips-selector.component.html","../../../projects/ars-utils/ui/ui/components/file-input/file-input.component.ts","../../../projects/ars-utils/ui/ui/components/file-input/file-input.component.html","../../../projects/ars-utils/ui/ui/components/file-preview/file-preview.component.ts","../../../projects/ars-utils/ui/ui/components/file-preview/file-preview.component.html","../../../projects/ars-utils/ui/ui/components/filter-bar/filter-bar.component.ts","../../../projects/ars-utils/ui/ui/components/filter-bar/filter-bar.component.html","../../../projects/ars-utils/ui/ui/components/tree-picker/tree-picker.component.ts","../../../projects/ars-utils/ui/ui/components/tree-picker/tree-picker.component.html","../../../projects/ars-utils/ui/ui/components/oauth/login/login-oauth.component.ts","../../../projects/ars-utils/ui/ui/components/oauth/login/login-oauth.component.html","../../../projects/ars-utils/ui/ui/components/oauth/login-ok/ms/login-oauth-ok-ms.component.ts","../../../projects/ars-utils/ui/ui/components/oauth/login-ok/ms/login-oauth-ok-ms.component.html","../../../projects/ars-utils/ui/ui/directives/resize-table-column.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/breakpoints.ts","../../../projects/ars-utils/ui/ui/directives/flex/media-observer.service.ts","../../../projects/ars-utils/ui/ui/directives/flex/if-bp.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/responsive-base.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-flex-extras.directives.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-flex.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-grid.directives.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-layout-align.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-layout-gap.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-layout.directive.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-show-hide.directives.ts","../../../projects/ars-utils/ui/ui/directives/flex/fx-style-class.directives.ts","../../../projects/ars-utils/ui/ui/directives/flex/flex-module.ts","../../../projects/ars-utils/ui/public_api.ts","../../../projects/ars-utils/ui/arsedizioni-ars-utils-ui.ts"],"sourcesContent":["\r\n\r\nexport interface DialogResult {\r\n result?: 'ok' | 'cancel' | 'other';\r\n value?: unknown;\r\n options?: DialogOption[];\r\n}\r\n\r\nexport interface DialogOption {\r\n value: unknown;\r\n description: string;\r\n selected?: boolean;\r\n}\r\n\r\n\r\nexport interface RecoverPasswordDialogResult {\r\n email?: string;\r\n recaptcha?: boolean;\r\n}\r\n\r\n\r\nexport interface ResetPasswordDialogResult {\r\n userId?: number;\r\n userEmail?: string;\r\n oldPassword?: string;\r\n password?: string;\r\n password2?: string;\r\n}\r\n\r\n\r\nexport interface CredentialsDialogResult {\r\n user?: string;\r\n password?: string;\r\n rememberMe?: boolean;\r\n code?: string;\r\n}\r\n\r\n\r\nimport { Searchable, SearchBag, NameValueItem, DateInterval, INode } from '@arsedizioni/ars-utils/core';\r\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\r\nimport { SendToDialogComponent } from './dialogs/send-to/send-to-dialog.component';\r\n\r\nexport interface SelectDialogResult {\r\n selectedItems: SelectableItem[];\r\n}\r\n\r\nexport interface SelectTreeDialogResult {\r\n selectedItems: ItemNode[];\r\n}\r\n\r\nexport interface SelectDialogLookup {\r\n items: SelectableItem[];\r\n filter?: string;\r\n params?: any;\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectDialogFilter {\r\n items?: SelectableItem[];\r\n filter?: string;\r\n filterOption?: SelectableFilter;\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectDialogAppend {\r\n items: SelectableItem[];\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectDialogEdit extends SelectDialogAppend {\r\n item: SelectableItem;\r\n}\r\n\r\nexport interface SelectDialogDelete {\r\n items: SelectableItem[];\r\n selectedItems: SelectableItem[];\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectFileOption {\r\n description: string;\r\n value: boolean;\r\n}\r\n\r\nexport interface SelectFile {\r\n file: File;\r\n options?: SelectFileOption[];\r\n}\r\n\r\nexport interface SelectableFilter {\r\n divider?: boolean;\r\n description?: string;\r\n group?: number;\r\n groupName?: string;\r\n radio?: boolean;\r\n checked?: boolean;\r\n value?: any;\r\n icon?: string;\r\n title?: string;\r\n}\r\n\r\nexport interface SelectDialogData {\r\n title: string;\r\n description?: string;\r\n okCaption?: string;\r\n maxItems?: number;\r\n multipleSelection?: boolean;\r\n mustSelect?: boolean;\r\n width?: number;\r\n filter?: string;\r\n filters?: SelectableFilter[];\r\n items?: SelectableItem[];\r\n lookupFields?: NameValueItem<string>[];\r\n lookupOnInit?: boolean;\r\n emptyMessage?: string;\r\n canLookupWithOptions?: boolean;\r\n canLookupWithInlineOptions?: boolean;\r\n canLookup?: boolean;\r\n canDelete?: boolean;\r\n canAppend?: boolean;\r\n canEdit?: boolean;\r\n canView?: boolean;\r\n canFilter?: boolean;\r\n canPaginate?: boolean;\r\n pageSize?: number;\r\n appearance?: MatFormFieldAppearance;\r\n header?: string;\r\n searchLabel?: string;\r\n searchButtonLabel?: string;\r\n}\r\n\r\nexport interface SelectTreeDialogData {\r\n title: string;\r\n description?: string;\r\n okCaption?: string;\r\n nodes?: ItemNode[];\r\n initialFilter?: string;\r\n appearance?: MatFormFieldAppearance;\r\n owner?: any;\r\n canAppend?: boolean;\r\n}\r\n\r\n\r\nexport interface SelectFileDialogData {\r\n title: string;\r\n description?: string;\r\n okCaption?: string;\r\n helpLink?: string;\r\n helpCaption?: string;\r\n maxSize?: number;\r\n options?: any;\r\n owner?: any;\r\n accept?: string;\r\n appearance?: MatFormFieldAppearance;\r\n}\r\n\r\nexport interface SelectPictureFileDialogData extends SelectFileDialogData {\r\n maxWidth?: number;\r\n maxHeight?: number;\r\n}\r\n\r\nexport interface ISelectableItem extends Searchable {\r\n bag: any;\r\n template: string;\r\n}\r\n\r\nexport class SelectableItem implements ISelectableItem {\r\n bag: any;\r\n template: string;\r\n\r\n /** Searchable index bag. */\r\n searchBag: SearchBag;\r\n}\r\n\r\nexport class ItemNode implements INode {\r\n id: string;\r\n name: string;\r\n count?: number;\r\n parent?: INode;\r\n children?: INode[];\r\n bag?: any;\r\n}\r\n\r\nexport class SelectableNode extends ItemNode implements Searchable {\r\n expandable: boolean;\r\n level: number;\r\n\r\n /** Searchable index bag. */\r\n searchBag: SearchBag;\r\n\r\n /**\r\n * Create a flattened tree node from a source ItemNode.\r\n * @param item - The source tree node.\r\n * @param level - The depth level of this node in the tree.\r\n */\r\n constructor(item: ItemNode, level: number) {\r\n super();\r\n\r\n this.expandable = !!(item.children?.length);\r\n this.level = level;\r\n\r\n this.id = item.id;\r\n this.name = item.name;\r\n this.count = item.count;\r\n this.parent = item.parent;\r\n this.bag = item.bag;\r\n this.children = item.children;\r\n }\r\n}\r\nexport interface SendToPopulateData {\r\n item: SendToDialogResult;\r\n source: SendToDialogComponent;\r\n}\r\n\r\nexport interface SendToDialogResult {\r\n recipients?: string;\r\n subject?: string;\r\n text?: string;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptDialogResult {\r\n value?: string;\r\n type?: PromptDialogType;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptDateDialogResult {\r\n value?: Date | DateInterval;\r\n type?: PromptDialogType;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptOtpDialogResult {\r\n value?: string;\r\n}\r\n\r\nexport enum PromptDialogType {\r\n Default = 0,\r\n Date = 1,\r\n Number = 2,\r\n Text = 3,\r\n DateInterval = 4,\r\n List = 5,\r\n Time = 6\r\n\r\n}\r\n\r\nexport interface PromptDialogData {\r\n title: string;\r\n type: PromptDialogType;\r\n description?: string;\r\n okCaption?: string;\r\n cancelCaption?: string;\r\n initialValue?: any;\r\n minValue?: number;\r\n maxValue?: number;\r\n required?: boolean;\r\n appearance?: MatFormFieldAppearance;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptTimeDialogData extends PromptDialogData {\r\n slots?: string;\r\n}\r\n\r\nexport enum LoginOAuthType {\r\n None = 0,\r\n Microsoft = 1,\r\n Google = 2\r\n}\r\n\r\nexport interface LoginOAuthResult {\r\n type: number,\r\n token: string\r\n}","import { MatPaginatorIntl } from '@angular/material/paginator';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/** Italian localisation for the Material paginator labels. */\r\n@Injectable()\r\nexport class PaginatorIntl extends MatPaginatorIntl {\r\n override itemsPerPageLabel = 'Elementi per pagina';\r\n override nextPageLabel = 'Prossima pagina';\r\n override previousPageLabel = 'Pagina precedente';\r\n override lastPageLabel = 'Ultima pagina';\r\n override firstPageLabel = 'Prima pagina';\r\n\r\n /**\r\n * Returns the human-readable range label shown inside the paginator.\r\n * @param page - Zero-based index of the current page.\r\n * @param pageSize - Number of items displayed per page.\r\n * @param length - Total number of items, or `-1` when the total is still being calculated.\r\n * @returns A formatted string such as `\"1 - 25 di 100\"`.\r\n */\r\n override getRangeLabel = (page: number, pageSize: number, length: number): string => {\r\n if (length === -1) {\r\n return '0 di calcolo...';\r\n }\r\n if (length === 0 || pageSize === 0) {\r\n return `0 di ${length}`;\r\n }\r\n const totalLength = Math.max(length, 0);\r\n const startIndex = page * pageSize;\r\n // If the start index exceeds the list length, do not try to fix the end index.\r\n const endIndex =\r\n startIndex < totalLength\r\n ? Math.min(startIndex + pageSize, totalLength)\r\n : startIndex + pageSize;\r\n return `${startIndex + 1} - ${endIndex} di ${totalLength}`;\r\n };\r\n}\r\n","import { ChangeDetectionStrategy, Component, signal } from '@angular/core';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatIcon } from '@angular/material/icon';\r\n\r\n/**\r\n * Overlay dialog that blocks interaction while a background operation is in progress.\r\n * Supports four visual styles: progress bar, spinner, hourglass, and wait icon.\r\n */\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './busy-dialog.component.html',\r\n styleUrl: './busy-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatProgressBarModule, MatProgressSpinnerModule, MatIcon, SafeHtmlPipe]\r\n})\r\nexport class BusyDialogComponent {\r\n /** Visual style of the busy indicator. */\r\n readonly type = signal<'bar' | 'spinner' | 'wait' | 'hourglass'>('bar');\r\n\r\n /** Current progress value (0–100). Used when `progressMode` is `'determinate'`. */\r\n readonly progress = signal<number>(0);\r\n\r\n /** Progress mode passed to the Material progress components. */\r\n readonly progressMode = signal<'determinate' | 'indeterminate'>('indeterminate');\r\n\r\n /** Message displayed above the progress indicator. */\r\n readonly message = signal<string>('');\r\n\r\n /**\r\n * Updates the busy dialog state.\r\n * @param message - New message to display. Ignored when empty, preserving the previous text.\r\n * @param progress - Current progress value (0–100). A value > 0 forces `'determinate'` mode.\r\n * @param progressMode - Progress bar/spinner mode (default: `'indeterminate'`).\r\n * @param type - Visual style to use (default: `'bar'`).\r\n */\r\n set(\r\n message: string,\r\n progress: number,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n type: 'bar' | 'spinner' | 'wait' | 'hourglass' = 'bar'\r\n ): void {\r\n if (message) {\r\n this.message.set(message);\r\n }\r\n if (type) {\r\n this.type.set(type);\r\n }\r\n this.progress.set(progress);\r\n this.progressMode.set(progress > 0 ? 'determinate' : progressMode);\r\n }\r\n}\r\n","@if(type() === 'hourglass') {\r\n<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div><mat-icon class=\"mat-icon-spinner\">hourglass</mat-icon></div>\r\n @if (message()) {\r\n <div [innerHTML]=\"message() | safeHtml\" class=\"busy-message\"></div>\r\n }\r\n</div>\r\n} @else if (type() === 'wait') {\r\n<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div><mat-icon class=\"mat-icon-spinner\">hourglass</mat-icon></div>\r\n</div>\r\n} @else {\r\n<div class=\"busy-panel\">\r\n <div fxLayout=\"column\" fxFill>\r\n @if (message()) {\r\n <div [innerHTML]=\"message() | safeHtml\" class=\"busy-message\"></div>\r\n }\r\n @if (type() === 'bar') {\r\n <div>\r\n <mat-progress-bar [mode]=\"progressMode()\" [value]=\"progress()\"\r\n style=\"margin:15px auto 0 auto; max-width: 350px;\"></mat-progress-bar>\r\n </div>\r\n } @else if (type() === 'spinner') {\r\n <div>\r\n <mat-progress-spinner [mode]=\"progressMode()\" diameter=\"70\" [value]=\"progress()\"\r\n style=\"margin:15px auto 0 auto;\"></mat-progress-spinner>\r\n </div>\r\n }\r\n @if (progress() > 0) {\r\n <div>\r\n <span style=\"font-size: smaller;\"><b>{{progress()}}%</b></span>\r\n </div>\r\n }\r\n </div>\r\n</div>\r\n}","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { DialogOption, DialogResult } from '../../definitions';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface ConfirmDialogOption extends DialogOption {}\r\n\r\nexport interface ConfirmDialogData {\r\n title?: string;\r\n message: string;\r\n okCaption?: string;\r\n cancelCaption?: string;\r\n otherCaption?: string;\r\n options?: ConfirmDialogOption[];\r\n details?: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './confirm-dialog.component.html',\r\n styleUrl: './confirm-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatButtonModule, SafeHtmlPipe]\r\n})\r\nexport class ConfirmDialogComponent {\r\n /** Emitted when the user makes a choice. Carries the selected result and any option state. */\r\n readonly choosen = output<DialogResult>();\r\n\r\n private readonly dialogRef = inject(MatDialogRef<ConfirmDialogComponent>);\r\n\r\n /** Dialog configuration, with sensible defaults applied at construction time. */\r\n protected readonly dialogData = signal<ConfirmDialogData>({\r\n title: 'Conferma',\r\n okCaption: 'Si',\r\n cancelCaption: 'No',\r\n message: '',\r\n ...((inject(MAT_DIALOG_DATA) as ConfirmDialogData | null) ?? {}),\r\n });\r\n\r\n constructor() {\r\n // Ensure optional captions always have a value even when the caller omits them\r\n this.dialogData.update(d => ({\r\n ...d,\r\n title: d.title ?? 'Conferma',\r\n okCaption: d.okCaption ?? 'Si',\r\n cancelCaption: d.cancelCaption ?? 'No',\r\n }));\r\n }\r\n\r\n /**\r\n * Confirms the dialog, emitting `'ok'` together with the current option selections.\r\n */\r\n ok(): void {\r\n this.choosen.emit({ result: 'ok', options: this.dialogData().options });\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Cancels the dialog, emitting `'cancel'`.\r\n */\r\n cancel(): void {\r\n this.choosen.emit({ result: 'cancel' });\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Triggers the tertiary action, emitting `'other'`.\r\n */\r\n other(): void {\r\n this.choosen.emit({ result: 'other' });\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n @if (dialogData().options) {\r\n <div>\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n <br>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex=\"30\">\r\n @if (dialogData().otherCaption) {\r\n <button mat-flat-button (click)=\"other()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().otherCaption}}</button>\r\n }\r\n </div>\r\n <div fxFlex=\"70\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button (click)=\"ok()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" (click)=\"cancel()\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, signal } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { DialogService } from '../../services/dialog.service';\r\n\r\nexport interface InfoDialogData {\r\n title?: string;\r\n message: string;\r\n details?: string;\r\n okCaption?: string;\r\n dismissAfter?: number;\r\n onNavigate?: (url: string) => void;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './info-dialog.component.html',\r\n styleUrl: './info-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogActions, FlexModule,\r\n MatButtonModule, MatIconModule, MatDialogClose, MatTooltipModule, SafeHtmlPipe]\r\n})\r\nexport class InfoDialogComponent {\r\n private readonly dialogService = inject(DialogService);\r\n private readonly dialogRef = inject(MatDialogRef<InfoDialogComponent>);\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<InfoDialogData>((() => {\r\n const raw = (inject(MAT_DIALOG_DATA) as InfoDialogData | null) ?? { message: '' };\r\n return { title: 'Informazioni', ...raw };\r\n })());\r\n\r\n constructor() {\r\n // Schedule auto-dismiss if configured\r\n const dismissAfter = this.dialogData().dismissAfter;\r\n if (dismissAfter) {\r\n setTimeout(() => this.dialogRef.close(), dismissAfter);\r\n }\r\n }\r\n\r\n /**\r\n * Replaces the dialog data at runtime (e.g. after an async operation resolves).\r\n * Also re-schedules the auto-dismiss timer if `dismissAfter` is set.\r\n * @param data - The new dialog data to display.\r\n */\r\n public setData(data: InfoDialogData): void {\r\n this.dialogData.set({ title: 'Informazioni', ...data });\r\n if (data.dismissAfter) {\r\n setTimeout(() => this.dialogRef.close(), data.dismissAfter);\r\n }\r\n }\r\n\r\n /**\r\n * Invokes the optional navigation callback provided by the caller.\r\n * @param url - The URL to navigate to.\r\n */\r\n protected navigate(url: string): void {\r\n this.dialogData().onNavigate?.(url);\r\n }\r\n\r\n /**\r\n * Copy to clipboard\r\n */\r\n protected async copy(): Promise<void> {\r\n const elem = document.getElementById('info-dialog-content');\r\n if (!elem) return;\r\n const htmlBlob = new Blob([elem.innerHTML], { type: 'text/html' });\r\n const textBlob = new Blob([elem.innerText], { type: 'text/plain' });\r\n try {\r\n const data = [\r\n new ClipboardItem({\r\n 'text/html': htmlBlob,\r\n 'text/plain': textBlob\r\n })\r\n ];\r\n setTimeout(async () => {\r\n window.focus();\r\n await navigator.clipboard.write(data);\r\n }, 0);\r\n this.dialogService.toast('Copiato negli appunti.');\r\n } catch (err) {\r\n this.dialogService.toast(`Errore copiando negli appunti: ${err}`);\r\n }\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill id=\"info-dialog-content\">\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <br>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxFill>\r\n <button mat-icon-button (click)=\"copy()\" matTooltip=\"Copia negli appunti\"><mat-icon>content_copy</mat-icon></button>\r\n <button mat-flat-button [mat-dialog-close]=\"true\" cdkFocusInitial>{{dialogData().okCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { Component, ChangeDetectionStrategy, inject, output, signal } from '@angular/core';\r\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\n\r\nexport interface ToastData {\r\n message: string;\r\n icon?: string;\r\n actionCaption?: string;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './toast.component.html',\r\n styleUrl: './toast.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatIconModule, MatButtonModule, SafeHtmlPipe]\r\n})\r\nexport class ToastComponent {\r\n /** Emitted when the user clicks the optional action button. */\r\n readonly action = output<void>();\r\n\r\n /** Snack-bar payload with a safe fallback to an empty message when no data is injected. */\r\n protected readonly dialogData = signal<ToastData>(\r\n (inject(MAT_SNACK_BAR_DATA) as ToastData | null) ?? { message: '' }\r\n );\r\n\r\n /**\r\n * Emits the `action` event to notify the caller that the action button was clicked.\r\n */\r\n protected do(): void {\r\n this.action.emit();\r\n }\r\n}\r\n","<div fxLayout=\"row\" fxLayoutGap=\"10px\">\r\n @if (dialogData().icon) {\r\n <div fxFlex='30px' fxLayoutAlign=\"start\" fxFlexAlign=\"center\">\r\n <mat-icon>{{dialogData().icon}}</mat-icon>\r\n </div>\r\n }\r\n <div fxFlex='*' fxLayoutAlign=\"start\" fxFlexAlign=\"center\">\r\n @if (dialogData().message) {\r\n <span [innerHTML]=\"dialogData().message | safeHtml\"></span>\r\n }\r\n </div>\r\n @if (dialogData().actionCaption) {\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <div style=\"padding-left: 20px;\">\r\n <button type=\"button\" mat-flat-button (click)=\"do()\"\r\n [innerHTML]=\"dialogData().actionCaption\"></button>\r\n </div>\r\n </div>\r\n }\r\n</div>","import { Service, signal } from '@angular/core';\r\n\r\n\r\n@Service()\r\nexport class UIService {\r\n\r\n /**\r\n * The default Material form-field appearance used across dialogs and forms.\r\n * Defaults to `'fill'`.\r\n */\r\n readonly appearance = signal<'fill' | 'outline'>('fill');\r\n\r\n /**\r\n * Updates the global form-field appearance.\r\n * @param value - The new appearance value. Falls back to `'fill'` when `undefined` is passed.\r\n */\r\n setAppearance(value: 'fill' | 'outline' | undefined): void {\r\n this.appearance.set(value ?? 'fill');\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { DialogResult } from '../../definitions';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\n\r\nexport enum DeleteDialogConfirmMode {\r\n None = 0,\r\n Simple = 1,\r\n Strong = 2\r\n}\r\n\r\nexport interface DeleteDialogData {\r\n title?: string;\r\n message: string;\r\n confirmMode: DeleteDialogConfirmMode;\r\n okCaption?: string;\r\n cancelCaption?: string;\r\n details?: string;\r\n appearance?: MatFormFieldAppearance;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './delete-dialog.component.html',\r\n styleUrl: './delete-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatButtonModule, MatFormFieldModule, MatInputModule, SafeHtmlPipe]\r\n})\r\nexport class DeleteDialogComponent {\r\n /** Emitted when the user makes a choice. Carries the selected result. */\r\n readonly choosen = output<DialogResult>();\r\n\r\n private readonly dialogRef = inject(MatDialogRef<DeleteDialogComponent>);\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<DeleteDialogData>((() => {\r\n const raw = (inject(MAT_DIALOG_DATA) as DeleteDialogData | null) ?? {};\r\n return {\r\n title: 'Attenzione',\r\n okCaption: 'Si',\r\n cancelCaption: 'No',\r\n confirmMode: DeleteDialogConfirmMode.None,\r\n message: '',\r\n ...raw,\r\n };\r\n })());\r\n\r\n /**\r\n * Whether the user has confirmed the deletion.\r\n * Starts as `true` for all modes except `Simple`, which requires explicit checkbox confirmation.\r\n */\r\n protected readonly confirmed = signal<boolean>(\r\n this.dialogData().confirmMode !== DeleteDialogConfirmMode.Simple\r\n );\r\n\r\n /** Current value typed into the strong-confirmation text field. */\r\n protected confirmValue?: string;\r\n\r\n /**\r\n * Confirms the deletion, emitting `'ok'` and closing the dialog.\r\n */\r\n ok(): void {\r\n this.choosen.emit({ result: 'ok' });\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Cancels the operation, emitting `'cancel'` and closing the dialog.\r\n */\r\n cancel(): void {\r\n this.choosen.emit({ result: 'cancel' });\r\n this.dialogRef.close();\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\">\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\"></div>\r\n }\r\n </div>\r\n @if (dialogData().details) {\r\n <div class=\"details-box\">\r\n <p class=\"x-small uppercase secondary\">Dettaglio:</p>\r\n <div class=\"small details\">\r\n <div [innerHtml]=\"dialogData().details | safeHtml\"></div>\r\n </div>\r\n </div>\r\n }\r\n @if (dialogData().confirmMode === 1) {\r\n <div>\r\n <mat-checkbox (change)=\"confirmed.set($event.checked)\" [checked]=\"confirmed()\">\r\n Confermo la cancellazione\r\n </mat-checkbox>\r\n </div>\r\n } @else if (dialogData().confirmMode === 2) {\r\n <p>Per confermare la cancellazione digita la parola <i><b>elimina</b></i>.</p>\r\n <mat-form-field style=\"width: 200px\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Conferma</mat-label>\r\n <input matInput #field_confirm=\"ngModel\" [(ngModel)]=\"confirmValue\" name=\"field_confirm\" required\r\n [attr.aria-label]=\"'Digita la parola -elimina-'\">\r\n @if (field_confirm.invalid) {\r\n <mat-error>Digita la parola \"elimina\"</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <br>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"end center\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\"\r\n [disabled]=\"f.form.invalid || (confirmValue && confirmValue.toLowerCase() !== 'elimina') || !confirmed()\"\r\n [mat-dialog-close]=\"true\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\"\r\n (click)=\"cancel()\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { Overlay, OverlayRef } from '@angular/cdk/overlay';\r\nimport { ComponentPortal, ComponentType } from '@angular/cdk/portal';\r\nimport { PlatformLocation } from '@angular/common';\r\nimport { ComponentRef, inject, Service } from '@angular/core';\r\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\r\nimport { MatSnackBar, MatSnackBarRef } from '@angular/material/snack-bar';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { Observable, Subscription, timer } from 'rxjs';\r\nimport { first, tap } from 'rxjs/operators';\r\nimport { BusyDialogComponent } from '../dialogs/busy/busy-dialog.component';\r\nimport {\r\n ConfirmDialogComponent,\r\n ConfirmDialogData,\r\n ConfirmDialogOption\r\n} from '../dialogs/confirm/confirm-dialog.component';\r\nimport {\r\n InfoDialogComponent,\r\n InfoDialogData\r\n} from '../dialogs/info/info-dialog.component';\r\nimport { ToastComponent, ToastData } from '../dialogs/toast/toast.component';\r\nimport { UIService } from './ui.service';\r\nimport { DeleteDialogComponent, DeleteDialogConfirmMode, DeleteDialogData } from '../dialogs/delete/delete-dialog.component';\r\n// PromptDialogType is an enum used as a runtime value (default parameters), so it must be a real import.\r\nimport { PromptDialogType } from '../definitions';\r\n// Data contracts: type-only, erased at compile time (no runtime cost).\r\nimport type { PromptDialogData, PromptTimeDialogData, SelectDialogData, SelectFileDialogData, SelectTreeDialogData } from '../definitions';\r\n// Heavy dialog components: type-only imports for return-type annotations. The real classes are\r\n// pulled in lazily via dynamic import() so their Material dependencies stay out of the main bundle.\r\nimport type { SendToDialogComponent } from '../dialogs/send-to/send-to-dialog.component';\r\nimport type { SelectTreeDialogComponent } from '../dialogs/select-tree/select-tree-dialog.component';\r\nimport type { SelectPictureDialogComponent } from '../dialogs/select-picture/select-picture-dialog.component';\r\nimport type { SelectFileDialogComponent } from '../dialogs/select-file/select-file-dialog.component';\r\nimport type { SelectDialogComponent } from '../dialogs/select/select-dialog.component';\r\nimport type { PromptDialogComponent } from '../dialogs/prompt/prompt-dialog.component';\r\nimport type { PromptDateDialogComponent } from '../dialogs/prompt-date/prompt-date-dialog.component';\r\nimport type { PromptTimeDialogComponent } from '../dialogs/prompt-time/prompt-time-dialog.component';\r\nimport type { PromptOtpDialogComponent } from '../dialogs/prompt-otp/prompt-otp-dialog.component';\r\n\r\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\r\nexport interface IDialogService {}\r\n\r\ninterface PopHistoryEntry {\r\n id: string;\r\n value: number;\r\n}\r\n\r\nexport class BusyTimer {\r\n private readonly subscription: Subscription;\r\n\r\n constructor(\r\n private readonly dialogService: DialogService,\r\n due: number = 100,\r\n message: string = 'Operazione in corso...'\r\n ) {\r\n this.subscription = timer(due).pipe(tap(() => this.dialogService.busy(message))).subscribe();\r\n }\r\n\r\n /** Dispose object */\r\n clear(): void {\r\n this.subscription.unsubscribe();\r\n this.dialogService.clearBusy();\r\n }\r\n}\r\n\r\n@Service()\r\nexport class DialogService extends UIService {\r\n\r\n private readonly dialog = inject(MatDialog);\r\n private readonly overlay = inject(Overlay);\r\n private readonly snackBar = inject(MatSnackBar);\r\n private readonly location = inject(PlatformLocation);\r\n\r\n private busyDialogRef?: OverlayRef;\r\n private busyComponentRef?: ComponentRef<BusyDialogComponent>;\r\n private errorDialogRef?: MatDialogRef<InfoDialogComponent>;\r\n private readonly popHistory: PopHistoryEntry[] = [];\r\n private popState = true;\r\n private poppingState = false;\r\n\r\n constructor() {\r\n super();\r\n\r\n // Handle dialog close when back button is clicked\r\n this.location.onPopState(() => {\r\n if (!this.poppingState) {\r\n const count = this.dialog.openDialogs.length;\r\n if (count > 0) {\r\n // Disable pop state if needed\r\n this.popState = false;\r\n // Close dialog\r\n this.dialog.openDialogs[count - 1].close();\r\n }\r\n } else {\r\n this.poppingState = false;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Removes trailing `#` characters from the current URL (e.g. after a page reload).\r\n * @param resetPoppingState - When `true`, resets the internal popping-state flag.\r\n */\r\n clearUrl(resetPoppingState: boolean = false): void {\r\n const url = location.href;\r\n let l = url.length;\r\n while (l >= 0 && url[l - 1] === '#') l--;\r\n if (l < url.length)\r\n history.replaceState({}, '', url.substring(0, l));\r\n if (resetPoppingState)\r\n this.poppingState = false;\r\n }\r\n\r\n /**\r\n * Close all dialogs\r\n */\r\n closeAll(): void {\r\n this.dialog.closeAll();\r\n }\r\n\r\n\r\n /**\r\n * Opens a Material dialog. Returns `null` when not running in a browser.\r\n * @param component - The component to open as a dialog.\r\n * @param config - The dialog configuration.\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n open<T>(component: ComponentType<T>, config: MatDialogConfig<unknown>): MatDialogRef<T> | null {\r\n if (!SystemUtils.isBrowser()) return null;\r\n this.clearBusy();\r\n return this.openDialog(component, config);\r\n }\r\n\r\n\r\n /**\r\n * Internal helper that wraps `MatDialog.open`, subscribes to lifecycle hooks\r\n * and manages browser-history push/pop entries.\r\n * @param component - The component to open.\r\n * @param config - The dialog configuration.\r\n * @returns The dialog reference.\r\n */\r\n private openDialog<T>(component: ComponentType<T>, config: MatDialogConfig<unknown>): MatDialogRef<T> {\r\n // We will take care of navigation\r\n config.closeOnNavigation = false;\r\n const d = this.dialog.open(component, config);\r\n d.afterOpened().pipe(first()).subscribe(() => this.pushDialog(d.id));\r\n d.beforeClosed().pipe(first()).subscribe(() => this.popDialog(d.id));\r\n d.afterClosed().pipe(first()).subscribe(() => {\r\n // Final cleanup of middle objects\r\n this.errorDialogRef = undefined;\r\n });\r\n return d;\r\n }\r\n\r\n /**\r\n * Returns the element height including margins\r\n * @param element - element\r\n * @returns the height\r\n */\r\n private outerHeight(element: HTMLElement): number {\r\n if (!SystemUtils.isBrowser()) return 0;\r\n const height = element.offsetHeight;\r\n const style = window.getComputedStyle(element);\r\n return (['top', 'bottom'] as const)\r\n .map(side => parseInt(style.getPropertyValue(`margin-${side}`), 10))\r\n .reduce((total, margin) => total + margin, height);\r\n }\r\n\r\n /**\r\n * Return current dialog height\r\n */\r\n getCurrentDialogHeight(): number {\r\n if (!SystemUtils.isBrowser()) return 0;\r\n const count = this.popHistory.length;\r\n if (count > 0) {\r\n let id = this.popHistory[count - 1].id;\r\n let elem = document.getElementById(id);\r\n if (elem && elem.clientHeight > 0) return elem.clientHeight;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Returns the scrollable content area height for the topmost open dialog.\r\n * @param fixedPartsClassName - CSS class names of fixed (non-scrollable) elements whose heights are subtracted.\r\n * @param minimalHeight - Minimum height floor to use when the dialog height is smaller.\r\n * @returns The computed scrollable height in pixels.\r\n */\r\n getCurrentDialogScrollableHeight(\r\n fixedPartsClassName: string[],\r\n minimalHeight: number\r\n ): number {\r\n if (!SystemUtils.isBrowser()) return 0;\r\n let h = Math.max(this.getCurrentDialogHeight(), minimalHeight);\r\n if (fixedPartsClassName) {\r\n fixedPartsClassName.forEach(n => {\r\n const elems = document.getElementsByClassName(n);\r\n if (elems) {\r\n for (let i = 0; i < elems.length; i++) {\r\n h -= this.outerHeight(elems[i] as HTMLElement);\r\n }\r\n }\r\n });\r\n }\r\n return h;\r\n }\r\n\r\n /**\r\n * Push a dialog into the browser history\r\n */\r\n private pushDialog(id: string): void {\r\n if (!SystemUtils.isBrowser()) return;\r\n const index = history.length;\r\n history.pushState({ index }, '', location.href + '#');\r\n this.popHistory.push({ id, value: index });\r\n }\r\n\r\n /**\r\n * Pop a dialog from the history\r\n */\r\n private popDialog(id?: string): void {\r\n if (!SystemUtils.isBrowser()) return;\r\n if (this.popState) {\r\n this.poppingState = true;\r\n let popped = 1;\r\n if (id) {\r\n const p = this.popHistory.findIndex(n => n.id === id);\r\n if (p !== -1) {\r\n popped = this.popHistory[p].value - (history.state?.index ?? 0);\r\n popped = popped ? popped + 1 : 1;\r\n this.popHistory.splice(p, 1);\r\n }\r\n const url = location.href;\r\n let l = url.length;\r\n while (l >= 0 && url[l - 1] === '#' && popped > 0) {\r\n l--;\r\n popped--;\r\n }\r\n if (l < url.length)\r\n history.replaceState({}, '', url.substring(0, l));\r\n }\r\n }\r\n this.popState = true;\r\n }\r\n\r\n /**\r\n * Creates the CDK overlay used to host the busy indicator.\r\n * @returns The new `OverlayRef`.\r\n */\r\n private createBusy(): OverlayRef {\r\n return this.overlay.create({\r\n hasBackdrop: true,\r\n backdropClass: 'busy-backdrop',\r\n positionStrategy: this.overlay.position()\r\n .global()\r\n .centerHorizontally()\r\n .centerVertically()\r\n });\r\n }\r\n\r\n /**\r\n * Clear busy dialog\r\n */\r\n clearBusy() {\r\n setTimeout(() => {\r\n this.busyDialogRef?.detach();\r\n this.busyComponentRef?.destroy();\r\n }, 500);\r\n\r\n }\r\n\r\n /**\r\n * Shows or updates the busy overlay.\r\n * @param message - Text to display inside the overlay.\r\n * @param progress - Progress value (`-1` = indeterminate). Defaults to `-1`.\r\n * @param progressMode - Progress bar mode. Defaults to `'indeterminate'`.\r\n * @param type - Visual style of the overlay. Defaults to `'bar'`.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created, `false` if an existing one was updated.\r\n */\r\n setBusy(\r\n message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n type: 'bar' | 'spinner' | 'wait' | 'hourglass' = 'bar',\r\n action?: Observable<unknown>\r\n ): boolean {\r\n const exists = this.busyDialogRef?.hasAttached();\r\n if (exists) {\r\n this.busyComponentRef?.instance.set(message, progress, progressMode, type); // update existing\r\n } else {\r\n // Open new\r\n if (!this.busyDialogRef) {\r\n this.busyDialogRef = this.createBusy();\r\n }\r\n this.busyComponentRef = this.busyDialogRef.attach(new ComponentPortal(BusyDialogComponent));\r\n this.busyComponentRef.instance.set(message, progress, progressMode, type);\r\n if (action) {\r\n action\r\n .pipe(first())\r\n .subscribe(() => {\r\n this.clearBusy();\r\n });\r\n }\r\n }\r\n return !exists;\r\n }\r\n\r\n /**\r\n * Shows or updates the busy overlay using the progress-bar style.\r\n * @param message - Text to display inside the overlay.\r\n * @param progress - Progress value (`-1` = indeterminate). Defaults to `-1`.\r\n * @param progressMode - Progress bar mode. Defaults to `'indeterminate'`.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created.\r\n */\r\n busy(\r\n message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n action?: Observable<unknown>\r\n ): boolean {\r\n return this.setBusy(message, progress, progressMode, 'bar', action);\r\n }\r\n\r\n \r\n /**\r\n * Returns a `BusyTimer` that shows the busy overlay after a debounce delay.\r\n * @param message - Text to display. Defaults to `'Operazione in corso...'`.\r\n * @param due - Delay in milliseconds before the overlay appears. Defaults to `100`.\r\n * @returns A `BusyTimer` that must be disposed with `clear()` when the operation ends.\r\n */\r\n busyTimer(message: string = \"Operazione in corso...\", due: number = 100): BusyTimer {\r\n return new BusyTimer(this, due, message);\r\n }\r\n\r\n\r\n /**\r\n * Shows or updates the busy overlay using the hourglass style.\r\n * @param message - Text to display inside the overlay.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created.\r\n */\r\n busyHourglass(\r\n message: string,\r\n action?: Observable<unknown>\r\n ): boolean {\r\n return this.setBusy(message, -1, 'indeterminate', 'hourglass', action);\r\n }\r\n\r\n /**\r\n * Shows or updates the busy overlay using the spinner style.\r\n * @param message - Text to display inside the overlay.\r\n * @param progress - Progress value (`-1` = indeterminate). Defaults to `-1`.\r\n * @param progressMode - Progress mode. Defaults to `'indeterminate'`.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created.\r\n */\r\n busySpinner(\r\n message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n action?: Observable<unknown>\r\n ): boolean {\r\n return this.setBusy(message, progress, progressMode, 'spinner', action);\r\n }\r\n\r\n /**\r\n * Shows a minimal wait spinner overlay.\r\n * @param action - Optional observable; the overlay is dismissed when it emits.\r\n * @returns `true` if a new overlay was created.\r\n */\r\n wait(action?: Observable<unknown>): boolean {\r\n return this.setBusy('', -1, 'indeterminate', 'wait', action);\r\n }\r\n\r\n\r\n /**\r\n * Opens an informational dialog.\r\n * @param message - HTML message to display.\r\n * @param title - Dialog title. Defaults to `'Informazioni'`.\r\n * @param okCaption - Confirmation button label. Defaults to `'Ok'`.\r\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\r\n * @param dismissAfter - Auto-close delay in milliseconds (optional).\r\n * @param details - Optional secondary details text.\r\n * @param onNavigate - Optional navigation callback invoked when the user clicks a link.\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n info(\r\n message: string,\r\n title: string = 'Informazioni',\r\n okCaption: string = 'Ok',\r\n width: number = 500,\r\n dismissAfter?: number,\r\n details?: string,\r\n onNavigate?: (url: string) => void\r\n ): MatDialogRef<InfoDialogComponent> | null {\r\n this.clearBusy();\r\n return this.open(InfoDialogComponent, {\r\n ariaLabel: 'informazioni',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n data: {\r\n message,\r\n title,\r\n okCaption,\r\n dismissAfter,\r\n details,\r\n onNavigate,\r\n appearance: 'fill'\r\n } as InfoDialogData,\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Opens an error dialog. If one is already open, its content is updated in place.\r\n * @param message - HTML error message to display.\r\n * @param log - Optional technical log / stack trace shown in the details panel.\r\n * @param title - Dialog title. Defaults to `'Errore'`.\r\n * @param okCaption - Confirmation button label. Defaults to `'Ok'`.\r\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\r\n * @param dismissAfter - Auto-close delay in milliseconds (optional).\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n error(\r\n message: string,\r\n log?: string,\r\n title: string = 'Errore',\r\n okCaption: string = 'Ok',\r\n width: number = 500,\r\n dismissAfter?: number,\r\n ): MatDialogRef<InfoDialogComponent> | null {\r\n this.clearBusy();\r\n if (this.errorDialogRef) {\r\n // Just change current error\r\n this.errorDialogRef.componentInstance.setData({\r\n message,\r\n title,\r\n details: log,\r\n okCaption,\r\n dismissAfter\r\n });\r\n return this.errorDialogRef;\r\n }\r\n const ref = this.open(InfoDialogComponent, {\r\n ariaLabel: 'errore',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n message,\r\n title,\r\n details: log,\r\n okCaption,\r\n dismissAfter,\r\n appearance: 'fill'\r\n } as InfoDialogData,\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n });\r\n this.errorDialogRef = ref ?? undefined;\r\n return ref;\r\n }\r\n\r\n /**\r\n * Shows a snack-bar toast notification.\r\n * @param message - HTML message to display.\r\n * @param duration - Visible duration in milliseconds. Defaults to `2000`.\r\n * @param icon - Material icon name shown beside the message. Defaults to `'check'`.\r\n * @param actionCaption - Optional label for the action button.\r\n * @returns The snack-bar reference.\r\n */\r\n toast(\r\n message: string,\r\n duration: number = 2000,\r\n icon: string = 'check',\r\n actionCaption?: string\r\n ): MatSnackBarRef<ToastComponent> {\r\n this.clearBusy();\r\n if (duration === -1) duration = 2000; // default\r\n const toastRef = this.snackBar.openFromComponent(ToastComponent, {\r\n duration,\r\n data: { message, icon, actionCaption } as ToastData\r\n });\r\n toastRef.instance.action.subscribe(() => toastRef.dismiss());\r\n return toastRef;\r\n }\r\n\r\n /**\r\n * Opens a confirmation dialog.\r\n * @param message - HTML message to display.\r\n * @param title - Dialog title. Defaults to `'Conferma'`.\r\n * @param okCaption - Primary action button label. Defaults to `'Si'`.\r\n * @param cancelCaption - Cancel button label. Defaults to `'No'`.\r\n * @param otherCaption - Optional tertiary action button label.\r\n * @param options - Optional list of checkbox options shown to the user.\r\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\r\n * @param details - Optional secondary details text.\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n confirm(\r\n message: string,\r\n title: string = 'Conferma',\r\n okCaption: string = 'Si',\r\n cancelCaption: string = 'No',\r\n otherCaption?: string,\r\n options?: ConfirmDialogOption[],\r\n width: number = 500,\r\n details?: string\r\n ): MatDialogRef<ConfirmDialogComponent> | null {\r\n return this.open(ConfirmDialogComponent, {\r\n ariaLabel: 'conferma',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n message,\r\n title,\r\n okCaption,\r\n cancelCaption,\r\n otherCaption,\r\n options,\r\n details,\r\n appearance: 'fill'\r\n } as ConfirmDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Opens a deletion-confirmation dialog.\r\n * @param message - HTML message to display.\r\n * @param title - Dialog title. Defaults to `'Attenzione'`.\r\n * @param confirmMode - Confirmation mode (none / checkbox / type-to-confirm). Defaults to `None`.\r\n * @param okCaption - Primary action button label. Defaults to `'Si'`.\r\n * @param cancelCaption - Cancel button label. Defaults to `'No'`.\r\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\r\n * @param details - Optional secondary details text.\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n delete(\r\n message: string,\r\n title: string = 'Attenzione',\r\n confirmMode: DeleteDialogConfirmMode = DeleteDialogConfirmMode.None,\r\n okCaption: string = 'Si',\r\n cancelCaption: string = 'No',\r\n width: number = 500,\r\n details?: string\r\n ): MatDialogRef<DeleteDialogComponent> | null {\r\n return this.open(DeleteDialogComponent, {\r\n ariaLabel: 'attenzione',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n message,\r\n title,\r\n confirmMode,\r\n okCaption,\r\n cancelCaption,\r\n details,\r\n appearance: 'fill'\r\n } as DeleteDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Lazily loads a dialog component (in a separate bundle chunk) and opens it.\r\n * The component's heavy Material dependencies are only pulled in on first use.\r\n * @param loader - Returns the dialog component class via a dynamic `import()`.\r\n * @param config - The dialog configuration.\r\n * @returns The dialog reference, or `null` outside the browser.\r\n */\r\n private async openLazy<T>(\r\n loader: () => Promise<ComponentType<T>>,\r\n config: MatDialogConfig<unknown>\r\n ): Promise<MatDialogRef<T> | null> {\r\n if (!SystemUtils.isBrowser()) return null;\r\n const component = await loader();\r\n return this.open(component, config);\r\n }\r\n\r\n /**\r\n * Open a send-to-email dialog (lazy-loaded).\r\n * @param title - Dialog title.\r\n * @param text - Pre-filled message body.\r\n * @param subject - Pre-filled subject line.\r\n * @param canPopulate - Whether the populate-recipients action is available.\r\n * @param count - Number of documents being sent.\r\n * @param options - Checkable option list.\r\n * @param width - Maximum dialog width in pixels.\r\n * @returns The opened dialog reference, or `null` outside the browser.\r\n */\r\n async sendTo(\r\n title: string = 'Invia per email',\r\n text?: string,\r\n subject?: string,\r\n canPopulate: boolean = false,\r\n count?: number,\r\n options?: any,\r\n width: number = 600\r\n ): Promise<MatDialogRef<SendToDialogComponent, any> | null> {\r\n return this.openLazy(\r\n async () => (await import('../dialogs/send-to/send-to-dialog.component')).SendToDialogComponent,\r\n {\r\n ariaLabel: 'invia per email',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n count,\r\n canPopulate,\r\n appearance: 'fill',\r\n text,\r\n subject,\r\n options\r\n },\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Open a tree-node selection dialog (lazy-loaded).\r\n * @param nodes - The tree nodes to display.\r\n * @param title - Dialog title.\r\n * @param description - Optional description shown below the title.\r\n * @param initialFilter - Pre-applied filter text.\r\n * @param width - Maximum dialog width in pixels.\r\n * @param okCaption - Label for the confirm button.\r\n * @param canAppend - Whether the append-node action is available.\r\n * @returns The opened dialog reference, or `null` outside the browser.\r\n */\r\n async selectTree(\r\n nodes: any,\r\n title: string = 'Seleziona un elemento',\r\n description?: string,\r\n initialFilter?: string,\r\n width: number = 800,\r\n okCaption: string = 'Ok',\r\n canAppend: boolean = false\r\n ): Promise<MatDialogRef<SelectTreeDialogComponent, any> | null> {\r\n return this.openLazy(\r\n async () => (await import('../dialogs/select-tree/select-tree-dialog.component')).SelectTreeDialogComponent,\r\n {\r\n ariaLabel: 'seleziona un elemento',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n description,\r\n initialFilter,\r\n okCaption,\r\n nodes,\r\n appearance: 'outline',\r\n canAppend\r\n } as SelectTreeDialogData,\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Open a picture-selection dialog (lazy-loaded).\r\n * @param title - Dialog title.\r\n * @param description - Brief description shown in the dialog.\r\n * @param okCaption - Label for the confirm button.\r\n * @param options - Checkable option list.\r\n * @param width - Maximum dialog width in pixels.\r\n * @param maxSize - Maximum accepted file size in MB.\r\n * @param maxPictureWidth - Maximum accepted picture width in pixels.\r\n * @param maxPictureHeight - Maximum accepted picture height in pixels.\r\n * @returns The opened dialog reference, or `null` outside the browser.\r\n */\r\n async selectPicture(\r\n title: string = 'Seleziona immagine',\r\n description?: string,\r\n okCaption: string = 'Ok',\r\n options?: any,\r\n width: number = 600,\r\n maxSize?: number,\r\n maxPictureWidth?: number,\r\n maxPictureHeight?: number\r\n ): Promise<MatDialogRef<SelectPictureDialogComponent, any> | null> {\r\n return this.openLazy(\r\n async () => (await import('../dialogs/select-picture/select-picture-dialog.component')).SelectPictureDialogComponent,\r\n {\r\n ariaLabel: 'seleziona immagine',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n description,\r\n okCaption,\r\n options,\r\n appearance: 'fill',\r\n maxSize,\r\n maxWidth: maxPictureWidth,\r\n maxHeight: maxPictureHeight\r\n } as SelectFileDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Open a file-selection dialog (lazy-loaded).\r\n * @param title - Dialog title.\r\n * @param description - Brief description shown in the dialog.\r\n * @param okCaption - Label for the confirm button.\r\n * @param helpLink - URL for the help link.\r\n * @param helpCaption - Display text for the help link.\r\n * @param options - Checkable option list.\r\n * @param width - Maximum dialog width in pixels.\r\n * @param maxSize - Maximum accepted file size in MB.\r\n * @param accept - Accepted file extensions (e.g. `.pdf,.docx`).\r\n * @returns The opened dialog reference, or `null` outside the browser.\r\n */\r\n async selectFile(\r\n title: string = 'Seleziona file',\r\n description?: string,\r\n okCaption: string = 'Ok',\r\n helpLink?: string,\r\n helpCaption?: string,\r\n options?: any,\r\n width: number = 600,\r\n maxSize?: number,\r\n accept?: string\r\n ): Promise<MatDialogRef<SelectFileDialogComponent, any> | null> {\r\n return this.openLazy(\r\n async () => (await import('../dialogs/select-file/select-file-dialog.component')).SelectFileDialogComponent,\r\n {\r\n ariaLabel: 'seleziona file',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n description,\r\n okCaption,\r\n helpLink,\r\n helpCaption,\r\n options,\r\n appearance: 'fill',\r\n maxSize,\r\n accept\r\n } as SelectFileDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Open a multipurpose selection and CRUD dialog (lazy-loaded).\r\n * @param data - The dialog configuration model.\r\n * @param disableClose - Whether the dialog can be closed by clicking outside.\r\n * @param closeOnNavigation - Whether the dialog closes on route navigation.\r\n * @returns The opened dialog reference, or `null` outside the browser.\r\n */\r\n async select(\r\n data: SelectDialogData,\r\n disableClose: boolean = true,\r\n closeOnNavigation: boolean = true\r\n ): Promise<MatDialogRef<SelectDialogComponent, any> | null> {\r\n const dialogData: SelectDialogData = { ...data, appearance: data.appearance ?? 'outline' };\r\n return this.openLazy(\r\n async () => (await import('../dialogs/select/select-dialog.component')).SelectDialogComponent,\r\n {\r\n ariaLabel: 'seleziona',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: dialogData,\r\n closeOnNavigation: closeOnNavigation,\r\n disableClose: disableClose,\r\n minWidth: '375px',\r\n maxWidth: `${data.width ?? 800}px`,\r\n width: '100%'\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Prompt the user to enter a value (lazy-loaded).\r\n * @param title - Dialog title.\r\n * @param type - The input type (default, text, number, etc.).\r\n * @param description - Placeholder or description text.\r\n * @param initialValue - Pre-filled value.\r\n * @param okCaption - Label for the confirm button.\r\n * @param cancelCaption - Label for the cancel button.\r\n * @param options - Checkable option list.\r\n * @param width - Maximum dialog width in pixels.\r\n * @param required - Whether the input is required.\r\n * @returns The opened dialog reference, or `null` outside the browser.\r\n */\r\n async prompt(\r\n title: string,\r\n type: PromptDialogType = PromptDialogType.Default,\r\n description?: string,\r\n initialValue?: any,\r\n okCaption: string = 'Ok',\r\n cancelCaption: string = 'Annulla',\r\n options?: any,\r\n width: number = 500,\r\n required?: boolean,\r\n ): Promise<MatDialogRef<PromptDialogComponent> | null> {\r\n return this.openLazy(\r\n async () => (await import('../dialogs/prompt/prompt-dialog.component')).PromptDialogComponent,\r\n {\r\n ariaLabel: 'inserisci valore',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n type,\r\n description,\r\n initialValue,\r\n okCaption,\r\n cancelCaption,\r\n appearance: 'fill',\r\n required,\r\n options\r\n } as PromptDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Prompt the user to enter a date or date interval (lazy-loaded).\r\n * @param title - Dialog title.\r\n * @param type - Date or DateInterval.\r\n * @param description - Placeholder or description text.\r\n * @param initialValue - Pre-filled value.\r\n * @param okCaption - Label for the confirm button.\r\n * @param cancelCaption - Label for the cancel button.\r\n * @param options - Checkable option list.\r\n * @param width - Maximum dialog width in pixels.\r\n * @param required - Whether the input is required.\r\n * @returns The opened dialog reference, or `null` outside the browser.\r\n */\r\n async promptDate(\r\n title: string,\r\n type: PromptDialogType.Date | PromptDialogType.DateInterval = PromptDialogType.Date,\r\n description?: string,\r\n initialValue?: any,\r\n okCaption: string = 'Ok',\r\n cancelCaption: string = 'Annulla',\r\n options?: any,\r\n width: number = 500,\r\n required?: boolean,\r\n ): Promise<MatDialogRef<PromptDateDialogComponent> | null> {\r\n return this.openLazy(\r\n async () => (await import('../dialogs/prompt-date/prompt-date-dialog.component')).PromptDateDialogComponent,\r\n {\r\n ariaLabel: 'inserisci data',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n type,\r\n description,\r\n initialValue,\r\n okCaption,\r\n cancelCaption,\r\n appearance: 'fill',\r\n required,\r\n options\r\n } as PromptDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Prompt the user to enter a time value (lazy-loaded).\r\n * @param title - Dialog title.\r\n * @param description - Placeholder or description text.\r\n * @param slots - Optional time slots string.\r\n * @param initialValue - Pre-filled value.\r\n * @param okCaption - Label for the confirm button.\r\n * @param cancelCaption - Label for the cancel button.\r\n * @param options - Checkable option list.\r\n * @param width - Maximum dialog width in pixels.\r\n * @param required - Whether the input is required.\r\n * @returns The opened dialog reference, or `null` outside the browser.\r\n */\r\n async promptTime(\r\n title: string,\r\n description?: string,\r\n slots?: string,\r\n initialValue?: any,\r\n okCaption: string = 'Ok',\r\n cancelCaption: string = 'Annulla',\r\n options?: any,\r\n width: number = 500,\r\n required?: boolean,\r\n ): Promise<MatDialogRef<PromptTimeDialogComponent> | null> {\r\n return this.openLazy(\r\n async () => (await import('../dialogs/prompt-time/prompt-time-dialog.component')).PromptTimeDialogComponent,\r\n {\r\n ariaLabel: 'inserisci orario',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n type: PromptDialogType.Time,\r\n description,\r\n slots,\r\n initialValue,\r\n okCaption,\r\n cancelCaption,\r\n appearance: 'fill',\r\n required,\r\n options\r\n } as PromptTimeDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n }\r\n );\r\n }\r\n\r\n /**\r\n * Prompt the user to enter an OTP code (lazy-loaded).\r\n * @param title - Dialog title.\r\n * @param description - Description text shown in the dialog.\r\n * @param okCaption - Label for the confirm button.\r\n * @param cancelCaption - Label for the cancel button.\r\n * @param width - Maximum dialog width in pixels.\r\n * @returns The opened dialog reference, or `null` outside the browser.\r\n */\r\n async promptOtp(\r\n title: string = 'Conferma la tua identità',\r\n description?: string,\r\n okCaption: string = 'Ok',\r\n cancelCaption: string = 'Annulla',\r\n width: number = 500,\r\n ): Promise<MatDialogRef<PromptOtpDialogComponent> | null> {\r\n return this.openLazy(\r\n async () => (await import('../dialogs/prompt-otp/prompt-otp-dialog.component')).PromptOtpDialogComponent,\r\n {\r\n ariaLabel: 'inserisci codice OTP',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n type: PromptDialogType.Default,\r\n description,\r\n okCaption,\r\n cancelCaption,\r\n appearance: 'fill',\r\n } as PromptDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: `${width}px`,\r\n width: '100%'\r\n }\r\n );\r\n }\r\n\r\n}\r\n\r\n","import { EnvironmentProviders, makeEnvironmentProviders, NgModule } from \"@angular/core\";\r\nimport { ArsCoreModule } from '@arsedizioni/ars-utils/core';\r\n\r\n/**\r\n * Standalone providers for the ars-utils \"ui\" layer.\r\n *\r\n * Currently this entry point has NO environment-level providers to register:\r\n * - Services use `@Service()` (root-provided) and are loaded on demand when injected.\r\n * - The core pipes (format, safeHtml, replace, ...) are standalone and template-only,\r\n * so consuming components import them via `imports: []` — they never need to be\r\n * listed here. Listing them would force all of them into the eager bundle and\r\n * defeat tree-shaking.\r\n *\r\n * The function is kept for API symmetry / future configuration and so standalone apps\r\n * have a stable extension point.\r\n *\r\n * @example\r\n * bootstrapApplication(AppComponent, {\r\n * providers: [provideArsUI()]\r\n * });\r\n */\r\nexport function provideArsUI(): EnvironmentProviders {\r\n return makeEnvironmentProviders([]);\r\n}\r\n\r\n/**\r\n * @deprecated Prefer the standalone {@link provideArsUI} provider together with\r\n * direct imports of the standalone components/directives. This module is kept as a thin,\r\n * backward-compatible shim so existing NgModule-based applications keep working unchanged.\r\n */\r\n@NgModule({\r\n imports: [\r\n ArsCoreModule,\r\n ],\r\n})\r\nexport class ArsUIModule { }\r\n\r\nexport * from \"./definitions\";\r\nexport * from \"./paginatorIntl\";\r\nexport * from \"./services/dialog.service\";\r\nexport * from \"./services/ui.service\";\r\n\r\n","/** Constants identifying each filter group slot and text filter channels. */\r\nexport const Filters = {\r\n FLT_1: 1,\r\n FLT_2: 2,\r\n FLT_3: 3,\r\n FLT_4: 4,\r\n FLT_5: 5,\r\n FLT_TEXT: 96,\r\n FLT_TEXT_1: 97,\r\n FLT_TEXT_2: 98,\r\n FLT_TEXT_3: 99\r\n};\r\n\r\n/** Describes a top-level filter group with optional items or a custom action. */\r\nexport interface FilterGroup {\r\n group?: number;\r\n title?: string;\r\n tooltip?: string;\r\n items?: FilterItem[];\r\n action?: any;\r\n}\r\n/** A single selectable entry within a FilterGroup. */\r\nexport interface FilterItem {\r\n group?: number;\r\n title?: string;\r\n titleSelected?: string;\r\n description?: string;\r\n divider?: boolean;\r\n value?: any;\r\n}\r\n\r\n/** Event payload emitted when an active filter changes. */\r\nexport class CurrentFilterChanged {\r\n /** The updated filter state. */\r\n filter: CurrentFilter;\r\n /** The group slot that changed (see Filters constants). */\r\n group: number;\r\n}\r\n\r\n/** Holds the current state of all active filters for a filter-bar component. */\r\nexport class CurrentFilter {\r\n flt1?: any;\r\n flt1Name?: string;\r\n flt2?: any;\r\n flt2Name?: string;\r\n flt3?: any;\r\n flt3Name?: string;\r\n flt4?: any;\r\n flt4Name?: string;\r\n flt5?: any;\r\n flt5Name?: string;\r\n text?: string;\r\n text2?: string;\r\n text3?: string;\r\n\r\n /**\r\n * Returns true if any filter slot or text field is currently active.\r\n * @returns Whether at least one filter is applied.\r\n */\r\n filtered(): boolean {\r\n return (\r\n this.flt1 != null ||\r\n this.flt2 != null ||\r\n this.flt3 != null ||\r\n this.flt4 != null ||\r\n this.flt5 != null ||\r\n !!this.text?.length ||\r\n !!this.text2?.length ||\r\n !!this.text3?.length\r\n );\r\n }\r\n}\r\n\r\n/** Holds the selected value and display state for a single typed filter slot. */\r\nexport class CurrentFilterItem<T> {\r\n items?: any[];\r\n value?: T;\r\n enabled?: boolean = true;\r\n title?: string;\r\n selectedTitle?: string;\r\n\r\n /**\r\n * Reset the filter to its empty state.\r\n */\r\n public clear(): void {\r\n this.value = undefined;\r\n this.selectedTitle = undefined;\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { PasswordStrength, SystemUtils } from '@arsedizioni/ars-utils/core';\r\n\r\nconst DEFAULT_STRENGTH: PasswordStrength = { score: 0, label: '', color: '', suggestions: [], isValid: false };\r\n\r\n/**\r\n * Displays a password-strength indicator for the provided password string.\r\n * Uses `SystemUtils.calculatePasswordStrength` to derive the score and label.\r\n */\r\n@Component({\r\n selector: 'password-strength',\r\n templateUrl: './password-strength.component.html',\r\n styleUrl: './password-strength.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatTooltipModule]\r\n})\r\nexport class PasswordStrengthComponent {\r\n /** The password to evaluate. An empty string renders the default (score 0) state. */\r\n readonly password = input<string>('');\r\n\r\n /**\r\n * Computed strength result for the current password.\r\n * Falls back to `DEFAULT_STRENGTH` when the password is empty.\r\n */\r\n protected readonly strength = computed<PasswordStrength>(() => {\r\n const pwd = this.password();\r\n return pwd ? SystemUtils.calculatePasswordStrength(pwd) : DEFAULT_STRENGTH;\r\n });\r\n\r\n /**\r\n * CSS class applied to the label element based on the numeric score (1–6 bands).\r\n * Scores ≤ 2 → `'score-2'`, ≤ 3 → `'score-3'`, etc.\r\n */\r\n protected readonly scoreClass = computed<string>(() => {\r\n const score = this.strength().score;\r\n if (score <= 2) return 'score-2';\r\n if (score <= 3) return 'score-3';\r\n if (score <= 4) return 'score-4';\r\n if (score <= 5) return 'score-5';\r\n return 'score-6';\r\n });\r\n}\r\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, ElementRef, computed, forwardRef, signal, viewChildren, ChangeDetectionStrategy } from '@angular/core';\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR, FormsModule } from '@angular/forms';\r\n\r\n\r\n@Component({\r\n selector: 'otp-input',\r\n standalone: true,\r\n imports: [FormsModule],\r\n templateUrl: './otp-input.component.html',\r\n styleUrl: './otp-input.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: NG_VALUE_ACCESSOR,\r\n useExisting: forwardRef(() => OtpInputComponent),\r\n multi: true,\r\n },\r\n ],\r\n})\r\nexport class OtpInputComponent implements ControlValueAccessor {\r\n /** Signal-based query for all individual OTP digit input elements. */\r\n readonly otpFields = viewChildren<ElementRef<HTMLInputElement>>('otpField');\r\n\r\n /** `true` when every digit slot contains a valid single decimal digit. */\r\n readonly isValid = computed(() => this.otpArray().every(d => /^\\d$/.test(d)));\r\n\r\n /** Array of per-digit values backing the OTP display. */\r\n readonly otpArray = signal<string[]>(Array(6).fill(''));\r\n\r\n /** Whether the control is currently disabled. */\r\n readonly disabled = signal<boolean>(false);\r\n\r\n private onChange: (val: string) => void = () => {};\r\n private onTouched: () => void = () => {};\r\n\r\n // ── ControlValueAccessor ───────────────────────────────────────────────────\r\n\r\n /**\r\n * Writes a new value into the control from the model.\r\n * @param value - A string of up to 6 digits to pre-fill the OTP fields.\r\n */\r\n writeValue(value: string): void {\r\n const arr = Array(6).fill('');\r\n if (value) {\r\n value.split('').forEach((c, i) => {\r\n if (i < 6) arr[i] = c;\r\n });\r\n }\r\n this.otpArray.set(arr);\r\n }\r\n\r\n /**\r\n * Registers the callback invoked when the control value changes.\r\n * @param fn - The callback function.\r\n */\r\n registerOnChange(fn: (val: string) => void): void {\r\n this.onChange = fn;\r\n }\r\n\r\n /**\r\n * Registers the callback invoked when the control is touched.\r\n * @param fn - The callback function.\r\n */\r\n registerOnTouched(fn: () => void): void {\r\n this.onTouched = fn;\r\n }\r\n\r\n /**\r\n * Enables or disables the control.\r\n * @param isDisabled - `true` to disable all OTP inputs.\r\n */\r\n setDisabledState(isDisabled: boolean): void {\r\n this.disabled.set(isDisabled);\r\n }\r\n\r\n // ── Event handlers ─────────────────────────────────────────────────────────\r\n\r\n /**\r\n * Blocks non-digit characters before they are inserted.\r\n * @param event - The `beforeinput` event from the input element.\r\n */\r\n onBeforeInput(event: InputEvent): void {\r\n if (event.data && !/^\\d$/.test(event.data)) {\r\n event.preventDefault();\r\n }\r\n }\r\n\r\n /**\r\n * Handles digit input, updates the OTP array, and advances focus.\r\n * @param event - The `input` event from the digit field.\r\n * @param index - Zero-based index of the field that received input.\r\n */\r\n onInput(event: Event, index: number): void {\r\n let val = (event.target as HTMLInputElement).value;\r\n val = val.replace(/\\D/g, '').slice(-1);\r\n\r\n const arr = [...this.otpArray()];\r\n arr[index] = val;\r\n this.otpArray.set(arr);\r\n\r\n this.updateModel();\r\n\r\n if (val && index < 5) {\r\n this.focusField(index + 1);\r\n }\r\n }\r\n\r\n /**\r\n * Handles the Backspace key by moving focus to the previous field when the current one is empty.\r\n * @param event - The `keydown` event.\r\n * @param index - Zero-based index of the field that received the keydown.\r\n */\r\n onKeyDown(event: KeyboardEvent, index: number): void {\r\n if (event.key === 'Backspace' && !this.otpArray()[index] && index > 0) {\r\n this.focusField(index - 1);\r\n }\r\n }\r\n\r\n /**\r\n * Handles paste events by extracting up to 6 digits and distributing them across the OTP fields.\r\n * @param event - The `ClipboardEvent` from the paste action.\r\n */\r\n onPaste(event: ClipboardEvent): void {\r\n event.preventDefault();\r\n const pasted = event.clipboardData?.getData('text') ?? '';\r\n const digits = pasted.replace(/\\D/g, '').slice(0, 6).split('');\r\n\r\n if (digits.length > 0) {\r\n const arr = Array(6).fill('');\r\n digits.forEach((d, i) => (arr[i] = d));\r\n this.otpArray.set(arr);\r\n this.updateModel();\r\n this.focusField(Math.min(digits.length, 5));\r\n }\r\n }\r\n\r\n /**\r\n * Moves focus to the OTP field at the given index.\r\n * @param index - Zero-based index of the target field.\r\n */\r\n private focusField(index: number): void {\r\n const field = this.otpFields()[index];\r\n field?.nativeElement.focus();\r\n field?.nativeElement.select();\r\n }\r\n\r\n /**\r\n * Notifies the form model of the current OTP value and marks the control as touched.\r\n */\r\n private updateModel(): void {\r\n const code = this.otpArray().join('');\r\n this.onChange(code);\r\n this.onTouched();\r\n }\r\n}\r\n","<div class=\"otp-container\">\r\n @for (digit of otpArray(); track $index) {\r\n <input\r\n #otpField\r\n type=\"text\"\r\n maxlength=\"1\"\r\n inputmode=\"numeric\"\r\n pattern=\"[0-9]*\"\r\n class=\"otp-box\"\r\n [value]=\"digit\"\r\n (beforeinput)=\"onBeforeInput($event)\"\r\n (input)=\"onInput($event, $index)\"\r\n (keydown)=\"onKeyDown($event, $index)\"\r\n (paste)=\"onPaste($event)\"\r\n [disabled]=\"disabled()\"\r\n required\r\n />\r\n }\r\n</div>\r\n\r\n","import { Component, inject, output, signal, ChangeDetectionStrategy } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { CredentialsDialogResult } from '../../definitions';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { PasswordStrengthComponent } from '../../components/password-strength/password-strength.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { OtpInputComponent } from '../../components/otp/otp-input.component';\r\n\r\nexport interface CredentialsDialogData {\r\n title?: string;\r\n message?: string;\r\n remember?: boolean;\r\n recoverPassword?: boolean;\r\n recoverPasswordUrl?: string;\r\n user?: string;\r\n okCaption?: string;\r\n mode?: 'email' | 'user' | 'otp';\r\n appearance?: MatFormFieldAppearance;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './credentials-dialog.component.html',\r\n styleUrl: './credentials-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatIconModule,\r\n MatCheckboxModule,\r\n MatDialogActions,\r\n FlexModule,\r\n MatButtonModule,\r\n MatDialogClose,\r\n PasswordStrengthComponent,\r\n OtpInputComponent,\r\n SafeHtmlPipe,\r\n ],\r\n})\r\nexport class CredentialsDialogComponent {\r\n /** Emitted when the user submits the form. Carries the entered credentials. */\r\n readonly done = output<CredentialsDialogResult>();\r\n\r\n /** Emitted when the user requests a password-recovery flow. */\r\n readonly recoveringPassword = output<CredentialsDialogResult>();\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<CredentialsDialogData>((() => {\r\n const raw = (inject(MAT_DIALOG_DATA) as CredentialsDialogData | null) ?? {};\r\n const data: CredentialsDialogData = {\r\n appearance: 'fill',\r\n title: 'Informazioni',\r\n okCaption: 'Salva',\r\n mode: 'email',\r\n ...raw,\r\n };\r\n data.appearance ??= 'fill';\r\n data.title ??= 'Informazioni';\r\n data.okCaption ??= 'Salva';\r\n data.mode ??= 'email';\r\n if (data.mode === 'otp' && !data.message) {\r\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>';\r\n }\r\n return data;\r\n })());\r\n\r\n /** Current form model, pre-filled with the user name from dialog data when provided. */\r\n protected item: CredentialsDialogResult = {\r\n user: (inject(MAT_DIALOG_DATA) as CredentialsDialogData | null)?.user,\r\n };\r\n\r\n /** Whether the password field is currently shown as plain text. */\r\n protected readonly showPassword = signal<boolean>(false);\r\n\r\n /**\r\n * Switches the input mode of the dialog at runtime (e.g. from login to OTP).\r\n * Intended to be called from outside via the dialog component reference.\r\n * @param mode - The new input mode (`'email'`, `'user'`, or `'otp'`).\r\n * @param message - Optional new message to display above the form.\r\n */\r\n public changeMode(mode: 'email' | 'user' | 'otp', message?: string): void {\r\n this.dialogData.update(d => ({\r\n ...d,\r\n mode,\r\n message: message ?? d.message,\r\n }));\r\n }\r\n\r\n /**\r\n * Emits the current form result and closes the dialog.\r\n */\r\n protected ok(): void {\r\n this.done.emit(this.item);\r\n }\r\n\r\n /**\r\n * Emits the current form result for the password-recovery flow and optionally\r\n * opens the recovery URL in a new tab.\r\n */\r\n protected recoverPassword(): void {\r\n this.recoveringPassword.emit(this.item);\r\n const url = this.dialogData().recoverPasswordUrl;\r\n if (url) {\r\n window.open(url, '_blank');\r\n }\r\n }\r\n}\r\n\r\n","<div class=\"dialog-info\">\r\n @if (f.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 [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n @if (dialogData().message) {\r\n <div [innerHtml]=\"dialogData().message | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n @if(dialogData().mode !== 'otp') {\r\n @if (dialogData().mode === 'email') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email</mat-label>\r\n <input type=\"email\" matInput [(ngModel)]=\"item.user\" name=\"email\" #email=\"ngModel\" email required\r\n [attr.aria-label]=\"'Email'\">\r\n @if (email.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n } @else if (dialogData().mode === 'user') {\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Utente</mat-label>\r\n <input matInput [(ngModel)]=\"item.user\" name=\"user\" #user=\"ngModel\" required [attr.aria-label]=\"'user'\">\r\n @if (user.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n <mat-form-field style=\"width: 100%;\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>La tua password abilitata</mat-label>\r\n <input matInput name=\"password\" #password=\"ngModel\" [type]=\"!showPassword() ? 'password' : 'text'\"\r\n [(ngModel)]=\"item.password\" required [attr.aria-label]=\"'La tua password abilitata'\" autocomplete=\"on\">\r\n @if(item.password) {\r\n <password-strength [password]=\"item.password\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint>Attento a maiuscole e minuscole</mat-hint>\r\n @if (password.invalid) {\r\n <mat-error>Password non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n @if (dialogData().remember || dialogData().recoverPassword) {\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxFill style=\"margin-top: 20px;\">\r\n <div>\r\n @if (dialogData().remember) {\r\n <mat-checkbox fxFlexAlign=\"center\" [(ngModel)]=\"item.rememberMe\" name=\"rememberMe\"> Ricordami</mat-checkbox>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\">\r\n @if (dialogData().recoverPassword) {\r\n <button fxFlexAlign=\"center\" mat-button (click)=\"recoverPassword()\" title=\"Recupero password\"\r\n >Non riesco ad accedere</button>\r\n }\r\n </div>\r\n </div>\r\n }\r\n } @else {\r\n <otp-input name=\"otp\" [(ngModel)]=\"item.code\" required></otp-input>\r\n }\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]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { RecoverPasswordDialogResult } from '../../definitions';\r\n\r\nexport interface RecoverPasswordDialogData {\r\n appearance?: MatFormFieldAppearance;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './recover-password-dialog.component.html',\r\n styleUrl: './recover-password-dialog.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatButtonModule,\r\n MatDialogActions,\r\n FlexModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class RecoverPasswordDialogComponent {\r\n\r\n /** Emitted when the user submits the recovery request. Carries the entered email and recaptcha state. */\r\n readonly done = output<RecoverPasswordDialogResult>();\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<RecoverPasswordDialogData>({\r\n appearance: 'fill',\r\n ...((inject(MAT_DIALOG_DATA) as RecoverPasswordDialogData | null) ?? {}),\r\n });\r\n\r\n /** Current form model bound to the template inputs. */\r\n protected item: RecoverPasswordDialogResult = {\r\n email: '',\r\n recaptcha: false,\r\n };\r\n\r\n /**\r\n * Emits the current form result to trigger the password-recovery flow.\r\n */\r\n protected ok(): void {\r\n this.done.emit(this.item);\r\n }\r\n}\r\n","<div class=\"dialog-info\">\r\n @if (f.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>Per quale ragione non sei in grado di effettuare l'accesso?</div>\r\n<mat-dialog-content>\r\n\r\n <b>1. Ho dimenticato la password</b>\r\n <p>\r\n Puoi recuperarla facilmente inserendo l'email a cui la password è collegata. Non è possibile recuperare password\r\n aziendali (non collegate ad un email).</p>\r\n <form name=\"form\" #f=\"ngForm\" (keyup.Enter)=\"!f.form.invalid ? ok() : null\" novalidate>\r\n\r\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData().appearance\">\r\n <mat-label>Email con cui ti sei registrato</mat-label>\r\n <input type=\"email\" matInput name=\"email\" #email=\"ngModel\" [(ngModel)]=\"item.email\" required email\r\n maxlength=\"200\" />\r\n @if (email.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n\r\n <div style=\"margin-top:20px; margin-bottom:20px;\">\r\n <button type=\"button\" mat-flat-button (click)=\"ok()\" [disabled]=\"f.form.invalid\"\r\n aria-label=\"Recupera password\">Recupera password</button>\r\n </div>\r\n </form>\r\n <p></p>\r\n <b>2. Il sistema mi dice che la password non è corretta.</b>\r\n <p>\r\n E' molto probabile che ci sia stato un difetto di digitazione. Per favore controlla bene che non vi siano spazi non\r\n richiesti e che la password rispetti perfettamente le maiuscole e minuscole. Nel caso in cui la digitazione fosse\r\n corretta, verifica che la data del tuo abbonamento non sia scaduta.\r\n </p>\r\n <p></p>\r\n <b>3. Il sistema mi dice che non può accettare connessioni dal mio indirizzo IP</b>\r\n <p>\r\n Il tuo abbonamento è stato vincolato ad un indirizzo IP (indirizzo dal quale ti colleghi). Capita sovente che\r\n questi indirizzi siano cambiati da parte del reparto IT per questioni di sicurezza informatica.\r\n Per risolvere il problema, contattate il reparto IT e fatevi dire qual'è il nuovo indirizzo IP e comunicatelo ad\r\n ARS Edizioni Informatiche.\r\n </p>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n</mat-dialog-actions>","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n inject,\r\n output,\r\n signal\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { EqualsValidatorDirective, PasswordValidatorDirective, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { ResetPasswordDialogResult } from '../../definitions';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { PasswordStrengthComponent } from '../../components/password-strength/password-strength.component';\r\nimport { MatIconModule } from '@angular/material/icon';\r\n\r\n\r\nexport type ResetPasswordDialogMode = 'admin' | 'change' | 'forgot';\r\n\r\nexport interface ResetPasswordDialogData {\r\n mode: ResetPasswordDialogMode;\r\n userId?: number;\r\n userEmail?: string;\r\n appearance?: MatFormFieldAppearance;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './reset-password-dialog.component.html',\r\n styleUrl: './reset-password-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n FlexModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n PasswordValidatorDirective,\r\n PasswordStrengthComponent,\r\n EqualsValidatorDirective,\r\n MatIconModule,\r\n MatDialogActions,\r\n MatButtonModule,\r\n MatDialogClose,\r\n ],\r\n})\r\nexport class ResetPasswordDialogComponent {\r\n /** Emitted when the user submits the new password. Carries the entered password data. */\r\n readonly done = output<ResetPasswordDialogResult>();\r\n\r\n private readonly dialogService = inject(DialogService);\r\n private readonly dialogRef = inject(MatDialogRef<ResetPasswordDialogComponent>);\r\n\r\n /** Dialog configuration with defaults applied at construction time. */\r\n protected readonly dialogData = signal<ResetPasswordDialogData>((() => {\r\n const raw = (inject(MAT_DIALOG_DATA) as ResetPasswordDialogData | null);\r\n return { mode: 'admin' as ResetPasswordDialogMode, appearance: 'fill' as MatFormFieldAppearance, ...raw };\r\n })());\r\n\r\n /** Current form model bound to the template inputs. */\r\n protected item: ResetPasswordDialogResult = {};\r\n\r\n /** Whether the old-password field is currently shown as plain text. */\r\n protected readonly showOldPassword = signal<boolean>(false);\r\n\r\n /** Whether the new-password field is currently shown as plain text. */\r\n protected readonly showPassword = signal<boolean>(false);\r\n\r\n /** Whether the confirm-password field is currently shown as plain text. */\r\n protected readonly showPassword2 = signal<boolean>(false);\r\n\r\n constructor() {\r\n const data = this.dialogData();\r\n if (data.mode !== 'forgot' && !data.userId) {\r\n this.dialogRef.close();\r\n this.dialogService.error('Utente non specificato.');\r\n return;\r\n }\r\n if (data.mode === 'forgot' && !data.userEmail) {\r\n this.dialogRef.close();\r\n this.dialogService.error('Email utente non specificata.');\r\n return;\r\n }\r\n this.item.userEmail = data.userEmail;\r\n this.item.userId = data.userId;\r\n }\r\n\r\n /**\r\n * Emits the current form result to trigger the password-reset flow.\r\n */\r\n protected ok(): void {\r\n this.done.emit(this.item);\r\n }\r\n\r\n /**\r\n * Generates a random password and populates both password fields with it.\r\n */\r\n protected generatePassword(): void {\r\n const password = SystemUtils.generatePassword();\r\n this.item.password = password;\r\n this.item.password2 = password;\r\n }\r\n}\r\n\r\n\r\n","<div class=\"dialog-info\">\r\n @if (f.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>\r\n <form name=\"form\" #f=\"ngForm\" 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 [(ngModel)]=\"item.userEmail\" name=\"userEmail\" #userEmail=\"ngModel\" email required\r\n [attr.aria-label]=\"'Email con cui ti sei registrato'\">\r\n @if (userEmail.invalid) {\r\n <mat-error>Email non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().mode !== 'admin') {\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 name=\"oldPwd\" autocomplete=\"on\"\r\n [(ngModel)]=\"item.oldPassword\" required maxlength=\"30\" #oldPwd=\"ngModel\">\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(item.oldPassword) {\r\n <password-strength [password]=\"item.oldPassword\"></password-strength>\r\n }\r\n @if (oldPwd.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\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 name=\"newPwd\" [(ngModel)]=\"item.password\" required\r\n password minlength=\"10\" maxlength=\"30\" #newPwd=\"ngModel\">\r\n @if(item.password) {\r\n <password-strength [password]=\"item.password\"></password-strength>\r\n }\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword.set(!showPassword())\">\r\n <mat-icon>{{showPassword() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n <mat-hint align=\"end\">{{newPwd.value?.length || 0}}/30</mat-hint>\r\n @if (newPwd.invalid) {\r\n <mat-error>Non valido.</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 name=\"newPwd2\" [(ngModel)]=\"item.password2\"\r\n [required]=\"dialogData().mode !== 'admin'\" password minlength=\"10\" maxlength=\"30\" [equals]=\"newPwd.control\" #newPwd2=\"ngModel\">\r\n <button type=\"button\" mat-icon-button class=\"toolbar-suffix\" matSuffix (click)=\"showPassword2.set(!showPassword2())\">\r\n <mat-icon>{{showPassword2() ? 'visibility' : 'visibility_off'}}</mat-icon>\r\n </button>\r\n @if(item.password2) {\r\n <password-strength [password]=\"item.password2\"></password-strength>\r\n }\r\n <mat-hint align=\"end\">{{newPwd2.value?.length || 0}}/30</mat-hint>\r\n @if (newPwd2.invalid) {\r\n <mat-error>Non valido.</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]=\"f.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>","import { TextFieldModule } from '@angular/cdk/text-field';\r\nimport { ChangeDetectionStrategy, Component, inject, output, signal, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDialogData, PromptDialogResult, PromptDialogType } from '../../definitions';\r\nimport { DialogService } from '../../services/dialog.service';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-dialog.component.html',\r\n styleUrl: './prompt-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule,\r\n MatButtonModule, MatIconModule, TextFieldModule, MatSelectModule, MatOptionModule, MatCheckboxModule, MatDialogActions, \r\n MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class PromptDialogComponent {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptDialogResult>();\r\n private readonly dialogService = inject(DialogService);\r\n protected readonly dialogData = signal<PromptDialogData>((() => {\r\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\r\n return {\r\n ...data,\r\n appearance: data.appearance ?? 'fill',\r\n title: data.title ?? 'Inserisci dato',\r\n type: data.type ?? PromptDialogType.Default,\r\n okCaption: data.okCaption ?? 'Ok',\r\n cancelCaption: data.cancelCaption ?? 'Annulla',\r\n };\r\n })());\r\n protected value: any =\r\n this.dialogData().initialValue && this.dialogData().type !== PromptDialogType.List\r\n ? this.dialogData().initialValue\r\n : undefined;\r\n\r\n /**\r\n * Validates the form and emits the result, or shows an error if validation fails.\r\n */\r\n protected ok(): void {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error('Ci sono degli errori da correggere.');\r\n return;\r\n }\r\n if (this.dialogData().type === PromptDialogType.Date) {\r\n const date = SystemUtils.parseDate(this.value as string);\r\n if (!date || date.getFullYear() > 9999) {\r\n this.dialogService.error('Data non valida.');\r\n return;\r\n }\r\n }\r\n this.done.emit({\r\n value: this.value,\r\n type: this.dialogData().type,\r\n options: this.dialogData().options\r\n });\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (!dialogData().type) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\"\r\n [required]=\"dialogData().required\" maxlength=\"200\">\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"value = undefined\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 1) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"date\" matInput [(ngModel)]=\"value\" name=\"_value\" #_value=\"ngModel\"\r\n [required]=\"dialogData().required\">\r\n @if (_value.invalid) {\r\n <mat-error>Data non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 2) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\"\r\n [required]=\"dialogData().required\" [min]=\"dialogData().minValue\" [max]=\"dialogData().maxValue\">\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"value = undefined\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 3) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <textarea matInput [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\" [required]=\"dialogData().required\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" maxlength=\"1000\"></textarea>\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"value = undefined\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"end\">{{_value.value?.length || 0}}/1000 </mat-hint>\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 5) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <mat-select [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\" [required]=\"dialogData().required\">\r\n @for (i of dialogData().initialValue; track $index) {\r\n <mat-option [value]=\"i.value\">\r\n {{i.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n @if (dialogData().options) {\r\n <div>\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\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]=\"f.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>","import { ChangeDetectionStrategy, Component, inject, output, signal, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { DateInterval, DateIntervalChangeDirective, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDateDialogResult, PromptDialogData, PromptDialogType } from '../../definitions';\r\nimport { DialogService } from '../../services/dialog.service';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-date-dialog.component.html',\r\n styleUrl: './prompt-date-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, DateIntervalChangeDirective, MatButtonModule, MatIconModule,\r\n MatCheckboxModule, MatDialogActions, MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class PromptDateDialogComponent {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptDateDialogResult>();\r\n private readonly dialogService = inject(DialogService);\r\n protected readonly dialogData = signal<PromptDialogData>((() => {\r\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\r\n const type = (data.type === PromptDialogType.Date || data.type === PromptDialogType.DateInterval)\r\n ? data.type\r\n : PromptDialogType.Date;\r\n return {\r\n ...data,\r\n appearance: data.appearance ?? 'fill',\r\n title: data.title ?? 'Inserisci dato',\r\n type,\r\n okCaption: data.okCaption ?? 'Ok',\r\n cancelCaption: data.cancelCaption ?? 'Annulla',\r\n };\r\n })());\r\n protected value: any = (() => {\r\n const d = this.dialogData();\r\n if (d.type === PromptDialogType.DateInterval) {\r\n return d.initialValue ? (d.initialValue as DateInterval) : new DateInterval();\r\n }\r\n return d.initialValue ? (d.initialValue as Date) : undefined;\r\n })();\r\n\r\n /**\r\n * Validates the form and emits the result, or shows an error if validation fails.\r\n */\r\n protected ok(): void {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error('Ci sono degli errori da correggere.');\r\n return;\r\n }\r\n this.done.emit({\r\n value: this.dialogData().type === PromptDialogType.Date\r\n ? this.value as Date\r\n : this.value as DateInterval,\r\n type: this.dialogData().type,\r\n options: this.dialogData().options\r\n });\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (dialogData().type === 1) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [(ngModel)]=\"value\" name=\"_value\" #_value=\"ngModel\"\r\n [required]=\"dialogData().required\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n @if (_value.invalid) {\r\n <mat-error>Data non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 4) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker\" min=\"1750-01-01\" [required]=\"dialogData().required\">\r\n <input matStartDate [(ngModel)]=\"value.from\" [dateIntervalChange]=\"value\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"value.to\" [dateIntervalChange]=\"value\" [end]=\"true\" #rangeTo1=\"ngModel\"\r\n name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (value.from || value.to) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"value.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n </div>\r\n @if (dialogData().options) {\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <br>\r\n\r\n }\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]=\"f.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>","import { ChangeDetectionStrategy, Component, inject, output, signal, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { OtpInputComponent } from '../../components/otp/otp-input.component';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDialogData, PromptDialogType, PromptOtpDialogResult } from '../../definitions';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-otp-dialog.component.html',\r\n styleUrl: './prompt-otp-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatButtonModule, MatIconModule,\r\n MatDialogActions, MatDialogClose, SafeHtmlPipe, OtpInputComponent]\r\n})\r\nexport class PromptOtpDialogComponent {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptOtpDialogResult>();\r\n private readonly dialogService = inject(DialogService);\r\n protected readonly dialogData = signal<PromptDialogData>((() => {\r\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\r\n return {\r\n ...data,\r\n appearance: data.appearance ?? 'fill',\r\n title: data.title ?? 'Conferma la tua identità',\r\n type: data.type ?? PromptDialogType.Default,\r\n okCaption: data.okCaption ?? 'Ok',\r\n cancelCaption: data.cancelCaption ?? 'Annulla',\r\n };\r\n })());\r\n protected value: any;\r\n\r\n /**\r\n * Validates the form and emits the OTP result, or shows an error if validation fails.\r\n */\r\n protected ok(): void {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error('Ci sono degli errori da correggere.');\r\n return;\r\n }\r\n this.done.emit({ value: this.value });\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n @if (dialogData().description) {\r\n <div [innerHtml]=\"dialogData().description | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <otp-input name=\"otp\" [(ngModel)]=\"value\" required></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]=\"f.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","import { ChangeDetectionStrategy, Component, inject, output, signal, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SafeHtmlPipe, SystemUtils, TimeValidatorDirective } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDialogResult, PromptDialogType, PromptTimeDialogData } from '../../definitions';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-time-dialog.component.html',\r\n styleUrl: './prompt-time-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule,\r\n MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, MatCheckboxModule,\r\n MatDialogActions, MatDialogClose, TimeValidatorDirective,SafeHtmlPipe]\r\n})\r\nexport class PromptTimeDialogComponent {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptDialogResult>();\r\n private readonly dialogService = inject(DialogService);\r\n\r\n protected readonly dialogData = signal<PromptTimeDialogData>((() => {\r\n const data: PromptTimeDialogData = inject(MAT_DIALOG_DATA) ?? {};\r\n return {\r\n ...data,\r\n appearance: data.appearance ?? 'fill',\r\n title: data.title ?? 'Inserisci dato',\r\n type: PromptDialogType.Time,\r\n okCaption: data.okCaption ?? 'Ok',\r\n cancelCaption: data.cancelCaption ?? 'Annulla',\r\n };\r\n })());\r\n protected value: any = this.dialogData().initialValue ?? undefined;\r\n\r\n /**\r\n * Validates the form and emits the result, or shows an error if validation fails.\r\n */\r\n protected ok(): void {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error('Ci sono degli errori da correggere.');\r\n return;\r\n }\r\n this.done.emit({ value: this.value, options: this.dialogData().options });\r\n }\r\n}\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n <div>\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"time\" matInput [(ngModel)]=\"value\" name=\"_value\" #_value=\"ngModel\"\r\n [required]=\"dialogData().required\" time [slots]=\"dialogData().slots\">\r\n @if (_value.invalid) {\r\n <mat-error>Ora non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n @if(this.dialogData().slots) {\r\n <div class=\"small bold uppercase\">Orari disponibili:</div>\r\n <ul class=\"small\">\r\n @for (s of this.dialogData().slots.replaceAll('-', ' - ').split('|'); track $index) {\r\n <li>{{s}}</li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData().options) {\r\n <div>\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <br>\r\n </div>\r\n }\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]=\"f.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>","import {\r\n AfterViewInit,\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n inject,\r\n output,\r\n signal,\r\n viewChild\r\n} from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatCheckboxChange, MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatOptionModule } from \"@angular/material/core\";\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\r\nimport { MatDividerModule } from \"@angular/material/divider\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatListModule, MatSelectionList, MatSelectionListChange } from \"@angular/material/list\";\r\nimport { MatMenuModule } from \"@angular/material/menu\";\r\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { SafeHtmlPipe, SearchFilterMetadata, SearchFilterPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport {\r\n SelectDialogAppend,\r\n SelectDialogData,\r\n SelectDialogDelete,\r\n SelectDialogEdit,\r\n SelectDialogFilter,\r\n SelectDialogLookup,\r\n SelectDialogResult,\r\n SelectableFilter,\r\n SelectableItem,\r\n} from \"../../definitions\";\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: \"./select-dialog.component.html\",\r\n styleUrl: './select-dialog.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n FormsModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n MatOptionModule,\r\n MatTooltipModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatCheckboxModule,\r\n MatDialogContent,\r\n MatListModule,\r\n MatDialogActions,\r\n MatDialogClose,\r\n MatPaginatorModule,\r\n SearchFilterPipe,\r\n SafeHtmlPipe\r\n ],\r\n})\r\nexport class SelectDialogComponent implements AfterViewInit {\r\n readonly paginator = viewChild.required<MatPaginator>('paginator');\r\n readonly selection = viewChild.required<MatSelectionList>(\"selection\");\r\n private isViewReady = false;\r\n private readonly dialogRef = inject(MatDialogRef<SelectDialogComponent>);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n protected readonly dialogData = signal<SelectDialogData>((() => {\r\n const data: SelectDialogData = inject(MAT_DIALOG_DATA) ?? {};\r\n return {\r\n ...data,\r\n appearance: data.appearance ?? 'outline',\r\n title: data.title ?? 'Seleziona',\r\n okCaption: data.okCaption ?? 'Ok',\r\n multipleSelection: data.multipleSelection ?? false,\r\n items: data.canLookup ? [] : (data.items ?? []),\r\n pageSize: data.canLookup && data.canPaginate && !data.pageSize ? 100 : data.pageSize,\r\n };\r\n })());\r\n readonly done = output<SelectDialogResult>();\r\n readonly edit = output<SelectDialogEdit>();\r\n readonly view = output<SelectableItem>();\r\n readonly append = output<SelectDialogAppend>();\r\n readonly delete = output<SelectDialogDelete>();\r\n readonly lookup = output<SelectDialogLookup>();\r\n readonly lookupOptions = output();\r\n readonly filter = output<SelectDialogFilter>();\r\n protected canEdit = signal<boolean>(false);\r\n protected canView = signal<boolean>(false);\r\n protected canAppend = signal<boolean>(this.dialogData().canAppend ?? false);\r\n protected canDelete = signal<boolean>(false);\r\n protected canPaginate = signal<boolean>(this.dialogData().canPaginate ?? false);\r\n // Handle submit button activity\r\n protected okDisabled = signal<boolean>(this.dialogData().mustSelect ?? true);\r\n // Used for array filtering\r\n protected filterMetadata: SearchFilterMetadata = { total: 0, count: 0 }; \r\n protected filterText: string = \"\";\r\n protected readonly filterOptions = signal<SelectableFilter[]>([]);\r\n protected filterOptionsInfo = signal<string>(\"Tutto\");\r\n // Used to sincronize lookup fields and params\r\n protected lookupField: string = \"\";\r\n private lookupParams?: any;\r\n // Used to display selected elements\r\n protected selectionInfo = signal<string | null>(null);\r\n protected selectionMasterIndeterminate = signal<boolean>(false);\r\n protected selectionMasterChecked = signal<boolean>(false);\r\n protected total = signal(this.dialogData().items?.length ?? 0);\r\n\r\n constructor() {\r\n const d = this.dialogData();\r\n if (d.canLookup) {\r\n if (d.lookupFields?.length) {\r\n this.lookupField = d.lookupFields[0].value;\r\n }\r\n if (d.canFilter) {\r\n this.filterOptions.set(d.filters ?? []);\r\n }\r\n }\r\n if (d.filter || d.lookupOnInit) {\r\n this.doFilter(d.filter);\r\n }\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n this.isViewReady = true;\r\n }\r\n\r\n /**\r\n * Updates the total item count signal, triggering UI refresh.\r\n * @param newTotal - The new total count; defaults to 0 if omitted.\r\n */\r\n notifyChanges(newTotal?: number): void {\r\n this.total.set(newTotal ?? 0);\r\n this.cdr.markForCheck();\r\n }\r\n\r\n\r\n\r\n /** Returns `true` when every list item is currently selected. */\r\n private isAllSelected(): boolean {\r\n return this.selection().selectedOptions.selected.length === this.dialogData().items.length;\r\n }\r\n\r\n /** Returns `true` when at least one list item is selected. */\r\n private hasSelection(): boolean {\r\n return this.selection().selectedOptions.selected.length > 0;\r\n }\r\n\r\n /**\r\n * Selects or deselects all items based on the master checkbox state.\r\n * @param e - The checkbox change event.\r\n */\r\n protected masterSelectionToggle(e: MatCheckboxChange): void {\r\n if (e.checked)\r\n // Deselect if not allselected so that toggle makes the right choice\r\n this.selection().selectAll();\r\n else this.selection().deselectAll();\r\n this.selectionMasterIndeterminate.set(false);\r\n this.selectionMasterChecked.set(e.checked);\r\n const selection = this.selection();\r\n this.okDisabled.set(\r\n !!(this.dialogData().mustSelect &&\r\n selection.selectedOptions.selected.length === 0));\r\n this.updateSelectionInfo();\r\n }\r\n\r\n /**\r\n * Handles selection or deselection of a list item.\r\n * @param e - The selection list change event.\r\n */\r\n protected select(e: MatSelectionListChange): void {\r\n const selection = this.selection();\r\n if (!this.dialogData().multipleSelection) {\r\n this.selection().deselectAll();\r\n if (e.options?.length > 0)\r\n e.options[0].selected = true;\r\n this.okDisabled.set(false);\r\n } else {\r\n this.okDisabled.set(\r\n !!(this.dialogData().mustSelect &&\r\n selection.selectedOptions.selected.length === 0));\r\n }\r\n\r\n // Update editors\r\n this.canEdit.set(\r\n !!(this.dialogData().canEdit &&\r\n selection.selectedOptions.selected.length === 1));\r\n this.canView.set(\r\n !!(this.dialogData().canView &&\r\n selection.selectedOptions.selected.length === 1));\r\n this.canDelete.set(\r\n !!(this.dialogData().canDelete &&\r\n selection.selectedOptions.selected.length > 0));\r\n this.selectionMasterIndeterminate.set(\r\n !this.isAllSelected() && this.hasSelection());\r\n this.selectionMasterChecked.set(this.hasSelection());\r\n this.updateSelectionInfo();\r\n }\r\n\r\n /** Refreshes the selection info label shown in the dialog footer. */\r\n private updateSelectionInfo(): void {\r\n const selection = this.selection();\r\n if (selection.selectedOptions.selected.length > 0 && this.dialogData().multipleSelection) {\r\n this.selectionInfo.set(\r\n selection.selectedOptions.selected.length +\r\n \" / \" +\r\n selection.options.length);\r\n } else {\r\n this.selectionInfo.set(null);\r\n }\r\n }\r\n\r\n /** Deselects all items and resets the master checkbox state. */\r\n clearSelection(): void {\r\n this.selectionMasterIndeterminate.set(false);\r\n this.selectionMasterChecked.set(false);\r\n if (this.isViewReady) {\r\n this.selection().deselectAll();\r\n }\r\n this.selectionInfo.set(null);\r\n }\r\n\r\n /** Emits the current selection and closes the dialog. */\r\n protected ok(): void {\r\n if (!this.okDisabled()) {\r\n const selectedItems: SelectableItem[] = [];\r\n this.selection().selectedOptions.selected.forEach((element) => {\r\n selectedItems.push(element.value);\r\n });\r\n this.done.emit({ selectedItems: selectedItems });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n }\r\n\r\n /** Clears the current filter text input. */\r\n protected clearFilter(): void {\r\n this.filterText = \"\";\r\n }\r\n\r\n /**\r\n * Sets the filter text programmatically.\r\n * @param text - The new filter string to apply.\r\n */\r\n public setFilter(text: string): void {\r\n this.filterText = text;\r\n this.cdr.markForCheck();\r\n }\r\n\r\n\r\n /**\r\n * Returns the current filter text.\r\n * @returns The active filter string.\r\n */\r\n public getFilter(): string {\r\n return this.filterText;\r\n }\r\n\r\n /** Emits the `lookupOptions` output event to open the filter options panel. */\r\n protected showFilterOptions(): void {\r\n if (this.lookupOptions) {\r\n this.lookupOptions.emit();\r\n }\r\n }\r\n\r\n /**\r\n * Applies the given text filter, emitting a lookup when enabled.\r\n * @param text - Optional filter string; populates `filterText` when provided.\r\n * @param e - Optional keyboard event; lookup only fires on Enter.\r\n */\r\n protected doFilter(text?: string, e?: KeyboardEvent): void {\r\n if (text) {\r\n this.filterText = text;\r\n }\r\n if (this.dialogData().canLookup) {\r\n if (!e || e.key === 'Enter') {\r\n this.clearSelection();\r\n this.lookup.emit({ items: this.dialogData().items, filter: this.filterText, owner: this });\r\n }\r\n } \r\n }\r\n\r\n /**\r\n * Applies a structured filter option, emitting the filter output event.\r\n * @param filterOption - The selected filter option object.\r\n */\r\n protected doFilterByOptions(filterOption: any): void {\r\n if (this.dialogData().canLookup && this.dialogData().canFilter) {\r\n this.filter.emit({\r\n items: this.dialogData().items,\r\n filter: this.filterText,\r\n filterOption: filterOption,\r\n owner: this,\r\n });\r\n this.filterOptionsInfo.set(filterOption ? (filterOption.title ?? \"Tutto\") : \"Tutto\");\r\n\r\n }\r\n }\r\n\r\n /**\r\n * Triggers a server-side lookup with the given parameters (public API).\r\n * @param params - An object containing the lookup query parameters.\r\n */\r\n doLookup(params: any): void {\r\n if (this.dialogData().canLookup) {\r\n this.clearSelection();\r\n this.lookupParams = params;\r\n this.lookupParams.first = 0;\r\n this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this }); \r\n }\r\n }\r\n\r\n /**\r\n * Updates the paginator length and resets it to the first page.\r\n * @param total - The new total number of items.\r\n */\r\n protected updateLookupPaginator(total: number): void {\r\n if (this.canPaginate()) {\r\n const paginator = this.paginator();\r\n if (paginator) {\r\n paginator.pageIndex = 0;\r\n paginator.length = total ?? 0;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Handles a paginator page change and triggers a new lookup.\r\n * @param e - The paginator page change event.\r\n */\r\n protected doLookupPage(e: PageEvent): void {\r\n if (this.canPaginate() && this.dialogData().canLookup) {\r\n this.clearSelection();\r\n if (!this.lookupParams) {\r\n this.lookupParams = { first: 0, count: this.dialogData().pageSize ?? 0 };\r\n }\r\n this.lookupParams.first = e.pageIndex * (this.dialogData().pageSize ?? 0);\r\n this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this }); \r\n }\r\n }\r\n\r\n /** Emits the `append` output event to open the add-item flow. */\r\n protected doAppend(): void {\r\n this.append.emit({ items: this.dialogData().items, owner: this } as SelectDialogAppend);\r\n }\r\n\r\n /** Emits the `edit` output event for the currently selected item. */\r\n protected doEdit(): void {\r\n const selection = this.selection();\r\n if (selection.selectedOptions.selected?.length > 0) {\r\n this.edit.emit({\r\n item: selection.selectedOptions.selected[0].value,\r\n items: this.dialogData().items,\r\n owner: this\r\n } as SelectDialogEdit);\r\n }\r\n }\r\n\r\n /** Emits the `view` output event for the currently selected item. */\r\n protected doView(): void {\r\n const selection = this.selection();\r\n if (selection.selectedOptions.selected?.length > 0) {\r\n this.view.emit(selection.selectedOptions.selected[0].value);\r\n }\r\n }\r\n\r\n /** Emits the `delete` output event with all currently selected items. */\r\n protected doDelete(): void {\r\n const selectedItems: SelectableItem[] = [];\r\n this.selection().selectedOptions.selected.forEach((element) => {\r\n selectedItems.push(element.value);\r\n });\r\n this.delete.emit({\r\n items: this.dialogData().items,\r\n selectedItems: selectedItems,\r\n } as SelectDialogDelete);\r\n this.canDelete.set(false);\r\n this.canEdit.set(false);\r\n\r\n }\r\n}\r\n\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData().description) {\r\n <div class=\"select-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\r\n }\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n @if (!dialogData().canLookupWithOptions) {\r\n <div fxFlex>\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\r\n <input type=\"text\" (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation(); doFilter()\" matInput\r\n title=\"{{dialogData().canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\r\n [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (dialogData().canLookupWithInlineOptions) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\r\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\r\n <mat-icon>tune</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (!dialogData().canLookupWithOptions && dialogData().canLookup && dialogData().lookupFields) {\r\n <div fxFlex>\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Come...</mat-label>\r\n <mat-select [(value)]=\"lookupField\">\r\n @for (field of dialogData().lookupFields; track $index) {\r\n <mat-option [value]=\"field.value\">\r\n {{field.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (dialogData().canLookupWithOptions) {\r\n <div fxFlex>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\r\n <mat-icon>search</mat-icon> {{this.dialogData().searchButtonLabel ?? 'Ricerca'}}\r\n </button>\r\n </div>\r\n }\r\n @if (dialogData().canLookup && dialogData().canFilter) {\r\n <div fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\">\r\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\r\n [matMenuTriggerFor]=\"menuFilter\">\r\n <mat-icon>filter_alt</mat-icon> {{filterOptionsInfo()}} <mat-icon class=\"icon-menu-drop-down\">\r\n arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\r\n @for (f of filterOptions(); track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (f.groupName) {\r\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\r\n }\r\n @if (!f.groupName && !f.divider) {\r\n <button mat-menu-item (click)=\"doFilterByOptions(f)\" [attr.aria-label]=\"f.description\">\r\n @if (f.radio && f.value) {\r\n <span style=\"padding-left:40px\"></span>\r\n }\r\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\r\n </button>\r\n }\r\n\r\n }\r\n </mat-menu>\r\n </div>\r\n </div>\r\n }\r\n @if (canEdit() || canAppend() || canView() || canDelete()) {\r\n <div fxFlex fxHide.xs>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" fxLayoutGap=\"10px\">\r\n @if (canAppend()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\r\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\r\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\r\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex fxHide.gt-xs>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" fxLayoutGap=\"10px\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni\" [attr.aria-label]=\"'Azioni'\"\r\n [matMenuTriggerFor]=\"menuActions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\" class=\"mat-menu-300\">\r\n @if (canAppend()) {\r\n <button mat-menu-item (click)=\"doAppend()\" [attr.aria-label]=\"'Aggiungi'\">\r\n <mat-icon>add</mat-icon> Aggiungi\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button mat-menu-item (click)=\"doEdit()\" [attr.aria-label]=\"'Modifica'\">\r\n <mat-icon>edit</mat-icon> Modifica\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button mat-menu-item (click)=\"doView()\" [attr.aria-label]=\"'Mostra'\">\r\n <mat-icon>visibility</mat-icon> Mostra\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button mat-menu-item (click)=\"doDelete()\" [attr.aria-label]=\"'Elimina'\">\r\n <mat-icon>delete</mat-icon> Elimina\r\n </button>\r\n }\r\n </mat-menu>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if ((dialogData().multipleSelection || dialogData().header) && dialogData().items?.length > 0) {\r\n <div>\r\n <div fxLayout=\"row\" fxFill style=\"padding-top: 10px;\">\r\n @if (dialogData().multipleSelection) {\r\n <div fxFlex=\"72px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\r\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (dialogData().header) {\r\n <div class=\"text\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<mat-dialog-content style=\"padding-top:0\">\r\n <div fxLayout=\"column\" fxFill>\r\n @if (dialogData().canLookup && (!dialogData().items || dialogData().items.length == 0)) {\r\n <div class=\"text message\"><i>\r\n @if (!dialogData().emptyMessage) {\r\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\r\n esistente.\r\n @if (dialogData().maxItems > 0) {\r\n <span>Saranno mostrati al massimo {{dialogData().maxItems}} elementi.</span>\r\n }\r\n </span>\r\n } @else {\r\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\r\n }\r\n </i>\r\n </div>\r\n }\r\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\r\n [multiple]=\"dialogData().multipleSelection\">\r\n @for (item of (dialogData().items | search: (!dialogData().canLookup ? filterText : ''): filterMetadata); track\r\n $index) {\r\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" checkboxPosition=\"before\">\r\n <div [innerHtml]=\"item.template | safeHtml\"></div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"secondary\" style=\"padding-left:20px\">\r\n @if (selectionInfo()) {\r\n <span class=\"bold\">{{selectionInfo()}}</span>&nbsp; <span class=\"small\"> elementi selezionati</span>\r\n } @else {\r\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText ? filterMetadata.count : total())) ??\r\n 0}}</span>&nbsp; <span class=\"small\"> elementi</span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"center\">\r\n @if (canPaginate()) {\r\n <mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData().pageSize\" [showFirstLastButtons]=\"true\"\r\n (page)=\"doLookupPage($event)\" [length]=\"total() ?? 0\"></mat-paginator>\r\n }\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"okDisabled()\">\r\n <span>{{dialogData().mustSelect ? dialogData().okCaption : 'Chiudi'}}</span>\r\n </button>\r\n @if (dialogData().mustSelect) {\r\n <button mat-stroked-button mat-dialog-close>\r\n <span>Annulla</span>\r\n </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';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { ArsCoreModule, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { SelectFile, SelectFileDialogData } from '../../definitions';\r\nimport { DialogService } from '../../services/dialog.service';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './select-file-dialog.component.html',\r\n styleUrl: './select-file-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FlexModule, MatButtonModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatDialogClose, ArsCoreModule, SafeHtmlPipe]\r\n})\r\nexport class SelectFileDialogComponent {\r\n readonly done = output<SelectFile>();\r\n private readonly dialogService = inject(DialogService);\r\n private readonly dialogRef = inject(MatDialogRef<SelectFileDialogComponent>);\r\n protected readonly dialogData = signal<SelectFileDialogData>(inject(MAT_DIALOG_DATA) ?? {});\r\n protected readonly file = signal<File | undefined>(undefined);\r\n protected fileClass = signal<'selectfile-file' | 'selectfile-file-drop'>('selectfile-file');\r\n\r\n\r\n /**\r\n * Handles the native file input change event and delegates to `selectFile`.\r\n * @param e - The DOM change event from the file input.\r\n */\r\n protected update(e: Event): void {\r\n const input = e.target as HTMLInputElement;\r\n if (input.files?.length) {\r\n this.selectFile(input.files[0]);\r\n }\r\n }\r\n\r\n /**\r\n * Validates and sets the selected file, showing an error if size or type constraints are violated.\r\n * @param file - The `File` object to validate and store.\r\n */\r\n private selectFile(file: File): void {\r\n const data = this.dialogData();\r\n const maxSize = data.maxSize ?? 0;\r\n if (maxSize > 0) {\r\n const size = file.size / 1048576;\r\n if (size > maxSize) {\r\n this.dialogService.error(`File troppo grande (massimo ${SystemUtils.formatFileSize(maxSize * 1048576)})`);\r\n return;\r\n }\r\n }\r\n if (data.accept) {\r\n const accept = data.accept.toLowerCase();\r\n const a = file.name.split('.').pop()?.toLowerCase();\r\n let b = file.type.toLowerCase();\r\n if (b.startsWith('image/') && accept.includes('image/*')) {\r\n b = 'image/*';\r\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\r\n b = 'video/*';\r\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\r\n b = 'audio/*';\r\n }\r\n if (!accept.includes(a ?? '') && !accept.includes(b)) {\r\n this.dialogService.error(`Sono accettati solo questi tipi di file: ${accept}`);\r\n return;\r\n }\r\n }\r\n this.file.set(file);\r\n }\r\n\r\n /**\r\n * Formats a byte count into a human-readable size string.\r\n * @param size - File size in bytes.\r\n * @returns A formatted size string (e.g. \"1.2 MB\").\r\n */\r\n protected size(size: number): string {\r\n return SystemUtils.formatFileSize(size);\r\n }\r\n\r\n /** Emits the selected file and options, then closes the dialog. */\r\n protected ok(): void {\r\n this.done.emit({ file: this.file(), options: this.dialogData().options });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /** Highlights the drop zone when a drag enters the area.\r\n * @param e - The drag event.\r\n */\r\n protected onDragOver(e: DragEvent): void {\r\n this.fileClass.set('selectfile-file-drop');\r\n e.preventDefault();\r\n }\r\n\r\n /** Highlights the drop zone when a dragged item enters.\r\n * @param e - The drag event.\r\n */\r\n protected onDragEnter(e: DragEvent): void {\r\n this.fileClass.set('selectfile-file-drop');\r\n e.preventDefault();\r\n }\r\n\r\n /** Resets the drop zone style when dragging ends.\r\n * @param e - The drag event.\r\n */\r\n protected onDragEnd(e: DragEvent): void {\r\n this.fileClass.set('selectfile-file');\r\n e.preventDefault();\r\n }\r\n\r\n /** Resets the drop zone style when a dragged item leaves the area.\r\n * @param e - The drag event.\r\n */\r\n protected onDragLeave(e: DragEvent): void {\r\n this.fileClass.set('selectfile-file');\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Handles a file drop event, extracting and processing the dropped files.\r\n * @param e - The drop event.\r\n */\r\n protected onDrop(e: DragEvent): void {\r\n this.fileClass.set('selectfile-file');\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (e.dataTransfer?.files?.length) {\r\n this.addFiles(e.dataTransfer.files);\r\n }\r\n }\r\n\r\n /**\r\n * Picks the first file from the list and passes it to `selectFile`.\r\n * @param files - The `FileList` from the drag-and-drop event.\r\n */\r\n private addFiles(files: FileList): void {\r\n if (files.length > 0) {\r\n this.selectFile(files[0]);\r\n }\r\n }\r\n}\r\n\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n@if (dialogData().description) {\r\n<div class=\"selectefile-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\r\n}\r\n<mat-dialog-content style=\"padding: 24px 0;\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui il file o selezionalo</i></div>\r\n <div>\r\n <input #_file type=\"file\" [accept]=\"dialogData().accept\" [hidden]=\"true\" (change)=\"update($event)\" />\r\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\r\n </div>\r\n @if (file()) {\r\n <div style=\"padding:0 24px\">\r\n <div fxLayout=\"column\" fxLayoutGape=\"5px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div class=\"small accent bold\"><i>{{file().name}}</i></div>\r\n <div class=\"small\">Dimensioni: <i>{{size(file().size)}}</i></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData().options) {\r\n <div style=\"padding-bottom: 24px;\">\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n @if (dialogData().helpLink) {\r\n <a mat-stroked-button href=\"{{dialogData().helpLink}}\" target=\"_blank\">{{dialogData().helpCaption}}</a>\r\n }\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { SelectFile, SelectPictureFileDialogData } from '../../definitions';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { DialogService } from '../../services/dialog.service';\r\n\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './select-picture-dialog.component.html',\r\n styleUrl: './select-picture-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FlexModule, MatButtonModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class SelectPictureDialogComponent {\r\n readonly done = output<SelectFile>();\r\n private readonly dialogService = inject(DialogService);\r\n private readonly dialogRef = inject(MatDialogRef<SelectPictureDialogComponent>);\r\n protected readonly dialogData = signal<SelectPictureFileDialogData>(inject(MAT_DIALOG_DATA) ?? {});\r\n protected readonly file = signal<File | undefined>(undefined);\r\n protected fileClass = signal<'selectpicture-file' | 'selectpicture-file-drop'>('selectpicture-file');\r\n protected pictureWidth = signal<number>(0);\r\n protected pictureHeight = signal<number>(0);\r\n protected picturePreview = signal<any>(undefined);\r\n\r\n\r\n /**\r\n * Handles the native file input change event and delegates to `selectFile`.\r\n * @param e - The DOM change event from the file input.\r\n */\r\n protected update(e: Event): void {\r\n const input = e.target as HTMLInputElement;\r\n if (input.files?.length) {\r\n this.selectFile(input.files[0]);\r\n }\r\n }\r\n\r\n /**\r\n * Validates the file size and type, then reads it as a data URL to generate a preview.\r\n * @param file - The `File` object to validate and preview.\r\n */\r\n private selectFile(file: File): void {\r\n const data = this.dialogData();\r\n const maxSize = data.maxSize ?? 0;\r\n if (maxSize > 0) {\r\n const size = file.size / 1048576;\r\n if (size > maxSize) {\r\n this.dialogService.error(`File troppo grande (massimo ${SystemUtils.formatFileSize(maxSize * 1048576)})`);\r\n return;\r\n }\r\n }\r\n if (data.accept) {\r\n const accept = data.accept.toLowerCase();\r\n const a = file.name.split('.').pop()?.toLowerCase();\r\n let b = file.type.toLowerCase();\r\n if (b.startsWith('image/') && accept.includes('image/*')) {\r\n b = 'image/*';\r\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\r\n b = 'video/*';\r\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\r\n b = 'audio/*';\r\n }\r\n if (!accept.includes(a ?? '') && !accept.includes(b)) {\r\n this.dialogService.error(`Sono accettati solo questi tipi di file: ${accept}`);\r\n return;\r\n }\r\n }\r\n const reader = new FileReader();\r\n reader.onload = (_e: ProgressEvent<FileReader>) => {\r\n const img = new Image();\r\n img.onload = () => {\r\n const maxWidth = data.maxWidth ?? 0;\r\n if (maxWidth > 0 && img.width > maxWidth) {\r\n this.dialogService.error(`Immagine troppo larga (massimo ${maxWidth} pixel)`);\r\n return;\r\n }\r\n const maxHeight = data.maxHeight ?? 0;\r\n if (maxHeight > 0 && img.height > maxHeight) {\r\n this.dialogService.error(`Immagine troppo alta (massimo ${maxHeight} pixel)`);\r\n return;\r\n }\r\n this.pictureWidth.set(img.width);\r\n this.pictureHeight.set(img.height);\r\n this.picturePreview.set((_e.target as FileReader).result);\r\n this.file.set(file);\r\n };\r\n img.src = (_e.target as FileReader).result as string;\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n\r\n\r\n /**\r\n * Formats a byte count into a human-readable size string.\r\n * @param size - File size in bytes.\r\n * @returns A formatted size string (e.g. \"1.2 MB\").\r\n */\r\n protected size(size: number): string {\r\n return SystemUtils.formatFileSize(size);\r\n }\r\n\r\n /** Emits the selected file and options, then closes the dialog. */\r\n protected ok(): void {\r\n this.done.emit({ file: this.file(), options: this.dialogData().options });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /** Highlights the drop zone when a dragged item is over it.\r\n * @param e - The drag event.\r\n */\r\n protected onDragOver(e: DragEvent): void {\r\n this.fileClass.set('selectpicture-file-drop');\r\n e.preventDefault();\r\n }\r\n\r\n /** Highlights the drop zone when a dragged item enters.\r\n * @param e - The drag event.\r\n */\r\n protected onDragEnter(e: DragEvent): void {\r\n this.fileClass.set('selectpicture-file-drop');\r\n e.preventDefault();\r\n }\r\n\r\n /** Resets the drop zone style when dragging ends.\r\n * @param e - The drag event.\r\n */\r\n protected onDragEnd(e: DragEvent): void {\r\n this.fileClass.set('selectpicture-file');\r\n e.preventDefault();\r\n }\r\n\r\n /** Resets the drop zone style when a dragged item leaves.\r\n * @param e - The drag event.\r\n */\r\n protected onDragLeave(e: DragEvent): void {\r\n this.fileClass.set('selectpicture-file');\r\n e.preventDefault();\r\n }\r\n\r\n /**\r\n * Handles a file drop event, extracting and processing the dropped image.\r\n * @param e - The drop event.\r\n */\r\n protected onDrop(e: DragEvent): void {\r\n this.fileClass.set('selectpicture-file');\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (e.dataTransfer?.files?.length) {\r\n this.addFiles(e.dataTransfer.files);\r\n }\r\n }\r\n\r\n /**\r\n * Picks the first file from the list and passes it to `selectFile`.\r\n * @param files - The `FileList` from the drag-and-drop event.\r\n */\r\n private addFiles(files: FileList): void {\r\n if (files.length > 0) {\r\n this.selectFile(files[0]);\r\n }\r\n }\r\n}\r\n\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n@if (dialogData().description) {\r\n<div class=\"selectpicture-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\r\n}\r\n<mat-dialog-content style=\"padding: 24px 0\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui l'immagine o selezionala</i></div>\r\n <div>\r\n <input #_file type=\"file\" [hidden]=\"true\" [accept]=\"dialogData().accept ?? 'image/*'\"\r\n (change)=\"update($event)\" />\r\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\r\n </div>\r\n @if (file()) {\r\n <div style=\"padding:0 24px\">\r\n <div fxLayout=\"column\" fxLayoutGape=\"5px\" fxLayoutAlign=\"center center\" fxFill>\r\n <img [src]=\"picturePreview()\" class=\"selectpicture-preview\">\r\n <div class=\"small accent bold \"><i>{{file().name}}</i></div>\r\n <div class=\"small\">Dimensioni:<i>{{pictureWidth()}} x {{pictureHeight()}} ({{size(file().size)}})</i></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData().options) {\r\n <div style=\"padding-bottom: 24px;\">\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\" >\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button mat-dialog-close >Annulla</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import {\r\n ChangeDetectionStrategy,\r\n Component,\r\n DestroyRef,\r\n ElementRef,\r\n Injectable,\r\n OnDestroy,\r\n computed,\r\n inject,\r\n output,\r\n signal,\r\n viewChild\r\n} from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTree, MatTreeModule } from '@angular/material/tree';\r\nimport { INode, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { ItemNode, SelectTreeDialogData, SelectTreeDialogResult } from '../../definitions';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\n@Injectable()\r\nexport class TreeDataSource implements OnDestroy {\r\n private readonly _dataChange = new BehaviorSubject<ItemNode[]>([]);\r\n readonly dataChange$ = this._dataChange.asObservable();\r\n\r\n get data(): ItemNode[] {\r\n return this._dataChange.value;\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this._dataChange.complete();\r\n }\r\n\r\n initialize(data: ItemNode[]): void {\r\n this._dataChange.next(data);\r\n }\r\n\r\n /**\r\n * Find a node by id recursively.\r\n * @param node - The source node to search from, or null to search from root.\r\n * @param id - The id to search for.\r\n * @returns The matching node, or undefined if not found.\r\n */\r\n findNode(node: ItemNode | null, id: string): ItemNode | undefined {\r\n if (node) {\r\n if (node.id === id) return node;\r\n const children = node.children;\r\n if (children) {\r\n let _n: ItemNode | undefined;\r\n children.some(n => {\r\n _n = this.findNode(n as ItemNode, id);\r\n return !!_n;\r\n });\r\n return _n;\r\n }\r\n return undefined;\r\n }\r\n // Search all root nodes when called with null\r\n for (const root of this.data) {\r\n const found = this.findNode(root, id);\r\n if (found) return found;\r\n }\r\n return undefined;\r\n }\r\n /**\r\n * Remove a node from the tree.\r\n * @param id - The id of the node to remove.\r\n */\r\n removeNode(id: string): void {\r\n let n = this.findNode(null, id);\r\n if (!n) return;\r\n if (n.parent) {\r\n const p = n.parent.children.findIndex(n => n.id === id);\r\n if (p !== -1) {\r\n n.parent.children.splice(p, 1);\r\n if (n.parent.count > 0) n.parent.count--;\r\n }\r\n } else {\r\n const p = this.data.findIndex(n => n.id === id);\r\n if (p !== -1) {\r\n this.data.splice(p, 1);\r\n }\r\n }\r\n\r\n this._dataChange.next(this.data);\r\n }\r\n\r\n /**\r\n * Insert a new node at the top of its parent (or root).\r\n * @param node - The new node to insert.\r\n */\r\n insertNode(node: ItemNode): void {\r\n if (node.parent) {\r\n node.parent.children.unshift(node);\r\n node.parent.count = (node.parent.count ?? 0) + 1;\r\n } else this.data.unshift(node);\r\n\r\n this._dataChange.next(this.data);\r\n }\r\n\r\n /**\r\n * Rename a node in the tree.\r\n * @param id - The id of the node to rename.\r\n * @param name - The new name for the node.\r\n * @returns The renamed node, or undefined if not found.\r\n */\r\n renameNode(id: string, name: string): ItemNode | undefined {\r\n const n = this.findNode(null, id);\r\n if (n) {\r\n n.name = name;\r\n this._dataChange.next(this.data);\r\n }\r\n return n;\r\n }\r\n\r\n /**\r\n * Notify all subscribers of the current data state.\r\n */\r\n update(): void {\r\n this._dataChange.next(this.data);\r\n }\r\n}\r\n\r\nexport interface SelectTreeDialogAppend {\r\n parent?: ItemNode;\r\n owner?: any;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './select-tree-dialog.component.html',\r\n styleUrl: './select-tree-dialog.component.scss',\r\n providers: [TreeDataSource],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule, MatButtonModule,\r\n MatIconModule, MatTooltipModule, MatDialogContent, MatTreeModule, MatDialogActions,\r\n MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class SelectTreeDialogComponent {\r\n /** Emitted when the user confirms a selection. */\r\n readonly done = output<SelectTreeDialogResult>();\r\n /** Emitted when the user requests to append a new node. */\r\n readonly append = output<SelectTreeDialogAppend>();\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly dialogRef = inject(MatDialogRef<SelectTreeDialogComponent>);\r\n /** Dialog configuration, injected and exposed as a signal. */\r\n protected readonly dialogData = signal<SelectTreeDialogData>((() => {\r\n const data: SelectTreeDialogData = inject(MAT_DIALOG_DATA) ?? {};\r\n return { ...data, title: data.title ?? 'Seleziona', okCaption: data.okCaption ?? 'OK' };\r\n })());\r\n private readonly tree = inject(TreeDataSource);\r\n private readonly _elRef = inject(ElementRef);\r\n /** Reference to the Material tree component. */\r\n protected readonly matTree = viewChild<MatTree<ItemNode>>(MatTree);\r\n /** Provides children of a tree node to the tree component. */\r\n protected readonly childrenAccessor = (node: ItemNode) => (node.children ?? []) as ItemNode[];\r\n /** Root nodes used as the tree data source. */\r\n protected readonly treeNodes = signal<ItemNode[]>([]);\r\n /** Currently selected tree node. */\r\n protected readonly currentNode = signal<ItemNode | undefined>(undefined);\r\n /** Current filter text. */\r\n protected readonly filterText = signal<string>('');\r\n /** Nodes matching the current filter text. */\r\n protected readonly filteredItems = signal<ItemNode[]>([]);\r\n /** Index of the currently highlighted filtered node (-1 = none). */\r\n protected readonly filterIndex = signal(-1);\r\n /** The currently highlighted filtered node, or null. */\r\n protected readonly filteredNode = computed<ItemNode | null>(() => {\r\n const idx = this.filterIndex();\r\n return idx >= 0 ? (this.filteredItems()[idx] ?? null) : null;\r\n });\r\n protected readonly canAppend = signal<boolean>(this.dialogData().canAppend || false);\r\n\r\n /** Flat node map rebuilt whenever treeNodes changes. */\r\n private readonly _nodeMap = computed(() => {\r\n const map = new Map<string, ItemNode>();\r\n const build = (nodes: ItemNode[]) => {\r\n for (const n of nodes) {\r\n map.set(n.id, n);\r\n if (n.children?.length) build(n.children as ItemNode[]);\r\n }\r\n };\r\n build(this.treeNodes());\r\n return map;\r\n });\r\n\r\n protected hasChild = (_: number, node: ItemNode) => !!(node.children?.length);\r\n\r\n constructor() {\r\n this.tree.dataChange$\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(data => {\r\n this.treeNodes.set(data);\r\n setTimeout(() => {\r\n const current = this.currentNode();\r\n if (current) {\r\n const n = this.findInTree(data, current.id);\r\n if (n) {\r\n this.currentNode.set(n);\r\n this.expand(n);\r\n }\r\n }\r\n });\r\n });\r\n const data = this.dialogData();\r\n if (data.nodes) {\r\n this.tree.initialize(data.nodes);\r\n }\r\n if (data.initialFilter) {\r\n this.filterText.set(data.initialFilter);\r\n this.doFilter();\r\n }\r\n }\r\n\r\n /**\r\n * Confirm the current selection and close the dialog.\r\n */\r\n protected ok(): void {\r\n const node = this.currentNode();\r\n if (node) {\r\n this.done.emit({ selectedItems: [node] });\r\n }\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Toggle selection of a tree node. Clicking the already-selected node deselects it.\r\n * @param e - The mouse event (propagation is stopped).\r\n * @param node - The node that was clicked.\r\n */\r\n protected select(e: MouseEvent, node: ItemNode): void {\r\n if (e) e.stopPropagation();\r\n if (node) {\r\n this.currentNode.set(node.id === this.currentNode()?.id ? undefined : node);\r\n }\r\n }\r\n\r\n /**\r\n * Clear the active filter text.\r\n */\r\n protected clearFilter(): void {\r\n this.filterText.set('');\r\n this.filteredItems.set([]);\r\n this.filterIndex.set(-1);\r\n }\r\n\r\n /**\r\n * Filter the tree nodes by name (minimum 3 characters).\r\n */\r\n protected doFilter(): void {\r\n const text = this.filterText().trim().toLowerCase();\r\n if (text.length < 3) {\r\n this.filteredItems.set([]);\r\n this.filterIndex.set(-1);\r\n return;\r\n }\r\n const matches = Array.from(this._nodeMap().values())\r\n .filter(n => n.name?.toLowerCase().includes(text));\r\n this.filteredItems.set(matches);\r\n const idx = matches.length > 0 ? 0 : -1;\r\n this.filterIndex.set(idx);\r\n if (idx >= 0) this._scrollToFiltered(idx, matches);\r\n }\r\n\r\n /**\r\n * Advance to the next matching filtered node and scroll it into view.\r\n */\r\n protected nextFiltered(): void {\r\n const items = this.filteredItems();\r\n if (!items.length) return;\r\n const next = (this.filterIndex() + 1) % items.length;\r\n this.filterIndex.set(next);\r\n this._scrollToFiltered(next, items);\r\n }\r\n\r\n /**\r\n * Returns true when the node is the currently highlighted filter match.\r\n * @param node - tree node to check.\r\n */\r\n protected isFilteredNode(node: ItemNode): boolean {\r\n return this.filteredNode()?.id === node.id;\r\n }\r\n\r\n /**\r\n * Expands ancestors of the target node and scrolls it into view.\r\n * @param index - index within `items` to scroll to.\r\n * @param items - current filtered items array.\r\n */\r\n private _scrollToFiltered(index: number, items: ItemNode[]): void {\r\n const node = items[index];\r\n if (!node) return;\r\n this.currentNode.set(node);\r\n this.expand(node);\r\n setTimeout(() => {\r\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\r\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\r\n });\r\n }\r\n\r\n /**\r\n * Expand a node and all of its parent nodes.\r\n * @param node - The node to expand.\r\n * @returns Always false.\r\n */\r\n public expand(node: ItemNode): boolean {\r\n this.matTree()?.expand(node);\r\n let parent = node.parent;\r\n const visited = new Set<INode>();\r\n while (parent && !visited.has(parent)) {\r\n visited.add(parent);\r\n this.matTree()?.expand(parent as ItemNode);\r\n parent = parent.parent;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Recursively find a node by id.\r\n * @param nodes - Nodes to search.\r\n * @param id - The id to find.\r\n */\r\n private findInTree(nodes: ItemNode[], id: string): ItemNode | undefined {\r\n for (const node of nodes) {\r\n if (node.id === id) return node;\r\n if (node.children?.length) {\r\n const found = this.findInTree(node.children as ItemNode[], id);\r\n if (found) return found;\r\n }\r\n }\r\n return undefined;\r\n }\r\n\r\n /**\r\n * Append a new node to the tree.\r\n * @param node - The node to insert.\r\n */\r\n public appendNode(node: ItemNode): void {\r\n this.tree.insertNode(node);\r\n }\r\n\r\n /**\r\n * Collapse all tree nodes and reset the current selection.\r\n */\r\n protected collapseAll(): void {\r\n this.matTree()?.collapseAll();\r\n this.currentNode.set(undefined);\r\n }\r\n\r\n /**\r\n * Expand all tree nodes and scroll to the selected node, if any.\r\n */\r\n protected expandAll(): void {\r\n this.matTree()?.expandAll();\r\n const node = this.currentNode();\r\n if (node) {\r\n setTimeout(() => {\r\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\r\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Emit an append request with the currently selected node as the parent.\r\n */\r\n protected doAppend(): void {\r\n this.append.emit({ parent: this.currentNode(), owner: this } as SelectTreeDialogAppend);\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData().description) {\r\n <div class=\"selecttree-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\r\n }\r\n <div style=\"padding-bottom: 10px;\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex fxHide.xs>\r\n <mat-form-field style=\"width:100%\" appearance=\"outline\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\r\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\" \r\n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\r\n [ngModel]=\"filterText()\"\r\n (ngModelChange)=\"filterText.set($event)\">\r\n @if (filterText()) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\r\n (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (filteredItems().length > 0) {\r\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\r\n </div>\r\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <button type=\"button\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\r\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end center\" style=\"white-space:nowrap\">\r\n <div>\r\n @if (canAppend()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button (click)=\"collapseAll()\">\r\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"expandAll()\">\r\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content>\r\n <div fxLayout=\"column\" fxFill>\r\n <mat-tree [dataSource]=\"treeNodes()\" [childrenAccessor]=\"childrenAccessor\" class=\"tree\">\r\n <mat-tree-node [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\" (click)=\"select($event, node);\"\r\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill>\r\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\r\n {{node.name}}\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <span fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</span>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node #treeNodeRef=\"matTreeNode\" [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\"\r\n matTreeNodePadding [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\"\r\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\"\r\n (click)=\"select($event, node);\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\r\n class=\"small-icon-button\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeNodeRef.isExpanded ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\r\n {{node.name}}\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <div fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</div>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!currentNode()\">{{dialogData().okCaption}}</button>\r\n <button mat-button mat-dialog-close>Annulla</button>\r\n </div>\r\n</mat-dialog-actions>","import { TextFieldModule } from \"@angular/cdk/text-field\";\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, output, signal } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from \"@angular/material/dialog\";\r\nimport { MatFormFieldAppearance, MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { EmailsValidatorDirective, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from \"@ngbracket/ngx-layout/flex\";\r\nimport { SendToDialogResult, SendToPopulateData } from \"../../definitions\";\r\n\r\nexport interface SendToDialogData {\r\n count: number;\r\n canPopulate?: boolean;\r\n title?: string;\r\n text?: string;\r\n subject?: string;\r\n info?: string;\r\n appearance?: MatFormFieldAppearance;\r\n options?: any;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: \"./send-to-dialog.component.html\",\r\n styleUrl: './send-to-dialog.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n FlexModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n TextFieldModule,\r\n EmailsValidatorDirective,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatCheckboxModule,\r\n MatDialogActions,\r\n MatDialogClose,\r\n SafeHtmlPipe\r\n ],\r\n})\r\nexport class SendToDialogComponent {\r\n /** Emitted when the user confirms and sends the message. */\r\n readonly done = output<SendToDialogResult>();\r\n /** Emitted when the user requests to populate the recipient list. */\r\n readonly populate = output<SendToPopulateData>();\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n /** Dialog configuration, injected and exposed as a signal. */\r\n protected readonly dialogData = signal<SendToDialogData>((() => {\r\n const data: SendToDialogData = inject(MAT_DIALOG_DATA) ?? {};\r\n const count = data.count ?? 0;\r\n const title = data.title || (count\r\n ? (count === 1 ? 'Invia documento a...' : `Invia ${count} documenti a...`)\r\n : undefined);\r\n return { ...data, count, appearance: data.appearance ?? 'fill', title };\r\n })());\r\n /** Form model for the send-to form fields. */\r\n protected item: SendToDialogResult = {\r\n recipients: null,\r\n subject: this.dialogData().subject,\r\n text: this.dialogData().text,\r\n options: null\r\n };\r\n\r\n /**\r\n * Confirm the form and emit the result.\r\n */\r\n protected ok(): void {\r\n this.item.options = this.dialogData().options;\r\n this.done.emit(this.item);\r\n }\r\n\r\n /**\r\n * Request the host to populate the recipient list.\r\n * Only emits if `canPopulate` is enabled in the dialog data.\r\n */\r\n protected populateRecipients(): void {\r\n if (this.dialogData().canPopulate) {\r\n this.populate.emit({ item: this.item, source: this });\r\n }\r\n }\r\n\r\n /**\r\n * Update the recipient list from an external caller.\r\n * @param recipients - The new recipients string (semicolon-separated).\r\n */\r\n updateRecipients(recipients: string): void {\r\n this.item.recipients = recipients;\r\n this.cdr.markForCheck();\r\n }\r\n}","<div class=\"dialog-info\">\r\n @if (f.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 [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n <p>{{dialogData().info}}</p>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Destinatari</mat-label>\r\n <textarea matInput [(ngModel)]=\"item.recipients\" name=\"recipients\" maxlength=\"1000\" #recipients=\"ngModel\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" emails required></textarea>\r\n @if (item.recipients) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"item.recipients = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (dialogData().canPopulate) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Popola\"\r\n (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>person</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"start\">Separati da punto e virgola</mat-hint>\r\n <mat-hint align=\"end\">{{recipients.value?.length || 0}}/1000 </mat-hint>\r\n @if (recipients.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Oggetto</mat-label>\r\n <input matInput name=\"subject\" [(ngModel)]=\"item.subject\" #subject=\"ngModel\" maxlength=\"200\" required />\r\n @if (subject.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n <mat-hint align=\"end\">{{subject.value?.length || 0}}/200 </mat-hint>\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Testo</mat-label>\r\n <textarea matInput [(ngModel)]=\"item.text\" name=\"text\" maxlength=\"1000\" #text=\"ngModel\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" required></textarea>\r\n <mat-hint align=\"end\">{{text.value?.length || 0}}/1000 </mat-hint>\r\n @if (subject.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData().options) {\r\n <div>\r\n @for (o of dialogData().options; track o; let i = $index) {\r\n <div>\r\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, Input, effect, OnDestroy, Optional, Renderer2, Self, inject, input, signal, output } from '@angular/core';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { Subject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n selector: 'button-selector',\r\n standalone: true,\r\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule,\r\n MatMenuModule],\r\n templateUrl: './button-selector.component.html',\r\n styleUrl: './button-selector.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[id]': 'id',\r\n '[attr.aria-describedBy]': 'describedBy',\r\n },\r\n})\r\nexport class ButtonSelectorComponent implements OnDestroy, ControlValueAccessor {\r\n\r\n /** Emitted whenever the selected value changes (including programmatic resets). */\r\n readonly changed = output<NameValueItem<any> | undefined>();\r\n\r\n /** Emitted when the user explicitly picks an item from the menu. */\r\n readonly selected = output<NameValueItem<any> | undefined>();\r\n\r\n private readonly stateChanges = new Subject<void>();\r\n private focused = false;\r\n\r\n private _value: NameValueItem<any> | undefined = undefined;\r\n\r\n set value(value: NameValueItem<any> | undefined) {\r\n this._value = value;\r\n this.propagateChange(this._value);\r\n this.stateChanges.next();\r\n this.changed.emit(this._value);\r\n this.current.set(this._value);\r\n }\r\n\r\n /** The current value as the selected item. */\r\n get value(): NameValueItem<any> | undefined {\r\n return this._value;\r\n }\r\n\r\n private _disabled: boolean = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n if (this.ngControl && this.ngControl.disabled != null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n private propagateChange: (_: any) => void = () => {};\r\n private propagateTouched: () => void = () => {};\r\n\r\n id = `button-selector--${SystemUtils.generateUUID()}`;\r\n describedBy = '';\r\n\r\n private readonly renderer = inject(Renderer2);\r\n\r\n /** Currently selected item, kept in sync with the form control value. */\r\n protected readonly current = signal<NameValueItem<any> | undefined>(undefined);\r\n\r\n /** Width of the trigger button in pixels. Use `-1` for 100 %, `0` for `auto`. */\r\n readonly width = input<number>(-1);\r\n\r\n /** Border thickness override. Use `-1` to inherit. */\r\n readonly border = input<number>(-1);\r\n\r\n /** CSS border-radius of the trigger button. Defaults to a pill shape. */\r\n readonly borderRadius = input<string>('9999px');\r\n\r\n /** Placeholder label shown when nothing is selected. */\r\n readonly label = input<string | undefined>(undefined);\r\n\r\n /** Label shown above the selected value (replaces `label` when an item is selected). */\r\n readonly labelSelected = input<string | undefined>(undefined);\r\n\r\n /** List of selectable options. */\r\n readonly options = input<NameValueItem<any>[]>([]);\r\n\r\n /** When `true`, the first available option is pre-selected on init. */\r\n readonly autoSelect = input<boolean>(false);\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n\r\n // Pre-select the first option whenever options change and autoSelect is enabled\r\n effect(() => {\r\n if (this.autoSelect()) {\r\n const options = this.options();\r\n if (options.length > 0 && options[0].value) {\r\n this.current.set(options[0]);\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n }\r\n\r\n /**\r\n * Writes a new value to the component (called by the form layer).\r\n * @param value - The new value to display.\r\n */\r\n writeValue(value: any): void {\r\n this.value = value as NameValueItem<any> | undefined;\r\n }\r\n\r\n /**\r\n * Registers the on-change callback (called by the form layer).\r\n * @param fn - Callback to invoke whenever the value changes.\r\n */\r\n registerOnChange(fn: (_: any) => void): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * Registers the on-touched callback (called by the form layer).\r\n * @param fn - Callback to invoke when the control is touched.\r\n */\r\n registerOnTouched(fn: () => void): void {\r\n this.propagateTouched = fn;\r\n }\r\n\r\n /**\r\n * Sets the ARIA described-by IDs for accessibility.\r\n * @param ids - The list of element IDs to associate with this control.\r\n */\r\n setDescribedByIds(ids: string[]): void {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n /**\r\n * Updates the disabled state when the Angular form layer changes it.\r\n * @param isDisabled - Whether the control should be disabled.\r\n */\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled = isDisabled;\r\n if (isDisabled && this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n if (!SystemUtils.isBrowser()) return;\r\n const elem = document.getElementById(this.id);\r\n if (elem) {\r\n this.renderer.setProperty(elem, 'disabled', isDisabled);\r\n }\r\n }\r\n\r\n /**\r\n * Handles a click on the container element, focusing it and marking it as touched.\r\n */\r\n onContainerClick(): void {\r\n if (!this.focused) {\r\n if (!SystemUtils.isBrowser()) return;\r\n const elem = document.getElementById(this.id);\r\n if (elem) {\r\n elem.focus();\r\n this.propagateTouched();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Selects an option and optionally emits the `selected` output event.\r\n * @param item - The item to select.\r\n * @param notify - When `true` (default), emits the `selected` event.\r\n */\r\n select(item: NameValueItem<any>, notify: boolean = true): void {\r\n this.writeValue(item);\r\n if (notify) {\r\n this.selected.emit(item);\r\n }\r\n }\r\n\r\n /** Clears the current selection and resets the control to an empty state. */\r\n reset(): void {\r\n this.writeValue(undefined);\r\n }\r\n}\r\n","<button mat-stroked-button class=\"menu-selector-button\" [style.border]=\"border() >= 0 ? border() : 'auto'\"\r\n [style.border-radius]=\"borderRadius()\" [style.height]=\"border() <= 0 ? '40px' : 'auto'\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\" [attr.aria-label]=\"label()\"\r\n [matMenuTriggerFor]=\"optionsMenu\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if(current()) {\r\n <div style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n @if(labelSelected() || label()) {\r\n <div class=\"x-small \">{{labelSelected() ?? label()}}</div>\r\n <div fxHide.xs class=\"small truncated-1\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated-1\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n } @else {\r\n <div fxHide.xs class=\"small truncated\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n }\r\n </div>\r\n } @else if(labelSelected() || label()) {\r\n <div class=\"truncated\" style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n {{labelSelected() ?? label()}}</div>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </div>\r\n </div>\r\n</button>\r\n<mat-menu #optionsMenu=\"matMenu\">\r\n @for (o of options(); track o) {\r\n <button mat-menu-item (click)=\"select(o)\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n ({{o.bag}})\r\n }\r\n </button>\r\n }\r\n</mat-menu>","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\nexport interface ButtonToggleInfo {\r\n value: boolean;\r\n toggled: boolean;\r\n}\r\n\r\n@Component({\r\n selector: 'button-toggle',\r\n standalone: true,\r\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule, SafeHtmlPipe],\r\n templateUrl: './button-toggle.component.html',\r\n styleUrl: './button-toggle.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ButtonToggleComponent {\r\n\r\n /** Emitted each time the button is clicked. Carries the current `value` and the new `toggled` state. */\r\n readonly changed = output<ButtonToggleInfo>();\r\n\r\n /** Current value bound from the parent. Drives label and icon selection. */\r\n readonly value = input<boolean>(false);\r\n\r\n /** Width of the button in pixels. Use `-1` for automatic sizing. */\r\n readonly width = input<number>(-1);\r\n\r\n /** Border thickness override in pixels. Use `-1` to inherit. */\r\n readonly border = input<number>(-1);\r\n\r\n /** Label shown when `value` is `true`. */\r\n readonly labelOn = input<string | undefined>(undefined);\r\n\r\n /** Label shown when `value` is `false`. */\r\n readonly labelOff = input<string | undefined>(undefined);\r\n\r\n /** Material icon name shown when `value` is `true`. */\r\n readonly iconOn = input<string | undefined>(undefined);\r\n\r\n /** Material icon name shown when `value` is `false`. */\r\n readonly iconOff = input<string | undefined>(undefined);\r\n\r\n /** CSS class applied to the button at all breakpoints. */\r\n readonly cssClass = input<string | undefined>(undefined);\r\n\r\n /** CSS class applied to the button on `xs` screens. */\r\n readonly cssClassSmall = input<string | undefined>(undefined);\r\n\r\n /** Resolves the appropriate label for the current value state. */\r\n protected readonly label = computed(() =>\r\n this.value() ? this.labelOn() ?? '' : this.labelOff() ?? ''\r\n );\r\n\r\n /** Resolves the appropriate icon name for the current value state. */\r\n protected readonly icon = computed(() =>\r\n this.value() ? this.iconOn() ?? '' : this.iconOff() ?? ''\r\n );\r\n\r\n /**\r\n * Toggles the button state and emits the `changed` event.\r\n * The emitted `toggled` value is the logical inverse of the current `value`.\r\n */\r\n toggle(): void {\r\n const toggled = !this.value();\r\n this.changed.emit({ value: this.value(), toggled });\r\n }\r\n}\r\n","<button mat-stroked-button [style.border]=\"border() >= 0 ? border() : 'auto'\"\r\n [style.height]=\"border() <= 0 ? '40px' : 'auto'\" [style.minWidth.px]=\"width() > 0 ? width() : 'auto'\"\r\n [style.mxn-width.px]=\"width() > 0 ? width() : 'auto'\" [class]=\"cssClass()\" [attr.aria-label]=\"label()\"\r\n (click)=\"toggle()\" [class.button-on]=\"value() === true\" [ngClass.xs]=\"cssClassSmall()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"8px\" fxLayoutAlign=\"center center\" fxFill>\r\n @if(icon()) {\r\n <div fxFlex=\"24px\"><mat-icon style=\"display: block;\">{{icon()}}</mat-icon></div>\r\n }\r\n <div [innerHtml]=\"label() | safeHtml\"></div>\r\n </div>\r\n</button>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatCalendar } from '@angular/material/datepicker';\r\n\r\n/**\r\n * A blank calendar header that hides the month/year navigation controls.\r\n * Used when an inline calendar should render without any navigation UI.\r\n */\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CalendarEmptyHeader<D> {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly calendar = inject(MatCalendar<D>);\r\n private readonly changeDetector = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n // Re-run change detection whenever the calendar's internal state changes\r\n // (e.g. active date, selected date) so the blank header stays in sync.\r\n this.calendar.stateChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.changeDetector.markForCheck());\r\n }\r\n}\r\n","import { afterNextRender, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, DestroyRef, effect, inject, input, Input, OnDestroy, Optional, Renderer2, Self, signal, output } from '@angular/core';\r\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { auditTime, animationFrameScheduler, Subject } from 'rxjs';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ButtonSelectorComponent } from '../button-selector/button-selector.component';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'chips-selector',\r\n standalone: true,\r\n imports: [FlexLayoutModule, FormsModule, MatFormFieldModule, MatSelectModule,\r\n MatChipsModule, MatIconModule, MatButtonModule, MatBadgeModule, MatTooltipModule,\r\n ButtonSelectorComponent\r\n ],\r\n templateUrl: './chips-selector.component.html',\r\n styleUrl: './chips-selector.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n host: {\r\n '[id]': 'id',\r\n '[class.floating]': 'shouldLabelFloat',\r\n '[attr.aria-describedBy]': 'describedBy',\r\n },\r\n})\r\nexport class ChipsSelectorComponent implements OnDestroy, ControlValueAccessor {\r\n\r\n /** Emitted when the selection changes. Carries the new array of selected items, or `undefined` when cleared. */\r\n readonly changed = output<NameValueItem<any>[] | undefined>();\r\n\r\n protected readonly containerId = `chips-selector-container--${SystemUtils.generateUUID()}`;\r\n protected readonly containerWidth = signal(-6);\r\n\r\n private focused = false;\r\n private readonly stateChanges = new Subject<void>();\r\n private readonly destroyRef = inject(DestroyRef);\r\n private changesEnabled = false;\r\n\r\n /** Observer that tracks size changes of the container element. */\r\n private resizeObserver?: ResizeObserver;\r\n\r\n /** Debounce bridge for `ResizeObserver` notifications. */\r\n private readonly resize$ = new Subject<void>();\r\n\r\n /** List of available options to display as chips. */\r\n readonly options = input<NameValueItem<any>[]>([]);\r\n\r\n /** Minimum width in pixels when collapsed. Use `-1` for automatic. */\r\n readonly collapsedWidth = input<number>(-1);\r\n\r\n /** Display mode used when the selector is in collapsed state. */\r\n readonly collapsedDisplayMode = input<'dropdown' | 'button'>('dropdown');\r\n\r\n /** Pixel threshold below which the selector collapses. Use `-1` to disable. */\r\n readonly collapseAt = input<number>(-1);\r\n\r\n /** When `true`, `collapseAt` is compared against the container width rather than the window width. */\r\n readonly collapseAtContainer = input<boolean>(false);\r\n\r\n protected readonly collapsed = computed(() => {\r\n const cw = this.containerWidth();\r\n const mw = this.collapseAt();\r\n return this.mode() === 'collapsed' || (mw !== -1 && cw > 0 && mw > 0 && cw < mw);\r\n });\r\n\r\n /** Label shown in the dropdown / above the chip list. */\r\n readonly label = input<string>('');\r\n\r\n /** When `true`, multiple chips can be selected simultaneously. */\r\n readonly multiple = input<boolean>(false);\r\n\r\n /** When `true`, at least one item must remain selected. */\r\n readonly mustSelect = input<boolean>(false);\r\n\r\n /** Layout mode: `'collapsed'` forces dropdown mode, `'dynamic'` collapses based on `collapseAt`. */\r\n readonly mode = input<'collapsed' | 'dynamic'>('dynamic');\r\n\r\n /** When `true`, chips are stacked vertically instead of wrapping horizontally. */\r\n readonly stacked = input<boolean>(false);\r\n\r\n /** Chips below this index receive extra padding to align with other UI elements. */\r\n readonly padAt = input<number>(0);\r\n\r\n /** When `true`, the control is required. */\r\n readonly required = input<boolean, unknown>(false, { transform: booleanAttribute });\r\n\r\n /** Placeholder text shown when no value is selected. */\r\n readonly placeholder = input<string>('');\r\n\r\n private _disabled: boolean = false;\r\n\r\n @Input()\r\n get disabled(): boolean {\r\n if (this.ngControl && this.ngControl.disabled != null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n id = `chips-selector--${SystemUtils.generateUUID()}`;\r\n describedBy = '';\r\n\r\n /** True when the label should float above the field (focused or has a value). */\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n private _value?: NameValueItem<any>[] = [];\r\n\r\n set value(value: NameValueItem<any>[] | undefined) {\r\n this._value = value;\r\n this.selection = [];\r\n this.singleSelection = undefined;\r\n if (this._value) {\r\n this.options().forEach(n => {\r\n if (this._value?.findIndex((x) => x.value === n.value) !== -1) {\r\n this.selection.push(n);\r\n }\r\n });\r\n if (this.selection.length > 0) {\r\n this.singleSelection = this.selection[0];\r\n }\r\n }\r\n this.cdr.markForCheck();\r\n this.propagateChange(this._value);\r\n this.stateChanges.next();\r\n if (this.changesEnabled) {\r\n this.changed.emit(this._value);\r\n }\r\n }\r\n\r\n /** The current value as an array of selected items. */\r\n get value(): NameValueItem<any>[] | undefined {\r\n return this._value;\r\n }\r\n\r\n /** True when no item is selected. */\r\n get empty(): boolean {\r\n return !this._value || this._value.length === 0;\r\n }\r\n\r\n /** True when the control has validation errors and has been touched. */\r\n get errorState(): boolean {\r\n return this.ngControl?.errors != null && (this.ngControl?.touched ?? false);\r\n }\r\n\r\n private propagateChange: (_: any) => void = () => {};\r\n private propagateTouched: () => void = () => {};\r\n\r\n private readonly renderer = inject(Renderer2);\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n /** Currently selected items (may contain multiple entries when `multiple` is `true`). */\r\n protected selection: NameValueItem<any>[] = [];\r\n\r\n /** The single selected item — used in `button` collapsed-display mode. */\r\n protected singleSelection?: NameValueItem<any>;\r\n\r\n constructor(@Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n\r\n // Notify state changes whenever required or placeholder inputs change\r\n effect(() => {\r\n this.required();\r\n this.placeholder();\r\n this.stateChanges.next();\r\n });\r\n\r\n // React to container size changes to keep the collapsed state up to date.\r\n // `auditTime` on the animation-frame scheduler coalesces ResizeObserver bursts\r\n // without adding perceptible latency, and defers the layout read out of the\r\n // observer callback to avoid \"ResizeObserver loop\" warnings.\r\n this.resize$\r\n .pipe(takeUntilDestroyed(this.destroyRef), auditTime(0, animationFrameScheduler))\r\n .subscribe(() => {\r\n if (this.collapseAt() > 0) {\r\n this.updateContainerWidth();\r\n }\r\n });\r\n\r\n afterNextRender(() => {\r\n if (SystemUtils.isBrowser() && typeof ResizeObserver !== 'undefined') {\r\n const elem = document.getElementById(this.containerId);\r\n if (elem) {\r\n this.resizeObserver = new ResizeObserver(() => this.resize$.next());\r\n this.resizeObserver.observe(elem);\r\n }\r\n }\r\n\r\n setTimeout(() => {\r\n this.updateContainerWidth();\r\n this.changesEnabled = true;\r\n }, 250);\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.resizeObserver?.disconnect();\r\n this.stateChanges.complete();\r\n }\r\n\r\n /**\r\n * Measures the container (or window) width and updates the `containerWidth` signal,\r\n * retrying after 100 ms if the element is not yet laid out.\r\n */\r\n private updateContainerWidth(): void {\r\n const elem = document.getElementById(this.containerId);\r\n if (elem && elem.clientWidth > 0) {\r\n this.containerWidth.set(\r\n this.collapseAtContainer()\r\n ? elem.clientWidth\r\n : window.innerWidth);\r\n } else {\r\n setTimeout(() => this.updateContainerWidth(), 100);\r\n }\r\n }\r\n\r\n /**\r\n * Resolves the effective selection array for the current display mode.\r\n * In single-select collapsed button mode the `singleSelection` item is wrapped in an array.\r\n * @returns The array of currently selected items.\r\n */\r\n private getSelection(): NameValueItem<any>[] {\r\n const value: NameValueItem<any> | NameValueItem<any>[] | undefined =\r\n !this.multiple() && this.collapsed() && this.collapsedDisplayMode() === 'button'\r\n ? this.singleSelection\r\n : this.selection;\r\n if (Array.isArray(value)) {\r\n return value;\r\n }\r\n return value ? [value] : [];\r\n }\r\n\r\n /**\r\n * Schedules a value update after a short delay, giving the template time to sync `ngModel`.\r\n */\r\n updateValue(): void {\r\n setTimeout(() => {\r\n this.writeValue(this.getSelection());\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Returns `true` when the given item can be selected in the current mode.\r\n * In single-select mode an already-selected item is not re-selectable.\r\n * @param item - The item to check.\r\n * @returns True when the item is selectable.\r\n */\r\n isSelectable(item: NameValueItem<any>): boolean {\r\n return this.multiple() || this.getSelection().findIndex(x => x.value === item.value) === -1;\r\n }\r\n\r\n /**\r\n * Writes a new value to the component (called by the form layer).\r\n * @param value - The new selection to display.\r\n */\r\n writeValue(value: any): void {\r\n const next = value as NameValueItem<any>[] | undefined;\r\n if (this.value !== next) {\r\n this.value = next;\r\n }\r\n }\r\n\r\n /**\r\n * Registers the on-change callback (called by the form layer).\r\n * @param fn - Callback to invoke whenever the value changes.\r\n */\r\n registerOnChange(fn: (_: any) => void): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * Registers the on-touched callback (called by the form layer).\r\n * @param fn - Callback to invoke when the control is touched.\r\n */\r\n registerOnTouched(fn: () => void): void {\r\n this.propagateTouched = fn;\r\n }\r\n\r\n /**\r\n * Sets the ARIA described-by IDs for accessibility.\r\n * @param ids - The list of element IDs to associate with this control.\r\n */\r\n setDescribedByIds(ids: string[]): void {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n /**\r\n * Updates the disabled state when the Angular form layer changes it.\r\n * @param isDisabled - Whether the control should be disabled.\r\n */\r\n setDisabledState(isDisabled: boolean): void {\r\n this._disabled = isDisabled;\r\n if (isDisabled && this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n if (!SystemUtils.isBrowser()) return;\r\n const elem = document.getElementById(this.id);\r\n if (elem) {\r\n this.renderer.setProperty(elem, 'disabled', isDisabled);\r\n }\r\n }\r\n\r\n /**\r\n * Handles a click on the container element, focusing it and marking it as touched.\r\n */\r\n onContainerClick(): void {\r\n if (!this.focused) {\r\n if (!SystemUtils.isBrowser()) return;\r\n const elem = document.getElementById(this.id);\r\n if (elem) {\r\n elem.focus();\r\n this.propagateTouched();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clears the current selection and stops the event from bubbling.\r\n * @param e - The originating click event.\r\n */\r\n clear(e: Event): void {\r\n this.writeValue([]);\r\n e.stopPropagation();\r\n }\r\n\r\n /**\r\n * Selects a single item, replacing any existing selection.\r\n * @param item - The item to select. Does nothing when `undefined`.\r\n */\r\n select(item?: NameValueItem<any>): void {\r\n if (item) {\r\n this.writeValue([item]);\r\n }\r\n }\r\n\r\n}\r\n","<div [id]=\"containerId\" class=\"chips-selector\">\r\n @if(containerWidth() > 0) {\r\n @if(collapsed()) {\r\n @if(collapsedDisplayMode() === 'dropdown') {\r\n <mat-form-field [style.min-width]=\"collapsedWidth() > 0 ? collapsedWidth()+'px' : '100%'\" subscriptSizing=\"dynamic\">\r\n @if(label()) {\r\n <mat-label>{{label()}}</mat-label>\r\n }\r\n <mat-select [(ngModel)]=\"selection\" [multiple]=\"multiple()\" (selectionChange)=\"updateValue()\">\r\n <mat-select-trigger>\r\n @if (value && (value.length || 0) > 0) {\r\n {{value[0].shortName ?? value[0].name}}\r\n }\r\n @if (value && (value.length || 0) > 1) {\r\n <span class=\"collapsed-additional-selection\">\r\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\r\n </span>\r\n }\r\n </mat-select-trigger>\r\n @for (o of options(); track o) {\r\n <mat-option [value]=\"o\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n &nbsp; ({{o.bag}})\r\n }\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (value && (value.length || 0) > 0) {\r\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [(ngModel)]=\"singleSelection\"\r\n name=\"value\" (selected)=\"updateValue()\"></button-selector>\r\n\r\n }\r\n } @else {\r\n <mat-chip-listbox [class]=\"stacked() ? 'mat-mdc-chip-set-stacked' : ''\" [multiple]=\"multiple()\"\r\n [(ngModel)]=\"selection\" (change)=\"updateValue()\">\r\n @for (o of options(); track o; let i = $index) {\r\n <mat-chip-option [matBadge]=\"o.bag\" [matTooltip]=\"o.disabled === true ? 'Non disponibile' : (o.bagInfo ?? '')\" [selectable]=\"isSelectable(o)\" [value]=\"o\"\r\n [disabled]=\"o.disabled\" [class.chip-padded]=\"i < padAt()\">{{o.shortName ??\r\n o.name}}</mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n</div>","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { afterNextRender, ChangeDetectionStrategy, Component, DoCheck, ElementRef, Input, OnDestroy, Optional, Renderer2, Self, inject, input, model, output, signal, viewChild } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\r\nimport { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FileInfo, FileSizeValidatorDirective, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { Subject } from 'rxjs';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { UIService } from '../../services/ui.service';\r\n\r\n@Component({\r\n selector: 'file-input',\r\n templateUrl: './file-input.component.html',\r\n styleUrl: './file-input.component.scss',\r\n providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatFormFieldModule, MatInputModule, FormsModule, FileSizeValidatorDirective, MatButtonModule,\r\n MatIconModule, MatTooltipModule],\r\n host: {\r\n '[id]': 'id',\r\n '[class.floating]': 'shouldLabelFloat',\r\n '[attr.aria-describedBy]': 'describedBy',\r\n },\r\n})\r\nexport class FileInputComponent\r\n implements\r\n OnDestroy,\r\n DoCheck,\r\n MatFormFieldControl<FileInfo>,\r\n ControlValueAccessor {\r\n\r\n /** Reference to the hidden native file input element. */\r\n protected readonly __file = viewChild.required<ElementRef>('__file');\r\n\r\n private readonly renderer = inject(Renderer2);\r\n private readonly uiService = inject(UIService);\r\n\r\n // Initialize\r\n static nextId = 0;\r\n readonly stateChanges = new Subject<void>();\r\n private previousNativeValue: any;\r\n controlType: string = 'file-input';\r\n focused = false;\r\n\r\n /** Whether the device supports camera capture. */\r\n protected readonly canCapture = signal<boolean>(false);\r\n\r\n /** Size in MB of the currently selected file. */\r\n protected readonly fileSize = signal<number>(0);\r\n\r\n private readonly _placeholder = signal<string>('');\r\n\r\n private _value: FileInfo = new FileInfo();\r\n set value(value: FileInfo) {\r\n this._value = value;\r\n this.propagateChange(this._value);\r\n this.stateChanges.next();\r\n this.changed.emit(this._value);\r\n }\r\n get value() {\r\n return this._value;\r\n }\r\n get size() {\r\n return this._value?.file?.size;\r\n }\r\n\r\n private _required: boolean = false;\r\n @Input()\r\n get required() {\r\n return this._required;\r\n }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _disabled: boolean = false;\r\n @Input()\r\n get disabled() {\r\n if (this.ngControl && this.ngControl.disabled != null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n @Input()\r\n get placeholder(): string {\r\n return this._placeholder();\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder.set(value);\r\n this.stateChanges.next();\r\n }\r\n\r\n /** The currently displayed file name. Can be bound two-way from outside or updated on file selection. */\r\n readonly fileName = model<string | undefined>(undefined);\r\n readonly maxSizeMb = input<number>(5);\r\n readonly minSizeMb = input<number>(0);\r\n readonly isNew = input<boolean>(false);\r\n readonly canPreview = input<boolean>(false);\r\n readonly appearance = input<'fill' | 'outline' | undefined>(this.uiService.appearance());\r\n readonly accept = input<string>();\r\n get empty(): boolean {\r\n return !this._value || !this._value.file;\r\n }\r\n /** True when the control has validation errors and has been touched. */\r\n get errorState(): boolean {\r\n return (this.ngControl?.errors != null) && (this.ngControl?.touched ?? false);\r\n }\r\n\r\n id = `${this.controlType}-${FileInputComponent.nextId++}`;\r\n\r\n /** True when the label should float above the field. */\r\n get shouldLabelFloat(): boolean {\r\n return this.focused || !this.empty;\r\n }\r\n\r\n describedBy = '';\r\n\r\n readonly changed = output<FileInfo>();\r\n readonly download = output();\r\n readonly preview = output();\r\n\r\n private propagateChange: (_: any) => void = (_: any) => { };\r\n private propagateTouched: () => void = () => { };\r\n\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n\r\n // Detect camera availability and set the default placeholder after the first render\r\n afterNextRender(() => { this.setupDevices(); });\r\n }\r\n\r\n /**\r\n * Detects camera availability and updates the placeholder accordingly.\r\n */\r\n private async setupDevices(): Promise<void> {\r\n this.canCapture.set(false);\r\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\r\n if (stream) {\r\n this.canCapture.set(true);\r\n }\r\n } catch { }\r\n }\r\n if (!this.placeholder || this.placeholder === 'Seleziona file') {\r\n this._placeholder.set(\r\n this.canCapture()\r\n ? 'Seleziona file o acquisisci con fotocamera'\r\n : 'Seleziona file'\r\n );\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngDoCheck(): void {\r\n this.updateInputDirtyCheck();\r\n }\r\n\r\n /**\r\n * Writes a new value to the component (called by the form layer).\r\n * @param value - The new file info to display.\r\n */\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n /**\r\n * Registers the on-change callback (called by the form layer).\r\n * @param fn - Callback to invoke whenever the value changes.\r\n */\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n /**\r\n * Registers the on-touched callback (called by the form layer).\r\n * @param fn - Callback to invoke when the control is touched.\r\n */\r\n registerOnTouched(fn: any): void {\r\n this.propagateTouched = fn;\r\n }\r\n\r\n /**\r\n * Sets the ARIA describedby attribute from the given element IDs.\r\n * @param ids - Array of element IDs that describe this control.\r\n */\r\n setDescribedByIds(ids: string[]): void {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n /**\r\n * Updates the disabled state of the underlying native element.\r\n * @param isDisabled - Whether the control should be disabled.\r\n */\r\n setDisabledState?(isDisabled: boolean): void {\r\n if (!SystemUtils.isBrowser()) return;\r\n const elem = document.getElementById(this.id);\r\n if (elem) {\r\n this.renderer.setProperty(elem, 'disabled', isDisabled);\r\n }\r\n }\r\n\r\n /** Focuses the native input element and marks the control as touched. */\r\n onContainerClick(): void {\r\n if (!this.focused) {\r\n if (!SystemUtils.isBrowser()) return;\r\n const elem = document.getElementById(this.id);\r\n if (elem) {\r\n elem.focus();\r\n this.propagateTouched();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether the value has changed since the last dirty check and emits `stateChanges` if needed.\r\n */\r\n protected updateInputDirtyCheck(): void {\r\n const newValue = this._value;\r\n if (this.previousNativeValue !== newValue) {\r\n this.previousNativeValue = newValue;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n /**\r\n * Handles file selection from the native input element.\r\n * @param e - The DOM change event from the file input.\r\n */\r\n protected selectFile(e: Event): void {\r\n const input = e.target as HTMLInputElement;\r\n if (input.files?.length) {\r\n const f = input.files[0];\r\n const fileInfo = new FileInfo();\r\n const fileSizeMb = f.size / 1048576;\r\n fileInfo.file = f;\r\n fileInfo.valid =\r\n (!this.maxSizeMb() || fileSizeMb <= this.maxSizeMb()) &&\r\n (!this.minSizeMb() || fileSizeMb >= this.minSizeMb());\r\n this.writeValue(fileInfo);\r\n this.fileName.set(f.name);\r\n this.fileSize.set(Math.round(fileSizeMb));\r\n }\r\n }\r\n\r\n /**\r\n * Checks whether a file is currently selected.\r\n * @returns `true` if a file is attached to the current value.\r\n */\r\n protected hasFile(): boolean {\r\n return !!(this._value?.file);\r\n }\r\n\r\n /**\r\n * Clears the currently selected file and resets the control.\r\n */\r\n protected clearFile(): void {\r\n if (this.hasFile()) {\r\n this.fileName.set(undefined);\r\n this.fileSize.set(0);\r\n const fi = new FileInfo();\r\n fi.file = undefined;\r\n fi.valid = !this.required;\r\n this.writeValue(fi);\r\n this.__file().nativeElement.value = '';\r\n }\r\n }\r\n\r\n /**\r\n * Emits the `download` output event if the file is not newly added.\r\n */\r\n protected downloadFile(): void {\r\n if (!this.isNew()) this.download.emit();\r\n }\r\n\r\n /**\r\n * Emits the `preview` output event if the file is not new and preview is enabled.\r\n */\r\n protected previewFile(): void {\r\n if (!this.isNew() && this.canPreview()) this.preview.emit();\r\n }\r\n}\r\n","<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept()\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [ngModel]=\"fileName()\" (ngModelChange)=\"fileName.set($event)\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize()\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\" [disabled]=\"disabled\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\" [disabled]=\"disabled\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\" [disabled]=\"disabled\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\" [disabled]=\"disabled\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n }\r\n @if (hasFile() && fileSize() > 0) {\r\n <mat-hint align=\"start\">{{fileSize()}} MB</mat-hint>\r\n }\r\n @if (hasFile() && fileSize() == 0) {\r\n <mat-hint align=\"start\">\r\n &gt; 1 MB</mat-hint>\r\n } @if (maxSizeMb()) {\r\n <mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n }\r\n @if (_fileName.invalid && !hasFile()) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n @if (_fileName.invalid && hasFile()) {\r\n <mat-error>Dimensione non consentita.</mat-error>\r\n }\r\n</mat-form-field>","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { ChangeDetectionStrategy, Component, ElementRef, inject, signal, viewChild } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent } from '@angular/material/dialog';\r\nimport { SafeUrlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { DialogService } from '../../services/dialog.service';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\nexport interface FilePreviewDialogData {\r\n url?: string;\r\n embed?: boolean;\r\n authToken?: string;\r\n}\r\n\r\n\r\n@Component({\r\n templateUrl: './file-preview.component.html',\r\n styleUrl: './file-preview.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogContent, FlexLayoutModule, MatDialogActions, MatButtonModule, MatTooltipModule,\r\n MatDialogClose, SafeUrlPipe]\r\n})\r\nexport class FilePreviewComponent {\r\n readonly iframe = viewChild<ElementRef>('iframe');\r\n private readonly httpClient = inject(HttpClient);\r\n private readonly dialogService = inject(DialogService);\r\n protected readonly dialogData = inject<FilePreviewDialogData>(MAT_DIALOG_DATA) ?? {};\r\n protected readonly url = signal<string | null>(null);\r\n\r\n constructor() {\r\n const data = this.dialogData;\r\n if (!data?.url) return;\r\n\r\n if (!data.embed) {\r\n this.dialogService.setBusy('Download in corso...');\r\n this.httpClient.get(data.url, {\r\n headers: data.authToken\r\n ? new HttpHeaders().set('Authorization', data.authToken)\r\n : new HttpHeaders(),\r\n responseType: 'blob'\r\n })\r\n .pipe(takeUntilDestroyed())\r\n .subscribe({\r\n next: (res: Blob) => {\r\n this.url.set(URL.createObjectURL(res));\r\n this.dialogService.clearBusy();\r\n },\r\n error: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n } else {\r\n this.url.set('https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(data.url));\r\n }\r\n }\r\n\r\n /**\r\n * Handles the iframe load event: scrolls to the top and centers a single image when present.\r\n */\r\n protected loaded(): void {\r\n const iframe = this.iframe()?.nativeElement;\r\n if (!iframe) { return; }\r\n \r\n try {\r\n iframe.contentWindow?.scrollTo(0, 0);\r\n \r\n // Resize and center single image\r\n if (!this.dialogData?.embed && iframe.contentDocument) { \r\n const images = iframe.contentDocument.querySelectorAll('img') || [];\r\n if (images.length === 1) { \r\n Object.assign(images[0].style, {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n maxWidth: images[0].style.maxWidth || '100%',\r\n maxHeight: images[0].style.maxHeight || '100%'\r\n });\r\n const iframeBody = iframe.contentDocument.body;\r\n if (iframeBody && !iframeBody.style.height) {\r\n iframeBody.style.height = '100%';\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error('Impossibile accedere al contenuto dell\\'iframe:', e);\r\n }\r\n }\r\n\r\n /**\r\n * Opens the current file URL in a new browser tab for manual download.\r\n */\r\n protected download(): void {\r\n const currentUrl = this.url();\r\n if (currentUrl) {\r\n window.open(currentUrl, '_blank');\r\n }\r\n }\r\n\r\n /**\r\n * Displays a help dialog with browser-specific instructions for enabling PDF preview.\r\n */\r\n protected troubles(): void {\r\n this.dialogService.info(\r\n \"<p>Se non riesci a visualizzare l'anteprima dei file PDF probabilmente devi abilitare un'impostazione del tuo browser.</p>\" +\r\n \"<b>Per Google Chrome</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'><i>impostazioni > privacy e sicurezza > impostazioni sito > documenti PDF</i></p>\" +\r\n \"<b>Per Microsoft Chrome</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'><i>impostazioni > cookie e autorizzazioni sito > documenti PDF</i></p>\" +\r\n \"<b>Per Mozilla Firefox</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'><i>impostazioni > generale > applicazioni</i></p>\" +\r\n \"<b>Altri browser</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'>Fate riferimento alla documentazione specifica del vostro browser.</p>\",\r\n \"Problemi con lee anteprime dei file PDF?\"\r\n )\r\n }\r\n}\r\n\r\n\r\n\r\n","<mat-dialog-content class=\"file-preview\" id=\"file-preview-scrollable\">\r\n <div class=\"content\">\r\n @if (!url()) {\r\n <div class=\"loading\">Caricamento in corso...</div>\r\n } @else {\r\n <iframe class=\"iframe\" #iframe (load)=\"loaded()\" [src]=\"url() | safeUrl\"></iframe>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions id=\"file-preview-fixed\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <button mat-stroked-button (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-stroked-button (click)=\"download()\">Scarica</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, inject, input, output, signal } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatDividerModule } from \"@angular/material/divider\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatMenuModule } from \"@angular/material/menu\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { CurrentFilter, CurrentFilterChanged, FilterGroup, FilterItem, Filters } from '../../filters';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\n\r\n@Component({\r\n selector: \"filter-bar\",\r\n templateUrl: \"./filter-bar.component.html\",\r\n styleUrl: './filter-bar.component.scss',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule,\r\n MatTooltipModule, MatButtonModule, MatIconModule, MatMenuModule, MatDividerModule, SafeHtmlPipe]\r\n})\r\nexport class FilterBarComponent {\r\n /** Emitted whenever any filter value changes. */\r\n readonly changed = output<CurrentFilterChanged>();\r\n\r\n /** The list of filter groups to display. */\r\n readonly filters = input<FilterGroup[]>();\r\n\r\n readonly canFilterByText = input<boolean>(false);\r\n readonly canFilterByText2 = input<boolean>(false);\r\n readonly canFilterByText3 = input<boolean>(false);\r\n\r\n /** Initial text values for the search inputs — synced into the model signals on change. */\r\n readonly initialText = input<string | undefined>(undefined);\r\n readonly initialText2 = input<string | undefined>(undefined);\r\n readonly initialText3 = input<string | undefined>(undefined);\r\n\r\n readonly textName = input<string>(\"testo\");\r\n readonly text2Name = input<string>(\"...\");\r\n readonly text3Name = input<string>(\"...\");\r\n readonly textLength = input<string>();\r\n readonly text2Length = input<string>();\r\n readonly text3Length = input<string>();\r\n readonly showTextSearchButton = input<boolean>(false);\r\n readonly appearance = input<'fill' | 'outline' | undefined>('outline');\r\n\r\n /** Two-way bindable text filter values. */\r\n protected readonly text = signal<string | undefined>(undefined);\r\n protected readonly text2 = signal<string | undefined>(undefined);\r\n protected readonly text3 = signal<string | undefined>(undefined);\r\n\r\n /** Filter group for slot 1, derived reactively from the `filters` input. */\r\n protected readonly flt1 = computed<FilterGroup | undefined>(() =>\r\n this.filters()?.find(n => n.group === Filters.FLT_1)\r\n );\r\n /** Filter group for slot 2, derived reactively from the `filters` input. */\r\n protected readonly flt2 = computed<FilterGroup | undefined>(() =>\r\n this.filters()?.find(n => n.group === Filters.FLT_2)\r\n );\r\n /** Filter group for slot 3, derived reactively from the `filters` input. */\r\n protected readonly flt3 = computed<FilterGroup | undefined>(() =>\r\n this.filters()?.find(n => n.group === Filters.FLT_3)\r\n );\r\n /** Filter group for slot 4, derived reactively from the `filters` input. */\r\n protected readonly flt4 = computed<FilterGroup | undefined>(() =>\r\n this.filters()?.find(n => n.group === Filters.FLT_4)\r\n );\r\n /** Filter group for slot 5, derived reactively from the `filters` input. */\r\n protected readonly flt5 = computed<FilterGroup | undefined>(() =>\r\n this.filters()?.find(n => n.group === Filters.FLT_5)\r\n );\r\n\r\n /** True when filter slot 1 has an action or item list. */\r\n protected readonly canFilterByFlt1 = computed(() => {\r\n const g = this.flt1(); return !!(g?.action || (g?.items && g.items.length > 0));\r\n });\r\n /** True when filter slot 2 has an action or item list. */\r\n protected readonly canFilterByFlt2 = computed(() => {\r\n const g = this.flt2(); return !!(g?.action || (g?.items && g.items.length > 0));\r\n });\r\n /** True when filter slot 3 has an action or item list. */\r\n protected readonly canFilterByFlt3 = computed(() => {\r\n const g = this.flt3(); return !!(g?.action || (g?.items && g.items.length > 0));\r\n });\r\n /** True when filter slot 4 has an action or item list. */\r\n protected readonly canFilterByFlt4 = computed(() => {\r\n const g = this.flt4(); return !!(g?.action || (g?.items && g.items.length > 0));\r\n });\r\n /** True when filter slot 5 has an action or item list. */\r\n protected readonly canFilterByFlt5 = computed(() => {\r\n const g = this.flt5(); return !!(g?.action || (g?.items && g.items.length > 0));\r\n });\r\n\r\n public readonly currentFilter: CurrentFilter = new CurrentFilter();\r\n\r\n private readonly cdr = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n // Sync the initialText inputs into the model signals whenever they change\r\n effect(() => {\r\n this.text.set(this.initialText());\r\n this.text2.set(this.initialText2());\r\n this.text3.set(this.initialText3());\r\n });\r\n }\r\n\r\n /**\r\n * No-op kept for API compatibility.\r\n * Filter groups are now computed reactively from the `filters()` input.\r\n */\r\n public initializeFilters(): void { }\r\n\r\n /**\r\n * Applies the selected filter item to the current filter state and emits the change.\r\n * @param filter - The filter item to apply.\r\n */\r\n applyFilter(filter: FilterItem): void {\r\n let changed = false;\r\n switch (filter.group) {\r\n case Filters.FLT_1:\r\n changed = this.currentFilter.flt1 !== filter.value;\r\n if (changed) {\r\n this.currentFilter.flt1 = filter.value;\r\n this.currentFilter.flt1Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_2:\r\n changed = this.currentFilter.flt2 !== filter.value;\r\n if (changed) {\r\n this.currentFilter.flt2 = filter.value;\r\n this.currentFilter.flt2Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_3:\r\n changed = this.currentFilter.flt3 !== filter.value;\r\n if (changed) {\r\n this.currentFilter.flt3 = filter.value;\r\n this.currentFilter.flt3Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_4:\r\n changed = this.currentFilter.flt4 !== filter.value;\r\n if (changed) {\r\n this.currentFilter.flt4 = filter.value;\r\n this.currentFilter.flt4Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_5:\r\n changed = this.currentFilter.flt5 !== filter.value;\r\n if (changed) {\r\n this.currentFilter.flt5 = filter.value;\r\n this.currentFilter.flt5Name = filter.titleSelected;\r\n }\r\n break;\r\n }\r\n\r\n if (changed) {\r\n this.cdr.markForCheck();\r\n this.changed.emit({ filter: this.currentFilter, group: filter.group });\r\n }\r\n }\r\n\r\n /**\r\n * Executes the action associated with a filter group, or clears the filter.\r\n * @param group - The filter group number.\r\n * @param clear - When `true`, clears the filter instead of triggering its action.\r\n */\r\n applyFilterAction(group: number, clear: boolean = false): void {\r\n if (!clear) {\r\n const g = this.getFilterGroup(group);\r\n if (g?.action) {\r\n g.action(this, g);\r\n }\r\n } else {\r\n this.clearFilter(group);\r\n }\r\n }\r\n\r\n /** Commits the current text inputs to the filter state and emits the change. */\r\n applyTextFilter(): void {\r\n this.currentFilter.text = this.text();\r\n this.currentFilter.text2 = this.text2();\r\n this.currentFilter.text3 = this.text3();\r\n this.changed.emit({\r\n filter: this.currentFilter,\r\n group: Filters.FLT_TEXT\r\n });\r\n }\r\n\r\n /**\r\n * Clears the active filter for the specified group and emits the change if it was set.\r\n * @param group - The filter group number to clear.\r\n */\r\n clearFilter(group: number): void {\r\n let changed = false;\r\n switch (group) {\r\n case Filters.FLT_1:\r\n changed = this.currentFilter.flt1 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt1 = undefined;\r\n this.currentFilter.flt1Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_2:\r\n changed = this.currentFilter.flt2 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt2 = undefined;\r\n this.currentFilter.flt2Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_3:\r\n changed = this.currentFilter.flt3 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt3 = undefined;\r\n this.currentFilter.flt3Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_4:\r\n changed = this.currentFilter.flt4 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt4 = undefined;\r\n this.currentFilter.flt4Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_5:\r\n changed = this.currentFilter.flt5 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt5 = undefined;\r\n this.currentFilter.flt5Name = undefined;\r\n }\r\n break;\r\n }\r\n if (changed) {\r\n this.cdr.markForCheck();\r\n this.changed.emit({ filter: this.currentFilter, group: group });\r\n }\r\n }\r\n\r\n /** Resets all active filters and text inputs, then emits the change. */\r\n clearAllFilters(): void {\r\n this.currentFilter.flt1 = undefined;\r\n this.currentFilter.flt1Name = undefined;\r\n this.currentFilter.flt2 = undefined;\r\n this.currentFilter.flt2Name = undefined;\r\n this.currentFilter.flt3 = undefined;\r\n this.currentFilter.flt3Name = undefined;\r\n this.currentFilter.flt4 = undefined;\r\n this.currentFilter.flt4Name = undefined;\r\n this.currentFilter.flt5 = undefined;\r\n this.currentFilter.flt5Name = undefined;\r\n this.currentFilter.text = undefined;\r\n this.currentFilter.text2 = undefined;\r\n this.currentFilter.text3 = undefined;\r\n this.text.set(undefined);\r\n this.text2.set(undefined);\r\n this.text3.set(undefined);\r\n this.cdr.markForCheck();\r\n this.changed.emit({ filter: this.currentFilter, group: -1 });\r\n }\r\n\r\n /**\r\n * Returns `true` when more than one filter type is active, showing the \"clear all\" button.\r\n * @returns True when the clear-all button should be visible.\r\n */\r\n canClearAllFilters(): boolean {\r\n let count = 0;\r\n if (this.canFilterByText()) count++;\r\n if (this.canFilterByText2()) count++;\r\n if (this.canFilterByText3()) count++;\r\n if (this.canFilterByFlt1()) count++;\r\n if (this.canFilterByFlt2()) count++;\r\n if (this.canFilterByFlt3()) count++;\r\n if (this.canFilterByFlt4()) count++;\r\n if (this.canFilterByFlt5()) count++;\r\n return count > 1;\r\n }\r\n\r\n /**\r\n * Returns the filter group matching the given id, or `undefined` if not found.\r\n * @param id - The group id to look up.\r\n * @returns The matching `FilterGroup`, or `undefined`.\r\n */\r\n private getFilterGroup(id: number): FilterGroup | undefined {\r\n return this.filters()?.find(n => n.group === id);\r\n }\r\n\r\n /** Synchronises the filter bar display with the values currently stored in `currentFilter`. */\r\n syncFilter(): void {\r\n let g = this.getFilterGroup(Filters.FLT_1);\r\n if (g?.items) {\r\n this.currentFilter.flt1Name = undefined;\r\n if (this.currentFilter.flt1) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt1);\r\n if (gi) this.currentFilter.flt1Name = gi.titleSelected;\r\n else this.currentFilter.flt1 = undefined;\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_2);\r\n if (g?.items) {\r\n this.currentFilter.flt2Name = undefined;\r\n if (this.currentFilter.flt2) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt2);\r\n if (gi) this.currentFilter.flt2Name = gi.titleSelected;\r\n else this.currentFilter.flt2 = undefined;\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_3);\r\n if (g?.items) {\r\n this.currentFilter.flt3Name = undefined;\r\n if (this.currentFilter.flt3) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt3);\r\n if (gi) this.currentFilter.flt3Name = gi.titleSelected;\r\n else this.currentFilter.flt3 = undefined;\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_4);\r\n if (g?.items) {\r\n this.currentFilter.flt4Name = undefined;\r\n if (this.currentFilter.flt4) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt4);\r\n if (gi) this.currentFilter.flt4Name = gi.titleSelected;\r\n else this.currentFilter.flt4 = undefined;\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_5);\r\n if (g?.items) {\r\n this.currentFilter.flt5Name = undefined;\r\n if (this.currentFilter.flt5) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt5);\r\n if (gi) this.currentFilter.flt5Name = gi.titleSelected;\r\n else this.currentFilter.flt5 = undefined;\r\n }\r\n }\r\n\r\n this.text.set(this.currentFilter.text);\r\n this.text2.set(this.currentFilter.text2);\r\n this.text3.set(this.currentFilter.text3);\r\n this.cdr.markForCheck();\r\n }\r\n}\r\n","<div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"filterbox\"\r\n [class.filterbox-filtered]=\"currentFilter.filtered()\">\r\n <div fxFlex=\"*\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\">\r\n @if (canFilterByText() || canFilterByText2() || canFilterByText3()) {\r\n <div fxFlex.lt-sm=\"100\" fxFlexAlign=\"center\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill style=\"padding:4px;\">\r\n @if (canFilterByText()) {\r\n <mat-form-field [style.width]=\"textLength() ?? '100%'\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{textName()}}...</mat-label>\r\n <input matInput name=\"_text\" [ngModel]=\"text()\" (ngModelChange)=\"text.set($event)\" maxlength=\"100\" #_text=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text.set(undefined); applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (showTextSearchButton()) {\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Trova\" (click)=\"applyTextFilter();\"\r\n matTooltip=\"Trova\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (canFilterByText2()) {\r\n <mat-form-field \r\n [style.width]=\"text2Length() ?? '100%'\" [appearance]=\"appearance()\"\r\n subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{text2Name()}}...</mat-label>\r\n <input matInput name=\"_text2\" [ngModel]=\"text2()\" (ngModelChange)=\"text2.set($event)\" maxlength=\"100\" #_text2=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text2()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text2.set(undefined); applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (canFilterByText3()) {\r\n <mat-form-field [style.width]=\"text3Length() ?? '100%'\" [appearance]=\"appearance()\"\r\n subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{text3Name()}}...</mat-label>\r\n <input matInput name=\"_text3\" [ngModel]=\"text3()\" (ngModelChange)=\"text3.set($event)\" maxlength=\"100\" #_text3=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text3()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text3.set(undefined); applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div fxFlex.lt-sm=\"100\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n @if (canFilterByFlt1() && flt1()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt1()!.tooltip || 'Filtra per ' + flt1()!.title\"\r\n [attr.aria-label]=\"flt1()!.tooltip || 'Filtra per ' + flt1()!.title\" \r\n (click)=\"applyFilterAction(1, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span>{{flt1()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt1) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(1, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt1() && flt1()?.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt1()!.tooltip || 'Filtra per ' + flt1()!.title\"\r\n [attr.aria-label]=\"flt1()!.tooltip || 'Filtra per ' + flt1()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt1\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span>{{flt1()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt1=\"matMenu\">\r\n @for (f of flt1()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt1()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt2() && flt2()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt2()!.tooltip || 'Filtra per ' + flt2()!.title\"\r\n [attr.aria-label]=\"flt2()!.tooltip || 'Filtra per ' + flt2()!.title\" \r\n (click)=\"applyFilterAction(2, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span>{{flt2()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt2) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(2, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt2() && flt2()?.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt2()!.tooltip || 'Filtra per ' + flt2()!.title\"\r\n [attr.aria-label]=\"flt2()!.tooltip || 'Filtra per ' + flt2()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt2\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span>{{flt2()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt2=\"matMenu\">\r\n @for (f of flt2()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt2()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt3() && flt3()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt3()!.tooltip || 'Filtra per ' + flt3()!.title\"\r\n [attr.aria-label]=\"flt3()!.tooltip || 'Filtra per ' + flt3()!.title\" \r\n (click)=\"applyFilterAction(3, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span>{{flt3()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt3) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(3, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt3() && flt3()?.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt3()!.tooltip || 'Filtra per ' + flt3()!.title\"\r\n [attr.aria-label]=\"flt3()!.tooltip || 'Filtra per ' + flt3()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt3\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span>{{flt3()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt3=\"matMenu\">\r\n @for (f of flt3()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt3()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt4() && flt4()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt4()!.tooltip || 'Filtra per ' + flt4()!.title\"\r\n [attr.aria-label]=\"flt4()!.tooltip || 'Filtra per ' + flt4()!.title\" \r\n (click)=\"applyFilterAction(4, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span>{{flt4()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt4) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(4, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt4() && flt4()?.items) {\r\n <button fxFlexAlign=\"center\" class=\"filterbox-button\" type=\"button\" mat-button [matTooltip]=\"flt4()!.tooltip || 'Filtra per ' + flt4()!.title\"\r\n [attr.aria-label]=\"flt4()!.tooltip || 'Filtra per ' + flt4()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt4\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span>{{flt4()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt4=\"matMenu\">\r\n @for (f of flt4()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt4()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt5() && flt5()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt5()!.tooltip || 'Filtra per ' + flt5()!.title\"\r\n [attr.aria-label]=\"flt5()!.tooltip || 'Filtra per ' + flt5()!.title\" \r\n (click)=\"applyFilterAction(5, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span>{{flt5()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt5) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(5, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt5() && flt5()?.items) {\r\n <button fxFlexAlign=\"center\" class=\"filterbox-button\" type=\"button\" mat-button [matTooltip]=\"flt5()!.tooltip || 'Filtra per ' + flt5()!.title\"\r\n [attr.aria-label]=\"flt5()!.tooltip || 'Filtra per ' + flt5()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt5\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span>{{flt5()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt5=\"matMenu\">\r\n @for (f of flt5()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt5()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n @if (currentFilter.filtered() && canClearAllFilters()) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera tutti i filtri\" aria-label=\"Azzera tutti i filtri\"\r\n (click)=\"clearAllFilters()\">\r\n <mat-icon>filter_alt_off</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, model, output, signal, viewChild } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { INode, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { MatTree, MatTreeModule } from '@angular/material/tree';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\n\r\ninterface TaxonomyMaps {\r\n parentMap: Map<string, INode>;\r\n depthMap: Map<string, number>;\r\n nodeMap: Map<string, INode>;\r\n}\r\n\r\n@Component({\r\n selector: 'tree-picker',\r\n templateUrl: './tree-picker.component.html',\r\n styleUrls: ['./tree-picker.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatTreeModule, MatCheckboxModule, MatIconModule, MatTabsModule, MatChipsModule,\r\n MatButtonModule, MatTooltipModule, MatFormFieldModule, MatInputModule, FormsModule, FlexLayoutModule, SafeHtmlPipe]\r\n})\r\nexport class TreePickerComponent {\r\n /** Nested tree data to display. */\r\n readonly tree = input<INode[]>([]);\r\n\r\n /** Currently selected node ids. Supports two-way binding via [(selection)]. */\r\n readonly selection = model<string[]>([]);\r\n\r\n /** When true, checkboxes and chip remove buttons are disabled (mirrors Material convention). */\r\n readonly disabled = input<boolean>(false);\r\n\r\n /** Description to display when no selection is made. */\r\n readonly descriptionEmpty = input<string>('<span>Nessuna selezione: vengono inclusi <strong>tutti gli elementi</strong>.</span>');\r\n\r\n /** Maximum number of tree levels to display (default: 3). */\r\n readonly maxDepth = input<number>(3);\r\n\r\n /**\r\n * List of node IDs at depth >= maxDepth that unlock selection for themselves\r\n * and all their descendants, regardless of depth.\r\n */\r\n readonly maxDepthOverrides = input<string[]>([]);\r\n\r\n /**\r\n * Number of levels to auto-expand on load.\r\n * 0 or undefined = only top level visible (no expansion);\r\n * 1 = expand depth-0 nodes; 2 = expand depth-0 and depth-1 nodes; etc.\r\n * Must be less than maxDepth.\r\n */\r\n readonly minDepth = input<number | undefined>(undefined);\r\n\r\n /**\r\n * Emits the count of visible selected nodes whenever the selection changes.\r\n * Emits 0 when nothing is selected (meaning all items are implicitly included).\r\n */\r\n readonly selectionCount = output<number>();\r\n\r\n /** Emits void whenever the user changes the selection (toggle, remove, clear). */\r\n readonly changed = output<void>();\r\n\r\n private readonly _treeRef = viewChild(MatTree<INode>);\r\n private readonly _elRef = inject(ElementRef);\r\n\r\n /**\r\n * Set of all node IDs selectable via overrides: each listed root and all its descendants.\r\n * Recomputed whenever the tree data or the override list changes.\r\n */\r\n private readonly _overrideSubtreeSet = computed(() => {\r\n const overrideIds = new Set(this.maxDepthOverrides());\r\n const maps = this._maps();\r\n const result = new Set<string>();\r\n for (const id of overrideIds) {\r\n const root = maps.nodeMap.get(id);\r\n if (!root) continue;\r\n const addSubtree = (n: INode): void => {\r\n result.add(n.id);\r\n for (const child of (n.children ?? [])) addSubtree(child as INode);\r\n };\r\n addSubtree(root);\r\n }\r\n return result;\r\n });\r\n\r\n /** All three maps rebuilt lazily as a single computed whenever taxonomy changes. */\r\n private readonly _maps = computed<TaxonomyMaps>(() => {\r\n const parentMap = new Map<string, INode>();\r\n const depthMap = new Map<string, number>();\r\n const nodeMap = new Map<string, INode>();\r\n const build = (nodes: INode[], parent?: INode, depth = 0): void => {\r\n for (const node of nodes) {\r\n depthMap.set(node.id, depth);\r\n nodeMap.set(node.id, node);\r\n if (parent) parentMap.set(node.id, parent);\r\n if (node.children?.length) build(node.children as INode[], node, depth + 1);\r\n }\r\n };\r\n build(this.tree());\r\n return { parentMap, depthMap, nodeMap };\r\n });\r\n\r\n /** O(1) set of selected ids, rebuilt only when selection changes. */\r\n private readonly _selectedSet = computed(() => new Set(this.selection()));\r\n\r\n /** True when at least one node is explicitly selected. */\r\n protected readonly hasSelection = computed(() => this.selection().length > 0);\r\n\r\n /** Count of selected nodes within selectable levels (depth < maxDepth or in overrides), shown in the tab label. */\r\n protected readonly selectedVisibleCount = computed(() =>\r\n this.selection().filter(id => {\r\n const node = this._maps().nodeMap.get(id);\r\n return node ? this._isSelectableNode(node) : false;\r\n }).length\r\n );\r\n\r\n readonly treeChildrenAccessor = (node: INode): INode[] => {\r\n return (node.children ?? []) as INode[];\r\n };\r\n\r\n readonly hasChild = (_: number, node: INode): boolean =>\r\n !!(node.children?.length);\r\n\r\n /** Returns true when the node can be selected: depth < maxDepth or explicitly listed in maxDepthOverrides. */\r\n protected isSelectable(node: INode): boolean {\r\n return this._isSelectableNode(node);\r\n }\r\n\r\n private _isSelectableNode(node: INode): boolean {\r\n const depth = this._maps().depthMap.get(node.id) ?? 0;\r\n return depth < this.maxDepth() || this._overrideSubtreeSet().has(node.id);\r\n }\r\n\r\n\r\n /** Current filter text. */\r\n protected readonly filterText = signal<string>('');\r\n /** Nodes matching the current filter text, in nodeMap iteration order. */\r\n protected readonly filteredItems = signal<INode[]>([]);\r\n /** Index of the currently highlighted filtered node (-1 = none). */\r\n protected readonly filterIndex = signal(-1);\r\n /** The currently highlighted filtered node, or null. */\r\n protected readonly filteredNode = computed<INode | null>(() => {\r\n const idx = this.filterIndex();\r\n return idx >= 0 ? (this.filteredItems()[idx] ?? null) : null;\r\n });\r\n\r\n constructor() {\r\n // Expand nodes up to minDepth whenever new taxonomy data arrives\r\n effect(() => {\r\n const maps = this._maps();\r\n const expandLevels = this.minDepth() ?? 0;\r\n setTimeout(() => {\r\n const tree = this._treeRef();\r\n if (!tree) return;\r\n tree.collapseAll();\r\n if (expandLevels <= 0) return;\r\n maps.depthMap.forEach((depth, id) => {\r\n if (depth < expandLevels) {\r\n const node = maps.nodeMap.get(id);\r\n if (node) tree.expand(node);\r\n }\r\n });\r\n });\r\n });\r\n // Emit visible selection count on every selection change\r\n effect(() => {\r\n this.selectionCount.emit(this.selectedVisibleCount());\r\n });\r\n }\r\n\r\n /** Expands all visible nodes in the tree. */\r\n protected expandAll(): void {\r\n this._treeRef()?.expandAll();\r\n }\r\n\r\n /** Collapses all nodes in the tree. */\r\n protected collapseAll(): void {\r\n this._treeRef()?.collapseAll();\r\n }\r\n\r\n /** Clears the entire selection. */\r\n protected clearAll(): void {\r\n this.selection.set([]);\r\n this.changed.emit();\r\n }\r\n\r\n /** Searches nodes by text and moves to the first match. */\r\n protected doFilter(): void {\r\n const text = this.filterText().trim().toLowerCase();\r\n if (text.length < 3) {\r\n this.filteredItems.set([]);\r\n this.filterIndex.set(-1);\r\n return;\r\n }\r\n const matches = Array.from(this._maps().nodeMap.values())\r\n .filter(n => n.name?.toLowerCase().includes(text));\r\n this.filteredItems.set(matches);\r\n const idx = matches.length > 0 ? 0 : -1;\r\n this.filterIndex.set(idx);\r\n if (idx >= 0) this._scrollToFiltered(idx, matches);\r\n }\r\n\r\n /** Clears the filter and restores the original tree state. */\r\n protected clearFilter(): void {\r\n this.filterText.set('');\r\n this.filteredItems.set([]);\r\n this.filterIndex.set(-1);\r\n }\r\n\r\n /** Moves to the next matching node, cycling back to the first. */\r\n protected nextFiltered(): void {\r\n const items = this.filteredItems();\r\n if (!items.length) return;\r\n const next = (this.filterIndex() + 1) % items.length;\r\n this.filterIndex.set(next);\r\n this._scrollToFiltered(next, items);\r\n }\r\n\r\n /** Returns true when the node is the currently highlighted filter match. */\r\n protected isFilteredNode(node: INode): boolean {\r\n return this.filteredNode()?.id === node.id;\r\n }\r\n\r\n /** Expands ancestors of the target node and scrolls it into view. */\r\n private _scrollToFiltered(index: number, items: INode[]): void {\r\n const node = items[index];\r\n if (!node) return;\r\n const tree = this._treeRef();\r\n if (tree) {\r\n let parent = this._maps().parentMap.get(node.id);\r\n while (parent) {\r\n tree.expand(parent);\r\n parent = this._maps().parentMap.get(parent.id);\r\n }\r\n }\r\n setTimeout(() => {\r\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\r\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\r\n });\r\n }\r\n\r\n /**\r\n * Returns true when the node is in the active selection.\r\n * @param node - tree node to check\r\n * @returns true if selected\r\n */\r\n protected isSelected(node: INode): boolean {\r\n return this._selectedSet().has(node.id);\r\n }\r\n\r\n /**\r\n * Returns true when a subset (but not all) of the node's descendants are selected,\r\n * producing the indeterminate checkbox state.\r\n * @param node - tree node to evaluate\r\n * @returns true if the node is in a partial-selection (indeterminate) state\r\n */\r\n protected isIndeterminate(node: INode): boolean {\r\n if (!node.children?.length) return false;\r\n const descendants = this._getSelectableDescendants(node);\r\n const set = this._selectedSet();\r\n const count = descendants.filter(d => set.has(d.id)).length;\r\n return count > 0 && count < descendants.length;\r\n }\r\n\r\n /**\r\n * Toggles the node and all its descendants; then syncs the ancestor chain.\r\n * @param node - the node that was clicked\r\n */\r\n protected toggleNode(node: INode): void {\r\n this.selection.update(current => {\r\n const set = new Set(current);\r\n if (set.has(node.id)) {\r\n set.delete(node.id);\r\n } else {\r\n set.add(node.id);\r\n }\r\n this._syncParentsInSet(node, set);\r\n return Array.from(set);\r\n });\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Deselects the node and all its descendants. Called by the chip remove button.\r\n * @param node - the node to remove from the selection\r\n */\r\n protected removeNode(node: INode): void {\r\n this.selection.update(current => {\r\n const set = new Set(current);\r\n set.delete(node.id);\r\n this._syncParentsInSet(node, set);\r\n return Array.from(set);\r\n });\r\n this.changed.emit();\r\n }\r\n\r\n /**\r\n * Returns the INode for the given id, or undefined if not found.\r\n * @param id - node id to look up\r\n * @returns the matching INode\r\n */\r\n protected nodeById(id: string): INode | undefined {\r\n return this._maps().nodeMap.get(id);\r\n }\r\n\r\n /**\r\n * Returns true when the node at the given id is within the visible depth range\r\n * and should appear in the chip list.\r\n * @param id - node id to check\r\n * @returns true if the node depth is less than maxDepth\r\n */\r\n protected isChipVisible(id: string): boolean {\r\n const node = this._maps().nodeMap.get(id);\r\n return node ? this._isSelectableNode(node) : false;\r\n }\r\n\r\n /**\r\n * Returns only the selectable descendants of node (depth < maxDepth or in overrides),\r\n * used for indeterminate state and parent auto-selection logic.\r\n * @param node - root of the subtree to traverse\r\n * @returns flat array of selectable descendant INodes\r\n */\r\n private _getSelectableDescendants(node: INode): INode[] {\r\n const result: INode[] = [];\r\n for (const child of (node.children ?? [])) {\r\n const c = child as INode;\r\n if (this._isSelectableNode(c)) result.push(c);\r\n result.push(...this._getSelectableDescendants(c));\r\n }\r\n return result;\r\n }\r\n\r\n /**\r\n * Walks up the ancestor chain from node, selecting a parent only when all\r\n * its descendants are in the set, deselecting it otherwise.\r\n * @param node - starting node for the upward traversal\r\n * @param set - mutable selection set updated in place\r\n */\r\n private _syncParentsInSet(node: INode, set: Set<string>): void {\r\n let parent = this._maps().parentMap.get(node.id);\r\n while (parent) {\r\n const descendants = this._getSelectableDescendants(parent);\r\n if (descendants.length > 0 && descendants.every(d => set.has(d.id))) {\r\n set.add(parent.id);\r\n } else {\r\n set.delete(parent.id);\r\n }\r\n parent = this._maps().parentMap.get(parent.id);\r\n }\r\n }\r\n \r\n}\r\n","<mat-tab-group class=\"taxonomy-picker-tabs\" style=\"height:100%\">\r\n <mat-tab style=\"overflow-x: hidden !important; height: 100%\">\r\n <ng-template mat-tab-label>\r\n Seleziona\r\n <mat-icon\r\n style=\"font-size:16px;height:16px;width:16px;margin-left:4px;vertical-align:middle;color:var(--mat-sys-primary)\"\r\n [matTooltip]=\"'Nessuna selezione = tutti gli argomenti inclusi;\\r\\nOgni elemento selezionato include sempre tutti i suoi sottoelementi'\"\r\n matTooltipPosition=\"above\">\r\n info\r\n </mat-icon>\r\n </ng-template>\r\n <div fxLayout=\"column\" fxFill style=\"overflow: hidden; height: 100%;\">\r\n <div fxFlex>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex fxHide.xs>\r\n <mat-form-field style=\"width:200px; padding: 8px 0px\" appearance=\"outline\"\r\n subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" (keyup)=\"doFilter()\" matInput [ngModel]=\"filterText()\"\r\n (ngModelChange)=\"filterText.set($event)\"\r\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\r\n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\">\r\n @if (filterText()) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (filteredItems().length > 0) {\r\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\r\n </div>\r\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <button mat-icon-button (click)=\"nextFiltered()\">\r\n <mat-icon aria-label=\"Vai al prossimo\"\r\n matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end center\">\r\n <button mat-icon-button [matTooltip]=\"'Espandi tutto'\" (click)=\"expandAll()\">\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n <button mat-icon-button [matTooltip]=\"'Comprimi tutto'\" (click)=\"collapseAll()\">\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n <button mat-icon-button [matTooltip]=\"'Azzera selezione'\" [disabled]=\"!hasSelection()\"\r\n (click)=\"clearAll()\">\r\n <mat-icon>deselect</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow-y: auto;\">\r\n <mat-tree [dataSource]=\"tree()\" [childrenAccessor]=\"treeChildrenAccessor\" class=\"tree\">\r\n <!-- Leaf node -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node\" [class.tree-node-filtered]=\"filteredNode()?.id === node.id\"\r\n [class.tree-node-no-select]=\"!isSelectable(node)\"\r\n [attr.data-node-id]=\"node.id\">\r\n <button mat-icon-button disabled style=\"visibility: hidden\"></button>\r\n @if (isSelectable(node)) {\r\n <mat-checkbox [checked]=\"isSelected(node)\" [disabled]=\"disabled()\" (change)=\"toggleNode(node)\">\r\n <span class=\"small\">{{node.name}}</span>\r\n </mat-checkbox>\r\n } @else {\r\n <div class=\"tree-node-label-only\">\r\n <span class=\"small\">{{node.name}}</span>\r\n </div>\r\n }\r\n </mat-tree-node>\r\n <!-- Expandable node with children -->\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" #treeNode=\"matTreeNode\" class=\"tree-node\"\r\n [class.tree-node-filtered]=\"filteredNode()?.id === node.id\"\r\n [class.tree-node-no-select]=\"!isSelectable(node)\"\r\n [attr.data-node-id]=\"node.id\">\r\n <button mat-icon-button matTreeNodeToggle>\r\n <mat-icon>{{treeNode.isExpanded ? 'expand_more' : 'chevron_right'}}</mat-icon>\r\n </button>\r\n @if (isSelectable(node)) {\r\n <mat-checkbox [checked]=\"isSelected(node)\" [indeterminate]=\"isIndeterminate(node)\"\r\n [disabled]=\"disabled()\" (change)=\"toggleNode(node)\">\r\n <span class=\"small\">{{node.name}}</span>\r\n </mat-checkbox>\r\n } @else {\r\n <div class=\"tree-node-label-only\">\r\n <span class=\"small\">{{node.name}}</span>\r\n </div>\r\n }\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-tab>\r\n <mat-tab [label]=\"hasSelection() ? 'Selezionati (' + selectedVisibleCount() + ')' : 'Selezionati (tutti)'\"\r\n style=\"height: 100%;\">\r\n <div fxLayout=\"column\" fxFill style=\"overflow: hidden; height: 100%;\">\r\n <div fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"8px\" style=\"padding:12px\">\r\n @if (!hasSelection()) {\r\n <mat-icon>info</mat-icon>\r\n <span [innerHTML]=\"descriptionEmpty() | safeHtml\"></span>\r\n } @else {\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-button color=\"warn\" style=\"margin-left:auto\" (click)=\"clearAll()\">\r\n <mat-icon>deselect</mat-icon> Azzera tutto\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow-y: auto; padding-bottom: 12px;\">\r\n <mat-chip-set>\r\n @for (id of selection(); track id) {\r\n @let node = nodeById(id);\r\n @if (node && isChipVisible(id)) {\r\n <mat-chip (removed)=\"removeNode(node)\" style=\"max-width: 280px;\" [matTooltip]=\"node.name\">\r\n {{node.name}}\r\n @if (!disabled()) {\r\n <button matChipRemove matTooltip=\"Elimina\"><mat-icon>cancel</mat-icon></button>\r\n }\r\n </mat-chip>\r\n }\r\n }\r\n </mat-chip-set>\r\n </div>\r\n </div>\r\n </mat-tab>\r\n</mat-tab-group>","import { ChangeDetectionStrategy, Component, DestroyRef, NgZone, afterNextRender, inject, input, output, signal } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { EnvironmentService } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService } from '../../../services/dialog.service';\r\nimport { MSAL_GUARD_CONFIG, MSAL_INSTANCE, MSAL_INTERCEPTOR_CONFIG, MsalBroadcastService, MsalGuardConfiguration, MsalInterceptorConfiguration, MsalService } from '@azure/msal-angular';\r\nimport { AuthenticationResult, BrowserCacheLocation, EventMessage, EventType, IPublicClientApplication, InteractionType, PublicClientApplication } from '@azure/msal-browser';\r\nimport { filter } from 'rxjs';\r\nimport { LoginOAuthResult } from '../../../definitions';\r\n\r\nexport function MSALInstanceFactory(environment: EnvironmentService): IPublicClientApplication {\r\n return new PublicClientApplication({\r\n auth: {\r\n clientId: \"6b2c080f-6ab0-4511-a9df-0bce69db5833\",\r\n authority: \"https://login.microsoftonline.com/common\",\r\n redirectUri: environment.appLoginRedirectUri,\r\n },\r\n cache: {\r\n cacheLocation: BrowserCacheLocation.LocalStorage\r\n }\r\n });\r\n}\r\n\r\nexport function MSALInterceptorConfigFactory(environment: EnvironmentService): MsalInterceptorConfiguration {\r\n\r\n return {\r\n interactionType: InteractionType.Popup,\r\n protectedResourceMap: new Map([\r\n [environment.appServiceLoginUri, [\"api://6b2c080f-6ab0-4511-a9df-0bce69db5833/AngularSPAAuthScope\"]],\r\n [\"https://graph.microsoft.com/v2.0/me\", [\"user.read\"]],\r\n ])\r\n };\r\n}\r\n\r\nexport function MSALGuardConfigFactory(): MsalGuardConfiguration {\r\n return {\r\n interactionType: InteractionType.Popup,\r\n authRequest: {\r\n scopes: [\"user.read\"]\r\n }\r\n };\r\n}\r\n\r\n@Component({\r\n selector: 'login-oauth',\r\n templateUrl: './login-oauth.component.html',\r\n styleUrls: ['./login-oauth.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [\r\n {\r\n provide: MSAL_INSTANCE,\r\n deps: [EnvironmentService],\r\n useFactory: MSALInstanceFactory\r\n },\r\n {\r\n provide: MSAL_GUARD_CONFIG,\r\n useFactory: MSALGuardConfigFactory\r\n },\r\n {\r\n provide: MSAL_INTERCEPTOR_CONFIG,\r\n deps: [EnvironmentService],\r\n useFactory: MSALInterceptorConfigFactory\r\n },\r\n MsalService,\r\n MsalBroadcastService],\r\n imports: [\r\n MatButtonModule\r\n ]\r\n})\r\nexport class LoginOAuthComponent {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly msalBroadcastService = inject(MsalBroadcastService);\r\n private readonly msaLService = inject(MsalService);\r\n private readonly dialogService = inject(DialogService);\r\n private readonly ngZone = inject(NgZone);\r\n /** Emitted when OAuth authentication succeeds. */\r\n readonly success = output<LoginOAuthResult>();\r\n /** Whether to show the introductory info panel. */\r\n readonly showInfo = input<boolean>(true);\r\n /** Application name displayed in the info panel. */\r\n readonly applicationName = input<string>();\r\n /** Whether to trigger `initialize()` automatically on mount. */\r\n readonly autoInitialize = input<boolean>(false);\r\n /** Whether the Microsoft login button is shown. */\r\n readonly allowMicrosoft = input<boolean>(true);\r\n /** Whether the Google login button is shown. */\r\n readonly allowGoogle = input<boolean>(true);\r\n protected readonly oauthReady = signal<boolean>(false);\r\n protected readonly oauthMicrosoftReady = signal<boolean>(false);\r\n protected readonly oauthGoogleReady = signal<boolean>(false);\r\n\r\n constructor() {\r\n\r\n this.msalBroadcastService.msalSubject$\r\n .pipe(\r\n filter((msg: EventMessage) =>\r\n msg.eventType === EventType.LOGOUT_FAILURE ||\r\n msg.eventType === EventType.ACQUIRE_TOKEN_FAILURE),\r\n takeUntilDestroyed(this.destroyRef),\r\n )\r\n .subscribe((r: EventMessage) => {\r\n if (r?.payload) {\r\n const error = r.payload as any;\r\n this.dialogService.error(error?.message ?? 'Errore di autenticazione Microsoft');\r\n }\r\n });\r\n\r\n afterNextRender(() => {\r\n if (this.autoInitialize()) {\r\n this.initialize();\r\n }\r\n });\r\n\r\n }\r\n\r\n /**\r\n * Initialize OAuth providers (Microsoft MSAL and Google GSI).\r\n * Safe to call multiple times — already-initialized providers are skipped.\r\n * Must be public so the host component can trigger it manually when `autoInitialize` is false.\r\n */\r\n initialize() {\r\n if (this.oauthMicrosoftReady() && this.oauthGoogleReady()) {\r\n return; // Both already loaded\r\n }\r\n this.oauthReady.set(true);\r\n\r\n // Load MS stack only if not already initialized\r\n if (!this.oauthMicrosoftReady()) {\r\n this.msaLService.initialize()\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => {\r\n this.oauthMicrosoftReady.set(true);\r\n });\r\n }\r\n\r\n // Load Google script only if not already initialized\r\n if (!this.oauthGoogleReady()) {\r\n const DSLScript = document.createElement('script');\r\n DSLScript.src = 'https://accounts.google.com/gsi/client';\r\n DSLScript.type = 'text/javascript';\r\n document.body.appendChild(DSLScript);\r\n document.body.removeChild(DSLScript);\r\n\r\n // @ts-ignore\r\n window.onGoogleLibraryLoad = () => {\r\n // initialize google account\r\n // @ts-ignore\r\n google.accounts.id.initialize({\r\n client_id: '71204983077-ag31h3bgt2udcbfr9nn84r9rni2k3snp.apps.googleusercontent.com',\r\n cancel_on_tap_outside: true,\r\n auto_select: false,\r\n callback: (r: any) => {\r\n this.ngZone.run(() => {\r\n this.success.emit({ type: 2, token: r.credential });\r\n });\r\n }\r\n });\r\n\r\n googleButtonWrapper = createFakeGoogleWrapper();\r\n\r\n this.oauthGoogleReady.set(true);\r\n };\r\n }\r\n }\r\n\r\n /**\r\n * Trigger a Microsoft (MSAL) login popup and acquire an access token on success.\r\n */\r\n protected loginMSAL() {\r\n // Clear any in-progress interaction flag that may have been left by a previous incomplete popup\r\n sessionStorage.removeItem('msal.interaction.status');\r\n\r\n this.msaLService.loginPopup()\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe({\r\n next: (r: AuthenticationResult) => {\r\n try {\r\n this.msaLService.instance.setActiveAccount(r.account);\r\n this.msaLService.acquireTokenSilent({\r\n scopes: [\r\n \"api://6b2c080f-6ab0-4511-a9df-0bce69db5833/AngularSPAAuthScope\"\r\n ],\r\n account: r.account\r\n }).pipe(takeUntilDestroyed(this.destroyRef)).subscribe({\r\n next: (tokenResult: AuthenticationResult) => {\r\n console.log(\"Token acquired!\");\r\n this.success.emit({ type: 1, token: tokenResult.accessToken });\r\n },\r\n error: (error: any) => {\r\n this.dialogService.error(error.message);\r\n }\r\n });\r\n } catch (error: any) {\r\n this.dialogService.error(error.message);\r\n }\r\n },\r\n error: (error: any) => {\r\n this.dialogService.error(error.message);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Trigger the hidden Google GSI button to open the Google sign-in flow.\r\n */\r\n protected loginGoogle() {\r\n // Use wrapper click to prevent Illegal invocation exception\r\n googleButtonWrapper.click();\r\n }\r\n}\r\n\r\nconst createFakeGoogleWrapper = () => {\r\n const googleLoginWrapper = document.createElement(\"div\");\r\n // Or you can simple hide it in CSS rule for custom-google-button\r\n googleLoginWrapper.style.display = \"none\";\r\n googleLoginWrapper.classList.add(\"custom-google-button\");\r\n\r\n // Add the wrapper to body\r\n document.body.appendChild(googleLoginWrapper);\r\n\r\n // Use GSI javascript api to render the button inside our wrapper\r\n // You can ignore the properties because this button will not appear\r\n // @ts-ignore\r\n window.google.accounts.id.renderButton(googleLoginWrapper, {\r\n type: \"icon\",\r\n width: \"200\",\r\n });\r\n\r\n const googleLoginWrapperButton =\r\n googleLoginWrapper.querySelector(\"div[role=button]\");\r\n\r\n return {\r\n click: () => {\r\n // @ts-ignore\r\n googleLoginWrapperButton.click();\r\n },\r\n };\r\n};\r\nvar googleButtonWrapper: any;\r\n\r\n","<div class=\"login-oauth\">\r\n @if(showInfo()) {\r\n <div class=\"message\">\r\n <p>Questa sezione consente di accedere al servizio utilizzando un provider OAuth2.</p>\r\n @if(applicationName()) {\r\n <p>La email utilizzata deve essere collegata ad un utente valido di {{applicationName()}} e dei servizi ad esso\r\n connessi.</p>\r\n }\r\n </div>\r\n }\r\n @if (allowMicrosoft()) {\r\n <div class=\"button\">\r\n <button mat-flat-button (click)=\"loginMSAL()\" aria-label=\"Effettua accesso\"\r\n [disabled]=\"!oauthMicrosoftReady()\" style=\"width: 100%;\">\r\n Accedi con Microsoft</button>\r\n </div>\r\n }\r\n @if (allowGoogle()) {\r\n <div class=\"button\">\r\n <button mat-flat-button (click)=\"loginGoogle()\" style=\"width: 100%;\"\r\n aria-label=\"Effettua accesso\" [disabled]=\"!oauthGoogleReady()\">\r\n Accedi con Google</button>\r\n </div>\r\n }\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, input } from '@angular/core';\r\nimport { broadcastResponseToMainFrame } from '@azure/msal-browser/redirect-bridge';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\n\r\n\r\n@Component({\r\n selector: 'app-login-oauth-ok-ms',\r\n styleUrls: ['./login-oauth-ok-ms.component.scss'],\r\n templateUrl: './login-oauth-ok-ms.component.html',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexModule, MatProgressBarModule]\r\n})\r\nexport class LoginOAuthOkMSComponent {\r\n\r\n /** Message displayed while the popup is completing authentication. */\r\n readonly message = input<string>('Accesso in corso...');\r\n\r\n constructor() {\r\n // MSAL v5 popup flow: parse the auth response from the URL and send\r\n // it back to the opener window via BroadcastChannel, then close the popup.\r\n broadcastResponseToMainFrame();\r\n }\r\n}\r\n","<div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFill>\r\n <div class=\"login-auto fade-in\">\r\n <div class=\"message\">\r\n Autenticazione in corso...\r\n </div>\r\n <mat-progress-bar mode=\"indeterminate\" color=\"primary\"></mat-progress-bar>\r\n </div>\r\n</div>\r\n","import { Directive, ElementRef, Renderer2, afterNextRender, inject, input } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: \"[resizeColumn]\",\r\n standalone: true\r\n})\r\nexport class ResizeTableColumnDirective {\r\n /** Whether this column is resizable. Bound via the `resizeColumn` attribute. */\r\n readonly resizable = input<boolean>(undefined, { alias: \"resizeColumn\" });\r\n /** Zero-based index of this column in the table, used to resize body cells. */\r\n readonly index = input<number>(undefined);\r\n private readonly renderer = inject(Renderer2);\r\n private readonly elementRef = inject(ElementRef);\r\n private startX: number = 0;\r\n private startWidth: number = 0;\r\n private readonly column: HTMLElement = this.elementRef.nativeElement;\r\n private table: HTMLElement | undefined;\r\n private pressed: boolean = false;\r\n\r\n constructor() {\r\n afterNextRender(() => {\r\n if (this.resizable()) {\r\n const row = this.renderer.parentNode(this.column);\r\n const thead = this.renderer.parentNode(row);\r\n this.table = this.renderer.parentNode(thead);\r\n const resizer = this.renderer.createElement('span');\r\n this.renderer.addClass(resizer, 'resize-holder');\r\n this.renderer.appendChild(this.column, resizer);\r\n this.renderer.listen(resizer, 'mousedown', this.onMouseDown);\r\n this.renderer.listen(this.table, 'mousemove', this.onMouseMove);\r\n this.renderer.listen('document', 'mouseup', this.onMouseUp);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Record the drag start position and initial column width.\r\n * @param e - The mousedown event.\r\n */\r\n onMouseDown = (e: MouseEvent): void => {\r\n this.pressed = true;\r\n this.startX = e.pageX;\r\n this.startWidth = this.column.offsetWidth;\r\n };\r\n\r\n /**\r\n * Resize the column header and all body cells while dragging.\r\n * @param e - The mousemove event.\r\n */\r\n onMouseMove = (e: MouseEvent): void => {\r\n const offset = 35;\r\n if (this.pressed && e.buttons && this.table) {\r\n this.renderer.addClass(this.table, 'resizing');\r\n\r\n const width = this.startWidth + (e.pageX - this.startX - offset);\r\n const colIndex = this.index();\r\n\r\n const tableCells = Array.from(this.table.querySelectorAll('.mat-row')).map(\r\n (row: any) => row.querySelectorAll('.mat-cell').item(colIndex)\r\n );\r\n\r\n this.renderer.setStyle(this.column, 'width', `${width}px`);\r\n\r\n for (const cell of tableCells) {\r\n this.renderer.setStyle(cell, 'width', `${width}px`);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * End the drag and remove the resizing CSS class from the table.\r\n */\r\n onMouseUp = (): void => {\r\n if (this.pressed && this.table) {\r\n this.pressed = false;\r\n this.renderer.removeClass(this.table, 'resizing');\r\n }\r\n };\r\n}\r\n","/**\n * @file breakpoints.ts\n * Bootstrap 5 breakpoint definitions as CDK-compatible MediaQuery strings.\n *\n * CDK's BreakpointObserver already handles the actual matching — we only define aliases.\n *\n * Bootstrap 5 grid tiers:\n * xs < 576px\n * sm >= 576px\n * md >= 768px\n * lg >= 992px\n * xl >= 1200px\n * xxl >= 1400px\n *\n * Supported alias families:\n *\n * Canonical ranges xs | sm | md | lg | xl | xxl\n * \"and up\" sm-up | md-up | lg-up | xl-up | xxl-up\n * gt-xs | gt-sm | gt-md | gt-lg | gt-xl (ngx-layout compat)\n * \"and down\" sm-down | md-down | lg-down | xl-down\n * lt-sm | lt-md | lt-lg | lt-xl | lt-xxl (ngx-layout compat)\n *\n * The lt-* / gt-* aliases are exact mirrors of the -down / -up aliases.\n * They share the same media query string so CDK deduplicates them internally.\n */\n\nimport { InjectionToken } from '@angular/core';\n\nexport const BS5_BREAKPOINTS: Record<string, string> = {\n // ── Canonical ranges ────────────────────────────────────────────────────────\n 'xs': '(max-width: 575.98px)',\n 'sm': '(min-width: 576px) and (max-width: 767.98px)',\n 'md': '(min-width: 768px) and (max-width: 991.98px)',\n 'lg': '(min-width: 992px) and (max-width: 1199.98px)',\n 'xl': '(min-width: 1200px) and (max-width: 1399.98px)',\n 'xxl': '(min-width: 1400px)',\n\n // ── \"and up\" — Bootstrap style ───────────────────────────────────────────────\n 'sm-up': '(min-width: 576px)',\n 'md-up': '(min-width: 768px)',\n 'lg-up': '(min-width: 992px)',\n 'xl-up': '(min-width: 1200px)',\n 'xxl-up': '(min-width: 1400px)',\n\n // ── \"and up\" — ngx-layout gt-* style ────────────────────────────────────────\n 'gt-xs': '(min-width: 576px)',\n 'gt-sm': '(min-width: 768px)',\n 'gt-md': '(min-width: 992px)',\n 'gt-lg': '(min-width: 1200px)',\n 'gt-xl': '(min-width: 1400px)',\n\n // ── \"and down\" — Bootstrap style ─────────────────────────────────────────────\n 'sm-down': '(max-width: 767.98px)',\n 'md-down': '(max-width: 991.98px)',\n 'lg-down': '(max-width: 1199.98px)',\n 'xl-down': '(max-width: 1399.98px)',\n\n // ── \"and down\" — ngx-layout lt-* style ──────────────────────────────────────\n // lt-sm = everything below sm = xs only\n 'lt-sm': '(max-width: 575.98px)',\n // lt-md = everything below md = xs + sm\n 'lt-md': '(max-width: 767.98px)',\n // lt-lg = everything below lg = xs + sm + md\n 'lt-lg': '(max-width: 991.98px)',\n // lt-xl = everything below xl = xs + sm + md + lg\n 'lt-xl': '(max-width: 1199.98px)',\n // lt-xxl = everything below xxl = xs through xl\n 'lt-xxl': '(max-width: 1399.98px)',\n};\n\n/** InjectionToken — override to customise or extend breakpoints */\nexport const LAYOUT_BREAKPOINTS = new InjectionToken<Record<string, string>>(\n 'LAYOUT_BREAKPOINTS',\n { providedIn: 'root', factory: () => BS5_BREAKPOINTS }\n);\n\n/** Ordered canonical aliases, smallest → largest (used for mobile-first cascade) */\nexport const CANONICAL_ALIASES = ['xs', 'sm', 'md', 'lg', 'xl', 'xxl'] as const;\nexport type BreakpointAlias = typeof CANONICAL_ALIASES[number];\n\n/**\n * All non-canonical alias families.\n * Used by ResponsiveBaseDirective.resolveNonCanonical() to handle lt-* / gt-* / *-up / *-down\n * inputs without polluting the mobile-first cascade logic.\n */\nexport const ALIAS_FAMILIES = {\n up: ['sm-up', 'md-up', 'lg-up', 'xl-up', 'xxl-up'],\n down: ['sm-down', 'md-down', 'lg-down', 'xl-down'],\n gt: ['gt-xs', 'gt-sm', 'gt-md', 'gt-lg', 'gt-xl'],\n lt: ['lt-sm', 'lt-md', 'lt-lg', 'lt-xl', 'lt-xxl'],\n} as const;\n","/**\n * @file media-observer.service.ts (v2 — optimized)\n *\n * ── Optimizations over v1 ─────────────────────────────────────────────────\n *\n * ✅ Single bo.observe() call for all 6 canonical breakpoints.\n * CDK internally uses one MediaQueryList listener per query string.\n * Calling observe() N times creates N listeners — here we create only one.\n *\n * ✅ currentBp$ is shared (shareReplay(1)): all subscribers (effects in\n * directives) receive the same value without redundant re-computations.\n *\n * ✅ The currentBp Signal is derived from the Observable via toSignal():\n * Angular manages the subscription internally and tears it down with root.\n *\n * ✅ isActive() delegates to bo.isMatched() — synchronous, O(1), no extra observer.\n *\n * ✅ isActive$() reuses the shared currentBp$ stream instead of opening\n * a new bo.observe() for every requested alias.\n */\n\nimport { inject, Signal, Service } from '@angular/core';\nimport { BreakpointObserver } from '@angular/cdk/layout';\nimport { Observable, map, distinctUntilChanged, shareReplay } from 'rxjs';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { LAYOUT_BREAKPOINTS, CANONICAL_ALIASES, BreakpointAlias } from './breakpoints';\n\n@Service()\nexport class MediaObserver {\n private readonly bo = inject(BreakpointObserver);\n private readonly bp = inject(LAYOUT_BREAKPOINTS);\n\n /**\n * A SINGLE CDK observation for all 6 canonical breakpoints.\n * Each breakpoint change emits → we resolve the current alias → shared.\n *\n * shareReplay(1): all subscribers (N directives in the DOM) receive\n * the same value without N separate recomputations.\n */\n readonly currentBp$: Observable<BreakpointAlias> = this.bo\n .observe(CANONICAL_ALIASES.map(a => this.bp[a]))\n .pipe(\n map(() => this._resolve()),\n distinctUntilChanged(), // does not emit if the breakpoint hasn't actually changed\n shareReplay(1) // multicast: N directives, 1 single execution\n );\n\n /**\n * Signal derived from currentBp$.\n * Directives read it via effect() — zero manual subscriptions.\n * providedIn: 'root' ensures the Signal is a singleton.\n */\n readonly currentBp: Signal<BreakpointAlias> = toSignal(this.currentBp$, {\n initialValue: this._resolve(),\n });\n\n /**\n * Returns true if the given alias (or raw media query) is currently active.\n * Delegates to bo.isMatched() — synchronous, O(1), no extra observer created.\n *\n * @example\n * media.isActive('md') // true on 768–991px screens\n * media.isActive('lg-up') // true on 992px+\n */\n isActive(alias: string): boolean {\n const query = this.bp[alias] ?? alias; // fallback: treat as raw media query\n return this.bo.isMatched(query);\n }\n\n /**\n * Observable true/false for a specific alias.\n * Reuses currentBp$ instead of opening a new bo.observe():\n * no additional MediaQueryList listener is created.\n */\n isActive$(alias: string): Observable<boolean> {\n return this.currentBp$.pipe(\n map(() => this.isActive(alias)),\n distinctUntilChanged()\n );\n }\n\n /** Resolves the active canonical alias (from xxl down to xs, mobile-first) */\n private _resolve(): BreakpointAlias {\n for (let i = CANONICAL_ALIASES.length - 1; i >= 0; i--) {\n if (this.bo.isMatched(this.bp[CANONICAL_ALIASES[i]])) {\n return CANONICAL_ALIASES[i];\n }\n }\n return 'xs';\n }\n}\n","/**\r\n * @file if-bp.directive.ts (Angular 21 — signals)\r\n *\r\n * *ifBp — structural directive that adds/removes an element from the DOM\r\n * based on the active Bootstrap 5 breakpoint.\r\n *\r\n * Unlike [fxShow]/[fxHide] (which use display:none), *ifBp actually adds and\r\n * removes the element from the DOM — ideal for heavy components like mat-sidenav.\r\n *\r\n * Angular 21 changes:\r\n * • @Input setters replaced by input() / input.required()\r\n * • computed() derives alias list and active state reactively\r\n * • effect() in constructor handles DOM add/remove (no OnInit/OnChanges)\r\n * • No Injector, EffectRef, _initialized guard or manual subscriptions\r\n *\r\n * Usage:\r\n * <mat-sidenav *ifBp=\"'lg-up'\"> only rendered on lg and above\r\n * <div *ifBp=\"'xs'\">Mobile only</div>\r\n * <div *ifBp=\"'sm md'\">sm and md only (space-separated list of aliases)</div>\r\n * <div *ifBp=\"'lg-up'; else mobileRef\">Desktop view</div>\r\n * <ng-template #mobileRef>Mobile fallback</ng-template>\r\n *\r\n * Accepted alias values:\r\n * xs | sm | md | lg | xl | xxl\r\n * sm-up | md-up | lg-up | xl-up | xxl-up\r\n * sm-down | md-down | lg-down | xl-down\r\n * Space-separated list of any of the above\r\n */\r\n\r\nimport {\r\n Directive, TemplateRef, ViewContainerRef,\r\n computed, effect, inject, input,\r\n} from '@angular/core';\r\nimport { MediaObserver } from './media-observer.service';\r\n\r\n@Directive({\r\n selector: '[ifBp]',\r\n standalone: true,\r\n})\r\nexport class IfBpDirective {\r\n private readonly tpl = inject(TemplateRef<unknown>);\r\n private readonly vcr = inject(ViewContainerRef);\r\n private readonly media = inject(MediaObserver);\r\n\r\n /** Space-separated list of breakpoint aliases, e.g. `'lg xl xxl-up'` */\r\n readonly ifBp = input.required<string>();\r\n /** Optional else-template shown when no alias is active */\r\n readonly ifBpElse = input<TemplateRef<unknown>>();\r\n\r\n private readonly _aliases = computed(() => this.ifBp().trim().split(/\\s+/));\r\n private readonly _isActive = computed(() => {\r\n this.media.currentBp(); // reactive dependency — re-evaluates on breakpoint change\r\n return this._aliases().some(alias => this.media.isActive(alias));\r\n });\r\n\r\n /** Tracks whether the main view is currently embedded — plain field, not a signal. */\r\n private _hasView = false;\r\n\r\n constructor() {\r\n effect(() => {\r\n const active = this._isActive();\r\n const elseTpl = this.ifBpElse();\r\n\r\n if (active === this._hasView) return; // dirty-check\r\n\r\n this.vcr.clear();\r\n if (active) {\r\n this.vcr.createEmbeddedView(this.tpl);\r\n } else if (elseTpl) {\r\n this.vcr.createEmbeddedView(elseTpl);\r\n }\r\n this._hasView = active;\r\n });\r\n }\r\n}\r\n","/**\n * @file responsive-base.directive.ts (v5 — Angular 21 signals)\n *\n * ── What changed in v5 ────────────────────────────────────────────────────\n *\n * Full Angular 21 signals refactor:\n *\n * • resolve(), resolveNonCanonical(), resolveAll() are now PURE EXPORTED\n * FUNCTIONS that accept currentBp and isActive as parameters.\n * Directives call them from computed() or effect() with no \"this\" binding.\n *\n * • ResponsiveBaseDirective is now a thin utility base:\n * – Only injects ElementRef, Renderer2, MediaObserver, PLATFORM_ID.\n * – Exposes safeSetStyle() helper.\n * – No lifecycle hooks, no Injector, no EffectRef, no abstract apply().\n *\n * • Each concrete directive uses:\n * – input() for every @Input (signals, no more setters + _v/_nc maps)\n * – computed() to build BpValues / NcValues maps and derive resolved CSS\n * – effect() in the constructor to write to the DOM\n *\n * Benefits vs v4:\n * ✅ Zero manual lifecycle/subscription management (no OnInit/OnChanges/EffectRef)\n * ✅ Angular's reactive graph provides built-in dirty-checking and memoization\n * ✅ DOM writes happen only when the resolved CSS value actually changes\n * ✅ No more Injector injection just to create effects\n *\n * ── Resolution strategy (unchanged) ──────────────────────────────────────\n *\n * Canonical aliases (xs … xxl) → mobile-first cascade via resolve()\n * Non-canonical (lt-*, gt-*, *-up, *-down) → point-in-time isActive() checks\n * Final order: resolveNonCanonical() wins over resolve()\n */\n\nimport {\n Directive,\n inject, ElementRef, Renderer2, PLATFORM_ID,\n} from '@angular/core';\nimport { isPlatformBrowser } from '@angular/common';\nimport { MediaObserver } from './media-observer.service';\nimport { CANONICAL_ALIASES, BreakpointAlias } from './breakpoints';\nimport { BpValues, NcValues } from './responsive-inputs.mixin';\n\n// ── O(1) alias → index lookup (module-level constant, shared across instances) ──\nexport const ALIAS_INDEX = new Map<string, number>(\n CANONICAL_ALIASES.map((a, i) => [a, i])\n);\n\n/**\n * All non-canonical alias keys in priority order (most specific first).\n * lt-sm is \"below sm\" (= xs only), lt-md is \"below md\" (= xs+sm), etc.\n * Narrower range = higher priority = checked first.\n */\nexport const NON_CANONICAL_PRIORITY = [\n // lt-* from narrowest to widest\n 'lt-sm', 'lt-md', 'lt-lg', 'lt-xl', 'lt-xxl',\n // gt-* from widest to narrowest\n 'gt-xs', 'gt-sm', 'gt-md', 'gt-lg', 'gt-xl',\n // Bootstrap *-down from narrowest to widest\n 'sm-down', 'md-down', 'lg-down', 'xl-down',\n // Bootstrap *-up from widest to narrowest\n 'sm-up', 'md-up', 'lg-up', 'xl-up', 'xxl-up',\n] as const;\n\n// ── Pure resolution functions ─────────────────────────────────────────────────\n// These are standalone functions (not class methods) so they can be called\n// from computed() closures without capturing `this`.\n\n/**\n * Resolution with three-tier priority:\n *\n * 1. Exact breakpoint match (e.g. currentBp='sm' → values['sm'])\n * 2. Generic `default` value (e.g. [fxFlex]=\"49\" — applies to all unspecified bps)\n * 3. Mobile-first cascade down (e.g. [fxFlex.xs]=\"X\" [fxFlex.md]=\"Y\" → lg cascades to md)\n *\n * This ensures [fxFlex]=\"49\" [fxFlex.xs]=\"100\" gives xs→100 and sm+→49,\n * instead of `xs` cascading up and shadowing the default on sm/md/lg.\n */\nexport function resolve<T>(\n values: BpValues<T>,\n currentBp: BreakpointAlias,\n): T | undefined {\n // 1. Exact match\n const exact = values[currentBp as keyof BpValues<T>];\n if (exact !== undefined) return exact;\n\n // 2. Generic default (wins over cascade — it's the \"applies everywhere\" value)\n const def = (values as Record<string, T | undefined>)['default'];\n if (def !== undefined) return def;\n\n // 3. Mobile-first cascade (only when no default — e.g. [fxFlex.xs]=\"X\" [fxFlex.md]=\"Y\")\n const idx = ALIAS_INDEX.get(currentBp) ?? 0;\n for (let i = idx - 1; i >= 0; i--) {\n const v = values[CANONICAL_ALIASES[i] as keyof BpValues<T>];\n if (v !== undefined) return v;\n }\n return undefined;\n}\n\n/**\n * Non-canonical point-in-time check: iterates NON_CANONICAL_PRIORITY and\n * returns the value for the first alias that isActive().\n */\nexport function resolveNonCanonical<T>(\n nc: NcValues<T>,\n isActive: (alias: string) => boolean,\n): T | undefined {\n for (const alias of NON_CANONICAL_PRIORITY) {\n const v = (nc as Record<string, T | undefined>)[alias];\n if (v !== undefined && isActive(alias)) return v;\n }\n return undefined;\n}\n\n/**\n * Full resolution: non-canonical overrides win over the canonical cascade.\n *\n * Usage inside computed():\n * const resolved = computed(() =>\n * resolveAll(this._v(), this._nc(), this.media.currentBp(), a => this.media.isActive(a))\n * );\n */\nexport function resolveAll<T>(\n canonical: BpValues<T>,\n nonCanonical: NcValues<T>,\n currentBp: BreakpointAlias,\n isActive: (alias: string) => boolean,\n): T | undefined {\n return resolveNonCanonical(nonCanonical, isActive) ?? resolve(canonical, currentBp);\n}\n\n// ── Base directive ─────────────────────────────────────────────────────────────\n\n@Directive()\nexport abstract class ResponsiveBaseDirective {\n protected readonly el = inject(ElementRef<HTMLElement>);\n protected readonly r2 = inject(Renderer2);\n protected readonly media = inject(MediaObserver);\n\n /** true in browser, false in SSR */\n protected readonly isBrowser = isPlatformBrowser(inject(PLATFORM_ID));\n\n /** SSR-safe style setter. Pass null/empty string to remove the property. */\n protected safeSetStyle(prop: string, value: string | null): void {\n if (value === null || value === '') {\n this.r2.removeStyle(this.el.nativeElement, prop);\n } else {\n this.r2.setStyle(this.el.nativeElement, prop, value);\n }\n }\n}\n","/**\r\n * @file fx-flex-extras.directives.ts (Angular 21 — signals)\r\n *\r\n * Flex child helper directives:\r\n * [fxFlexOrder] — CSS order\r\n * [fxFlexOffset] — margin-inline-start (RTL-safe)\r\n * [fxFlexAlign] — align-self override\r\n * [fxFlexFill] — fills the container (width/height 100%)\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • computed() derives the resolved CSS values\r\n * • effect() in constructor writes to DOM — no lifecycle hooks\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input, isDevMode } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\n@Directive({\r\n selector: `\r\n [fxFlexOrder],\r\n [fxFlexOrder.xs],[fxFlexOrder.sm],[fxFlexOrder.md],[fxFlexOrder.lg],[fxFlexOrder.xl],[fxFlexOrder.xxl],\r\n [fxFlexOrder.lt-sm],[fxFlexOrder.lt-md],[fxFlexOrder.lt-lg],[fxFlexOrder.lt-xl],[fxFlexOrder.lt-xxl],\r\n [fxFlexOrder.gt-xs],[fxFlexOrder.gt-sm],[fxFlexOrder.gt-md],[fxFlexOrder.gt-lg],[fxFlexOrder.gt-xl],\r\n [fxFlexOrder.sm-up],[fxFlexOrder.md-up],[fxFlexOrder.lg-up],[fxFlexOrder.xl-up],[fxFlexOrder.xxl-up],\r\n [fxFlexOrder.sm-down],[fxFlexOrder.md-down],[fxFlexOrder.lg-down],[fxFlexOrder.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxFlexOrderDirective extends ResponsiveBaseDirective {\r\n readonly fxFlexOrder = input<string>(undefined, { alias: 'fxFlexOrder' });\r\n readonly xs = input<string>(undefined, { alias: 'fxFlexOrder.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxFlexOrder.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxFlexOrder.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxFlexOrder.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxFlexOrder.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxFlexOrder.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxFlexOrder.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxFlexOrder.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxFlexOrder.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxFlexOrder.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxFlexOrder.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxFlexOrder.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxFlexOrder.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxFlexOrder.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxFlexOrder.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxFlexOrder.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxFlexOrder.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxFlexOrder.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxFlexOrder.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxFlexOrder.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxFlexOrder.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxFlexOrder.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxFlexOrder.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxFlexOrder.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxFlexOrder.xl-down' });\r\n\r\n private readonly _order = computed(() =>\r\n resolveAll(\r\n { default: this.fxFlexOrder(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? '0'\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const v = this._order();\r\n if (isDevMode() && isNaN(Number(v))) console.warn(`[fxFlexOrder] Non-numeric value: \"${v}\"`);\r\n this.safeSetStyle('order', v);\r\n });\r\n }\r\n}\r\n\r\n// ─── fxFlexOffset ────────────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxFlexOffset],\r\n [fxFlexOffset.xs],[fxFlexOffset.sm],[fxFlexOffset.md],[fxFlexOffset.lg],[fxFlexOffset.xl],[fxFlexOffset.xxl],\r\n [fxFlexOffset.lt-sm],[fxFlexOffset.lt-md],[fxFlexOffset.lt-lg],[fxFlexOffset.lt-xl],[fxFlexOffset.lt-xxl],\r\n [fxFlexOffset.gt-xs],[fxFlexOffset.gt-sm],[fxFlexOffset.gt-md],[fxFlexOffset.gt-lg],[fxFlexOffset.gt-xl],\r\n [fxFlexOffset.sm-up],[fxFlexOffset.md-up],[fxFlexOffset.lg-up],[fxFlexOffset.xl-up],[fxFlexOffset.xxl-up],\r\n [fxFlexOffset.sm-down],[fxFlexOffset.md-down],[fxFlexOffset.lg-down],[fxFlexOffset.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxFlexOffsetDirective extends ResponsiveBaseDirective {\r\n readonly fxFlexOffset = input<string>(undefined, { alias: 'fxFlexOffset' });\r\n readonly xs = input<string>(undefined, { alias: 'fxFlexOffset.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxFlexOffset.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxFlexOffset.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxFlexOffset.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxFlexOffset.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxFlexOffset.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxFlexOffset.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxFlexOffset.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxFlexOffset.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxFlexOffset.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxFlexOffset.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxFlexOffset.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxFlexOffset.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxFlexOffset.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxFlexOffset.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxFlexOffset.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxFlexOffset.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxFlexOffset.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxFlexOffset.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxFlexOffset.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxFlexOffset.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxFlexOffset.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxFlexOffset.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxFlexOffset.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxFlexOffset.xl-down' });\r\n\r\n private readonly _offset = computed(() =>\r\n resolveAll(\r\n { default: this.fxFlexOffset(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? '0'\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const v = this._offset();\r\n // ngx-layout parity: when the parent flex container is a column, offset\r\n // means push down on the cross axis -> margin-top. Otherwise (row or any\r\n // non-flex parent, e.g. plain block) push on the inline axis -> margin-inline-start\r\n // (RTL-safe). Detection is done via getComputedStyle so it works both with\r\n // [fxLayout] and with plain CSS flex containers.\r\n if (!this.isBrowser) {\r\n this.safeSetStyle('margin-inline-start', v);\r\n return;\r\n }\r\n const parent = this.el.nativeElement.parentElement;\r\n const isColumn = !!parent &&\r\n /^column/.test(getComputedStyle(parent).flexDirection || '');\r\n if (isColumn) {\r\n this.safeSetStyle('margin-inline-start', null);\r\n this.safeSetStyle('margin-top', v);\r\n } else {\r\n this.safeSetStyle('margin-top', null);\r\n this.safeSetStyle('margin-inline-start', v);\r\n }\r\n });\r\n }\r\n}\r\n\r\n// ─── fxFlexAlign ─────────────────────────────────────────────────────────────\r\n\r\ntype AlignSelf = 'auto' | 'start' | 'center' | 'end' | 'stretch' | 'baseline';\r\nconst ALIGN_SELF_MAP: Record<string, string> = {\r\n start: 'flex-start', end: 'flex-end', center: 'center',\r\n stretch: 'stretch', baseline: 'baseline', auto: 'auto',\r\n};\r\n\r\n@Directive({\r\n selector: `\r\n [fxFlexAlign],\r\n [fxFlexAlign.xs],[fxFlexAlign.sm],[fxFlexAlign.md],[fxFlexAlign.lg],[fxFlexAlign.xl],[fxFlexAlign.xxl],\r\n [fxFlexAlign.lt-sm],[fxFlexAlign.lt-md],[fxFlexAlign.lt-lg],[fxFlexAlign.lt-xl],[fxFlexAlign.lt-xxl],\r\n [fxFlexAlign.gt-xs],[fxFlexAlign.gt-sm],[fxFlexAlign.gt-md],[fxFlexAlign.gt-lg],[fxFlexAlign.gt-xl],\r\n [fxFlexAlign.sm-up],[fxFlexAlign.md-up],[fxFlexAlign.lg-up],[fxFlexAlign.xl-up],[fxFlexAlign.xxl-up],\r\n [fxFlexAlign.sm-down],[fxFlexAlign.md-down],[fxFlexAlign.lg-down],[fxFlexAlign.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxFlexAlignDirective extends ResponsiveBaseDirective {\r\n readonly fxFlexAlign = input<AlignSelf>(undefined, { alias: 'fxFlexAlign' });\r\n readonly xs = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xs' });\r\n readonly sm = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.sm' });\r\n readonly md = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.md' });\r\n readonly lg = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lg' });\r\n readonly xl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xl' });\r\n readonly xxl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xxl' });\r\n readonly ltSm = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-sm' });\r\n readonly ltMd = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-md' });\r\n readonly ltLg = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-lg' });\r\n readonly ltXl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-xl' });\r\n readonly ltXxl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lt-xxl' });\r\n readonly gtXs = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-xs' });\r\n readonly gtSm = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-sm' });\r\n readonly gtMd = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-md' });\r\n readonly gtLg = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-lg' });\r\n readonly gtXl = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.gt-xl' });\r\n readonly smUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.sm-up' });\r\n readonly mdUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.md-up' });\r\n readonly lgUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lg-up' });\r\n readonly xlUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xl-up' });\r\n readonly xxlUp = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xxl-up' });\r\n readonly smDown = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.sm-down' });\r\n readonly mdDown = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.md-down' });\r\n readonly lgDown = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.lg-down' });\r\n readonly xlDown = input<AlignSelf>(undefined, { alias: 'fxFlexAlign.xl-down' });\r\n\r\n private readonly _alignSelf = computed(() => {\r\n const v = resolveAll(\r\n { default: this.fxFlexAlign(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? 'stretch';\r\n if (isDevMode() && !ALIGN_SELF_MAP[v]) console.warn(`[fxFlexAlign] Unknown value: \"${v}\". Valid: ${Object.keys(ALIGN_SELF_MAP).join(', ')}`);\r\n return ALIGN_SELF_MAP[v] ?? v;\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => { this.safeSetStyle('align-self', this._alignSelf()); });\r\n }\r\n}\r\n\r\n// ─── fxFlexFill ──────────────────────────────────────────────────────────────\r\n// fxFlexFill is intentionally non-responsive in its most common usage,\r\n// but supports breakpoint suffixes for edge cases where fill must be toggled.\r\n\r\ntype FillValue = 'fill' | 'none' | '' | boolean;\r\nfunction toBool(v: FillValue | undefined): boolean | undefined {\r\n if (v === undefined) return undefined;\r\n if (typeof v === 'boolean') return v;\r\n if (v === '') return true;\r\n return v !== 'none';\r\n}\r\n\r\n@Directive({\r\n selector: `\r\n [fxFlexFill],[fxFill],\r\n [fxFlexFill.xs],[fxFlexFill.sm],[fxFlexFill.md],[fxFlexFill.lg],[fxFlexFill.xl],[fxFlexFill.xxl],\r\n [fxFlexFill.lt-sm],[fxFlexFill.lt-md],[fxFlexFill.lt-lg],[fxFlexFill.lt-xl],[fxFlexFill.lt-xxl],\r\n [fxFlexFill.gt-xs],[fxFlexFill.gt-sm],[fxFlexFill.gt-md],[fxFlexFill.gt-lg],[fxFlexFill.gt-xl],\r\n [fxFlexFill.sm-up],[fxFlexFill.md-up],[fxFlexFill.lg-up],[fxFlexFill.xl-up],[fxFlexFill.xxl-up],\r\n [fxFlexFill.sm-down],[fxFlexFill.md-down],[fxFlexFill.lg-down],[fxFlexFill.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxFlexFillDirective extends ResponsiveBaseDirective {\r\n readonly fxFlexFill = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill', transform: toBool });\r\n readonly fxFill = input<boolean, FillValue>(undefined, { alias: 'fxFill', transform: toBool });\r\n readonly xs = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xs', transform: toBool });\r\n readonly sm = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.sm', transform: toBool });\r\n readonly md = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.md', transform: toBool });\r\n readonly lg = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lg', transform: toBool });\r\n readonly xl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xl', transform: toBool });\r\n readonly xxl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xxl', transform: toBool });\r\n readonly ltSm = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-sm', transform: toBool });\r\n readonly ltMd = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-md', transform: toBool });\r\n readonly ltLg = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-lg', transform: toBool });\r\n readonly ltXl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-xl', transform: toBool });\r\n readonly ltXxl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lt-xxl', transform: toBool });\r\n readonly gtXs = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-xs', transform: toBool });\r\n readonly gtSm = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-sm', transform: toBool });\r\n readonly gtMd = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-md', transform: toBool });\r\n readonly gtLg = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-lg', transform: toBool });\r\n readonly gtXl = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.gt-xl', transform: toBool });\r\n readonly smUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.sm-up', transform: toBool });\r\n readonly mdUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.md-up', transform: toBool });\r\n readonly lgUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lg-up', transform: toBool });\r\n readonly xlUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xl-up', transform: toBool });\r\n readonly xxlUp = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xxl-up', transform: toBool });\r\n readonly smDown = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.sm-down', transform: toBool });\r\n readonly mdDown = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.md-down', transform: toBool });\r\n readonly lgDown = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.lg-down', transform: toBool });\r\n readonly xlDown = input<boolean, FillValue>(undefined, { alias: 'fxFlexFill.xl-down', transform: toBool });\r\n\r\n private readonly _active = computed(() =>\r\n (resolveAll(\r\n // fxFill is a shorthand alias for the default; fxFlexFill wins if both set\r\n { default: this.fxFlexFill() ?? this.fxFill(),\r\n xs: this.xs() as boolean | undefined, sm: this.sm() as boolean | undefined,\r\n md: this.md() as boolean | undefined, lg: this.lg() as boolean | undefined,\r\n xl: this.xl() as boolean | undefined, xxl: this.xxl() as boolean | undefined },\r\n { 'lt-sm': this.ltSm() as boolean | undefined, 'lt-md': this.ltMd() as boolean | undefined,\r\n 'lt-lg': this.ltLg() as boolean | undefined, 'lt-xl': this.ltXl() as boolean | undefined,\r\n 'lt-xxl': this.ltXxl() as boolean | undefined,\r\n 'gt-xs': this.gtXs() as boolean | undefined, 'gt-sm': this.gtSm() as boolean | undefined,\r\n 'gt-md': this.gtMd() as boolean | undefined, 'gt-lg': this.gtLg() as boolean | undefined,\r\n 'gt-xl': this.gtXl() as boolean | undefined,\r\n 'sm-up': this.smUp() as boolean | undefined, 'md-up': this.mdUp() as boolean | undefined,\r\n 'lg-up': this.lgUp() as boolean | undefined, 'xl-up': this.xlUp() as boolean | undefined,\r\n 'xxl-up': this.xxlUp() as boolean | undefined,\r\n 'sm-down': this.smDown() as boolean | undefined, 'md-down': this.mdDown() as boolean | undefined,\r\n 'lg-down': this.lgDown() as boolean | undefined, 'xl-down': this.xlDown() as boolean | undefined },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) as boolean | undefined) ?? true\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const active = this._active();\r\n const v = active ? '100%' : null;\r\n this.safeSetStyle('margin', active ? '0' : null);\r\n // align-self: stretch ensures this element fills the parent's cross axis even\r\n // when the parent flex container has align-items: center (e.g. mat-toolbar).\r\n // Without this, height: 100% collapses to content height and align-items on\r\n // this container has no visible centering space.\r\n this.safeSetStyle('align-self', active ? 'stretch' : null);\r\n this.safeSetStyle('width', v);\r\n this.safeSetStyle('height', v);\r\n this.safeSetStyle('min-width', v);\r\n this.safeSetStyle('min-height', v);\r\n });\r\n }\r\n}\r\n","/**\n * @file fx-flex.directive.ts (Angular 21 — signals)\n *\n * [fxFlex] — flex shorthand on a flex child element.\n *\n * Angular 21 changes:\n * • All @Input setters replaced by input() signals\n * • computed() builds the BpValues / NcValues maps reactively\n * • effect() in constructor writes to the DOM — no lifecycle hooks needed\n * • resolveAll() is the pure function from responsive-base.directive.ts\n *\n * Accepted values:\n * (empty) → flex: 1 1 0%\n * \"auto\" → flex: 1 1 auto\n * \"none\" → flex: none\n * \"grow\" → flex: 1 1 100%\n * \"nogrow\" → flex: 0 1 auto\n * \"noshrink\" → flex: 1 0 auto\n * \"50%\" → flex: 1 1 50%\n * \"50\" → flex: 1 1 50% (unitless normalized to %)\n * \"200px\" → flex: 1 1 200px\n * \"0 0 200px\" → flex: 0 0 200px (full shorthand passthrough)\n *\n * Breakpoint suffixes:\n * Canonical : .xs .sm .md .lg .xl .xxl\n * lt-* : .lt-sm .lt-md .lt-lg .lt-xl .lt-xxl\n * gt-* : .gt-xs .gt-sm .gt-md .gt-lg .gt-xl\n * *-up : .sm-up .md-up .lg-up .xl-up .xxl-up\n * *-down : .sm-down .md-down .lg-down .xl-down\n */\n\nimport { Directive, computed, effect, input } from '@angular/core';\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\n\nfunction toFlexCss(raw: string | undefined): string {\n if (raw === undefined || raw === '' || raw === '*') return '1 1 auto';\n if (raw === 'none') return 'none';\n if (raw === 'auto') return '1 1 auto';\n if (raw === 'grow') return '1 1 100%';\n if (raw === 'nogrow') return '0 1 auto';\n if (raw === 'noshrink') return '1 0 auto';\n const parts = raw.trim().split(/\\s+/);\n if (parts.length === 3) return raw.trim();\n let basis = parts[0];\n if (/^\\d+(\\.\\d+)?$/.test(basis)) basis = basis + '%';\n // Fixed units (px, em, rem, vh, vw…) → 0 0 (no grow/shrink); % → 1 1\n const fixed = /px|em|rem|vh|vw|vmin|vmax|ch|ex|cm|mm|in|pt|pc/.test(basis);\n return `${fixed ? '0 0' : '1 1'} ${basis}`;\n}\n\n/** Returns true if any sibling element in the same parent has fxFlex=\"*\" */\nfunction parentHasStar(el: HTMLElement): boolean {\n const parent = el.parentElement;\n if (!parent) return false;\n return Array.from(parent.children).some(\n c => c !== el && (c.getAttribute('fxflex') === '*' || c.getAttribute('fxFlex') === '*')\n );\n}\n\n@Directive({\n selector: `\n [fxFlex],\n [fxFlex.xs],[fxFlex.sm],[fxFlex.md],[fxFlex.lg],[fxFlex.xl],[fxFlex.xxl],\n [fxFlex.lt-sm],[fxFlex.lt-md],[fxFlex.lt-lg],[fxFlex.lt-xl],[fxFlex.lt-xxl],\n [fxFlex.gt-xs],[fxFlex.gt-sm],[fxFlex.gt-md],[fxFlex.gt-lg],[fxFlex.gt-xl],\n [fxFlex.sm-up],[fxFlex.md-up],[fxFlex.lg-up],[fxFlex.xl-up],[fxFlex.xxl-up],\n [fxFlex.sm-down],[fxFlex.md-down],[fxFlex.lg-down],[fxFlex.xl-down]\n `,\n standalone: true,\n})\nexport class FxFlexDirective extends ResponsiveBaseDirective {\n // ── Canonical signal inputs ───────────────────────────────────────────────\n readonly fxFlex = input<string>(undefined, { alias: 'fxFlex' });\n readonly xs = input<string>(undefined, { alias: 'fxFlex.xs' });\n readonly sm = input<string>(undefined, { alias: 'fxFlex.sm' });\n readonly md = input<string>(undefined, { alias: 'fxFlex.md' });\n readonly lg = input<string>(undefined, { alias: 'fxFlex.lg' });\n readonly xl = input<string>(undefined, { alias: 'fxFlex.xl' });\n readonly xxl = input<string>(undefined, { alias: 'fxFlex.xxl' });\n // ── lt-* ─────────────────────────────────────────────────────────────────\n readonly ltSm = input<string>(undefined, { alias: 'fxFlex.lt-sm' });\n readonly ltMd = input<string>(undefined, { alias: 'fxFlex.lt-md' });\n readonly ltLg = input<string>(undefined, { alias: 'fxFlex.lt-lg' });\n readonly ltXl = input<string>(undefined, { alias: 'fxFlex.lt-xl' });\n readonly ltXxl = input<string>(undefined, { alias: 'fxFlex.lt-xxl' });\n // ── gt-* ─────────────────────────────────────────────────────────────────\n readonly gtXs = input<string>(undefined, { alias: 'fxFlex.gt-xs' });\n readonly gtSm = input<string>(undefined, { alias: 'fxFlex.gt-sm' });\n readonly gtMd = input<string>(undefined, { alias: 'fxFlex.gt-md' });\n readonly gtLg = input<string>(undefined, { alias: 'fxFlex.gt-lg' });\n readonly gtXl = input<string>(undefined, { alias: 'fxFlex.gt-xl' });\n // ── *-up ─────────────────────────────────────────────────────────────────\n readonly smUp = input<string>(undefined, { alias: 'fxFlex.sm-up' });\n readonly mdUp = input<string>(undefined, { alias: 'fxFlex.md-up' });\n readonly lgUp = input<string>(undefined, { alias: 'fxFlex.lg-up' });\n readonly xlUp = input<string>(undefined, { alias: 'fxFlex.xl-up' });\n readonly xxlUp = input<string>(undefined, { alias: 'fxFlex.xxl-up' });\n // ── *-down ───────────────────────────────────────────────────────────────\n readonly smDown = input<string>(undefined, { alias: 'fxFlex.sm-down' });\n readonly mdDown = input<string>(undefined, { alias: 'fxFlex.md-down' });\n readonly lgDown = input<string>(undefined, { alias: 'fxFlex.lg-down' });\n readonly xlDown = input<string>(undefined, { alias: 'fxFlex.xl-down' });\n\n // ── Derived CSS value ──────────────────────────────────────────────────────\n // Inlined single computed: Angular tracks each input() individually,\n // so _flexCss only recomputes when a signal it actually reads changes.\n private readonly _rawFlex = computed(() =>\n resolveAll(\n { default: this.fxFlex(), xs: this.xs(), sm: this.sm(), md: this.md(),\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\n this.media.currentBp(), a => this.media.isActive(a)\n )\n );\n\n constructor() {\n super();\n effect(() => {\n const raw = this._rawFlex();\n // undefined means no rule matched the current breakpoint (e.g. only fxFlex.lt-md=\"100\"\n // is set and the current bp is lg+). Remove flex entirely so the browser default\n // (flex: 0 1 auto) applies and justify-content can distribute the remaining space.\n if (raw === undefined) {\n this.safeSetStyle('flex', null);\n this.safeSetStyle('box-sizing', null);\n return;\n }\n // empty string / \"*\" → equal distribution (1 1 auto), unless a star-sibling is present\n const css = raw === ''\n ? (parentHasStar(this.el.nativeElement) ? '0 0 auto' : '1 1 auto')\n : toFlexCss(raw);\n this.safeSetStyle('flex', css);\n this.safeSetStyle('box-sizing', 'border-box');\n });\n }\n}\n","/**\r\n * @file fx-grid.directives.ts (Angular 21 — signals)\r\n *\r\n * CSS Grid responsive directives.\r\n *\r\n * [fxGrid] — display:grid + responsive grid-template-columns.\r\n * Accepts [fxGridRows] and [fxGridGap] inputs on same host.\r\n * [fxGridColumn] — grid-column on a child\r\n * [fxGridArea] — grid-area on a child\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • FxGridDirective uses 3 pairs of computed() for cols/rows/gap maps\r\n * • Single effect() in constructor writes all 3 CSS props\r\n * • Null/undefined props are removed (no style leak)\r\n *\r\n * Unitless numeric gap values are normalized to px (\"16\" → \"16px\").\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\nfunction normalizeGap(raw: string | undefined): string | undefined {\r\n if (!raw) return undefined;\r\n return raw.trim().split(/\\s+/)\r\n .map(v => /^\\d+(\\.\\d+)?$/.test(v) ? `${v}px` : v)\r\n .join(' ');\r\n}\r\n\r\n// ─── fxGrid (container) ──────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxGrid],\r\n [fxGrid.xs],[fxGrid.sm],[fxGrid.md],[fxGrid.lg],[fxGrid.xl],[fxGrid.xxl],\r\n [fxGrid.lt-sm],[fxGrid.lt-md],[fxGrid.lt-lg],[fxGrid.lt-xl],[fxGrid.lt-xxl],\r\n [fxGrid.gt-xs],[fxGrid.gt-sm],[fxGrid.gt-md],[fxGrid.gt-lg],[fxGrid.gt-xl],\r\n [fxGrid.sm-up],[fxGrid.md-up],[fxGrid.lg-up],[fxGrid.xl-up],[fxGrid.xxl-up],\r\n [fxGrid.sm-down],[fxGrid.md-down],[fxGrid.lg-down],[fxGrid.xl-down]\r\n `,\r\n standalone: true,\r\n host: { '[style.display]': '\"grid\"' },\r\n})\r\nexport class FxGridDirective extends ResponsiveBaseDirective {\r\n // ── grid-template-columns ──────────────────────────────────────────────────\r\n readonly fxGrid = input<string>(undefined, { alias: 'fxGrid' });\r\n readonly xs = input<string>(undefined, { alias: 'fxGrid.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxGrid.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxGrid.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxGrid.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxGrid.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxGrid.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxGrid.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxGrid.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxGrid.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxGrid.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxGrid.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxGrid.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxGrid.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxGrid.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxGrid.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxGrid.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxGrid.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxGrid.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxGrid.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxGrid.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxGrid.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxGrid.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxGrid.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxGrid.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxGrid.xl-down' });\r\n\r\n // ── grid-template-rows ────────────────────────────────────────────────────\r\n readonly fxGridRows = input<string>(undefined, { alias: 'fxGridRows' });\r\n readonly rowsXs = input<string>(undefined, { alias: 'fxGridRows.xs' });\r\n readonly rowsSm = input<string>(undefined, { alias: 'fxGridRows.sm' });\r\n readonly rowsMd = input<string>(undefined, { alias: 'fxGridRows.md' });\r\n readonly rowsLg = input<string>(undefined, { alias: 'fxGridRows.lg' });\r\n readonly rowsXl = input<string>(undefined, { alias: 'fxGridRows.xl' });\r\n readonly rowsXxl = input<string>(undefined, { alias: 'fxGridRows.xxl' });\r\n readonly rowsLtSm = input<string>(undefined, { alias: 'fxGridRows.lt-sm' });\r\n readonly rowsLtMd = input<string>(undefined, { alias: 'fxGridRows.lt-md' });\r\n readonly rowsLtLg = input<string>(undefined, { alias: 'fxGridRows.lt-lg' });\r\n readonly rowsLtXl = input<string>(undefined, { alias: 'fxGridRows.lt-xl' });\r\n readonly rowsLtXxl = input<string>(undefined, { alias: 'fxGridRows.lt-xxl' });\r\n readonly rowsGtXs = input<string>(undefined, { alias: 'fxGridRows.gt-xs' });\r\n readonly rowsGtSm = input<string>(undefined, { alias: 'fxGridRows.gt-sm' });\r\n readonly rowsGtMd = input<string>(undefined, { alias: 'fxGridRows.gt-md' });\r\n readonly rowsGtLg = input<string>(undefined, { alias: 'fxGridRows.gt-lg' });\r\n readonly rowsGtXl = input<string>(undefined, { alias: 'fxGridRows.gt-xl' });\r\n readonly rowsSmUp = input<string>(undefined, { alias: 'fxGridRows.sm-up' });\r\n readonly rowsMdUp = input<string>(undefined, { alias: 'fxGridRows.md-up' });\r\n readonly rowsLgUp = input<string>(undefined, { alias: 'fxGridRows.lg-up' });\r\n readonly rowsXlUp = input<string>(undefined, { alias: 'fxGridRows.xl-up' });\r\n readonly rowsXxlUp = input<string>(undefined, { alias: 'fxGridRows.xxl-up' });\r\n readonly rowsSmDown = input<string>(undefined, { alias: 'fxGridRows.sm-down' });\r\n readonly rowsMdDown = input<string>(undefined, { alias: 'fxGridRows.md-down' });\r\n readonly rowsLgDown = input<string>(undefined, { alias: 'fxGridRows.lg-down' });\r\n readonly rowsXlDown = input<string>(undefined, { alias: 'fxGridRows.xl-down' });\r\n\r\n // ── gap ───────────────────────────────────────────────────────────────────\r\n readonly fxGridGap = input<string>(undefined, { alias: 'fxGridGap' });\r\n readonly gapXs = input<string>(undefined, { alias: 'fxGridGap.xs' });\r\n readonly gapSm = input<string>(undefined, { alias: 'fxGridGap.sm' });\r\n readonly gapMd = input<string>(undefined, { alias: 'fxGridGap.md' });\r\n readonly gapLg = input<string>(undefined, { alias: 'fxGridGap.lg' });\r\n readonly gapXl = input<string>(undefined, { alias: 'fxGridGap.xl' });\r\n readonly gapXxl = input<string>(undefined, { alias: 'fxGridGap.xxl' });\r\n readonly gapLtSm = input<string>(undefined, { alias: 'fxGridGap.lt-sm' });\r\n readonly gapLtMd = input<string>(undefined, { alias: 'fxGridGap.lt-md' });\r\n readonly gapLtLg = input<string>(undefined, { alias: 'fxGridGap.lt-lg' });\r\n readonly gapLtXl = input<string>(undefined, { alias: 'fxGridGap.lt-xl' });\r\n readonly gapLtXxl = input<string>(undefined, { alias: 'fxGridGap.lt-xxl' });\r\n readonly gapGtXs = input<string>(undefined, { alias: 'fxGridGap.gt-xs' });\r\n readonly gapGtSm = input<string>(undefined, { alias: 'fxGridGap.gt-sm' });\r\n readonly gapGtMd = input<string>(undefined, { alias: 'fxGridGap.gt-md' });\r\n readonly gapGtLg = input<string>(undefined, { alias: 'fxGridGap.gt-lg' });\r\n readonly gapGtXl = input<string>(undefined, { alias: 'fxGridGap.gt-xl' });\r\n readonly gapSmUp = input<string>(undefined, { alias: 'fxGridGap.sm-up' });\r\n readonly gapMdUp = input<string>(undefined, { alias: 'fxGridGap.md-up' });\r\n readonly gapLgUp = input<string>(undefined, { alias: 'fxGridGap.lg-up' });\r\n readonly gapXlUp = input<string>(undefined, { alias: 'fxGridGap.xl-up' });\r\n readonly gapXxlUp = input<string>(undefined, { alias: 'fxGridGap.xxl-up' });\r\n readonly gapSmDown = input<string>(undefined, { alias: 'fxGridGap.sm-down' });\r\n readonly gapMdDown = input<string>(undefined, { alias: 'fxGridGap.md-down' });\r\n readonly gapLgDown = input<string>(undefined, { alias: 'fxGridGap.lg-down' });\r\n readonly gapXlDown = input<string>(undefined, { alias: 'fxGridGap.xl-down' });\r\n\r\n // ── resolved values (flat computed — no intermediate object computed) ──────\r\n private readonly _cols = computed(() =>\r\n resolveAll<string>(\r\n { default: this.fxGrid(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n )\r\n );\r\n private readonly _rows = computed(() =>\r\n resolveAll<string>(\r\n { default: this.fxGridRows(), xs: this.rowsXs(), sm: this.rowsSm(),\r\n md: this.rowsMd(), lg: this.rowsLg(), xl: this.rowsXl(), xxl: this.rowsXxl() },\r\n { 'lt-sm': this.rowsLtSm(), 'lt-md': this.rowsLtMd(), 'lt-lg': this.rowsLtLg(),\r\n 'lt-xl': this.rowsLtXl(), 'lt-xxl': this.rowsLtXxl(),\r\n 'gt-xs': this.rowsGtXs(), 'gt-sm': this.rowsGtSm(), 'gt-md': this.rowsGtMd(),\r\n 'gt-lg': this.rowsGtLg(), 'gt-xl': this.rowsGtXl(),\r\n 'sm-up': this.rowsSmUp(), 'md-up': this.rowsMdUp(), 'lg-up': this.rowsLgUp(),\r\n 'xl-up': this.rowsXlUp(), 'xxl-up': this.rowsXxlUp(),\r\n 'sm-down': this.rowsSmDown(), 'md-down': this.rowsMdDown(),\r\n 'lg-down': this.rowsLgDown(), 'xl-down': this.rowsXlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n )\r\n );\r\n private readonly _gap = computed(() =>\r\n normalizeGap(resolveAll<string>(\r\n { default: this.fxGridGap(), xs: this.gapXs(), sm: this.gapSm(),\r\n md: this.gapMd(), lg: this.gapLg(), xl: this.gapXl(), xxl: this.gapXxl() },\r\n { 'lt-sm': this.gapLtSm(), 'lt-md': this.gapLtMd(), 'lt-lg': this.gapLtLg(),\r\n 'lt-xl': this.gapLtXl(), 'lt-xxl': this.gapLtXxl(),\r\n 'gt-xs': this.gapGtXs(), 'gt-sm': this.gapGtSm(), 'gt-md': this.gapGtMd(),\r\n 'gt-lg': this.gapGtLg(), 'gt-xl': this.gapGtXl(),\r\n 'sm-up': this.gapSmUp(), 'md-up': this.gapMdUp(), 'lg-up': this.gapLgUp(),\r\n 'xl-up': this.gapXlUp(), 'xxl-up': this.gapXxlUp(),\r\n 'sm-down': this.gapSmDown(), 'md-down': this.gapMdDown(),\r\n 'lg-down': this.gapLgDown(), 'xl-down': this.gapXlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ))\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const cols = this._cols();\r\n const rows = this._rows();\r\n const gap = this._gap();\r\n cols ? this.safeSetStyle('grid-template-columns', cols)\r\n : this.r2.removeStyle(this.el.nativeElement, 'grid-template-columns');\r\n rows ? this.safeSetStyle('grid-template-rows', rows)\r\n : this.r2.removeStyle(this.el.nativeElement, 'grid-template-rows');\r\n gap ? this.safeSetStyle('gap', gap)\r\n : this.r2.removeStyle(this.el.nativeElement, 'gap');\r\n });\r\n }\r\n}\r\n\r\n// ─── fxGridColumn ─────────────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxGridColumn],\r\n [fxGridColumn.xs],[fxGridColumn.sm],[fxGridColumn.md],[fxGridColumn.lg],[fxGridColumn.xl],[fxGridColumn.xxl],\r\n [fxGridColumn.lt-sm],[fxGridColumn.lt-md],[fxGridColumn.lt-lg],[fxGridColumn.lt-xl],[fxGridColumn.lt-xxl],\r\n [fxGridColumn.gt-xs],[fxGridColumn.gt-sm],[fxGridColumn.gt-md],[fxGridColumn.gt-lg],[fxGridColumn.gt-xl],\r\n [fxGridColumn.sm-up],[fxGridColumn.md-up],[fxGridColumn.lg-up],[fxGridColumn.xl-up],[fxGridColumn.xxl-up],\r\n [fxGridColumn.sm-down],[fxGridColumn.md-down],[fxGridColumn.lg-down],[fxGridColumn.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxGridColumnDirective extends ResponsiveBaseDirective {\r\n readonly fxGridColumn = input<string>(undefined, { alias: 'fxGridColumn' });\r\n readonly xs = input<string>(undefined, { alias: 'fxGridColumn.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxGridColumn.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxGridColumn.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxGridColumn.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxGridColumn.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxGridColumn.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxGridColumn.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxGridColumn.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxGridColumn.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxGridColumn.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxGridColumn.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxGridColumn.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxGridColumn.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxGridColumn.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxGridColumn.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxGridColumn.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxGridColumn.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxGridColumn.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxGridColumn.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxGridColumn.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxGridColumn.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxGridColumn.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxGridColumn.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxGridColumn.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxGridColumn.xl-down' });\r\n\r\n private readonly _resolved = computed(() =>\r\n resolveAll<string>(\r\n { default: this.fxGridColumn(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n )\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const v = this._resolved();\r\n v ? this.safeSetStyle('grid-column', v)\r\n : this.r2.removeStyle(this.el.nativeElement, 'grid-column');\r\n });\r\n }\r\n}\r\n\r\n// ─── fxGridArea ───────────────────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxGridArea],\r\n [fxGridArea.xs],[fxGridArea.sm],[fxGridArea.md],[fxGridArea.lg],[fxGridArea.xl],[fxGridArea.xxl],\r\n [fxGridArea.lt-sm],[fxGridArea.lt-md],[fxGridArea.lt-lg],[fxGridArea.lt-xl],[fxGridArea.lt-xxl],\r\n [fxGridArea.gt-xs],[fxGridArea.gt-sm],[fxGridArea.gt-md],[fxGridArea.gt-lg],[fxGridArea.gt-xl],\r\n [fxGridArea.sm-up],[fxGridArea.md-up],[fxGridArea.lg-up],[fxGridArea.xl-up],[fxGridArea.xxl-up],\r\n [fxGridArea.sm-down],[fxGridArea.md-down],[fxGridArea.lg-down],[fxGridArea.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxGridAreaDirective extends ResponsiveBaseDirective {\r\n readonly fxGridArea = input<string>(undefined, { alias: 'fxGridArea' });\r\n readonly xs = input<string>(undefined, { alias: 'fxGridArea.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxGridArea.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxGridArea.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxGridArea.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxGridArea.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxGridArea.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxGridArea.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxGridArea.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxGridArea.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxGridArea.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxGridArea.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxGridArea.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxGridArea.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxGridArea.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxGridArea.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxGridArea.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxGridArea.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxGridArea.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxGridArea.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxGridArea.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxGridArea.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxGridArea.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxGridArea.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxGridArea.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxGridArea.xl-down' });\r\n\r\n private readonly _resolved = computed(() =>\r\n resolveAll<string>(\r\n { default: this.fxGridArea(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n )\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const v = this._resolved();\r\n v ? this.safeSetStyle('grid-area', v)\r\n : this.r2.removeStyle(this.el.nativeElement, 'grid-area');\r\n });\r\n }\r\n}\r\n","/**\r\n * @file fx-layout-align.directive.ts (Angular 21 — signals)\r\n *\r\n * [fxLayoutAlign] — sets justify-content + align-items on a flex container.\r\n *\r\n * Format: \"mainAxis crossAxis\"\r\n * mainAxis : start | center | end | space-between | space-around | space-evenly\r\n * crossAxis : start | center | end | stretch | baseline (default: stretch)\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • computed() derives the resolved CSS pair\r\n * • effect() in constructor writes to DOM\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input, isDevMode } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\nconst MAIN_MAP: Record<string, string> = {\r\n 'start': 'flex-start', 'end': 'flex-end', 'center': 'center',\r\n 'space-between': 'space-between', 'space-around': 'space-around', 'space-evenly': 'space-evenly',\r\n};\r\nconst CROSS_MAP: Record<string, string> = {\r\n 'start': 'flex-start', 'end': 'flex-end', 'center': 'center',\r\n 'stretch': 'stretch', 'baseline': 'baseline',\r\n};\r\n\r\nfunction parseAlign(raw: string): [string, string] {\r\n const [main = 'start', cross = 'stretch'] = raw.trim().split(/\\s+/);\r\n if (isDevMode() && !MAIN_MAP[main]) console.warn(`[fxLayoutAlign] Unknown mainAxis: \"${main}\"`);\r\n if (isDevMode() && !CROSS_MAP[cross]) console.warn(`[fxLayoutAlign] Unknown crossAxis: \"${cross}\"`);\r\n return [MAIN_MAP[main] ?? 'flex-start', CROSS_MAP[cross] ?? 'stretch'];\r\n}\r\n\r\n@Directive({\r\n selector: `\r\n [fxLayoutAlign],\r\n [fxLayoutAlign.xs],[fxLayoutAlign.sm],[fxLayoutAlign.md],[fxLayoutAlign.lg],[fxLayoutAlign.xl],[fxLayoutAlign.xxl],\r\n [fxLayoutAlign.lt-sm],[fxLayoutAlign.lt-md],[fxLayoutAlign.lt-lg],[fxLayoutAlign.lt-xl],[fxLayoutAlign.lt-xxl],\r\n [fxLayoutAlign.gt-xs],[fxLayoutAlign.gt-sm],[fxLayoutAlign.gt-md],[fxLayoutAlign.gt-lg],[fxLayoutAlign.gt-xl],\r\n [fxLayoutAlign.sm-up],[fxLayoutAlign.md-up],[fxLayoutAlign.lg-up],[fxLayoutAlign.xl-up],[fxLayoutAlign.xxl-up],\r\n [fxLayoutAlign.sm-down],[fxLayoutAlign.md-down],[fxLayoutAlign.lg-down],[fxLayoutAlign.xl-down]\r\n `,\r\n standalone: true,\r\n // fxLayoutAlign implies a flex container. The host binding makes this SSR-safe\r\n // and avoids racing with fxLayout (which also sets display:flex via host binding):\r\n // when both directives are on the same element Angular sets the property once.\r\n host: { '[style.display]': '\"flex\"' },\r\n})\r\nexport class FxLayoutAlignDirective extends ResponsiveBaseDirective {\r\n readonly fxLayoutAlign = input<string>(undefined, { alias: 'fxLayoutAlign' });\r\n readonly xs = input<string>(undefined, { alias: 'fxLayoutAlign.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxLayoutAlign.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxLayoutAlign.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxLayoutAlign.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxLayoutAlign.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxLayoutAlign.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxLayoutAlign.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxLayoutAlign.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxLayoutAlign.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxLayoutAlign.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxLayoutAlign.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxLayoutAlign.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxLayoutAlign.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxLayoutAlign.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxLayoutAlign.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxLayoutAlign.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxLayoutAlign.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxLayoutAlign.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxLayoutAlign.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxLayoutAlign.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxLayoutAlign.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxLayoutAlign.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxLayoutAlign.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxLayoutAlign.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxLayoutAlign.xl-down' });\r\n\r\n private readonly _parsed = computed(() =>\r\n parseAlign(resolveAll(\r\n { default: this.fxLayoutAlign(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? 'start stretch')\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n const [jc, ai] = this._parsed();\r\n this.safeSetStyle('justify-content', jc);\r\n this.safeSetStyle('align-items', ai);\r\n });\r\n }\r\n}\r\n","/**\r\n * @file fx-layout-gap.directive.ts (Angular 21 — signals)\r\n *\r\n * [fxLayoutGap] — sets gap on a flex or grid container.\r\n * Unitless numbers are normalized to px (e.g. \"16\" → \"16px\").\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • computed() derives the normalized gap value\r\n * • effect() in constructor writes to DOM\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\nfunction normalizeGap(raw: string): string {\r\n return raw.trim().split(/\\s+/)\r\n .map(v => /^\\d+(\\.\\d+)?$/.test(v) ? `${v}px` : v)\r\n .join(' ');\r\n}\r\n\r\n@Directive({\r\n selector: `\r\n [fxLayoutGap],\r\n [fxLayoutGap.xs],[fxLayoutGap.sm],[fxLayoutGap.md],[fxLayoutGap.lg],[fxLayoutGap.xl],[fxLayoutGap.xxl],\r\n [fxLayoutGap.lt-sm],[fxLayoutGap.lt-md],[fxLayoutGap.lt-lg],[fxLayoutGap.lt-xl],[fxLayoutGap.lt-xxl],\r\n [fxLayoutGap.gt-xs],[fxLayoutGap.gt-sm],[fxLayoutGap.gt-md],[fxLayoutGap.gt-lg],[fxLayoutGap.gt-xl],\r\n [fxLayoutGap.sm-up],[fxLayoutGap.md-up],[fxLayoutGap.lg-up],[fxLayoutGap.xl-up],[fxLayoutGap.xxl-up],\r\n [fxLayoutGap.sm-down],[fxLayoutGap.md-down],[fxLayoutGap.lg-down],[fxLayoutGap.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxLayoutGapDirective extends ResponsiveBaseDirective {\r\n readonly fxLayoutGap = input<string>(undefined, { alias: 'fxLayoutGap' });\r\n readonly xs = input<string>(undefined, { alias: 'fxLayoutGap.xs' });\r\n readonly sm = input<string>(undefined, { alias: 'fxLayoutGap.sm' });\r\n readonly md = input<string>(undefined, { alias: 'fxLayoutGap.md' });\r\n readonly lg = input<string>(undefined, { alias: 'fxLayoutGap.lg' });\r\n readonly xl = input<string>(undefined, { alias: 'fxLayoutGap.xl' });\r\n readonly xxl = input<string>(undefined, { alias: 'fxLayoutGap.xxl' });\r\n readonly ltSm = input<string>(undefined, { alias: 'fxLayoutGap.lt-sm' });\r\n readonly ltMd = input<string>(undefined, { alias: 'fxLayoutGap.lt-md' });\r\n readonly ltLg = input<string>(undefined, { alias: 'fxLayoutGap.lt-lg' });\r\n readonly ltXl = input<string>(undefined, { alias: 'fxLayoutGap.lt-xl' });\r\n readonly ltXxl = input<string>(undefined, { alias: 'fxLayoutGap.lt-xxl' });\r\n readonly gtXs = input<string>(undefined, { alias: 'fxLayoutGap.gt-xs' });\r\n readonly gtSm = input<string>(undefined, { alias: 'fxLayoutGap.gt-sm' });\r\n readonly gtMd = input<string>(undefined, { alias: 'fxLayoutGap.gt-md' });\r\n readonly gtLg = input<string>(undefined, { alias: 'fxLayoutGap.gt-lg' });\r\n readonly gtXl = input<string>(undefined, { alias: 'fxLayoutGap.gt-xl' });\r\n readonly smUp = input<string>(undefined, { alias: 'fxLayoutGap.sm-up' });\r\n readonly mdUp = input<string>(undefined, { alias: 'fxLayoutGap.md-up' });\r\n readonly lgUp = input<string>(undefined, { alias: 'fxLayoutGap.lg-up' });\r\n readonly xlUp = input<string>(undefined, { alias: 'fxLayoutGap.xl-up' });\r\n readonly xxlUp = input<string>(undefined, { alias: 'fxLayoutGap.xxl-up' });\r\n readonly smDown = input<string>(undefined, { alias: 'fxLayoutGap.sm-down' });\r\n readonly mdDown = input<string>(undefined, { alias: 'fxLayoutGap.md-down' });\r\n readonly lgDown = input<string>(undefined, { alias: 'fxLayoutGap.lg-down' });\r\n readonly xlDown = input<string>(undefined, { alias: 'fxLayoutGap.xl-down' });\r\n\r\n private readonly _gap = computed(() =>\r\n normalizeGap(resolveAll(\r\n { default: this.fxLayoutGap(), xs: this.xs(), sm: this.sm(), md: this.md(),\r\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? '0')\r\n );\r\n\r\n constructor() {\r\n super();\r\n effect(() => { this.safeSetStyle('gap', this._gap()); });\r\n }\r\n}\r\n","/**\n * @file fx-layout.directive.ts (Angular 21 - signals)\n *\n * [fxLayout] -- sets flex-direction (and optionally flex-wrap) on the host.\n * [fxLayoutWrap] -- dedicated alias for flex-wrap (original ngx-layout compat).\n *\n * Angular 21 changes:\n * - All @Input setters replaced by input() signals\n * - computed() builds reactive BP maps and derives CSS values\n * - effect() in constructor writes to DOM -- no lifecycle hooks\n *\n * Breakpoint suffixes:\n * Canonical : .xs .sm .md .lg .xl .xxl\n * lt-* : .lt-sm .lt-md .lt-lg .lt-xl .lt-xxl\n * gt-* : .gt-xs .gt-sm .gt-md .gt-lg .gt-xl\n * *-up : .sm-up .md-up .lg-up .xl-up .xxl-up\n * *-down : .sm-down .md-down .lg-down .xl-down\n */\n\nimport { Directive, computed, effect, input } from '@angular/core';\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\n\nconst VALID_DIRECTIONS = new Set(['row', 'column', 'row-reverse', 'column-reverse']);\nconst VALID_WRAPS = new Set(['wrap', 'wrap-reverse', 'nowrap']);\n\nfunction parseLayout(raw: string): [string, string] {\n const parts = raw.trim().split(/\\s+/);\n const dir = VALID_DIRECTIONS.has(parts[0]) ? parts[0] : 'row';\n const wrap = VALID_WRAPS.has(parts[1]) ? parts[1] : 'nowrap';\n return [dir, wrap];\n}\n\n@Directive({\n selector: `\n [fxLayout],\n [fxLayout.xs],[fxLayout.sm],[fxLayout.md],[fxLayout.lg],[fxLayout.xl],[fxLayout.xxl],\n [fxLayout.lt-sm],[fxLayout.lt-md],[fxLayout.lt-lg],[fxLayout.lt-xl],[fxLayout.lt-xxl],\n [fxLayout.gt-xs],[fxLayout.gt-sm],[fxLayout.gt-md],[fxLayout.gt-lg],[fxLayout.gt-xl],\n [fxLayout.sm-up],[fxLayout.md-up],[fxLayout.lg-up],[fxLayout.xl-up],[fxLayout.xxl-up],\n [fxLayout.sm-down],[fxLayout.md-down],[fxLayout.lg-down],[fxLayout.xl-down]\n `,\n standalone: true,\n host: { '[style.display]': '\"flex\"' },\n})\nexport class FxLayoutDirective extends ResponsiveBaseDirective {\n readonly fxLayout = input<string>('row', { alias: 'fxLayout' });\n readonly xs = input<string>(undefined, { alias: 'fxLayout.xs' });\n readonly sm = input<string>(undefined, { alias: 'fxLayout.sm' });\n readonly md = input<string>(undefined, { alias: 'fxLayout.md' });\n readonly lg = input<string>(undefined, { alias: 'fxLayout.lg' });\n readonly xl = input<string>(undefined, { alias: 'fxLayout.xl' });\n readonly xxl = input<string>(undefined, { alias: 'fxLayout.xxl' });\n readonly ltSm = input<string>(undefined, { alias: 'fxLayout.lt-sm' });\n readonly ltMd = input<string>(undefined, { alias: 'fxLayout.lt-md' });\n readonly ltLg = input<string>(undefined, { alias: 'fxLayout.lt-lg' });\n readonly ltXl = input<string>(undefined, { alias: 'fxLayout.lt-xl' });\n readonly ltXxl = input<string>(undefined, { alias: 'fxLayout.lt-xxl' });\n readonly gtXs = input<string>(undefined, { alias: 'fxLayout.gt-xs' });\n readonly gtSm = input<string>(undefined, { alias: 'fxLayout.gt-sm' });\n readonly gtMd = input<string>(undefined, { alias: 'fxLayout.gt-md' });\n readonly gtLg = input<string>(undefined, { alias: 'fxLayout.gt-lg' });\n readonly gtXl = input<string>(undefined, { alias: 'fxLayout.gt-xl' });\n readonly smUp = input<string>(undefined, { alias: 'fxLayout.sm-up' });\n readonly mdUp = input<string>(undefined, { alias: 'fxLayout.md-up' });\n readonly lgUp = input<string>(undefined, { alias: 'fxLayout.lg-up' });\n readonly xlUp = input<string>(undefined, { alias: 'fxLayout.xl-up' });\n readonly xxlUp = input<string>(undefined, { alias: 'fxLayout.xxl-up' });\n readonly smDown = input<string>(undefined, { alias: 'fxLayout.sm-down' });\n readonly mdDown = input<string>(undefined, { alias: 'fxLayout.md-down' });\n readonly lgDown = input<string>(undefined, { alias: 'fxLayout.lg-down' });\n readonly xlDown = input<string>(undefined, { alias: 'fxLayout.xl-down' });\n\n private readonly _parsed = computed(() =>\n parseLayout(resolveAll(\n { default: this.fxLayout(), xs: this.xs(), sm: this.sm(), md: this.md(),\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\n this.media.currentBp(), a => this.media.isActive(a)\n ) ?? 'row')\n );\n constructor() {\n super();\n effect(() => {\n const [dir, wrap] = this._parsed();\n this.safeSetStyle('flex-direction', dir);\n this.safeSetStyle('flex-wrap', wrap);\n });\n }\n}\n\ntype FlexWrap = 'wrap' | 'wrap-reverse' | 'nowrap';\n\n@Directive({\n selector: `\n [fxLayoutWrap],\n [fxLayoutWrap.xs],[fxLayoutWrap.sm],[fxLayoutWrap.md],[fxLayoutWrap.lg],[fxLayoutWrap.xl],[fxLayoutWrap.xxl],\n [fxLayoutWrap.lt-sm],[fxLayoutWrap.lt-md],[fxLayoutWrap.lt-lg],[fxLayoutWrap.lt-xl],[fxLayoutWrap.lt-xxl],\n [fxLayoutWrap.gt-xs],[fxLayoutWrap.gt-sm],[fxLayoutWrap.gt-md],[fxLayoutWrap.gt-lg],[fxLayoutWrap.gt-xl],\n [fxLayoutWrap.sm-up],[fxLayoutWrap.md-up],[fxLayoutWrap.lg-up],[fxLayoutWrap.xl-up],[fxLayoutWrap.xxl-up],\n [fxLayoutWrap.sm-down],[fxLayoutWrap.md-down],[fxLayoutWrap.lg-down],[fxLayoutWrap.xl-down]\n `,\n standalone: true,\n})\nexport class FxLayoutWrapDirective extends ResponsiveBaseDirective {\n readonly fxLayoutWrap = input<FlexWrap>('wrap', { alias: 'fxLayoutWrap' });\n readonly xs = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xs' });\n readonly sm = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.sm' });\n readonly md = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.md' });\n readonly lg = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lg' });\n readonly xl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xl' });\n readonly xxl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xxl' });\n readonly ltSm = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-sm' });\n readonly ltMd = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-md' });\n readonly ltLg = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-lg' });\n readonly ltXl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-xl' });\n readonly ltXxl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lt-xxl' });\n readonly gtXs = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-xs' });\n readonly gtSm = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-sm' });\n readonly gtMd = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-md' });\n readonly gtLg = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-lg' });\n readonly gtXl = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.gt-xl' });\n readonly smUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.sm-up' });\n readonly mdUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.md-up' });\n readonly lgUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lg-up' });\n readonly xlUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xl-up' });\n readonly xxlUp = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xxl-up' });\n readonly smDown = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.sm-down' });\n readonly mdDown = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.md-down' });\n readonly lgDown = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.lg-down' });\n readonly xlDown = input<FlexWrap>(undefined, { alias: 'fxLayoutWrap.xl-down' });\n\n private readonly _wrap = computed(() => {\n const w = resolveAll(\n { default: this.fxLayoutWrap(), xs: this.xs(), sm: this.sm(), md: this.md(),\n lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\n this.media.currentBp(), a => this.media.isActive(a)\n ) ?? 'wrap';\n return VALID_WRAPS.has(w) ? w : 'wrap';\n });\n constructor() {\n super();\n effect(() => { this.safeSetStyle('flex-wrap', this._wrap()); });\n }\n}\n","/**\r\n * @file fx-show-hide.directives.ts (Angular 21 — signals)\r\n *\r\n * [fxShow] / [fxHide] — responsive visibility via display:none.\r\n * Elements stay in the DOM (unlike *ifBp which removes them).\r\n *\r\n * IMPORTANT: fxShow and fxHide are implemented as a SINGLE directive class\r\n * (FxShowHideDirective) so that mixed patterns like\r\n * <div fxHide fxShow.xs> ← hidden everywhere, shown on xs\r\n * <div fxShow fxHide.lt-lg> ← shown everywhere, hidden below lg\r\n * work correctly.\r\n *\r\n * Resolution algorithm (no mobile-first cascade — semantics for show/hide\r\n * are point-in-time, not cumulative):\r\n * 1. Non-canonical (lt-*, gt-*, *-up, *-down) isActive checks — most specific first\r\n * 2. Exact canonical match for current bp\r\n * 3. Default values (fxShow / fxHide without suffix)\r\n * 4. Fallback: visible (true)\r\n *\r\n * When both show and hide match at the same priority level, show wins.\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, effect, input, computed } from '@angular/core';\r\nimport { ResponsiveBaseDirective, NON_CANONICAL_PRIORITY } from './responsive-base.directive';\r\n\r\nfunction toBool(v: string | boolean | '' | undefined | null): boolean | undefined {\r\n if (v === undefined || v === null) return undefined;\r\n if (typeof v === 'boolean') return v;\r\n if (v === '') return true;\r\n if (v === 'false' || v === '0') return false;\r\n return true;\r\n}\r\n\r\n// ─── Unified fxShow + fxHide ─────────────────────────────────────────────────\r\n\r\n@Directive({\r\n selector: `\r\n [fxShow],[fxHide],\r\n [fxShow.xs],[fxShow.sm],[fxShow.md],[fxShow.lg],[fxShow.xl],[fxShow.xxl],\r\n [fxShow.lt-sm],[fxShow.lt-md],[fxShow.lt-lg],[fxShow.lt-xl],[fxShow.lt-xxl],\r\n [fxShow.gt-xs],[fxShow.gt-sm],[fxShow.gt-md],[fxShow.gt-lg],[fxShow.gt-xl],\r\n [fxShow.sm-up],[fxShow.md-up],[fxShow.lg-up],[fxShow.xl-up],[fxShow.xxl-up],\r\n [fxShow.sm-down],[fxShow.md-down],[fxShow.lg-down],[fxShow.xl-down],\r\n [fxHide.xs],[fxHide.sm],[fxHide.md],[fxHide.lg],[fxHide.xl],[fxHide.xxl],\r\n [fxHide.lt-sm],[fxHide.lt-md],[fxHide.lt-lg],[fxHide.lt-xl],[fxHide.lt-xxl],\r\n [fxHide.gt-xs],[fxHide.gt-sm],[fxHide.gt-md],[fxHide.gt-lg],[fxHide.gt-xl],\r\n [fxHide.sm-up],[fxHide.md-up],[fxHide.lg-up],[fxHide.xl-up],[fxHide.xxl-up],\r\n [fxHide.sm-down],[fxHide.md-down],[fxHide.lg-down],[fxHide.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxShowHideDirective extends ResponsiveBaseDirective {\r\n // ── fxShow inputs ─────────────────────────────────────────────────────────\r\n readonly fxShow = input<boolean, string | boolean>(undefined, { alias: 'fxShow', transform: toBool });\r\n readonly showXs = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xs', transform: toBool });\r\n readonly showSm = input<boolean, string | boolean>(undefined, { alias: 'fxShow.sm', transform: toBool });\r\n readonly showMd = input<boolean, string | boolean>(undefined, { alias: 'fxShow.md', transform: toBool });\r\n readonly showLg = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lg', transform: toBool });\r\n readonly showXl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xl', transform: toBool });\r\n readonly showXxl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xxl', transform: toBool });\r\n readonly showLtSm = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-sm', transform: toBool });\r\n readonly showLtMd = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-md', transform: toBool });\r\n readonly showLtLg = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-lg', transform: toBool });\r\n readonly showLtXl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-xl', transform: toBool });\r\n readonly showLtXxl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lt-xxl', transform: toBool });\r\n readonly showGtXs = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-xs', transform: toBool });\r\n readonly showGtSm = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-sm', transform: toBool });\r\n readonly showGtMd = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-md', transform: toBool });\r\n readonly showGtLg = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-lg', transform: toBool });\r\n readonly showGtXl = input<boolean, string | boolean>(undefined, { alias: 'fxShow.gt-xl', transform: toBool });\r\n readonly showSmUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.sm-up', transform: toBool });\r\n readonly showMdUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.md-up', transform: toBool });\r\n readonly showLgUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lg-up', transform: toBool });\r\n readonly showXlUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xl-up', transform: toBool });\r\n readonly showXxlUp = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xxl-up', transform: toBool });\r\n readonly showSmDown = input<boolean, string | boolean>(undefined, { alias: 'fxShow.sm-down', transform: toBool });\r\n readonly showMdDown = input<boolean, string | boolean>(undefined, { alias: 'fxShow.md-down', transform: toBool });\r\n readonly showLgDown = input<boolean, string | boolean>(undefined, { alias: 'fxShow.lg-down', transform: toBool });\r\n readonly showXlDown = input<boolean, string | boolean>(undefined, { alias: 'fxShow.xl-down', transform: toBool });\r\n\r\n // ── fxHide inputs ─────────────────────────────────────────────────────────\r\n readonly fxHide = input<boolean, string | boolean>(undefined, { alias: 'fxHide', transform: toBool });\r\n readonly hideXs = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xs', transform: toBool });\r\n readonly hideSm = input<boolean, string | boolean>(undefined, { alias: 'fxHide.sm', transform: toBool });\r\n readonly hideMd = input<boolean, string | boolean>(undefined, { alias: 'fxHide.md', transform: toBool });\r\n readonly hideLg = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lg', transform: toBool });\r\n readonly hideXl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xl', transform: toBool });\r\n readonly hideXxl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xxl', transform: toBool });\r\n readonly hideLtSm = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-sm', transform: toBool });\r\n readonly hideLtMd = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-md', transform: toBool });\r\n readonly hideLtLg = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-lg', transform: toBool });\r\n readonly hideLtXl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-xl', transform: toBool });\r\n readonly hideLtXxl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lt-xxl', transform: toBool });\r\n readonly hideGtXs = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-xs', transform: toBool });\r\n readonly hideGtSm = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-sm', transform: toBool });\r\n readonly hideGtMd = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-md', transform: toBool });\r\n readonly hideGtLg = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-lg', transform: toBool });\r\n readonly hideGtXl = input<boolean, string | boolean>(undefined, { alias: 'fxHide.gt-xl', transform: toBool });\r\n readonly hideSmUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.sm-up', transform: toBool });\r\n readonly hideMdUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.md-up', transform: toBool });\r\n readonly hideLgUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lg-up', transform: toBool });\r\n readonly hideXlUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xl-up', transform: toBool });\r\n readonly hideXxlUp = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xxl-up', transform: toBool });\r\n readonly hideSmDown = input<boolean, string | boolean>(undefined, { alias: 'fxHide.sm-down', transform: toBool });\r\n readonly hideMdDown = input<boolean, string | boolean>(undefined, { alias: 'fxHide.md-down', transform: toBool });\r\n readonly hideLgDown = input<boolean, string | boolean>(undefined, { alias: 'fxHide.lg-down', transform: toBool });\r\n readonly hideXlDown = input<boolean, string | boolean>(undefined, { alias: 'fxHide.xl-down', transform: toBool });\r\n\r\n private readonly _visible = computed((): boolean => {\r\n const bp = this.media.currentBp();\r\n const isActive = (a: string) => this.media.isActive(a);\r\n\r\n // Non-canonical maps (alias → show value / hide value)\r\n const showNc: Record<string, boolean | undefined> = {\r\n 'lt-sm': this.showLtSm(), 'lt-md': this.showLtMd(), 'lt-lg': this.showLtLg(),\r\n 'lt-xl': this.showLtXl(), 'lt-xxl': this.showLtXxl(),\r\n 'gt-xs': this.showGtXs(), 'gt-sm': this.showGtSm(), 'gt-md': this.showGtMd(),\r\n 'gt-lg': this.showGtLg(), 'gt-xl': this.showGtXl(),\r\n 'sm-up': this.showSmUp(), 'md-up': this.showMdUp(), 'lg-up': this.showLgUp(),\r\n 'xl-up': this.showXlUp(), 'xxl-up': this.showXxlUp(),\r\n 'sm-down': this.showSmDown(), 'md-down': this.showMdDown(),\r\n 'lg-down': this.showLgDown(), 'xl-down': this.showXlDown(),\r\n };\r\n const hideNc: Record<string, boolean | undefined> = {\r\n 'lt-sm': this.hideLtSm(), 'lt-md': this.hideLtMd(), 'lt-lg': this.hideLtLg(),\r\n 'lt-xl': this.hideLtXl(), 'lt-xxl': this.hideLtXxl(),\r\n 'gt-xs': this.hideGtXs(), 'gt-sm': this.hideGtSm(), 'gt-md': this.hideGtMd(),\r\n 'gt-lg': this.hideGtLg(), 'gt-xl': this.hideGtXl(),\r\n 'sm-up': this.hideSmUp(), 'md-up': this.hideMdUp(), 'lg-up': this.hideLgUp(),\r\n 'xl-up': this.hideXlUp(), 'xxl-up': this.hideXxlUp(),\r\n 'sm-down': this.hideSmDown(), 'md-down': this.hideMdDown(),\r\n 'lg-down': this.hideLgDown(), 'xl-down': this.hideXlDown(),\r\n };\r\n\r\n // 1. Non-canonical (lt-*, gt-*, *-up, *-down) — most specific first\r\n for (const alias of NON_CANONICAL_PRIORITY) {\r\n const sv = showNc[alias];\r\n const hv = hideNc[alias];\r\n if ((sv !== undefined || hv !== undefined) && isActive(alias)) {\r\n if (sv !== undefined) return sv; // show beats hide at same priority\r\n return !hv!;\r\n }\r\n }\r\n\r\n // Canonical maps (bp → value) — exact only, NO cascade\r\n const showV: Record<string, boolean | undefined> = {\r\n xs: this.showXs(), sm: this.showSm(), md: this.showMd(),\r\n lg: this.showLg(), xl: this.showXl(), xxl: this.showXxl(),\r\n };\r\n const hideV: Record<string, boolean | undefined> = {\r\n xs: this.hideXs(), sm: this.hideSm(), md: this.hideMd(),\r\n lg: this.hideLg(), xl: this.hideXl(), xxl: this.hideXxl(),\r\n };\r\n\r\n // 2. Exact canonical match for current bp\r\n const showExact = showV[bp];\r\n const hideExact = hideV[bp];\r\n if (showExact !== undefined) return showExact;\r\n if (hideExact !== undefined) return !hideExact;\r\n\r\n // 3. Default values (fxShow / fxHide without suffix)\r\n const showDef = this.fxShow();\r\n const hideDef = this.fxHide();\r\n if (showDef !== undefined) return showDef;\r\n if (hideDef !== undefined) return !hideDef;\r\n\r\n // 4. Neither directive active → visible\r\n return true;\r\n });\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n this._visible()\r\n ? this.r2.removeStyle(this.el.nativeElement, 'display')\r\n : this.r2.setStyle(this.el.nativeElement, 'display', 'none');\r\n });\r\n }\r\n}\r\n\r\n\r\n","/**\r\n * @file fx-style-class.directives.ts (Angular 21 — signals)\r\n *\r\n * [fxStyle] — responsive inline style binding (Record<string,string>)\r\n * [fxClass] — responsive CSS class binding (string | string[] | Record<string,boolean>)\r\n *\r\n * Angular 21 changes:\r\n * • All @Input setters replaced by input() signals\r\n * • computed() derives resolved StyleMap / ClassInput value\r\n * • effect() in constructor handles DOM writes with diff\r\n *\r\n * Style/class leak prevention:\r\n * _appliedProps / _appliedClasses are regular Set<string> fields\r\n * (NOT signals) — they track what was actively applied so the\r\n * effect can remove stale properties/classes on the next run.\r\n *\r\n * Breakpoint suffixes: canonical + lt-* + gt-* + *-up + *-down\r\n */\r\n\r\nimport { Directive, computed, effect, input } from '@angular/core';\r\nimport { ResponsiveBaseDirective, resolveAll } from './responsive-base.directive';\r\n\r\n// ─── fxStyle ─────────────────────────────────────────────────────────────────\r\n\r\ntype StyleMap = Record<string, string>;\r\n\r\n@Directive({\r\n selector: `\r\n [fxStyle],\r\n [fxStyle.xs],[fxStyle.sm],[fxStyle.md],[fxStyle.lg],[fxStyle.xl],[fxStyle.xxl],\r\n [fxStyle.lt-sm],[fxStyle.lt-md],[fxStyle.lt-lg],[fxStyle.lt-xl],[fxStyle.lt-xxl],\r\n [fxStyle.gt-xs],[fxStyle.gt-sm],[fxStyle.gt-md],[fxStyle.gt-lg],[fxStyle.gt-xl],\r\n [fxStyle.sm-up],[fxStyle.md-up],[fxStyle.lg-up],[fxStyle.xl-up],[fxStyle.xxl-up],\r\n [fxStyle.sm-down],[fxStyle.md-down],[fxStyle.lg-down],[fxStyle.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxStyleDirective extends ResponsiveBaseDirective {\r\n readonly fxStyle = input<StyleMap>(undefined, { alias: 'fxStyle' });\r\n readonly xs = input<StyleMap>(undefined, { alias: 'fxStyle.xs' });\r\n readonly sm = input<StyleMap>(undefined, { alias: 'fxStyle.sm' });\r\n readonly md = input<StyleMap>(undefined, { alias: 'fxStyle.md' });\r\n readonly lg = input<StyleMap>(undefined, { alias: 'fxStyle.lg' });\r\n readonly xl = input<StyleMap>(undefined, { alias: 'fxStyle.xl' });\r\n readonly xxl = input<StyleMap>(undefined, { alias: 'fxStyle.xxl' });\r\n readonly ltSm = input<StyleMap>(undefined, { alias: 'fxStyle.lt-sm' });\r\n readonly ltMd = input<StyleMap>(undefined, { alias: 'fxStyle.lt-md' });\r\n readonly ltLg = input<StyleMap>(undefined, { alias: 'fxStyle.lt-lg' });\r\n readonly ltXl = input<StyleMap>(undefined, { alias: 'fxStyle.lt-xl' });\r\n readonly ltXxl = input<StyleMap>(undefined, { alias: 'fxStyle.lt-xxl' });\r\n readonly gtXs = input<StyleMap>(undefined, { alias: 'fxStyle.gt-xs' });\r\n readonly gtSm = input<StyleMap>(undefined, { alias: 'fxStyle.gt-sm' });\r\n readonly gtMd = input<StyleMap>(undefined, { alias: 'fxStyle.gt-md' });\r\n readonly gtLg = input<StyleMap>(undefined, { alias: 'fxStyle.gt-lg' });\r\n readonly gtXl = input<StyleMap>(undefined, { alias: 'fxStyle.gt-xl' });\r\n readonly smUp = input<StyleMap>(undefined, { alias: 'fxStyle.sm-up' });\r\n readonly mdUp = input<StyleMap>(undefined, { alias: 'fxStyle.md-up' });\r\n readonly lgUp = input<StyleMap>(undefined, { alias: 'fxStyle.lg-up' });\r\n readonly xlUp = input<StyleMap>(undefined, { alias: 'fxStyle.xl-up' });\r\n readonly xxlUp = input<StyleMap>(undefined, { alias: 'fxStyle.xxl-up' });\r\n readonly smDown = input<StyleMap>(undefined, { alias: 'fxStyle.sm-down' });\r\n readonly mdDown = input<StyleMap>(undefined, { alias: 'fxStyle.md-down' });\r\n readonly lgDown = input<StyleMap>(undefined, { alias: 'fxStyle.lg-down' });\r\n readonly xlDown = input<StyleMap>(undefined, { alias: 'fxStyle.xl-down' });\r\n\r\n private readonly _resolved = computed(() =>\r\n (resolveAll<StyleMap>(\r\n { default: this.fxStyle(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ) ?? {})\r\n );\r\n\r\n /** Tracks which CSS properties were last applied — plain field, not a signal. */\r\n private _appliedProps = new Set<string>();\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (!this.isBrowser) return;\r\n const next = this._resolved();\r\n const nextKeys = new Set(Object.keys(next));\r\n for (const prop of this._appliedProps) {\r\n if (!nextKeys.has(prop)) this.r2.removeStyle(this.el.nativeElement, prop);\r\n }\r\n for (const [prop, value] of Object.entries(next)) {\r\n this.r2.setStyle(this.el.nativeElement, prop, value);\r\n }\r\n this._appliedProps = nextKeys;\r\n });\r\n }\r\n}\r\n\r\n// ─── fxClass ─────────────────────────────────────────────────────────────────\r\n\r\ntype ClassInput = string | string[] | Record<string, boolean>;\r\n\r\nfunction toClassSet(v: ClassInput | undefined): Set<string> {\r\n if (!v) return new Set();\r\n if (typeof v === 'string') return new Set(v.split(/\\s+/).filter(Boolean));\r\n if (Array.isArray(v)) return new Set(v.filter(Boolean));\r\n return new Set(Object.entries(v).filter(([, on]) => on).map(([cls]) => cls));\r\n}\r\n\r\n@Directive({\r\n selector: `\r\n [fxClass],\r\n [fxClass.xs],[fxClass.sm],[fxClass.md],[fxClass.lg],[fxClass.xl],[fxClass.xxl],\r\n [fxClass.lt-sm],[fxClass.lt-md],[fxClass.lt-lg],[fxClass.lt-xl],[fxClass.lt-xxl],\r\n [fxClass.gt-xs],[fxClass.gt-sm],[fxClass.gt-md],[fxClass.gt-lg],[fxClass.gt-xl],\r\n [fxClass.sm-up],[fxClass.md-up],[fxClass.lg-up],[fxClass.xl-up],[fxClass.xxl-up],\r\n [fxClass.sm-down],[fxClass.md-down],[fxClass.lg-down],[fxClass.xl-down]\r\n `,\r\n standalone: true,\r\n})\r\nexport class FxClassDirective extends ResponsiveBaseDirective {\r\n readonly fxClass = input<ClassInput>(undefined, { alias: 'fxClass' });\r\n readonly xs = input<ClassInput>(undefined, { alias: 'fxClass.xs' });\r\n readonly sm = input<ClassInput>(undefined, { alias: 'fxClass.sm' });\r\n readonly md = input<ClassInput>(undefined, { alias: 'fxClass.md' });\r\n readonly lg = input<ClassInput>(undefined, { alias: 'fxClass.lg' });\r\n readonly xl = input<ClassInput>(undefined, { alias: 'fxClass.xl' });\r\n readonly xxl = input<ClassInput>(undefined, { alias: 'fxClass.xxl' });\r\n readonly ltSm = input<ClassInput>(undefined, { alias: 'fxClass.lt-sm' });\r\n readonly ltMd = input<ClassInput>(undefined, { alias: 'fxClass.lt-md' });\r\n readonly ltLg = input<ClassInput>(undefined, { alias: 'fxClass.lt-lg' });\r\n readonly ltXl = input<ClassInput>(undefined, { alias: 'fxClass.lt-xl' });\r\n readonly ltXxl = input<ClassInput>(undefined, { alias: 'fxClass.lt-xxl' });\r\n readonly gtXs = input<ClassInput>(undefined, { alias: 'fxClass.gt-xs' });\r\n readonly gtSm = input<ClassInput>(undefined, { alias: 'fxClass.gt-sm' });\r\n readonly gtMd = input<ClassInput>(undefined, { alias: 'fxClass.gt-md' });\r\n readonly gtLg = input<ClassInput>(undefined, { alias: 'fxClass.gt-lg' });\r\n readonly gtXl = input<ClassInput>(undefined, { alias: 'fxClass.gt-xl' });\r\n readonly smUp = input<ClassInput>(undefined, { alias: 'fxClass.sm-up' });\r\n readonly mdUp = input<ClassInput>(undefined, { alias: 'fxClass.md-up' });\r\n readonly lgUp = input<ClassInput>(undefined, { alias: 'fxClass.lg-up' });\r\n readonly xlUp = input<ClassInput>(undefined, { alias: 'fxClass.xl-up' });\r\n readonly xxlUp = input<ClassInput>(undefined, { alias: 'fxClass.xxl-up' });\r\n readonly smDown = input<ClassInput>(undefined, { alias: 'fxClass.sm-down' });\r\n readonly mdDown = input<ClassInput>(undefined, { alias: 'fxClass.md-down' });\r\n readonly lgDown = input<ClassInput>(undefined, { alias: 'fxClass.lg-down' });\r\n readonly xlDown = input<ClassInput>(undefined, { alias: 'fxClass.xl-down' });\r\n\r\n private readonly _resolved = computed(() =>\r\n toClassSet(resolveAll<ClassInput>(\r\n { default: this.fxClass(), xs: this.xs(), sm: this.sm(),\r\n md: this.md(), lg: this.lg(), xl: this.xl(), xxl: this.xxl() },\r\n { 'lt-sm': this.ltSm(), 'lt-md': this.ltMd(), 'lt-lg': this.ltLg(),\r\n 'lt-xl': this.ltXl(), 'lt-xxl': this.ltXxl(),\r\n 'gt-xs': this.gtXs(), 'gt-sm': this.gtSm(), 'gt-md': this.gtMd(),\r\n 'gt-lg': this.gtLg(), 'gt-xl': this.gtXl(),\r\n 'sm-up': this.smUp(), 'md-up': this.mdUp(), 'lg-up': this.lgUp(),\r\n 'xl-up': this.xlUp(), 'xxl-up': this.xxlUp(),\r\n 'sm-down': this.smDown(), 'md-down': this.mdDown(),\r\n 'lg-down': this.lgDown(), 'xl-down': this.xlDown() },\r\n this.media.currentBp(), a => this.media.isActive(a)\r\n ))\r\n );\r\n\r\n /** Tracks which CSS classes were last applied — plain field, not a signal. */\r\n private _appliedClasses = new Set<string>();\r\n\r\n constructor() {\r\n super();\r\n effect(() => {\r\n if (!this.isBrowser) return;\r\n const next = this._resolved();\r\n for (const cls of this._appliedClasses) {\r\n if (!next.has(cls)) this.r2.removeClass(this.el.nativeElement, cls);\r\n }\r\n for (const cls of next) {\r\n this.r2.addClass(this.el.nativeElement, cls);\r\n }\r\n this._appliedClasses = next;\r\n });\r\n }\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\n// ── Tokens ───────────────────────────────────────────────────────────────────\r\nexport { BS5_BREAKPOINTS, LAYOUT_BREAKPOINTS, CANONICAL_ALIASES } from './breakpoints';\r\nexport type { BreakpointAlias } from './breakpoints';\r\nexport { ALIAS_FAMILIES } from './breakpoints';\r\n\r\n// ── Input type helpers (useful for custom directive extensions) ──────────────\r\nexport type { CanonicalKey, NonCanonicalKey, BpValues, NcValues } from './responsive-inputs.mixin';\r\n\r\n// ── Service ──────────────────────────────────────────────────────────────────\r\nexport { MediaObserver } from './media-observer.service';\r\n\r\n// ── Base (re-export for extension) ───────────────────────────────────────────\r\nexport { ResponsiveBaseDirective, NON_CANONICAL_PRIORITY } from './responsive-base.directive';\r\n\r\n// ── Flex directives ──────────────────────────────────────────────────────────\r\nexport { FxLayoutDirective, FxLayoutWrapDirective } from './fx-layout.directive';\r\nexport { FxFlexDirective } from './fx-flex.directive';\r\nexport { FxLayoutAlignDirective } from './fx-layout-align.directive';\r\nexport { FxLayoutGapDirective } from './fx-layout-gap.directive';\r\nexport {\r\n FxFlexOrderDirective,\r\n FxFlexOffsetDirective,\r\n FxFlexAlignDirective,\r\n FxFlexFillDirective,\r\n} from './fx-flex-extras.directives';\r\n\r\n// ── Visibility directives ─────────────────────────────────────────────────────\r\nexport { FxShowHideDirective } from './fx-show-hide.directives';\r\n\r\n// ── Style / Class directives ─────────────────────────────────────────────────\r\nexport { FxStyleDirective, FxClassDirective } from './fx-style-class.directives';\r\n\r\n// ── Grid directives (bonus — not in original ngx-layout) ─────────────────────\r\nexport {\r\n FxGridDirective,\r\n FxGridColumnDirective,\r\n FxGridAreaDirective,\r\n} from './fx-grid.directives';\r\n\r\n// ── Structural directives ─────────────────────────────────────────────────────\r\nexport { IfBpDirective } from './if-bp.directive';\r\n\r\n// ── Convenience module (for non-standalone NgModule apps) ────────────────────\r\nimport { FxLayoutDirective, FxLayoutWrapDirective } from './fx-layout.directive';\r\nimport { FxFlexDirective } from './fx-flex.directive';\r\nimport { FxLayoutAlignDirective } from './fx-layout-align.directive';\r\nimport { FxLayoutGapDirective } from './fx-layout-gap.directive';\r\nimport {\r\n FxFlexOrderDirective, FxFlexOffsetDirective,\r\n FxFlexAlignDirective, FxFlexFillDirective,\r\n} from './fx-flex-extras.directives';\r\nimport { FxStyleDirective, FxClassDirective } from './fx-style-class.directives';\r\nimport {\r\n FxGridDirective, FxGridColumnDirective, FxGridAreaDirective,\r\n} from './fx-grid.directives';\r\nimport { IfBpDirective } from './if-bp.directive';\r\nimport { FxShowHideDirective } from \"./fx-show-hide.directives\";\r\n\r\n\r\n@NgModule({\r\n imports: [\r\n FxLayoutDirective,\r\n FxLayoutWrapDirective,\r\n FxFlexDirective,\r\n FxShowHideDirective,\r\n FxLayoutAlignDirective,\r\n FxLayoutGapDirective,\r\n FxFlexOrderDirective,\r\n FxFlexOffsetDirective,\r\n FxFlexAlignDirective,\r\n FxFlexFillDirective,\r\n FxStyleDirective,\r\n FxClassDirective,\r\n FxGridDirective,\r\n FxGridColumnDirective,\r\n FxGridAreaDirective,\r\n IfBpDirective,\r\n ],\r\n exports: [\r\n FxLayoutDirective,\r\n FxLayoutWrapDirective,\r\n FxFlexDirective,\r\n FxShowHideDirective,\r\n FxLayoutAlignDirective,\r\n FxLayoutGapDirective,\r\n FxFlexOrderDirective,\r\n FxFlexOffsetDirective,\r\n FxFlexAlignDirective,\r\n FxFlexFillDirective,\r\n FxStyleDirective,\r\n FxClassDirective,\r\n FxGridDirective,\r\n FxGridColumnDirective,\r\n FxGridAreaDirective,\r\n IfBpDirective,\r\n ],\r\n\r\n})\r\nexport class ArsUIFlexModule { }\r\n\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './ui/ui.module';\r\nexport * from './ui/definitions';\r\nexport * from './ui/filters';\r\nexport * from './ui/paginatorIntl';\r\nexport * from './ui/services/index';\r\nexport * from './ui/dialogs/index';\r\nexport * from './ui/components/index';\r\nexport * from './ui/directives/index';\r\nexport * from './ui/directives/flex/index';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i3","i4","i5","i6","i1","i7","i8","i9","i12","i10","toBool","normalizeGap"],"mappings":"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AA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBA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"}