@arsedizioni/ars-utils 22.5.20 → 22.5.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-ui.dialogs.mjs","sources":["../../../projects/ars-utils/ui.dialogs/confirm/confirm-dialog.component.ts","../../../projects/ars-utils/ui.dialogs/confirm/confirm-dialog.component.html","../../../projects/ars-utils/ui.dialogs/delete/delete-dialog.component.ts","../../../projects/ars-utils/ui.dialogs/delete/delete-dialog.component.html","../../../projects/ars-utils/ui.dialogs/toast/toast.component.ts","../../../projects/ars-utils/ui.dialogs/toast/toast.component.html","../../../projects/ars-utils/ui.dialogs/dialog.service.ts","../../../projects/ars-utils/ui.dialogs/public_api.ts","../../../projects/ars-utils/ui.dialogs/arsedizioni-ars-utils-ui.dialogs.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { DialogOption, DialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ConfirmDialogOption extends DialogOption {}\n\nexport interface ConfirmDialogData {\n title?: string;\n message: string;\n okCaption?: string;\n cancelCaption?: string;\n otherCaption?: string;\n options?: ConfirmDialogOption[];\n details?: string;\n}\n\n@Component({\n templateUrl: './confirm-dialog.component.html',\n styleUrl: './confirm-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexLayoutModule, MatCheckboxModule,\n MatDialogActions, MatButtonModule, SafeHtmlPipe]\n})\nexport class ConfirmDialogComponent {\n /** Emitted when the user makes a choice. Carries the selected result and any option state. */\n readonly choosen = output<DialogResult>();\n\n private readonly dialogRef = inject(MatDialogRef<ConfirmDialogComponent>);\n\n /** Dialog configuration, with sensible defaults applied at construction time. */\n protected readonly dialogData = signal<ConfirmDialogData>({\n title: 'Conferma',\n okCaption: 'Si',\n cancelCaption: 'No',\n message: '',\n ...((inject(MAT_DIALOG_DATA) as ConfirmDialogData | null) ?? {}),\n });\n\n constructor() {\n // Ensure optional captions always have a value even when the caller omits them\n this.dialogData.update(d => ({\n ...d,\n title: d.title ?? 'Conferma',\n okCaption: d.okCaption ?? 'Si',\n cancelCaption: d.cancelCaption ?? 'No',\n }));\n }\n\n /**\n * Confirms the dialog, emitting `'ok'` together with the current option selections.\n */\n ok(): void {\n this.choosen.emit({ result: 'ok', options: this.dialogData().options });\n this.dialogRef.close();\n }\n\n /**\n * Cancels the dialog, emitting `'cancel'`.\n */\n cancel(): void {\n this.choosen.emit({ result: 'cancel' });\n this.dialogRef.close();\n }\n\n /**\n * Triggers the tertiary action, emitting `'other'`.\n */\n other(): void {\n this.choosen.emit({ result: 'other' });\n this.dialogRef.close();\n }\n}\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 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\" 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, output, signal } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { DialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { FormField, form, required, validate } from '@angular/forms/signals';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nexport enum DeleteDialogConfirmMode {\n None = 0,\n Simple = 1,\n Strong = 2\n}\n\nexport interface DeleteDialogData {\n title?: string;\n message: string;\n confirmMode: DeleteDialogConfirmMode;\n okCaption?: string;\n cancelCaption?: string;\n details?: string;\n appearance?: MatFormFieldAppearance;\n}\n\n@Component({\n templateUrl: './delete-dialog.component.html',\n styleUrl: './delete-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexLayoutModule, MatCheckboxModule, FormField,\n MatDialogActions, MatButtonModule, MatFormFieldModule, MatInputModule, SafeHtmlPipe]\n})\nexport class DeleteDialogComponent {\n /** Emitted when the user makes a choice. Carries the selected result. */\n readonly choosen = output<DialogResult>();\n\n private readonly dialogRef = inject(MatDialogRef<DeleteDialogComponent>);\n\n /** Dialog configuration with defaults applied at construction time. */\n protected readonly dialogData = signal<DeleteDialogData>((() => {\n const raw = (inject(MAT_DIALOG_DATA) as DeleteDialogData | null) ?? {};\n return {\n title: 'Attenzione',\n okCaption: 'Si',\n cancelCaption: 'No',\n confirmMode: DeleteDialogConfirmMode.None,\n message: '',\n ...raw,\n };\n })());\n\n /**\n * Model backing the signal form: `confirmed` starts as `true` for all modes\n * except `Simple`, which requires explicit checkbox confirmation, and\n * `confirmValue` is the strong-confirmation text.\n */\n private readonly model = signal<{ confirmed: boolean; confirmValue: string }>({\n confirmed: this.dialogData().confirmMode !== DeleteDialogConfirmMode.Simple,\n confirmValue: '',\n });\n\n /**\n * Signal form for the confirmation. In `Simple` mode the checkbox must be\n * checked; in `Strong` mode the text must be exactly the word \"elimina\".\n */\n protected readonly form = form(this.model, p => {\n validate(p.confirmed, ({ value }) =>\n this.dialogData().confirmMode !== DeleteDialogConfirmMode.Simple || value()\n ? undefined\n : { kind: 'confirmed', message: 'Confermo la cancellazione' });\n required(p.confirmValue, {\n message: 'Digita la parola \"elimina\"',\n when: () => this.dialogData().confirmMode === DeleteDialogConfirmMode.Strong,\n });\n validate(p.confirmValue, ({ value }) =>\n this.dialogData().confirmMode !== DeleteDialogConfirmMode.Strong\n || !value()\n || value().toLowerCase() === 'elimina'\n ? undefined\n : { kind: 'confirmValue', message: 'Digita la parola \"elimina\"' });\n });\n\n /**\n * Confirms the deletion, emitting `'ok'` and closing the dialog.\n */\n ok(): void {\n this.choosen.emit({ result: 'ok' });\n this.dialogRef.close();\n }\n\n /**\n * Cancels the operation, emitting `'cancel'` and closing the dialog.\n */\n cancel(): void {\n this.choosen.emit({ result: 'cancel' });\n this.dialogRef.close();\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form 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 [formField]=\"form.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 [formField]=\"form.confirmValue\"\r\n [attr.aria-label]=\"'Digita la parola -elimina-'\">\r\n @if (form.confirmValue().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()\" [disabled]=\"form().invalid()\"\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>\r\n","import { Component, ChangeDetectionStrategy, inject, output, signal } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\nexport interface ToastData {\n message: string;\n icon?: string;\n actionCaption?: string;\n}\n\n@Component({\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule, SafeHtmlPipe]\n})\nexport class ToastComponent {\n /** Emitted when the user clicks the optional action button. */\n readonly action = output<void>();\n\n /** Snack-bar payload with a safe fallback to an empty message when no data is injected. */\n protected readonly dialogData = signal<ToastData>(\n (inject(MAT_SNACK_BAR_DATA) as ToastData | null) ?? { message: '' }\n );\n\n /**\n * Emits the `action` event to notify the caller that the action button was clicked.\n */\n protected do(): void {\n this.action.emit();\n }\n}\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 { PlatformLocation } from '@angular/common';\nimport { inject, Service } from '@angular/core';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarRef } from '@angular/material/snack-bar';\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { UIService } from '@arsedizioni/ars-utils/ui';\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { first } from 'rxjs/operators';\nimport {\n ConfirmDialogComponent,\n ConfirmDialogData,\n ConfirmDialogOption\n} from './confirm/confirm-dialog.component';\nimport { DeleteDialogComponent, DeleteDialogConfirmMode, DeleteDialogData } from './delete/delete-dialog.component';\nimport { ToastComponent, ToastData } from './toast/toast.component';\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IDialogService {}\n\ninterface PopHistoryEntry {\n id: string;\n value: number;\n}\n\n\n@Service()\nexport class DialogService extends ShellService {\n\n private readonly uiService = inject(UIService);\n\n /**\n * Shares the SAME `appearance` signal instance as the root `UIService`:\n * `uiService.setAppearance('outline')` is immediately visible here and in\n * every dialog opened by this service.\n *\n * Held by delegation and no longer by inheritance: this service now extends `ShellService`,\n * which knows nothing about Material and must not, so the two members every caller uses of\n * `UIService` are re-exposed here.\n */\n readonly appearance = this.uiService.appearance;\n\n /**\n * Updates the global form-field appearance.\n * @param value - The new appearance value. Falls back to `'fill'` when `undefined` is passed.\n * @returns void\n */\n setAppearance(value: 'fill' | 'outline' | undefined): void {\n this.uiService.setAppearance(value);\n }\n\n private readonly dialog = inject(MatDialog);\n private readonly snackBar = inject(MatSnackBar);\n private readonly location = inject(PlatformLocation);\n\n private readonly popHistory: PopHistoryEntry[] = [];\n private popState = true;\n private poppingState = false;\n\n constructor() {\n super();\n\n // Handle dialog close when back button is clicked\n this.location.onPopState(() => {\n if (!this.poppingState) {\n const count = this.dialog.openDialogs.length;\n if (count > 0) {\n // Disable pop state if needed\n this.popState = false;\n // Close dialog\n this.dialog.openDialogs[count - 1].close();\n }\n } else {\n this.poppingState = false;\n }\n });\n }\n\n /**\n * Lets the next `popstate` through without closing the topmost dialog.\n *\n * Back closing the dialog on top is the rule of this service, and its listener is registered in\n * the constructor — so nothing attached later can get in front of it. A caller that owns a\n * dismissable state of its own INSIDE a dialog (a full-screen editor, a picker covering the\n * dialog, a wizard step) needs Back to unwind that state first, and this is the only way to ask\n * for it: push a history entry, call this, and handle the pop.\n *\n * The suspension lasts exactly one `popstate` and is consumed whether or not the caller pushed\n * an entry, so it can not leave the service permanently deaf to the Back button.\n */\n suspendBackClose(): void {\n this.poppingState = true;\n }\n\n /**\n * Removes trailing `#` characters from the current URL (e.g. after a page reload).\n * @param resetPoppingState - When `true`, resets the internal popping-state flag.\n */\n clearUrl(resetPoppingState: boolean = false): void {\n const url = location.href;\n let l = url.length;\n while (l >= 0 && url[l - 1] === '#') l--;\n if (l < url.length)\n history.replaceState({}, '', url.substring(0, l));\n if (resetPoppingState)\n this.poppingState = false;\n }\n\n /**\n * Close all dialogs\n */\n closeAll(): void {\n this.dialog.closeAll();\n }\n\n\n /**\n * Opens a Material dialog. Returns `null` when not running in a browser.\n * @param component - The component to open as a dialog.\n * @param config - The dialog configuration.\n * @returns The dialog reference, or `null` outside the browser.\n */\n open<T>(component: ComponentType<T>, config: MatDialogConfig<unknown>): MatDialogRef<T> | null {\n if (!SystemUtils.isBrowser()) return null;\n // Immediately, not with the grace period: the dialog is about to be drawn under an overlay\n // that sits above it by z-index, and half a second of it covering a fresh dialog would show.\n this.clearBusy(true);\n return this.openDialog(component, config);\n }\n\n\n /**\n * Internal helper that wraps `MatDialog.open`, subscribes to lifecycle hooks\n * and manages browser-history push/pop entries.\n * @param component - The component to open.\n * @param config - The dialog configuration.\n * @returns The dialog reference.\n */\n private openDialog<T>(component: ComponentType<T>, config: MatDialogConfig<unknown>): MatDialogRef<T> {\n // We will take care of navigation\n config.closeOnNavigation = false;\n const d = this.dialog.open(component, config);\n d.afterOpened().pipe(first()).subscribe(() => {\n this.pushDialog(d.id);\n // The dialog has just entered the top layer, and the top layer orders by promotion: an\n // error the user has not dismissed yet would end up underneath it.\n this.raiseMessage();\n });\n d.beforeClosed().pipe(first()).subscribe(() => this.popDialog(d.id));\n return d;\n }\n\n /**\n * Returns the element height including margins\n * @param element - element\n * @returns the height\n */\n private outerHeight(element: HTMLElement): number {\n if (!SystemUtils.isBrowser()) return 0;\n const height = element.offsetHeight;\n const style = window.getComputedStyle(element);\n return (['top', 'bottom'] as const)\n .map(side => parseInt(style.getPropertyValue(`margin-${side}`), 10))\n .reduce((total, margin) => total + margin, height);\n }\n\n /**\n * Return current dialog height\n */\n getCurrentDialogHeight(): number {\n if (!SystemUtils.isBrowser()) return 0;\n const count = this.popHistory.length;\n if (count > 0) {\n let id = this.popHistory[count - 1].id;\n let elem = document.getElementById(id);\n if (elem && elem.clientHeight > 0) return elem.clientHeight;\n }\n return 0;\n }\n\n /**\n * Returns the scrollable content area height for the topmost open dialog.\n * @param fixedPartsClassName - CSS class names of fixed (non-scrollable) elements whose heights are subtracted.\n * @param minimalHeight - Minimum height floor to use when the dialog height is smaller.\n * @returns The computed scrollable height in pixels.\n */\n getCurrentDialogScrollableHeight(\n fixedPartsClassName: string[],\n minimalHeight: number\n ): number {\n if (!SystemUtils.isBrowser()) return 0;\n let h = Math.max(this.getCurrentDialogHeight(), minimalHeight);\n if (fixedPartsClassName) {\n fixedPartsClassName.forEach(n => {\n const elems = document.getElementsByClassName(n);\n if (elems) {\n for (let i = 0; i < elems.length; i++) {\n h -= this.outerHeight(elems[i] as HTMLElement);\n }\n }\n });\n }\n return h;\n }\n\n /**\n * Push a dialog into the browser history\n */\n private pushDialog(id: string): void {\n if (!SystemUtils.isBrowser()) return;\n const index = history.length;\n history.pushState({ index }, '', location.href + '#');\n this.popHistory.push({ id, value: index });\n }\n\n /**\n * Pop a dialog from the history\n */\n private popDialog(id?: string): void {\n if (!SystemUtils.isBrowser()) return;\n if (this.popState) {\n this.poppingState = true;\n let popped = 1;\n if (id) {\n const p = this.popHistory.findIndex(n => n.id === id);\n if (p !== -1) {\n popped = this.popHistory[p].value - (history.state?.index ?? 0);\n popped = popped ? popped + 1 : 1;\n this.popHistory.splice(p, 1);\n }\n const url = location.href;\n let l = url.length;\n while (l >= 0 && url[l - 1] === '#' && popped > 0) {\n l--;\n popped--;\n }\n if (l < url.length)\n history.replaceState({}, '', url.substring(0, l));\n }\n }\n this.popState = true;\n }\n\n /**\n * Shows a snack-bar toast notification.\n * @param message - HTML message to display.\n * @param duration - Visible duration in milliseconds. Defaults to `2000`.\n * @param icon - Material icon name shown beside the message. Defaults to `'check'`.\n * @param actionCaption - Optional label for the action button.\n * @returns The snack-bar reference.\n */\n toast(\n message: string,\n duration: number = 2000,\n icon: string = 'check',\n actionCaption?: string\n ): MatSnackBarRef<ToastComponent> {\n this.clearBusy();\n if (duration === -1) duration = 2000; // default\n const toastRef = this.snackBar.openFromComponent(ToastComponent, {\n duration,\n data: { message, icon, actionCaption } as ToastData\n });\n toastRef.instance.action.subscribe(() => toastRef.dismiss());\n return toastRef;\n }\n\n /**\n * Opens a confirmation dialog.\n * @param message - HTML message to display.\n * @param title - Dialog title. Defaults to `'Conferma'`.\n * @param okCaption - Primary action button label. Defaults to `'Si'`.\n * @param cancelCaption - Cancel button label. Defaults to `'No'`.\n * @param otherCaption - Optional tertiary action button label.\n * @param options - Optional list of checkbox options shown to the user.\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\n * @param details - Optional secondary details text.\n * @returns The dialog reference, or `null` outside the browser.\n */\n confirm(\n message: string,\n title: string = 'Conferma',\n okCaption: string = 'Si',\n cancelCaption: string = 'No',\n otherCaption?: string,\n options?: ConfirmDialogOption[],\n width: number = 500,\n details?: string\n ): MatDialogRef<ConfirmDialogComponent> | null {\n return this.open(ConfirmDialogComponent, {\n ariaLabel: 'conferma',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n message,\n title,\n okCaption,\n cancelCaption,\n otherCaption,\n options,\n details,\n appearance: this.appearance()\n } as ConfirmDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n /**\n * Opens a deletion-confirmation dialog.\n * @param message - HTML message to display.\n * @param title - Dialog title. Defaults to `'Attenzione'`.\n * @param confirmMode - Confirmation mode (none / checkbox / type-to-confirm). Defaults to `None`.\n * @param okCaption - Primary action button label. Defaults to `'Si'`.\n * @param cancelCaption - Cancel button label. Defaults to `'No'`.\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\n * @param details - Optional secondary details text.\n * @returns The dialog reference, or `null` outside the browser.\n */\n delete(\n message: string,\n title: string = 'Attenzione',\n confirmMode: DeleteDialogConfirmMode = DeleteDialogConfirmMode.None,\n okCaption: string = 'Si',\n cancelCaption: string = 'No',\n width: number = 500,\n details?: string\n ): MatDialogRef<DeleteDialogComponent> | null {\n return this.open(DeleteDialogComponent, {\n ariaLabel: 'attenzione',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n message,\n title,\n confirmMode,\n okCaption,\n cancelCaption,\n details,\n appearance: this.appearance()\n } as DeleteDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n}\n\n","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.dialogs\n */\nexport * from './dialog.service';\nexport * from './confirm/confirm-dialog.component';\nexport * from './delete/delete-dialog.component';\nexport * from './toast/toast.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2"],"mappings":"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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-ui.dialogs.mjs","sources":["../../../projects/ars-utils/ui.dialogs/confirm/confirm-dialog.component.ts","../../../projects/ars-utils/ui.dialogs/confirm/confirm-dialog.component.html","../../../projects/ars-utils/ui.dialogs/delete/delete-dialog.component.ts","../../../projects/ars-utils/ui.dialogs/delete/delete-dialog.component.html","../../../projects/ars-utils/ui.dialogs/toast/toast.component.ts","../../../projects/ars-utils/ui.dialogs/toast/toast.component.html","../../../projects/ars-utils/ui.dialogs/dialog.service.ts","../../../projects/ars-utils/ui.dialogs/public_api.ts","../../../projects/ars-utils/ui.dialogs/arsedizioni-ars-utils-ui.dialogs.ts"],"sourcesContent":["import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { DialogOption, DialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface ConfirmDialogOption extends DialogOption {}\n\nexport interface ConfirmDialogData {\n title?: string;\n message: string;\n okCaption?: string;\n cancelCaption?: string;\n otherCaption?: string;\n options?: ConfirmDialogOption[];\n details?: string;\n}\n\n@Component({\n templateUrl: './confirm-dialog.component.html',\n styleUrl: './confirm-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexLayoutModule, MatCheckboxModule,\n MatDialogActions, MatButtonModule, SafeHtmlPipe]\n})\nexport class ConfirmDialogComponent {\n /** Emitted when the user makes a choice. Carries the selected result and any option state. */\n readonly choosen = output<DialogResult>();\n\n private readonly dialogRef = inject(MatDialogRef<ConfirmDialogComponent>);\n\n /** Dialog configuration, with sensible defaults applied at construction time. */\n protected readonly dialogData = signal<ConfirmDialogData>({\n title: 'Conferma',\n okCaption: 'Si',\n cancelCaption: 'No',\n message: '',\n ...((inject(MAT_DIALOG_DATA) as ConfirmDialogData | null) ?? {}),\n });\n\n constructor() {\n // Ensure optional captions always have a value even when the caller omits them\n this.dialogData.update(d => ({\n ...d,\n title: d.title ?? 'Conferma',\n okCaption: d.okCaption ?? 'Si',\n cancelCaption: d.cancelCaption ?? 'No',\n }));\n }\n\n /**\n * Confirms the dialog, emitting `'ok'` together with the current option selections.\n */\n ok(): void {\n this.choosen.emit({ result: 'ok', options: this.dialogData().options });\n this.dialogRef.close();\n }\n\n /**\n * Cancels the dialog, emitting `'cancel'`.\n */\n cancel(): void {\n this.choosen.emit({ result: 'cancel' });\n this.dialogRef.close();\n }\n\n /**\n * Triggers the tertiary action, emitting `'other'`.\n */\n other(): void {\n this.choosen.emit({ result: 'other' });\n this.dialogRef.close();\n }\n}\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 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\" 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, output, signal } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { DialogResult, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { form, FormField, FormRoot, required, validate } from '@angular/forms/signals';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\nimport { MatFormFieldAppearance, MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\nexport enum DeleteDialogConfirmMode {\n None = 0,\n Simple = 1,\n Strong = 2\n}\n\nexport interface DeleteDialogData {\n title?: string;\n message: string;\n confirmMode: DeleteDialogConfirmMode;\n okCaption?: string;\n cancelCaption?: string;\n details?: string;\n appearance?: MatFormFieldAppearance;\n}\n\n@Component({\n templateUrl: './delete-dialog.component.html',\n styleUrl: './delete-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, MatDialogClose, FlexLayoutModule, MatCheckboxModule, FormField, FormRoot,\n MatDialogActions, MatButtonModule, MatFormFieldModule, MatInputModule, SafeHtmlPipe]\n})\nexport class DeleteDialogComponent {\n /** Emitted when the user makes a choice. Carries the selected result. */\n readonly choosen = output<DialogResult>();\n\n private readonly dialogRef = inject(MatDialogRef<DeleteDialogComponent>);\n\n /** Dialog configuration with defaults applied at construction time. */\n protected readonly dialogData = signal<DeleteDialogData>((() => {\n const raw = (inject(MAT_DIALOG_DATA) as DeleteDialogData | null) ?? {};\n return {\n title: 'Attenzione',\n okCaption: 'Si',\n cancelCaption: 'No',\n confirmMode: DeleteDialogConfirmMode.None,\n message: '',\n ...raw,\n };\n })());\n\n /**\n * Model backing the signal form: `confirmed` starts as `true` for all modes\n * except `Simple`, which requires explicit checkbox confirmation, and\n * `confirmValue` is the strong-confirmation text.\n */\n private readonly model = signal<{ confirmed: boolean; confirmValue: string }>({\n confirmed: this.dialogData().confirmMode !== DeleteDialogConfirmMode.Simple,\n confirmValue: '',\n });\n\n /**\n * Signal form for the confirmation. In `Simple` mode the checkbox must be\n * checked; in `Strong` mode the text must be exactly the word \"elimina\".\n */\n protected readonly form = form(this.model, p => {\n validate(p.confirmed, ({ value }) =>\n this.dialogData().confirmMode !== DeleteDialogConfirmMode.Simple || value()\n ? undefined\n : { kind: 'confirmed', message: 'Confermo la cancellazione' });\n required(p.confirmValue, {\n message: 'Digita la parola \"elimina\"',\n when: () => this.dialogData().confirmMode === DeleteDialogConfirmMode.Strong,\n });\n validate(p.confirmValue, ({ value }) =>\n this.dialogData().confirmMode !== DeleteDialogConfirmMode.Strong\n || !value()\n || value().toLowerCase() === 'elimina'\n ? undefined\n : { kind: 'confirmValue', message: 'Digita la parola \"elimina\"' });\n });\n\n /**\n * Confirms the deletion, emitting `'ok'` and closing the dialog.\n */\n ok(): void {\n this.choosen.emit({ result: 'ok' });\n this.dialogRef.close();\n }\n\n /**\n * Cancels the operation, emitting `'cancel'` and closing the dialog.\n */\n cancel(): void {\n this.choosen.emit({ result: 'cancel' });\n this.dialogRef.close();\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form [formRoot]=\"form\" 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 [formField]=\"form.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 [formField]=\"form.confirmValue\"\r\n [attr.aria-label]=\"'Digita la parola -elimina-'\">\r\n @if (form.confirmValue().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()\" [disabled]=\"form().invalid()\"\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>\r\n","import { Component, ChangeDetectionStrategy, inject, output, signal } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA } from '@angular/material/snack-bar';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\nexport interface ToastData {\n message: string;\n icon?: string;\n actionCaption?: string;\n}\n\n@Component({\n templateUrl: './toast.component.html',\n styleUrl: './toast.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule, SafeHtmlPipe]\n})\nexport class ToastComponent {\n /** Emitted when the user clicks the optional action button. */\n readonly action = output<void>();\n\n /** Snack-bar payload with a safe fallback to an empty message when no data is injected. */\n protected readonly dialogData = signal<ToastData>(\n (inject(MAT_SNACK_BAR_DATA) as ToastData | null) ?? { message: '' }\n );\n\n /**\n * Emits the `action` event to notify the caller that the action button was clicked.\n */\n protected do(): void {\n this.action.emit();\n }\n}\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 { PlatformLocation } from '@angular/common';\nimport { inject, Service } from '@angular/core';\nimport { ComponentType } from '@angular/cdk/portal';\nimport { MatDialog, MatDialogConfig, MatDialogRef } from '@angular/material/dialog';\nimport { MatSnackBar, MatSnackBarRef } from '@angular/material/snack-bar';\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { UIService } from '@arsedizioni/ars-utils/ui';\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\nimport { first } from 'rxjs/operators';\nimport {\n ConfirmDialogComponent,\n ConfirmDialogData,\n ConfirmDialogOption\n} from './confirm/confirm-dialog.component';\nimport { DeleteDialogComponent, DeleteDialogConfirmMode, DeleteDialogData } from './delete/delete-dialog.component';\nimport { ToastComponent, ToastData } from './toast/toast.component';\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\nexport interface IDialogService {}\n\ninterface PopHistoryEntry {\n id: string;\n value: number;\n}\n\n\n@Service()\nexport class DialogService extends ShellService {\n\n private readonly uiService = inject(UIService);\n\n /**\n * Shares the SAME `appearance` signal instance as the root `UIService`:\n * `uiService.setAppearance('outline')` is immediately visible here and in\n * every dialog opened by this service.\n *\n * Held by delegation and no longer by inheritance: this service now extends `ShellService`,\n * which knows nothing about Material and must not, so the two members every caller uses of\n * `UIService` are re-exposed here.\n */\n readonly appearance = this.uiService.appearance;\n\n /**\n * Updates the global form-field appearance.\n * @param value - The new appearance value. Falls back to `'fill'` when `undefined` is passed.\n * @returns void\n */\n setAppearance(value: 'fill' | 'outline' | undefined): void {\n this.uiService.setAppearance(value);\n }\n\n private readonly dialog = inject(MatDialog);\n private readonly snackBar = inject(MatSnackBar);\n private readonly location = inject(PlatformLocation);\n\n private readonly popHistory: PopHistoryEntry[] = [];\n private popState = true;\n private poppingState = false;\n\n constructor() {\n super();\n\n // Handle dialog close when back button is clicked\n this.location.onPopState(() => {\n if (!this.poppingState) {\n const count = this.dialog.openDialogs.length;\n if (count > 0) {\n // Disable pop state if needed\n this.popState = false;\n // Close dialog\n this.dialog.openDialogs[count - 1].close();\n }\n } else {\n this.poppingState = false;\n }\n });\n }\n\n /**\n * Lets the next `popstate` through without closing the topmost dialog.\n *\n * Back closing the dialog on top is the rule of this service, and its listener is registered in\n * the constructor — so nothing attached later can get in front of it. A caller that owns a\n * dismissable state of its own INSIDE a dialog (a full-screen editor, a picker covering the\n * dialog, a wizard step) needs Back to unwind that state first, and this is the only way to ask\n * for it: push a history entry, call this, and handle the pop.\n *\n * The suspension lasts exactly one `popstate` and is consumed whether or not the caller pushed\n * an entry, so it can not leave the service permanently deaf to the Back button.\n */\n suspendBackClose(): void {\n this.poppingState = true;\n }\n\n /**\n * Removes trailing `#` characters from the current URL (e.g. after a page reload).\n * @param resetPoppingState - When `true`, resets the internal popping-state flag.\n */\n clearUrl(resetPoppingState: boolean = false): void {\n const url = location.href;\n let l = url.length;\n while (l >= 0 && url[l - 1] === '#') l--;\n if (l < url.length)\n history.replaceState({}, '', url.substring(0, l));\n if (resetPoppingState)\n this.poppingState = false;\n }\n\n /**\n * Close all dialogs\n */\n closeAll(): void {\n this.dialog.closeAll();\n }\n\n\n /**\n * Opens a Material dialog. Returns `null` when not running in a browser.\n * @param component - The component to open as a dialog.\n * @param config - The dialog configuration.\n * @returns The dialog reference, or `null` outside the browser.\n */\n open<T>(component: ComponentType<T>, config: MatDialogConfig<unknown>): MatDialogRef<T> | null {\n if (!SystemUtils.isBrowser()) return null;\n // Immediately, not with the grace period: the dialog is about to be drawn under an overlay\n // that sits above it by z-index, and half a second of it covering a fresh dialog would show.\n this.clearBusy(true);\n return this.openDialog(component, config);\n }\n\n\n /**\n * Internal helper that wraps `MatDialog.open`, subscribes to lifecycle hooks\n * and manages browser-history push/pop entries.\n * @param component - The component to open.\n * @param config - The dialog configuration.\n * @returns The dialog reference.\n */\n private openDialog<T>(component: ComponentType<T>, config: MatDialogConfig<unknown>): MatDialogRef<T> {\n // We will take care of navigation\n config.closeOnNavigation = false;\n const d = this.dialog.open(component, config);\n d.afterOpened().pipe(first()).subscribe(() => {\n this.pushDialog(d.id);\n // The dialog has just entered the top layer, and the top layer orders by promotion: an\n // error the user has not dismissed yet would end up underneath it.\n this.raiseMessage();\n });\n d.beforeClosed().pipe(first()).subscribe(() => this.popDialog(d.id));\n return d;\n }\n\n /**\n * Returns the element height including margins\n * @param element - element\n * @returns the height\n */\n private outerHeight(element: HTMLElement): number {\n if (!SystemUtils.isBrowser()) return 0;\n const height = element.offsetHeight;\n const style = window.getComputedStyle(element);\n return (['top', 'bottom'] as const)\n .map(side => parseInt(style.getPropertyValue(`margin-${side}`), 10))\n .reduce((total, margin) => total + margin, height);\n }\n\n /**\n * Return current dialog height\n */\n getCurrentDialogHeight(): number {\n if (!SystemUtils.isBrowser()) return 0;\n const count = this.popHistory.length;\n if (count > 0) {\n let id = this.popHistory[count - 1].id;\n let elem = document.getElementById(id);\n if (elem && elem.clientHeight > 0) return elem.clientHeight;\n }\n return 0;\n }\n\n /**\n * Returns the scrollable content area height for the topmost open dialog.\n * @param fixedPartsClassName - CSS class names of fixed (non-scrollable) elements whose heights are subtracted.\n * @param minimalHeight - Minimum height floor to use when the dialog height is smaller.\n * @returns The computed scrollable height in pixels.\n */\n getCurrentDialogScrollableHeight(\n fixedPartsClassName: string[],\n minimalHeight: number\n ): number {\n if (!SystemUtils.isBrowser()) return 0;\n let h = Math.max(this.getCurrentDialogHeight(), minimalHeight);\n if (fixedPartsClassName) {\n fixedPartsClassName.forEach(n => {\n const elems = document.getElementsByClassName(n);\n if (elems) {\n for (let i = 0; i < elems.length; i++) {\n h -= this.outerHeight(elems[i] as HTMLElement);\n }\n }\n });\n }\n return h;\n }\n\n /**\n * Push a dialog into the browser history\n */\n private pushDialog(id: string): void {\n if (!SystemUtils.isBrowser()) return;\n const index = history.length;\n history.pushState({ index }, '', location.href + '#');\n this.popHistory.push({ id, value: index });\n }\n\n /**\n * Pop a dialog from the history\n */\n private popDialog(id?: string): void {\n if (!SystemUtils.isBrowser()) return;\n if (this.popState) {\n this.poppingState = true;\n let popped = 1;\n if (id) {\n const p = this.popHistory.findIndex(n => n.id === id);\n if (p !== -1) {\n popped = this.popHistory[p].value - (history.state?.index ?? 0);\n popped = popped ? popped + 1 : 1;\n this.popHistory.splice(p, 1);\n }\n const url = location.href;\n let l = url.length;\n while (l >= 0 && url[l - 1] === '#' && popped > 0) {\n l--;\n popped--;\n }\n if (l < url.length)\n history.replaceState({}, '', url.substring(0, l));\n }\n }\n this.popState = true;\n }\n\n /**\n * Shows a snack-bar toast notification.\n * @param message - HTML message to display.\n * @param duration - Visible duration in milliseconds. Defaults to `2000`.\n * @param icon - Material icon name shown beside the message. Defaults to `'check'`.\n * @param actionCaption - Optional label for the action button.\n * @returns The snack-bar reference.\n */\n toast(\n message: string,\n duration: number = 2000,\n icon: string = 'check',\n actionCaption?: string\n ): MatSnackBarRef<ToastComponent> {\n this.clearBusy();\n if (duration === -1) duration = 2000; // default\n const toastRef = this.snackBar.openFromComponent(ToastComponent, {\n duration,\n data: { message, icon, actionCaption } as ToastData\n });\n toastRef.instance.action.subscribe(() => toastRef.dismiss());\n return toastRef;\n }\n\n /**\n * Opens a confirmation dialog.\n * @param message - HTML message to display.\n * @param title - Dialog title. Defaults to `'Conferma'`.\n * @param okCaption - Primary action button label. Defaults to `'Si'`.\n * @param cancelCaption - Cancel button label. Defaults to `'No'`.\n * @param otherCaption - Optional tertiary action button label.\n * @param options - Optional list of checkbox options shown to the user.\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\n * @param details - Optional secondary details text.\n * @returns The dialog reference, or `null` outside the browser.\n */\n confirm(\n message: string,\n title: string = 'Conferma',\n okCaption: string = 'Si',\n cancelCaption: string = 'No',\n otherCaption?: string,\n options?: ConfirmDialogOption[],\n width: number = 500,\n details?: string\n ): MatDialogRef<ConfirmDialogComponent> | null {\n return this.open(ConfirmDialogComponent, {\n ariaLabel: 'conferma',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n message,\n title,\n okCaption,\n cancelCaption,\n otherCaption,\n options,\n details,\n appearance: this.appearance()\n } as ConfirmDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n /**\n * Opens a deletion-confirmation dialog.\n * @param message - HTML message to display.\n * @param title - Dialog title. Defaults to `'Attenzione'`.\n * @param confirmMode - Confirmation mode (none / checkbox / type-to-confirm). Defaults to `None`.\n * @param okCaption - Primary action button label. Defaults to `'Si'`.\n * @param cancelCaption - Cancel button label. Defaults to `'No'`.\n * @param width - Maximum dialog width in pixels. Defaults to `500`.\n * @param details - Optional secondary details text.\n * @returns The dialog reference, or `null` outside the browser.\n */\n delete(\n message: string,\n title: string = 'Attenzione',\n confirmMode: DeleteDialogConfirmMode = DeleteDialogConfirmMode.None,\n okCaption: string = 'Si',\n cancelCaption: string = 'No',\n width: number = 500,\n details?: string\n ): MatDialogRef<DeleteDialogComponent> | null {\n return this.open(DeleteDialogComponent, {\n ariaLabel: 'attenzione',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n message,\n title,\n confirmMode,\n okCaption,\n cancelCaption,\n details,\n appearance: this.appearance()\n } as DeleteDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n}\n\n","/*\n * Public API Surface of @arsedizioni/ars-utils/ui.dialogs\n */\nexport * from './dialog.service';\nexport * from './confirm/confirm-dialog.component';\nexport * from './delete/delete-dialog.component';\nexport * from './toast/toast.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2"],"mappings":"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"}