@arsedizioni/ars-utils 22.5.37 → 22.5.38
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +179 -179
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +1 -2
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs +5 -76
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.validators.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +73 -3
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -1
- package/package.json +1 -1
- package/types/arsedizioni-ars-utils-core.date.d.ts +4 -37
- package/types/arsedizioni-ars-utils-ui.controls.d.ts +34 -1
|
@@ -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 { form, FormField, FormRoot, required, validate } from '@angular/forms/signals';\nimport { SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\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 /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n /** Emitted when the user 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>{{ getErrorMessage(form.confirmValue().errors()) }}</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 { PromptDialogData, PromptDialogType, PromptTimeDialogData, SelectDialogData, SelectFileDialogData, SelectTreeDialogData, UIService } from '@arsedizioni/ars-utils/ui';\nimport type { SendToDialogComponent, SelectTreeDialogComponent, SelectDialogComponent } from '@arsedizioni/ars-utils/ui.dialogs.select';\nimport type { SelectPictureDialogComponent, SelectFileDialogComponent } from '@arsedizioni/ars-utils/ui.files';\nimport type { PromptDialogComponent, PromptDateDialogComponent, PromptTimeDialogComponent } from '@arsedizioni/ars-utils/ui.dialogs.prompt';\nimport type { PromptOtpDialogComponent } from '@arsedizioni/ars-utils/ui.dialogs.auth';\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 // LAZY DIALOGS\n ////\n //\n // The heavy dialogs are opened from here but live in their own entry points, and the `import()`\n // below is what keeps them out of the initial bundle: an import between entry points survives\n // the build, while one inside the same entry point is inlined by ng-packagr.\n //\n // These used to be `ApplicationDialogService` in `ui.application`, an entry point whose whole\n // reason to exist was holding these nine lines. It could be dissolved into here once the lazy\n // dialogs stopped injecting `DialogService` for `error()` and `busy()` — those live in\n // `ShellService`, which they now inject directly. That broke the static edge back to this entry\n // point, and with it the circular dependency ng-packagr refuses to build.\n //\n // Do NOT import `DialogService` from `ui.dialogs.{prompt,select,auth}` or `ui.files` again:\n // the build stops with \"circular dependency\" the moment anyone does.\n\n /**\n * Open a send-to-email dialog.\n * @param title - Dialog title.\n * @param text - Pre-filled message body.\n * @param subject - Pre-filled subject line.\n * @param canPopulate - Whether the populate-recipients action is available.\n * @param count - Number of documents being sent.\n * @param options - Checkable option list.\n * @param width - Maximum dialog width in pixels.\n * @returns The opened dialog reference.\n */\n async sendTo(\n title: string = 'Invia per email',\n text?: string,\n subject?: string,\n canPopulate: boolean = false,\n count?: number,\n options?: any,\n width: number = 600\n ): Promise<MatDialogRef<SendToDialogComponent, any> | null> {\n const { SendToDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.select');\n return this.open(SendToDialogComponent, {\n ariaLabel: 'invia per email',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n title,\n count,\n canPopulate,\n appearance: this.appearance(),\n text,\n subject,\n options\n },\n closeOnNavigation: false,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n /**\n * Open a tree-node selection dialog.\n * @param nodes - The tree nodes to display.\n * @param title - Dialog title.\n * @param description - Optional description shown below the title.\n * @param initialFilter - Pre-applied filter text.\n * @param width - Maximum dialog width in pixels.\n * @param okCaption - Label for the confirm button.\n * @param canAppend - Whether the append-node action is available.\n * @returns The opened dialog reference.\n */\n async selectTree(\n nodes: any,\n title: string = 'Seleziona un elemento',\n description?: string,\n initialFilter?: string,\n width: number = 800,\n okCaption: string = 'Ok',\n canAppend: boolean = false\n ): Promise<MatDialogRef<SelectTreeDialogComponent, any> | null> {\n const { SelectTreeDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.select');\n return this.open(SelectTreeDialogComponent, {\n ariaLabel: 'seleziona un elemento',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n title,\n description,\n initialFilter,\n okCaption,\n nodes,\n appearance: 'outline',\n canAppend\n } as SelectTreeDialogData,\n closeOnNavigation: false,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n /**\n * Open a picture-selection dialog.\n * @param title - Dialog title.\n * @param description - Brief description shown in the dialog.\n * @param okCaption - Label for the confirm button.\n * @param options - Checkable option list.\n * @param width - Maximum dialog width in pixels.\n * @param maxSize - Maximum accepted file size in MB.\n * @param maxPictureWidth - Maximum accepted picture width in pixels.\n * @param maxPictureHeight - Maximum accepted picture height in pixels.\n * @returns The opened dialog reference.\n */\n async selectPicture(\n title: string = 'Seleziona immagine',\n description?: string,\n okCaption: string = 'Ok',\n options?: any,\n width: number = 600,\n maxSize?: number,\n maxPictureWidth?: number,\n maxPictureHeight?: number\n ): Promise<MatDialogRef<SelectPictureDialogComponent, any> | null> {\n const { SelectPictureDialogComponent } = await import('@arsedizioni/ars-utils/ui.files');\n return this.open(SelectPictureDialogComponent, {\n ariaLabel: 'seleziona immagine',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n title,\n description,\n okCaption,\n options,\n appearance: this.appearance(),\n maxSize,\n maxWidth: maxPictureWidth,\n maxHeight: maxPictureHeight\n } as SelectFileDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n /**\n * Open a file-selection dialog.\n * @param title - Dialog title.\n * @param description - Brief description shown in the dialog.\n * @param okCaption - Label for the confirm button.\n * @param helpLink - URL for the help link.\n * @param helpCaption - Display text for the help link.\n * @param options - Checkable option list.\n * @param width - Maximum dialog width in pixels.\n * @param maxSize - Maximum accepted file size in MB.\n * @param accept - Accepted file extensions (e.g. `.pdf,.docx`).\n * @returns The opened dialog reference.\n */\n async selectFile(\n title: string = 'Seleziona file',\n description?: string,\n okCaption: string = 'Ok',\n helpLink?: string,\n helpCaption?: string,\n options?: any,\n width: number = 600,\n maxSize?: number,\n accept?: string\n ): Promise<MatDialogRef<SelectFileDialogComponent, any> | null> {\n const { SelectFileDialogComponent } = await import('@arsedizioni/ars-utils/ui.files');\n return this.open(SelectFileDialogComponent, {\n ariaLabel: 'seleziona file',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n title,\n description,\n okCaption,\n helpLink,\n helpCaption,\n options,\n appearance: this.appearance(),\n maxSize,\n accept\n } as SelectFileDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n /**\n * Open a multipurpose selection and CRUD dialog.\n * @param data - The dialog configuration model.\n * @param disableClose - Whether the dialog can be closed by clicking outside.\n * @param closeOnNavigation - Whether the dialog closes on route navigation.\n * @returns The opened dialog reference.\n */\n async select(\n data: SelectDialogData,\n disableClose: boolean = true,\n closeOnNavigation: boolean = true\n ): Promise<MatDialogRef<SelectDialogComponent, any> | null> {\n const { SelectDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.select');\n const dialogData: SelectDialogData = { ...data, appearance: data.appearance ?? 'outline' };\n return this.open(SelectDialogComponent, {\n ariaLabel: 'seleziona',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: dialogData,\n closeOnNavigation: closeOnNavigation,\n disableClose: disableClose,\n minWidth: '375px',\n maxWidth: `${data.width ?? 800}px`,\n width: '100%'\n });\n }\n\n /**\n * Prompt the user to enter a value.\n * @param title - Dialog title.\n * @param type - The input type (default, text, number, etc.).\n * @param description - Placeholder or description text.\n * @param initialValue - Pre-filled value.\n * @param okCaption - Label for the confirm button.\n * @param cancelCaption - Label for the cancel button.\n * @param options - Checkable option list.\n * @param width - Maximum dialog width in pixels.\n * @param required - Whether the input is required.\n * @returns The opened dialog reference.\n */\n async prompt(\n title: string,\n type: PromptDialogType = PromptDialogType.Default,\n description?: string,\n initialValue?: any,\n okCaption: string = 'Ok',\n cancelCaption: string = 'Annulla',\n options?: any,\n width: number = 500,\n required?: boolean,\n ): Promise<MatDialogRef<PromptDialogComponent> | null> {\n const { PromptDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.prompt');\n return this.open(PromptDialogComponent, {\n ariaLabel: 'inserisci valore',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n title,\n type,\n description,\n initialValue,\n okCaption,\n cancelCaption,\n appearance: this.appearance(),\n required,\n options\n } as PromptDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n /**\n * Prompt the user to enter a date or date interval.\n * @param title - Dialog title.\n * @param type - Date or DateInterval.\n * @param description - Placeholder or description text.\n * @param initialValue - Pre-filled value.\n * @param okCaption - Label for the confirm button.\n * @param cancelCaption - Label for the cancel button.\n * @param options - Checkable option list.\n * @param width - Maximum dialog width in pixels.\n * @param required - Whether the input is required.\n * @returns The opened dialog reference.\n */\n async promptDate(\n title: string,\n type: PromptDialogType.Date | PromptDialogType.DateInterval = PromptDialogType.Date,\n description?: string,\n initialValue?: any,\n okCaption: string = 'Ok',\n cancelCaption: string = 'Annulla',\n options?: any,\n width: number = 500,\n required?: boolean,\n ): Promise<MatDialogRef<PromptDateDialogComponent> | null> {\n const { PromptDateDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.prompt');\n return this.open(PromptDateDialogComponent, {\n ariaLabel: 'inserisci data',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n title,\n type,\n description,\n initialValue,\n okCaption,\n cancelCaption,\n appearance: this.appearance(),\n required,\n options\n } as PromptDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n /**\n * Prompt the user to enter a time value.\n * @param title - Dialog title.\n * @param description - Placeholder or description text.\n * @param slots - Optional time slots string.\n * @param initialValue - Pre-filled value.\n * @param okCaption - Label for the confirm button.\n * @param cancelCaption - Label for the cancel button.\n * @param options - Checkable option list.\n * @param width - Maximum dialog width in pixels.\n * @param required - Whether the input is required.\n * @returns The opened dialog reference.\n */\n async promptTime(\n title: string,\n description?: string,\n slots?: string,\n initialValue?: any,\n okCaption: string = 'Ok',\n cancelCaption: string = 'Annulla',\n options?: any,\n width: number = 500,\n required?: boolean,\n ): Promise<MatDialogRef<PromptTimeDialogComponent> | null> {\n const { PromptTimeDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.prompt');\n return this.open(PromptTimeDialogComponent, {\n ariaLabel: 'inserisci orario',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n title,\n type: PromptDialogType.Time,\n description,\n slots,\n initialValue,\n okCaption,\n cancelCaption,\n appearance: this.appearance(),\n required,\n options\n } as PromptTimeDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\n });\n }\n\n /**\n * Prompt the user to enter an OTP code.\n * @param title - Dialog title.\n * @param description - Description text shown in the dialog.\n * @param okCaption - Label for the confirm button.\n * @param cancelCaption - Label for the cancel button.\n * @param width - Maximum dialog width in pixels.\n * @returns The opened dialog reference.\n */\n async promptOtp(\n title: string = 'Conferma la tua identità',\n description?: string,\n okCaption: string = 'Ok',\n cancelCaption: string = 'Annulla',\n width: number = 500,\n ): Promise<MatDialogRef<PromptOtpDialogComponent> | null> {\n const { PromptOtpDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.auth');\n return this.open(PromptOtpDialogComponent, {\n ariaLabel: 'inserisci codice OTP',\n autoFocus: 'dialog',\n restoreFocus: false,\n data: {\n title,\n type: PromptDialogType.Default,\n description,\n okCaption,\n cancelCaption,\n appearance: this.appearance(),\n } as PromptDialogData,\n closeOnNavigation: false,\n disableClose: true,\n minWidth: '375px',\n maxWidth: `${width}px`,\n width: '100%'\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 { SignalsUtils } from '@arsedizioni/ars-utils/core.validators';\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 /** Error text of a field: the message declared in the schema, or the shared fallback. */\n protected readonly getErrorMessage = SignalsUtils.getFieldErrorMessage;\n\n /** Emitted when the user 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>{{ getErrorMessage(form.confirmValue().errors()) }}</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';\r\nimport { inject, Service } from '@angular/core';\r\nimport { ComponentType } from '@angular/cdk/portal';\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 { PromptDialogData, PromptDialogType, PromptTimeDialogData, SelectDialogData, SelectFileDialogData, SelectTreeDialogData, UIService } from '@arsedizioni/ars-utils/ui';\r\nimport type { SendToDialogComponent, SelectTreeDialogComponent, SelectDialogComponent } from '@arsedizioni/ars-utils/ui.dialogs.select';\r\nimport type { SelectPictureDialogComponent, SelectFileDialogComponent } from '@arsedizioni/ars-utils/ui.files';\r\nimport type { PromptDialogComponent, PromptDateDialogComponent, PromptTimeDialogComponent } from '@arsedizioni/ars-utils/ui.dialogs.prompt';\r\nimport type { PromptOtpDialogComponent } from '@arsedizioni/ars-utils/ui.dialogs.auth';\r\nimport { ShellService } from '@arsedizioni/ars-utils/ui.shell';\r\nimport { first } from 'rxjs/operators';\r\nimport {\r\n ConfirmDialogComponent,\r\n ConfirmDialogData,\r\n ConfirmDialogOption\r\n} from './confirm/confirm-dialog.component';\r\nimport { DeleteDialogComponent, DeleteDialogConfirmMode, DeleteDialogData } from './delete/delete-dialog.component';\r\nimport { ToastComponent, ToastData } from './toast/toast.component';\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\n\r\n@Service()\r\nexport class DialogService extends ShellService {\r\n\r\n private readonly uiService = inject(UIService);\r\n\r\n /**\r\n * Shares the SAME `appearance` signal instance as the root `UIService`:\r\n * `uiService.setAppearance('outline')` is immediately visible here and in\r\n * every dialog opened by this service.\r\n *\r\n * Held by delegation and no longer by inheritance: this service now extends `ShellService`,\r\n * which knows nothing about Material and must not, so the two members every caller uses of\r\n * `UIService` are re-exposed here.\r\n */\r\n readonly appearance = this.uiService.appearance;\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 * @returns void\r\n */\r\n setAppearance(value: 'fill' | 'outline' | undefined): void {\r\n this.uiService.setAppearance(value);\r\n }\r\n\r\n private readonly dialog = inject(MatDialog);\r\n private readonly snackBar = inject(MatSnackBar);\r\n private readonly location = inject(PlatformLocation);\r\n\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 * Lets the next `popstate` through without closing the topmost dialog.\r\n *\r\n * Back closing the dialog on top is the rule of this service, and its listener is registered in\r\n * the constructor — so nothing attached later can get in front of it. A caller that owns a\r\n * dismissable state of its own INSIDE a dialog (a full-screen editor, a picker covering the\r\n * dialog, a wizard step) needs Back to unwind that state first, and this is the only way to ask\r\n * for it: push a history entry, call this, and handle the pop.\r\n *\r\n * The suspension lasts exactly one `popstate` and is consumed whether or not the caller pushed\r\n * an entry, so it can not leave the service permanently deaf to the Back button.\r\n */\r\n suspendBackClose(): void {\r\n this.poppingState = true;\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 // Immediately, not with the grace period: the dialog is about to be drawn under an overlay\r\n // that sits above it by z-index, and half a second of it covering a fresh dialog would show.\r\n this.clearBusy(true);\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(() => {\r\n this.pushDialog(d.id);\r\n // The dialog has just entered the top layer, and the top layer orders by promotion: an\r\n // error the user has not dismissed yet would end up underneath it.\r\n this.raiseMessage();\r\n });\r\n d.beforeClosed().pipe(first()).subscribe(() => this.popDialog(d.id));\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 * 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: 'dialog',\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: this.appearance()\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: 'dialog',\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: this.appearance()\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 // LAZY DIALOGS\r\n ////\r\n //\r\n // The heavy dialogs are opened from here but live in their own entry points, and the `import()`\r\n // below is what keeps them out of the initial bundle: an import between entry points survives\r\n // the build, while one inside the same entry point is inlined by ng-packagr.\r\n //\r\n // These used to be `ApplicationDialogService` in `ui.application`, an entry point whose whole\r\n // reason to exist was holding these nine lines. It could be dissolved into here once the lazy\r\n // dialogs stopped injecting `DialogService` for `error()` and `busy()` — those live in\r\n // `ShellService`, which they now inject directly. That broke the static edge back to this entry\r\n // point, and with it the circular dependency ng-packagr refuses to build.\r\n //\r\n // Do NOT import `DialogService` from `ui.dialogs.{prompt,select,auth}` or `ui.files` again:\r\n // the build stops with \"circular dependency\" the moment anyone does.\r\n\r\n /**\r\n * Open a send-to-email dialog.\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.\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 const { SendToDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.select');\r\n return this.open(SendToDialogComponent, {\r\n ariaLabel: 'invia per email',\r\n autoFocus: 'dialog',\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n count,\r\n canPopulate,\r\n appearance: this.appearance(),\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 * Open a tree-node selection dialog.\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.\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 const { SelectTreeDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.select');\r\n return this.open(SelectTreeDialogComponent, {\r\n ariaLabel: 'seleziona un elemento',\r\n autoFocus: 'dialog',\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 * Open a picture-selection dialog.\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.\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 const { SelectPictureDialogComponent } = await import('@arsedizioni/ars-utils/ui.files');\r\n return this.open(SelectPictureDialogComponent, {\r\n ariaLabel: 'seleziona immagine',\r\n autoFocus: 'dialog',\r\n restoreFocus: false,\r\n data: {\r\n title,\r\n description,\r\n okCaption,\r\n options,\r\n appearance: this.appearance(),\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 * Open a file-selection dialog.\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.\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 const { SelectFileDialogComponent } = await import('@arsedizioni/ars-utils/ui.files');\r\n return this.open(SelectFileDialogComponent, {\r\n ariaLabel: 'seleziona file',\r\n autoFocus: 'dialog',\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: this.appearance(),\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 * Open a multipurpose selection and CRUD dialog.\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.\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 { SelectDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.select');\r\n const dialogData: SelectDialogData = { ...data, appearance: data.appearance ?? 'outline' };\r\n return this.open(SelectDialogComponent, {\r\n ariaLabel: 'seleziona',\r\n autoFocus: 'dialog',\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 * Prompt the user to enter a value.\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.\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 const { PromptDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.prompt');\r\n return this.open(PromptDialogComponent, {\r\n ariaLabel: 'inserisci valore',\r\n autoFocus: 'dialog',\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: this.appearance(),\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 * Prompt the user to enter a date or date interval.\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.\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 const { PromptDateDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.prompt');\r\n return this.open(PromptDateDialogComponent, {\r\n ariaLabel: 'inserisci data',\r\n autoFocus: 'dialog',\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: this.appearance(),\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 * Prompt the user to enter a time value.\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.\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 const { PromptTimeDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.prompt');\r\n return this.open(PromptTimeDialogComponent, {\r\n ariaLabel: 'inserisci orario',\r\n autoFocus: 'dialog',\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: this.appearance(),\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 * Prompt the user to enter an OTP code.\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.\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 const { PromptOtpDialogComponent } = await import('@arsedizioni/ars-utils/ui.dialogs.auth');\r\n return this.open(PromptOtpDialogComponent, {\r\n ariaLabel: 'inserisci codice OTP',\r\n autoFocus: 'dialog',\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: this.appearance(),\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","/*\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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"}
|
|
@@ -25,7 +25,7 @@ import { DtoUtils, SystemUtils, SafeHtmlPipe, DateInterval } from '@arsedizioni/
|
|
|
25
25
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
26
26
|
import * as i4$1 from '@angular/material/datepicker';
|
|
27
27
|
import { MatDatepickerModule } from '@angular/material/datepicker';
|
|
28
|
-
import { MatDatepickerParseErrorFixDirective } from '@arsedizioni/ars-utils/
|
|
28
|
+
import { MatDatepickerParseErrorFixDirective } from '@arsedizioni/ars-utils/ui.controls';
|
|
29
29
|
import { Subject } from 'rxjs';
|
|
30
30
|
import { debounceTime } from 'rxjs/operators';
|
|
31
31
|
|