@arsedizioni/ars-utils 22.1.5 → 22.5.2
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 +158 -10
- package/clipper.ui/clipper.scss +564 -0
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +11 -7
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs +609 -0
- package/fesm2022/arsedizioni-ars-utils-core.date.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs +591 -0
- package/fesm2022/arsedizioni-ars-utils-core.markdown.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-core.mjs +270 -1449
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +1 -1
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +14 -4108
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs +962 -0
- package/fesm2022/arsedizioni-ars-utils-ui.controls.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs +506 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.auth.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs +450 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs +184 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.prompt.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs +825 -0
- package/fesm2022/arsedizioni-ars-utils-ui.dialogs.select.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs +708 -0
- package/fesm2022/arsedizioni-ars-utils-ui.files.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs +426 -0
- package/fesm2022/arsedizioni-ars-utils-ui.filters.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.help.mjs +531 -0
- package/fesm2022/arsedizioni-ars-utils-ui.help.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +54 -1227
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs +1049 -0
- package/fesm2022/arsedizioni-ars-utils-ui.navigation.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs +263 -0
- package/fesm2022/arsedizioni-ars-utils-ui.notifications.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +4 -3
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs +53 -0
- package/fesm2022/arsedizioni-ars-utils-ui.paginator.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs +517 -0
- package/fesm2022/arsedizioni-ars-utils-ui.shell.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs +246 -0
- package/fesm2022/arsedizioni-ars-utils-ui.tinymce.mjs.map +1 -0
- package/fesm2022/arsedizioni-ars-utils.mjs +13 -12
- package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
- package/help/package.json +4 -0
- package/package.json +80 -14
- package/styles/ui.colors.scss +23 -0
- package/support.ui/package.json +4 -0
- package/tinymce/package.json +4 -0
- package/types/arsedizioni-ars-utils-clipper.common.d.ts +1 -2
- package/types/arsedizioni-ars-utils-clipper.ui.d.ts +4 -1
- package/types/arsedizioni-ars-utils-core.d.ts +684 -1004
- package/types/arsedizioni-ars-utils-core.date.d.ts +304 -0
- package/types/arsedizioni-ars-utils-core.markdown.d.ts +159 -0
- package/types/arsedizioni-ars-utils-ui.application.d.ts +10 -2022
- package/types/arsedizioni-ars-utils-ui.controls.d.ts +413 -0
- package/types/arsedizioni-ars-utils-ui.d.ts +183 -566
- package/types/arsedizioni-ars-utils-ui.dialogs.auth.d.ts +224 -0
- package/types/arsedizioni-ars-utils-ui.dialogs.d.ts +228 -0
- package/types/arsedizioni-ars-utils-ui.dialogs.prompt.d.ts +47 -0
- package/types/arsedizioni-ars-utils-ui.dialogs.select.d.ts +309 -0
- package/types/arsedizioni-ars-utils-ui.files.d.ts +271 -0
- package/types/arsedizioni-ars-utils-ui.filters.d.ts +163 -0
- package/types/arsedizioni-ars-utils-ui.help.d.ts +220 -0
- package/types/arsedizioni-ars-utils-ui.navigation.d.ts +650 -0
- package/types/arsedizioni-ars-utils-ui.notifications.d.ts +73 -0
- package/types/arsedizioni-ars-utils-ui.paginator.d.ts +23 -0
- package/types/arsedizioni-ars-utils-ui.shell.d.ts +345 -0
- package/types/arsedizioni-ars-utils-ui.tinymce.d.ts +63 -0
- package/types/arsedizioni-ars-utils.d.ts +4 -10
- package/ui.tinymce/README.md +12 -0
- package/ui.tinymce/langs/it.js +466 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arsedizioni-ars-utils-ui.application.mjs","sources":["../../../projects/ars-utils/ui.application/ui/definitions.ts","../../../projects/ars-utils/ui.application/ui/filters.ts","../../../projects/ars-utils/ui.application/ui/services/applicationDialog.service.ts","../../../projects/ars-utils/ui.application/ui/dialogs/prompt/prompt-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/prompt/prompt-dialog.component.html","../../../projects/ars-utils/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.html","../../../projects/ars-utils/ui.application/ui/dialogs/prompt-otp/prompt-otp-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/prompt-otp/prompt-otp-dialog.component.html","../../../projects/ars-utils/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.html","../../../projects/ars-utils/ui.application/ui/dialogs/select/select-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/select/select-dialog.component.html","../../../projects/ars-utils/ui.application/ui/dialogs/select-file/select-file-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/select-file/select-file-dialog.component.html","../../../projects/ars-utils/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.html","../../../projects/ars-utils/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.html","../../../projects/ars-utils/ui.application/ui/dialogs/send-to/send-to-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/send-to/send-to-dialog.component.html","../../../projects/ars-utils/ui.application/ui/components/button-selector/button-selector.component.ts","../../../projects/ars-utils/ui.application/ui/components/button-selector/button-selector.component.html","../../../projects/ars-utils/ui.application/ui/components/button-toggle/button-toggle.component.ts","../../../projects/ars-utils/ui.application/ui/components/button-toggle/button-toggle.component.html","../../../projects/ars-utils/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.ts","../../../projects/ars-utils/ui.application/ui/components/chips-selector/chips-selector.component.ts","../../../projects/ars-utils/ui.application/ui/components/chips-selector/chips-selector.component.html","../../../projects/ars-utils/ui.application/ui/components/file-input/file-input.component.ts","../../../projects/ars-utils/ui.application/ui/components/file-input/file-input.component.html","../../../projects/ars-utils/ui.application/ui/components/file-preview/file-preview.component.ts","../../../projects/ars-utils/ui.application/ui/components/file-preview/file-preview.component.html","../../../projects/ars-utils/ui.application/ui/components/filter-bar/filter-bar.component.ts","../../../projects/ars-utils/ui.application/ui/components/filter-bar/filter-bar.component.html","../../../projects/ars-utils/ui.application/ui/components/tree-picker/tree-picker.component.ts","../../../projects/ars-utils/ui.application/ui/components/tree-picker/tree-picker.component.html","../../../projects/ars-utils/ui.application/ui/components/navigation/navigation.definitions.ts","../../../projects/ars-utils/ui.application/ui/components/navigation/navigation-bar.component.ts","../../../projects/ars-utils/ui.application/ui/components/navigation/navigation-bar.component.html","../../../projects/ars-utils/ui.application/public_api.ts","../../../projects/ars-utils/ui.application/arsedizioni-ars-utils-ui.application.ts"],"sourcesContent":["\nimport { Searchable, SearchBag, NameValueItem, DateInterval, INode } from '@arsedizioni/ars-utils/core';\nimport { MatFormFieldAppearance } from '@angular/material/form-field';\nimport { SendToDialogComponent } from './dialogs/send-to/send-to-dialog.component';\n\nexport interface SelectDialogResult {\n selectedItems: SelectableItem[];\n}\n\nexport interface SelectTreeDialogResult {\n selectedItems: ItemNode[];\n}\n\nexport interface SelectDialogLookup {\n items: SelectableItem[];\n filter?: string;\n params?: any;\n owner?: any;\n}\n\nexport interface SelectDialogFilter {\n items?: SelectableItem[];\n filter?: string;\n filterOption?: SelectableFilter;\n owner?: any;\n}\n\nexport interface SelectDialogAppend {\n items: SelectableItem[];\n owner?: any;\n}\n\nexport interface SelectDialogEdit extends SelectDialogAppend {\n item: SelectableItem;\n}\n\nexport interface SelectDialogDelete {\n items: SelectableItem[];\n selectedItems: SelectableItem[];\n owner?: any;\n}\n\nexport interface SelectFileOption {\n description: string;\n value: boolean;\n}\n\nexport interface SelectFile {\n file: File;\n options?: SelectFileOption[];\n}\n\nexport interface SelectableFilter {\n divider?: boolean;\n description?: string;\n group?: number;\n groupName?: string;\n radio?: boolean;\n checked?: boolean;\n value?: any;\n icon?: string;\n title?: string;\n}\n\nexport interface SelectDialogData {\n title: string;\n description?: string;\n okCaption?: string;\n maxItems?: number;\n multipleSelection?: boolean;\n mustSelect?: boolean;\n width?: number;\n filter?: string;\n filters?: SelectableFilter[];\n items?: SelectableItem[];\n lookupFields?: NameValueItem<string>[];\n lookupOnInit?: boolean;\n emptyMessage?: string;\n canLookupWithOptions?: boolean;\n canLookupWithInlineOptions?: boolean;\n canLookup?: boolean;\n canDelete?: boolean;\n canAppend?: boolean;\n canEdit?: boolean;\n canView?: boolean;\n canFilter?: boolean;\n canPaginate?: boolean;\n pageSize?: number;\n appearance?: MatFormFieldAppearance;\n header?: string;\n searchLabel?: string;\n searchButtonLabel?: string;\n}\n\nexport interface SelectTreeDialogData {\n title: string;\n description?: string;\n okCaption?: string;\n nodes?: ItemNode[];\n initialFilter?: string;\n appearance?: MatFormFieldAppearance;\n owner?: any;\n canAppend?: boolean;\n}\n\n\nexport interface SelectFileDialogData {\n title: string;\n description?: string;\n okCaption?: string;\n helpLink?: string;\n helpCaption?: string;\n maxSize?: number;\n options?: any;\n owner?: any;\n accept?: string;\n appearance?: MatFormFieldAppearance;\n}\n\nexport interface SelectPictureFileDialogData extends SelectFileDialogData {\n maxWidth?: number;\n maxHeight?: number;\n}\n\nexport interface ISelectableItem extends Searchable {\n bag: any;\n template: string;\n}\n\nexport class SelectableItem implements ISelectableItem {\n bag: any;\n template!: string;\n\n /** Searchable index bag. */\n searchBag!: SearchBag;\n}\n\nexport class ItemNode implements INode {\n id!: string;\n name!: string;\n count?: number;\n parent?: INode;\n children?: INode[];\n bag?: any;\n}\n\nexport class SelectableNode extends ItemNode implements Searchable {\n expandable: boolean;\n level: number;\n\n /** Searchable index bag. */\n searchBag!: SearchBag;\n\n /**\n * Create a flattened tree node from a source ItemNode.\n * @param item - The source tree node.\n * @param level - The depth level of this node in the tree.\n */\n constructor(item: ItemNode, level: number) {\n super();\n\n this.expandable = !!(item.children?.length);\n this.level = level;\n\n this.id = item.id;\n this.name = item.name;\n this.count = item.count;\n this.parent = item.parent;\n this.bag = item.bag;\n this.children = item.children;\n }\n}\nexport interface SendToPopulateData {\n item: SendToDialogResult;\n source: SendToDialogComponent;\n}\n\nexport interface SendToDialogResult {\n recipients?: string;\n subject?: string;\n text?: string;\n options?: any;\n}\n\nexport interface PromptDialogResult {\n value?: string;\n type?: PromptDialogType;\n options?: any;\n}\n\nexport interface PromptDateDialogResult {\n value?: Date | DateInterval;\n type?: PromptDialogType;\n options?: any;\n}\n\nexport interface PromptOtpDialogResult {\n value?: string;\n}\n\nexport enum PromptDialogType {\n Default = 0,\n Date = 1,\n Number = 2,\n Text = 3,\n DateInterval = 4,\n List = 5,\n Time = 6\n\n}\n\nexport interface PromptDialogData {\n title: string;\n type: PromptDialogType;\n description?: string;\n okCaption?: string;\n cancelCaption?: string;\n initialValue?: any;\n minValue?: number;\n maxValue?: number;\n required?: boolean;\n appearance?: MatFormFieldAppearance;\n options?: any;\n}\n\nexport interface PromptTimeDialogData extends PromptDialogData {\n slots?: string;\n}\n\n","/** Constants identifying each filter group slot and text filter channels. */\nexport const Filters = {\n FLT_1: 1,\n FLT_2: 2,\n FLT_3: 3,\n FLT_4: 4,\n FLT_5: 5,\n FLT_TEXT: 96,\n FLT_TEXT_1: 97,\n FLT_TEXT_2: 98,\n FLT_TEXT_3: 99\n};\n\n/** Describes a top-level filter group with optional items or a custom action. */\nexport interface FilterGroup {\n group?: number;\n title?: string;\n tooltip?: string;\n items?: FilterItem[];\n action?: any;\n}\n/** A single selectable entry within a FilterGroup. */\nexport interface FilterItem {\n group?: number;\n title?: string;\n titleSelected?: string;\n description?: string;\n divider?: boolean;\n value?: any;\n}\n\n/** Event payload emitted when an active filter changes. */\nexport class CurrentFilterChanged {\n /** The updated filter state. */\n filter!: CurrentFilter;\n /** The group slot that changed (see Filters constants). */\n group!: number;\n}\n\n/** Holds the current state of all active filters for a filter-bar component. */\nexport class CurrentFilter {\n flt1?: any;\n flt1Name?: string;\n flt2?: any;\n flt2Name?: string;\n flt3?: any;\n flt3Name?: string;\n flt4?: any;\n flt4Name?: string;\n flt5?: any;\n flt5Name?: string;\n text?: string;\n text2?: string;\n text3?: string;\n\n /**\n * Returns true if any filter slot or text field is currently active.\n * @returns Whether at least one filter is applied.\n */\n filtered(): boolean {\n return (\n this.flt1 != null ||\n this.flt2 != null ||\n this.flt3 != null ||\n this.flt4 != null ||\n this.flt5 != null ||\n !!this.text?.length ||\n !!this.text2?.length ||\n !!this.text3?.length\n );\n }\n}\n\n/** Holds the selected value and display state for a single typed filter slot. */\nexport class CurrentFilterItem<T> {\n items?: any[];\n value?: T;\n enabled?: boolean = true;\n title?: string;\n selectedTitle?: string;\n\n /**\n * Reset the filter to its empty state.\n */\n public clear(): void {\n this.value = undefined;\n this.selectedTitle = undefined;\n }\n}\n","import { Service } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\nimport type { SendToDialogComponent } from '../dialogs/send-to/send-to-dialog.component';\nimport type { SelectTreeDialogComponent } from '../dialogs/select-tree/select-tree-dialog.component';\nimport { PromptDialogData, PromptDialogType, PromptTimeDialogData, SelectDialogData, SelectFileDialogData, SelectTreeDialogData } from '../definitions';\nimport type { SelectPictureDialogComponent } from '../dialogs/select-picture/select-picture-dialog.component';\nimport type { SelectFileDialogComponent } from '../dialogs/select-file/select-file-dialog.component';\nimport type { PromptDialogComponent } from '../dialogs/prompt/prompt-dialog.component';\nimport type { PromptDateDialogComponent } from '../dialogs/prompt-date/prompt-date-dialog.component';\nimport type { PromptOtpDialogComponent } from '../dialogs/prompt-otp/prompt-otp-dialog.component';\nimport type { PromptTimeDialogComponent } from '../dialogs/prompt-time/prompt-time-dialog.component';\nimport type { SelectDialogComponent } from '../dialogs/select/select-dialog.component';\n\n@Service()\nexport class ApplicationDialogService extends DialogService {\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('../dialogs/send-to/send-to-dialog.component');\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('../dialogs/select-tree/select-tree-dialog.component');\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('../dialogs/select-picture/select-picture-dialog.component');\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('../dialogs/select-file/select-file-dialog.component');\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('../dialogs/select/select-dialog.component');\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('../dialogs/prompt/prompt-dialog.component');\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('../dialogs/prompt-date/prompt-date-dialog.component');\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('../dialogs/prompt-time/prompt-time-dialog.component');\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('../dialogs/prompt-otp/prompt-otp-dialog.component');\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","import { TextFieldModule } from '@angular/cdk/text-field';\nimport { FlexLayoutModule, DialogService } from '@arsedizioni/ars-utils/ui';\nimport { ChangeDetectionStrategy, Component, inject, output, signal, viewChild } from '@angular/core';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatSelectModule } from '@angular/material/select';\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { PromptDialogData, PromptDialogResult, PromptDialogType } from '../../definitions';\n\n\n@Component({\n templateUrl: './prompt-dialog.component.html',\n styleUrl: './prompt-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexLayoutModule, MatFormFieldModule, MatInputModule,\n MatButtonModule, MatIconModule, TextFieldModule, MatSelectModule, MatOptionModule, MatCheckboxModule, MatDialogActions, \n MatDialogClose, SafeHtmlPipe]\n})\nexport class PromptDialogComponent {\n readonly f = viewChild.required<NgForm>('f');\n readonly done = output<PromptDialogResult>();\n private readonly dialogService = inject(DialogService);\n protected readonly dialogData = signal<PromptDialogData>((() => {\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Inserisci dato',\n type: data.type ?? PromptDialogType.Default,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n protected value: any =\n this.dialogData().initialValue && this.dialogData().type !== PromptDialogType.List\n ? this.dialogData().initialValue\n : undefined;\n\n /**\n * Validates the form and emits the result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.f().form.invalid) {\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n if (this.dialogData().type === PromptDialogType.Date) {\n const date = SystemUtils.parseDate(this.value as string);\n if (!date || date.getFullYear() > 9999) {\n this.dialogService.error('Data non valida.');\n return;\n }\n }\n this.done.emit({\n value: this.value,\n type: this.dialogData().type,\n options: this.dialogData().options\n });\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (!dialogData().type) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\"\r\n [required]=\"dialogData().required\" maxlength=\"200\">\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"value = undefined\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 1) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"date\" matInput [(ngModel)]=\"value\" name=\"_value\" #_value=\"ngModel\"\r\n [required]=\"dialogData().required\">\r\n @if (_value.invalid) {\r\n <mat-error>Data non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 2) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"number\" matInput [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\"\r\n [required]=\"dialogData().required\" [min]=\"dialogData().minValue\" [max]=\"dialogData().maxValue\">\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"value = undefined\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 3) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <textarea matInput [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\" [required]=\"dialogData().required\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" maxlength=\"1000\"></textarea>\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"value = undefined\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"end\">{{_value.value?.length || 0}}/1000 </mat-hint>\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 5) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <mat-select [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\" [required]=\"dialogData().required\">\r\n @for (i of dialogData().initialValue; track $index) {\r\n <mat-option [value]=\"i.value\">\r\n {{i.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n @if (dialogData().options) {\r\n <div 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 </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal, viewChild } from '@angular/core';\nimport { FlexLayoutModule, DialogService } from '@arsedizioni/ars-utils/ui';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { DateInterval, DateIntervalChangeDirective, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { PromptDateDialogResult, PromptDialogData, PromptDialogType } from '../../definitions';\n\n@Component({\n templateUrl: './prompt-date-dialog.component.html',\n styleUrl: './prompt-date-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexLayoutModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, DateIntervalChangeDirective, MatButtonModule, MatIconModule,\n MatCheckboxModule, MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class PromptDateDialogComponent {\n readonly f = viewChild.required<NgForm>('f');\n readonly done = output<PromptDateDialogResult>();\n private readonly dialogService = inject(DialogService);\n protected readonly dialogData = signal<PromptDialogData>((() => {\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\n const type = (data.type === PromptDialogType.Date || data.type === PromptDialogType.DateInterval)\n ? data.type\n : PromptDialogType.Date;\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Inserisci dato',\n type,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n protected value: any = (() => {\n const d = this.dialogData();\n if (d.type === PromptDialogType.DateInterval) {\n return d.initialValue ? (d.initialValue as DateInterval) : new DateInterval();\n }\n return d.initialValue ? (d.initialValue as Date) : undefined;\n })();\n\n /**\n * Validates the form and emits the result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.f().form.invalid) {\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n this.done.emit({\n value: this.dialogData().type === PromptDialogType.Date\n ? this.value as Date\n : this.value as DateInterval,\n type: this.dialogData().type,\n options: this.dialogData().options\n });\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (dialogData().type === 1) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [(ngModel)]=\"value\" name=\"_value\" #_value=\"ngModel\"\r\n [required]=\"dialogData().required\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n @if (_value.invalid) {\r\n <mat-error>Data non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData().type === 4) {\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker\" min=\"1750-01-01\" [required]=\"dialogData().required\">\r\n <input matStartDate [(ngModel)]=\"value.from\" [dateIntervalChange]=\"value\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"value.to\" [dateIntervalChange]=\"value\" [end]=\"true\" #rangeTo1=\"ngModel\"\r\n name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (value.from || value.to) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"value.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n </div>\r\n @if (dialogData().options) {\r\n <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 </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal, viewChild } from '@angular/core';\nimport { DialogService, OtpInputComponent, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { PromptDialogData, PromptDialogType, PromptOtpDialogResult } from '../../definitions';\n\n@Component({\n templateUrl: './prompt-otp-dialog.component.html',\n styleUrl: './prompt-otp-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexLayoutModule, MatButtonModule, MatIconModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe, OtpInputComponent]\n})\nexport class PromptOtpDialogComponent {\n readonly f = viewChild.required<NgForm>('f');\n readonly done = output<PromptOtpDialogResult>();\n private readonly dialogService = inject(DialogService);\n protected readonly dialogData = signal<PromptDialogData>((() => {\n const data: PromptDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Conferma la tua identità',\n type: data.type ?? PromptDialogType.Default,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n protected value: any;\n\n /**\n * Validates the form and emits the OTP result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.f().form.invalid) {\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n this.done.emit({ value: this.value });\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n @if (dialogData().description) {\r\n <div [innerHtml]=\"dialogData().description | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <otp-input name=\"otp\" [(ngModel)]=\"value\" required></otp-input> \r\n </div>\r\n <br>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>\r\n","import { ChangeDetectionStrategy, Component, inject, output, signal, viewChild } from '@angular/core';\nimport { FlexLayoutModule, DialogService } from '@arsedizioni/ars-utils/ui';\nimport { FormsModule, NgForm } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { SafeHtmlPipe, TimeValidatorDirective } from '@arsedizioni/ars-utils/core';\nimport { PromptDialogResult, PromptDialogType, PromptTimeDialogData } from '../../definitions';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\n\n@Component({\n templateUrl: './prompt-time-dialog.component.html',\n styleUrl: './prompt-time-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexLayoutModule,\n MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule, MatCheckboxModule,\n MatDialogActions, MatDialogClose, TimeValidatorDirective,SafeHtmlPipe]\n})\nexport class PromptTimeDialogComponent {\n readonly f = viewChild.required<NgForm>('f');\n readonly done = output<PromptDialogResult>();\n private readonly dialogService = inject(DialogService);\n\n protected readonly dialogData = signal<PromptTimeDialogData>((() => {\n const data: PromptTimeDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'fill',\n title: data.title ?? 'Inserisci dato',\n type: PromptDialogType.Time,\n okCaption: data.okCaption ?? 'Ok',\n cancelCaption: data.cancelCaption ?? 'Annulla',\n };\n })());\n protected value: any = this.dialogData().initialValue ?? undefined;\n\n /**\n * Validates the form and emits the result, or shows an error if validation fails.\n */\n protected ok(): void {\n if (this.f().form.invalid) {\n this.dialogService.error('Ci sono degli errori da correggere.');\n return;\n }\n this.done.emit({ value: this.value, options: this.dialogData().options });\n }\n}\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\" fxFill>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n <div>\r\n <mat-form-field [appearance]=\"dialogData().appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData().description}}</mat-label>\r\n <input type=\"time\" matInput [(ngModel)]=\"value\" name=\"_value\" #_value=\"ngModel\"\r\n [required]=\"dialogData().required\" time [slots]=\"dialogData().slots\">\r\n @if (_value.invalid) {\r\n <mat-error>Ora non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n @if(this.dialogData().slots) {\r\n <div class=\"small bold uppercase\">Orari disponibili:</div>\r\n <ul class=\"small\">\r\n @for (s of this.dialogData().slots.replaceAll('-', ' - ').split('|'); track $index) {\r\n <li>{{s}}</li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData().options) {\r\n <div 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 </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData().okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">{{dialogData().cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import {\n afterNextRender, ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n inject,\n output,\n signal,\n viewChild\n} from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxChange, MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MatOptionModule } from \"@angular/material/core\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatListModule, MatSelectionList, MatSelectionListChange } from \"@angular/material/list\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatSelectModule } from \"@angular/material/select\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { SafeHtmlPipe, SearchFilterMetadata, SearchFilterPipe } from '@arsedizioni/ars-utils/core';\nimport {\n SelectDialogAppend,\n SelectDialogData,\n SelectDialogDelete,\n SelectDialogEdit,\n SelectDialogFilter,\n SelectDialogLookup,\n SelectDialogResult,\n SelectableFilter,\n SelectableItem,\n} from \"../../definitions\";\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n\n\n@Component({\n templateUrl: \"./select-dialog.component.html\",\n styleUrl: './select-dialog.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true,\n imports: [\n FlexLayoutModule,\n MatDialogTitle,\n MatFormFieldModule,\n MatInputModule,\n FormsModule,\n MatButtonModule,\n MatIconModule,\n MatSelectModule,\n MatOptionModule,\n MatTooltipModule,\n MatMenuModule,\n MatDividerModule,\n MatCheckboxModule,\n MatDialogContent,\n MatListModule,\n MatDialogActions,\n MatDialogClose,\n MatPaginatorModule,\n SearchFilterPipe,\n SafeHtmlPipe\n ],\n})\nexport class SelectDialogComponent {\n readonly paginator = viewChild.required<MatPaginator>('paginator');\n readonly selection = viewChild.required<MatSelectionList>(\"selection\");\n private isViewReady = false;\n private readonly dialogRef = inject(MatDialogRef<SelectDialogComponent>);\n private readonly cdr = inject(ChangeDetectorRef);\n protected readonly dialogData = signal<SelectDialogData>((() => {\n const data: SelectDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return {\n ...data,\n appearance: data.appearance ?? 'outline',\n title: data.title ?? 'Seleziona',\n okCaption: data.okCaption ?? 'Ok',\n multipleSelection: data.multipleSelection ?? false,\n items: data.canLookup ? [] : (data.items ?? []),\n pageSize: data.canLookup && data.canPaginate && !data.pageSize ? 100 : data.pageSize,\n };\n })());\n readonly done = output<SelectDialogResult>();\n readonly edit = output<SelectDialogEdit>();\n readonly view = output<SelectableItem>();\n readonly append = output<SelectDialogAppend>();\n readonly delete = output<SelectDialogDelete>();\n readonly lookup = output<SelectDialogLookup>();\n readonly lookupOptions = output();\n readonly filter = output<SelectDialogFilter>();\n protected canEdit = signal<boolean>(false);\n protected canView = signal<boolean>(false);\n protected canAppend = signal<boolean>(this.dialogData().canAppend ?? false);\n protected canDelete = signal<boolean>(false);\n protected canPaginate = signal<boolean>(this.dialogData().canPaginate ?? false);\n // Handle submit button activity\n protected okDisabled = signal<boolean>(this.dialogData().mustSelect ?? true);\n // Used for array filtering\n protected filterMetadata: SearchFilterMetadata = { total: 0, count: 0 };\n protected filterText: string = \"\";\n protected readonly filterOptions = signal<SelectableFilter[]>([]);\n protected filterOptionsInfo = signal<string>(\"Tutto\");\n // Used to sincronize lookup fields and params\n protected lookupField: string = \"\";\n private lookupParams?: any;\n // Used to display selected elements\n protected selectionInfo = signal<string | null>(null);\n protected selectionMasterIndeterminate = signal<boolean>(false);\n protected selectionMasterChecked = signal<boolean>(false);\n protected total = signal(this.dialogData().items?.length ?? 0);\n\n constructor() {\n const d = this.dialogData();\n if (d.canLookup) {\n if (d.lookupFields?.length) {\n this.lookupField = d.lookupFields[0].value;\n }\n if (d.canFilter) {\n this.filterOptions.set(d.filters ?? []);\n }\n }\n\n afterNextRender(() => {\n this.isViewReady = true;\n const selectedOption = this.filterOptions().find(x => x.checked);\n if (selectedOption) {\n this.applyFilterByOptions(selectedOption);\n }\n if (d.lookupOnInit) {\n this.applyFilter();\n }\n\n });\n }\n\n\n /**\n * Updates the total item count signal, triggering UI refresh.\n * @param newTotal - The new total count; defaults to 0 if omitted.\n */\n notifyChanges(newTotal?: number): void {\n this.total.set(newTotal ?? 0);\n this.cdr.markForCheck();\n }\n\n\n\n /** Returns `true` when every list item is currently selected. */\n private isAllSelected(): boolean {\n return this.selection().selectedOptions.selected.length === this.dialogData().items.length;\n }\n\n /** Returns `true` when at least one list item is selected. */\n private hasSelection(): boolean {\n return this.selection().selectedOptions.selected.length > 0;\n }\n\n /**\n * Selects or deselects all items based on the master checkbox state.\n * @param e - The checkbox change event.\n */\n protected masterSelectionToggle(e: MatCheckboxChange): void {\n if (e.checked)\n // Deselect if not allselected so that toggle makes the right choice\n this.selection().selectAll();\n else this.selection().deselectAll();\n this.selectionMasterIndeterminate.set(false);\n this.selectionMasterChecked.set(e.checked);\n const selection = this.selection();\n this.okDisabled.set(\n !!(this.dialogData().mustSelect &&\n selection.selectedOptions.selected.length === 0));\n this.updateSelectionInfo();\n }\n\n /**\n * Handles selection or deselection of a list item.\n * @param e - The selection list change event.\n */\n protected select(e: MatSelectionListChange): void {\n const selection = this.selection();\n if (!this.dialogData().multipleSelection) {\n this.selection().deselectAll();\n if (e.options?.length > 0)\n e.options[0].selected = true;\n this.okDisabled.set(false);\n } else {\n this.okDisabled.set(\n !!(this.dialogData().mustSelect &&\n selection.selectedOptions.selected.length === 0));\n }\n\n // Update editors\n this.canEdit.set(\n !!(this.dialogData().canEdit &&\n selection.selectedOptions.selected.length === 1));\n this.canView.set(\n !!(this.dialogData().canView &&\n selection.selectedOptions.selected.length === 1));\n this.canDelete.set(\n !!(this.dialogData().canDelete &&\n selection.selectedOptions.selected.length > 0));\n this.selectionMasterIndeterminate.set(\n !this.isAllSelected() && this.hasSelection());\n this.selectionMasterChecked.set(this.hasSelection());\n this.updateSelectionInfo();\n }\n\n /** Refreshes the selection info label shown in the dialog footer. */\n private updateSelectionInfo(): void {\n const selection = this.selection();\n if (selection.selectedOptions.selected.length > 0 && this.dialogData().multipleSelection) {\n this.selectionInfo.set(\n selection.selectedOptions.selected.length +\n \" / \" +\n selection.options.length);\n } else {\n this.selectionInfo.set(null);\n }\n }\n\n /** Deselects all items and resets the master checkbox state. */\n clearSelection(): void {\n this.selectionMasterIndeterminate.set(false);\n this.selectionMasterChecked.set(false);\n if (this.isViewReady) {\n this.selection().deselectAll();\n }\n this.selectionInfo.set(null);\n }\n\n /** Emits the current selection and closes the dialog. */\n protected ok(): void {\n if (!this.okDisabled()) {\n const selectedItems: SelectableItem[] = [];\n this.selection().selectedOptions.selected.forEach((element) => {\n selectedItems.push(element.value);\n });\n this.done.emit({ selectedItems: selectedItems });\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n }\n\n /** Clears the current filter text input. */\n protected clearFilter(): void {\n this.filterText = \"\";\n }\n\n /**\n * Sets the filter text programmatically.\n * @param text - The new filter string to apply.\n */\n public setFilter(text: string): void {\n this.filterText = text;\n this.cdr.markForCheck();\n }\n\n\n /**\n * Returns the current filter text.\n * @returns The active filter string.\n */\n public getFilter(): string {\n return this.filterText;\n }\n\n /** Emits the `lookupOptions` output event to open the filter options panel. */\n protected showFilterOptions(): void {\n if (this.lookupOptions) {\n this.lookupOptions.emit();\n }\n }\n\n /**\n * Applies the given text filter, emitting a lookup when enabled.\n * @param text - Optional filter string; populates `filterText` when provided.\n * @param e - Optional keyboard event; lookup only fires on Enter.\n */\n protected doFilter(text?: string, e?: KeyboardEvent): void {\n if (text) {\n this.filterText = text;\n }\n if (this.dialogData().canLookup) {\n if (!e || e.key === 'Enter') {\n this.applyFilter();\n }\n }\n }\n\n /**\n * Applies the current filter text, emitting a lookup event.\n */\n private applyFilter() {\n this.clearSelection();\n this.lookup.emit({ items: this.dialogData().items, filter: this.filterText, owner: this });\n }\n\n /**\n * Applies a structured filter option, emitting the filter output event.\n * @param filterOption - The selected filter option object.\n */\n private applyFilterByOptions(filterOption: any): void {\n if (this.dialogData().canLookup && this.dialogData().canFilter) {\n this.filter.emit({\n items: this.dialogData().items,\n filter: this.filterText,\n filterOption: filterOption,\n owner: this,\n });\n this.filterOptionsInfo.set(filterOption ? (filterOption.title ?? \"Tutto\") : \"Tutto\");\n }\n }\n\n /**\n * Applies a structured filter option, emitting the filter output event.\n * @param filterOption - The selected filter option object.\n * @param apply - Optional flag to immediately apply the filter.\n */\n protected doFilterByOptions(filterOption: any, apply?: boolean): void {\n this.applyFilterByOptions(filterOption);\n if (apply) {\n setTimeout(() => {\n this.doFilter();\n }, 250);\n }\n }\n\n /**\n * Triggers a server-side lookup with the given parameters (public API).\n * @param params - An object containing the lookup query parameters.\n */\n doLookup(params: any): void {\n if (this.dialogData().canLookup) {\n this.clearSelection();\n this.lookupParams = params;\n this.lookupParams.first = 0;\n this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this });\n }\n }\n\n /**\n * Updates the paginator length and resets it to the first page.\n * @param total - The new total number of items.\n */\n protected updateLookupPaginator(total: number): void {\n if (this.canPaginate()) {\n const paginator = this.paginator();\n if (paginator) {\n paginator.pageIndex = 0;\n paginator.length = total ?? 0;\n }\n }\n }\n\n /**\n * Handles a paginator page change and triggers a new lookup.\n * @param e - The paginator page change event.\n */\n protected doLookupPage(e: PageEvent): void {\n if (this.canPaginate() && this.dialogData().canLookup) {\n this.clearSelection();\n if (!this.lookupParams) {\n this.lookupParams = { first: 0, count: this.dialogData().pageSize ?? 0 };\n }\n this.lookupParams.first = e.pageIndex * (this.dialogData().pageSize ?? 0);\n this.lookup.emit({ items: this.dialogData().items, params: this.lookupParams, owner: this });\n }\n }\n\n /** Emits the `append` output event to open the add-item flow. */\n protected doAppend(): void {\n this.append.emit({ items: this.dialogData().items, owner: this } as SelectDialogAppend);\n }\n\n /** Emits the `edit` output event for the currently selected item. */\n protected doEdit(): void {\n const selection = this.selection();\n if (selection.selectedOptions.selected?.length > 0) {\n this.edit.emit({\n item: selection.selectedOptions.selected[0].value,\n items: this.dialogData().items,\n owner: this\n } as SelectDialogEdit);\n }\n }\n\n /** Emits the `view` output event for the currently selected item. */\n protected doView(): void {\n const selection = this.selection();\n if (selection.selectedOptions.selected?.length > 0) {\n this.view.emit(selection.selectedOptions.selected[0].value);\n }\n }\n\n /** Emits the `delete` output event with all currently selected items. */\n protected doDelete(): void {\n const selectedItems: SelectableItem[] = [];\n this.selection().selectedOptions.selected.forEach((element) => {\n selectedItems.push(element.value);\n });\n this.delete.emit({\n items: this.dialogData().items,\n selectedItems: selectedItems,\n } as SelectDialogDelete);\n this.canDelete.set(false);\n this.canEdit.set(false);\n\n }\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData().description) {\r\n <div class=\"select-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\r\n }\r\n <div>\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\" fxLayoutAlign=\"space-between center\" fxFill>\r\n @if (!dialogData().canLookupWithOptions) {\r\n <div fxFlex>\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>{{dialogData().searchLabel ?? 'Cerca...'}}</mat-label>\r\n <input type=\"text\" (keyup.enter)=\"$event.preventDefault(); $event.stopPropagation(); doFilter()\" matInput\r\n title=\"{{dialogData().canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\r\n [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (dialogData().canLookupWithInlineOptions) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\r\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\r\n <mat-icon>tune</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (!dialogData().canLookupWithOptions && dialogData().canLookup && dialogData().lookupFields) {\r\n <div fxFlex fxHide.lt-md>\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData().appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Come...</mat-label>\r\n <mat-select [(value)]=\"lookupField\">\r\n @for (field of dialogData().lookupFields; track $index) {\r\n <mat-option [value]=\"field.value\">\r\n {{field.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (dialogData().canLookupWithOptions) {\r\n <div fxFlex fxHide.lt-md>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\r\n <mat-icon>search</mat-icon> {{this.dialogData().searchButtonLabel ?? 'Ricerca'}}\r\n </button>\r\n </div>\r\n }\r\n @if (dialogData().canLookup && dialogData().canFilter) {\r\n <div fxFlex fxHide.lt-md>\r\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\r\n [matMenuTriggerFor]=\"menuFilter\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"5px\">\r\n <div><mat-icon>filter_alt</mat-icon></div>\r\n <div>{{filterOptionsInfo()}}</div>\r\n <div><mat-icon class=\"icon-menu-drop-down\">\r\n arrow_drop_down</mat-icon></div>\r\n </div>\r\n </button>\r\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\r\n @for (f of filterOptions(); track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (f.groupName) {\r\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\r\n }\r\n @if (!f.groupName && !f.divider) {\r\n <button mat-menu-item (click)=\"doFilterByOptions(f, true)\" [attr.aria-label]=\"f.description\">\r\n @if (f.radio && f.value) {\r\n <span style=\"padding-left:40px\"></span>\r\n }\r\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\r\n </button>\r\n }\r\n\r\n }\r\n </mat-menu>\r\n </div>\r\n }\r\n @if (canEdit() || canAppend() || canView() || canDelete()) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" fxLayoutGap=\"5px\">\r\n <div fxFlex fxHide.lt-md>\r\n @if (canAppend()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\r\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\r\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\r\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n <div fxFlex fxHide.gt-sm>\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azioni\" [attr.aria-label]=\"'Azioni'\"\r\n [matMenuTriggerFor]=\"menuActions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #menuActions=\"matMenu\" class=\"mat-menu-300\">\r\n @if (canAppend()) {\r\n <button mat-menu-item (click)=\"doAppend()\" [attr.aria-label]=\"'Aggiungi'\">\r\n <mat-icon>add</mat-icon> Aggiungi\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button mat-menu-item (click)=\"doEdit()\" [attr.aria-label]=\"'Modifica'\">\r\n <mat-icon>edit</mat-icon> Modifica\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button mat-menu-item (click)=\"doView()\" [attr.aria-label]=\"'Mostra'\">\r\n <mat-icon>visibility</mat-icon> Mostra\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button mat-menu-item (click)=\"doDelete()\" [attr.aria-label]=\"'Elimina'\">\r\n <mat-icon>delete</mat-icon> Elimina\r\n </button>\r\n }\r\n </mat-menu>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if ((dialogData().multipleSelection || dialogData().header) && dialogData().items?.length > 0) {\r\n <div>\r\n <div fxLayout=\"row\" fxFill style=\"padding-top: 10px;\">\r\n @if (dialogData().multipleSelection) {\r\n <div fxFlex=\"64px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\r\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (dialogData().header) {\r\n <div class=\"text\" [innerHtml]=\"dialogData().header | safeHtml\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<mat-dialog-content style=\"padding-top:0\">\r\n <div fxLayout=\"column\" fxFill>\r\n @if (dialogData().canLookup && (!dialogData().items || dialogData().items.length == 0)) {\r\n <div class=\"text message\"><i>\r\n @if (!dialogData().emptyMessage) {\r\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\r\n esistente.\r\n @if (dialogData().maxItems > 0) {\r\n <span>Saranno mostrati al massimo {{dialogData().maxItems}} elementi.</span>\r\n }\r\n </span>\r\n } @else {\r\n <span [innerHtml]=\"dialogData().emptyMessage | safeHtml\"></span>\r\n }\r\n </i>\r\n </div>\r\n }\r\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\r\n [multiple]=\"dialogData().multipleSelection\">\r\n @for (item of (dialogData().items | search: (!dialogData().canLookup ? filterText : ''): filterMetadata); track\r\n $index) {\r\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" togglePosition=\"before\">\r\n <div [innerHtml]=\"item.template | safeHtml\"></div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"secondary\" style=\"padding-left:20px\">\r\n @if (selectionInfo()) {\r\n <span class=\"bold\">{{selectionInfo()}}</span> <span class=\"small\"> elementi selezionati</span>\r\n } @else {\r\n <span class=\"bold\">{{(dialogData().canLookup ? total() : (filterText ? filterMetadata.count : total())) ??\r\n 0}}</span> <span class=\"small\"> elementi</span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"center\">\r\n @if (canPaginate()) {\r\n <mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData().pageSize\" [showFirstLastButtons]=\"true\"\r\n (page)=\"doLookupPage($event)\" [length]=\"total() ?? 0\"></mat-paginator>\r\n }\r\n </div>\r\n </div>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"okDisabled()\">\r\n <span>{{dialogData().mustSelect ? dialogData().okCaption : 'Chiudi'}}</span>\r\n </button>\r\n @if (dialogData().mustSelect) {\r\n <button mat-stroked-button mat-dialog-close>\r\n <span>Annulla</span>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, DialogService } from '@arsedizioni/ars-utils/ui';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { SelectFile, SelectFileDialogData } from '../../definitions';\n\n\n@Component({\n templateUrl: './select-file-dialog.component.html',\n styleUrl: './select-file-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FlexLayoutModule, MatButtonModule, MatCheckboxModule, FormsModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class SelectFileDialogComponent {\n readonly done = output<SelectFile>();\n private readonly dialogService = inject(DialogService);\n private readonly dialogRef = inject(MatDialogRef<SelectFileDialogComponent>);\n protected readonly dialogData = signal<SelectFileDialogData>(inject(MAT_DIALOG_DATA) ?? {});\n protected readonly file = signal<File | undefined>(undefined);\n protected fileClass = signal<'selectfile-file' | 'selectfile-file-drop'>('selectfile-file');\n\n\n /**\n * Handles the native file input change event and delegates to `selectFile`.\n * @param e - The DOM change event from the file input.\n */\n protected update(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) {\n this.selectFile(input.files[0]);\n }\n }\n\n /**\n * Validates and sets the selected file, showing an error if size or type constraints are violated.\n * @param file - The `File` object to validate and store.\n */\n private selectFile(file: File): void {\n const data = this.dialogData();\n const maxSize = data.maxSize ?? 0;\n if (maxSize > 0) {\n const size = file.size / 1048576;\n if (size > maxSize) {\n this.dialogService.error(`File troppo grande (massimo ${SystemUtils.formatFileSize(maxSize * 1048576)})`);\n return;\n }\n }\n if (data.accept) {\n const accept = data.accept.toLowerCase();\n const a = file.name.split('.').pop()?.toLowerCase();\n let b = file.type.toLowerCase();\n if (b.startsWith('image/') && accept.includes('image/*')) {\n b = 'image/*';\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\n b = 'video/*';\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\n b = 'audio/*';\n }\n if (!accept.includes(a ?? '') && !accept.includes(b)) {\n this.dialogService.error(`Sono accettati solo questi tipi di file: ${accept}`);\n return;\n }\n }\n this.file.set(file);\n }\n\n /**\n * Formats a byte count into a human-readable size string.\n * @param size - File size in bytes.\n * @returns A formatted size string (e.g. \"1.2 MB\").\n */\n protected size(size: number): string {\n return SystemUtils.formatFileSize(size);\n }\n\n /** Emits the selected file and options, then closes the dialog. */\n protected ok(): void {\n this.done.emit({ file: this.file(), options: this.dialogData().options });\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n\n /** Highlights the drop zone when a drag enters the area.\n * @param e - The drag event.\n */\n protected onDragOver(e: DragEvent): void {\n this.fileClass.set('selectfile-file-drop');\n e.preventDefault();\n }\n\n /** Highlights the drop zone when a dragged item enters.\n * @param e - The drag event.\n */\n protected onDragEnter(e: DragEvent): void {\n this.fileClass.set('selectfile-file-drop');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when dragging ends.\n * @param e - The drag event.\n */\n protected onDragEnd(e: DragEvent): void {\n this.fileClass.set('selectfile-file');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when a dragged item leaves the area.\n * @param e - The drag event.\n */\n protected onDragLeave(e: DragEvent): void {\n this.fileClass.set('selectfile-file');\n e.preventDefault();\n }\n\n /**\n * Handles a file drop event, extracting and processing the dropped files.\n * @param e - The drop event.\n */\n protected onDrop(e: DragEvent): void {\n this.fileClass.set('selectfile-file');\n e.preventDefault();\n e.stopPropagation();\n if (e.dataTransfer?.files?.length) {\n this.addFiles(e.dataTransfer.files);\n }\n }\n\n /**\n * Picks the first file from the list and passes it to `selectFile`.\n * @param files - The `FileList` from the drag-and-drop event.\n */\n private addFiles(files: FileList): void {\n if (files.length > 0) {\n this.selectFile(files[0]);\n }\n }\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n@if (dialogData().description) {\n<div class=\"selectfile-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n}\n<mat-dialog-content class=\"dialog-content\">\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui il file o selezionalo</i></div>\n <div>\n <input #_file type=\"file\" [accept]=\"dialogData().accept\" [hidden]=\"true\" (change)=\"update($event)\" />\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\n </div>\n @if (file()) {\n <div style=\"padding:0 24px\">\n <div fxLayout=\"column\" fxLayoutGap=\"5px\" fxLayoutAlign=\"center center\" fxFill>\n <div class=\"small accent bold\"><i>{{file().name}}</i></div>\n <div class=\"small\">Dimensioni: <i>{{size(file().size)}}</i></div>\n </div>\n </div>\n }\n </div>\n </div>\n @if (dialogData().options) {\n <div style=\"padding-bottom: 24px;\">\n @for (o of dialogData().options; track o; let i = $index) {\n <div>\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\">\n {{o.description}}\n </mat-checkbox>\n </div>\n }\n </div>\n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\n <div fxFlex=\"50\">\n @if (dialogData().helpLink) {\n <a mat-stroked-button href=\"{{dialogData().helpLink}}\" target=\"_blank\">{{dialogData().helpCaption}}</a>\n }\n </div>\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file()\">{{dialogData().okCaption}}</button>\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\n </div>\n </div>\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, output, signal } from '@angular/core';\nimport { FlexLayoutModule, DialogService } from '@arsedizioni/ars-utils/ui';\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { SelectFile, SelectPictureFileDialogData } from '../../definitions';\nimport { FormsModule } from '@angular/forms';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatButtonModule } from '@angular/material/button';\n\n\n\n@Component({\n templateUrl: './select-picture-dialog.component.html',\n styleUrl: './select-picture-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, MatDialogContent, FlexLayoutModule, MatButtonModule, MatCheckboxModule, FormsModule,\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\n})\nexport class SelectPictureDialogComponent {\n readonly done = output<SelectFile>();\n private readonly dialogService = inject(DialogService);\n private readonly dialogRef = inject(MatDialogRef<SelectPictureDialogComponent>);\n protected readonly dialogData = signal<SelectPictureFileDialogData>(inject(MAT_DIALOG_DATA) ?? {});\n protected readonly file = signal<File | undefined>(undefined);\n protected fileClass = signal<'selectpicture-file' | 'selectpicture-file-drop'>('selectpicture-file');\n protected pictureWidth = signal<number>(0);\n protected pictureHeight = signal<number>(0);\n protected picturePreview = signal<any>(undefined);\n\n\n /**\n * Handles the native file input change event and delegates to `selectFile`.\n * @param e - The DOM change event from the file input.\n */\n protected update(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) {\n this.selectFile(input.files[0]);\n }\n }\n\n /**\n * Validates the file size and type, then reads it as a data URL to generate a preview.\n * @param file - The `File` object to validate and preview.\n */\n private selectFile(file: File): void {\n const data = this.dialogData();\n const maxSize = data.maxSize ?? 0;\n if (maxSize > 0) {\n const size = file.size / 1048576;\n if (size > maxSize) {\n this.dialogService.error(`File troppo grande (massimo ${SystemUtils.formatFileSize(maxSize * 1048576)})`);\n return;\n }\n }\n if (data.accept) {\n const accept = data.accept.toLowerCase();\n const a = file.name.split('.').pop()?.toLowerCase();\n let b = file.type.toLowerCase();\n if (b.startsWith('image/') && accept.includes('image/*')) {\n b = 'image/*';\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\n b = 'video/*';\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\n b = 'audio/*';\n }\n if (!accept.includes(a ?? '') && !accept.includes(b)) {\n this.dialogService.error(`Sono accettati solo questi tipi di file: ${accept}`);\n return;\n }\n }\n const reader = new FileReader();\n reader.onload = (_e: ProgressEvent<FileReader>) => {\n const img = new Image();\n img.onload = () => {\n const maxWidth = data.maxWidth ?? 0;\n if (maxWidth > 0 && img.width > maxWidth) {\n this.dialogService.error(`Immagine troppo larga (massimo ${maxWidth} pixel)`);\n return;\n }\n const maxHeight = data.maxHeight ?? 0;\n if (maxHeight > 0 && img.height > maxHeight) {\n this.dialogService.error(`Immagine troppo alta (massimo ${maxHeight} pixel)`);\n return;\n }\n this.pictureWidth.set(img.width);\n this.pictureHeight.set(img.height);\n this.picturePreview.set((_e.target as FileReader).result);\n this.file.set(file);\n };\n img.src = (_e.target as FileReader).result as string;\n };\n reader.readAsDataURL(file);\n }\n\n\n /**\n * Formats a byte count into a human-readable size string.\n * @param size - File size in bytes.\n * @returns A formatted size string (e.g. \"1.2 MB\").\n */\n protected size(size: number): string {\n return SystemUtils.formatFileSize(size);\n }\n\n /** Emits the selected file and options, then closes the dialog. */\n protected ok(): void {\n this.done.emit({ file: this.file(), options: this.dialogData().options });\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n\n /** Highlights the drop zone when a dragged item is over it.\n * @param e - The drag event.\n */\n protected onDragOver(e: DragEvent): void {\n this.fileClass.set('selectpicture-file-drop');\n e.preventDefault();\n }\n\n /** Highlights the drop zone when a dragged item enters.\n * @param e - The drag event.\n */\n protected onDragEnter(e: DragEvent): void {\n this.fileClass.set('selectpicture-file-drop');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when dragging ends.\n * @param e - The drag event.\n */\n protected onDragEnd(e: DragEvent): void {\n this.fileClass.set('selectpicture-file');\n e.preventDefault();\n }\n\n /** Resets the drop zone style when a dragged item leaves.\n * @param e - The drag event.\n */\n protected onDragLeave(e: DragEvent): void {\n this.fileClass.set('selectpicture-file');\n e.preventDefault();\n }\n\n /**\n * Handles a file drop event, extracting and processing the dropped image.\n * @param e - The drop event.\n */\n protected onDrop(e: DragEvent): void {\n this.fileClass.set('selectpicture-file');\n e.preventDefault();\n e.stopPropagation();\n if (e.dataTransfer?.files?.length) {\n this.addFiles(e.dataTransfer.files);\n }\n }\n\n /**\n * Picks the first file from the list and passes it to `selectFile`.\n * @param files - The `FileList` from the drag-and-drop event.\n */\n private addFiles(files: FileList): void {\n if (files.length > 0) {\n this.selectFile(files[0]);\n }\n }\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\n@if (dialogData().description) {\n<div class=\"selectpicture-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\n}\n<mat-dialog-content class=\"dialog-content\">\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxLayoutGap=\"24px\" fxFill>\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui l'immagine o selezionala</i>\n </div>\n <div>\n <input #_file type=\"file\" [hidden]=\"true\" [accept]=\"dialogData().accept ?? 'image/*'\"\n (change)=\"update($event)\" />\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\n </div>\n @if (file()) {\n <div style=\"padding:0 24px\">\n <div fxLayout=\"column\" fxLayoutGap=\"5px\" fxLayoutAlign=\"center center\" fxFill>\n <img [src]=\"picturePreview()\" class=\"selectpicture-preview\">\n <div class=\"small accent bold \"><i>{{file().name}}</i></div>\n <div class=\"small\">Dimensioni:<i>{{pictureWidth()}} x {{pictureHeight()}} ({{size(file().size)}})</i></div>\n </div>\n </div>\n }\n </div>\n </div>\n @if (dialogData().options) {\n <div style=\"padding-bottom: 24px;\">\n @for (o of dialogData().options; track o; let i = $index) {\n <div>\n <mat-checkbox (change)=\"o.selected = $event.checked\" [checked]=\"o.selected === true\" name=\"opt_{{i}}\">\n {{o.description}}\n </mat-checkbox>\n </div>\n }\n </div> \n }\n </div>\n</mat-dialog-content>\n<mat-dialog-actions>\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file()\">{{dialogData().okCaption}}</button>\n <button mat-stroked-button mat-dialog-close>Annulla</button>\n </div>\n</mat-dialog-actions>","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n Injectable,\n OnDestroy,\n computed,\n inject,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatTree, MatTreeModule } from '@angular/material/tree';\nimport { INode, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { BehaviorSubject } from 'rxjs';\nimport { ItemNode, SelectTreeDialogData, SelectTreeDialogResult } from '../../definitions';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n\n@Injectable()\nexport class TreeDataSource implements OnDestroy {\n private readonly _dataChange = new BehaviorSubject<ItemNode[]>([]);\n readonly dataChange$ = this._dataChange.asObservable();\n\n get data(): ItemNode[] {\n return this._dataChange.value;\n }\n\n ngOnDestroy(): void {\n this._dataChange.complete();\n }\n\n initialize(data: ItemNode[]): void {\n this._dataChange.next(data);\n }\n\n /**\n * Find a node by id recursively.\n * @param node - The source node to search from, or null to search from root.\n * @param id - The id to search for.\n * @returns The matching node, or undefined if not found.\n */\n findNode(node: ItemNode | null, id: string): ItemNode | undefined {\n if (node) {\n if (node.id === id) return node;\n const children = node.children;\n if (children) {\n let _n: ItemNode | undefined;\n children.some(n => {\n _n = this.findNode(n as ItemNode, id);\n return !!_n;\n });\n return _n;\n }\n return undefined;\n }\n // Search all root nodes when called with null\n for (const root of this.data) {\n const found = this.findNode(root, id);\n if (found) return found;\n }\n return undefined;\n }\n /**\n * Remove a node from the tree.\n * @param id - The id of the node to remove.\n */\n removeNode(id: string): void {\n let n = this.findNode(null, id);\n if (!n) return;\n if (n.parent) {\n // children/count are optional on INode: guard before indexing\n const siblings = n.parent.children ?? [];\n const p = siblings.findIndex(c => c.id === id);\n if (p !== -1) {\n siblings.splice(p, 1);\n if ((n.parent.count ?? 0) > 0) n.parent.count!--;\n }\n } else {\n const p = this.data.findIndex(n => n.id === id);\n if (p !== -1) {\n this.data.splice(p, 1);\n }\n }\n\n this._dataChange.next(this.data);\n }\n\n /**\n * Insert a new node at the top of its parent (or root).\n * @param node - The new node to insert.\n */\n insertNode(node: ItemNode): void {\n if (node.parent) {\n (node.parent.children ??= []).unshift(node);\n node.parent.count = (node.parent.count ?? 0) + 1;\n } else this.data.unshift(node);\n\n this._dataChange.next(this.data);\n }\n\n /**\n * Rename a node in the tree.\n * @param id - The id of the node to rename.\n * @param name - The new name for the node.\n * @returns The renamed node, or undefined if not found.\n */\n renameNode(id: string, name: string): ItemNode | undefined {\n const n = this.findNode(null, id);\n if (n) {\n n.name = name;\n this._dataChange.next(this.data);\n }\n return n;\n }\n\n /**\n * Notify all subscribers of the current data state.\n */\n update(): void {\n this._dataChange.next(this.data);\n }\n}\n\nexport interface SelectTreeDialogAppend {\n parent?: ItemNode;\n owner?: any;\n}\n\n@Component({\n templateUrl: './select-tree-dialog.component.html',\n styleUrl: './select-tree-dialog.component.scss',\n providers: [TreeDataSource],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogTitle, FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule, MatButtonModule,\n MatIconModule, MatTooltipModule, MatDialogContent, MatTreeModule, MatDialogActions,\n MatDialogClose, SafeHtmlPipe]\n})\nexport class SelectTreeDialogComponent {\n /** Emitted when the user confirms a selection. */\n readonly done = output<SelectTreeDialogResult>();\n /** Emitted when the user requests to append a new node. */\n readonly append = output<SelectTreeDialogAppend>();\n private readonly destroyRef = inject(DestroyRef);\n private readonly dialogRef = inject(MatDialogRef<SelectTreeDialogComponent>);\n /** Dialog configuration, injected and exposed as a signal. */\n protected readonly dialogData = signal<SelectTreeDialogData>((() => {\n const data: SelectTreeDialogData = inject(MAT_DIALOG_DATA) ?? {};\n return { ...data, title: data.title ?? 'Seleziona', okCaption: data.okCaption ?? 'OK' };\n })());\n private readonly tree = inject(TreeDataSource);\n private readonly _elRef = inject(ElementRef);\n /** Reference to the Material tree component. */\n protected readonly matTree = viewChild<MatTree<ItemNode>>(MatTree);\n /** Provides children of a tree node to the tree component. */\n protected readonly childrenAccessor = (node: ItemNode) => (node.children ?? []) as ItemNode[];\n /** Root nodes used as the tree data source. */\n protected readonly treeNodes = signal<ItemNode[]>([]);\n /** Currently selected tree node. */\n protected readonly currentNode = signal<ItemNode | undefined>(undefined);\n /** Current filter text. */\n protected readonly filterText = signal<string>('');\n /** Nodes matching the current filter text. */\n protected readonly filteredItems = signal<ItemNode[]>([]);\n /** Index of the currently highlighted filtered node (-1 = none). */\n protected readonly filterIndex = signal(-1);\n /** The currently highlighted filtered node, or null. */\n protected readonly filteredNode = computed<ItemNode | null>(() => {\n const idx = this.filterIndex();\n return idx >= 0 ? (this.filteredItems()[idx] ?? null) : null;\n });\n protected readonly canAppend = signal<boolean>(this.dialogData().canAppend || false);\n\n /** Flat node map rebuilt whenever treeNodes changes. */\n private readonly _nodeMap = computed(() => {\n const map = new Map<string, ItemNode>();\n const build = (nodes: ItemNode[]) => {\n for (const n of nodes) {\n map.set(n.id, n);\n if (n.children?.length) build(n.children as ItemNode[]);\n }\n };\n build(this.treeNodes());\n return map;\n });\n\n protected hasChild = (_: number, node: ItemNode) => !!(node.children?.length);\n\n constructor() {\n this.tree.dataChange$\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(data => {\n this.treeNodes.set(data);\n setTimeout(() => {\n const current = this.currentNode();\n if (current) {\n const n = this.findInTree(data, current.id);\n if (n) {\n this.currentNode.set(n);\n this.expand(n);\n }\n }\n });\n });\n const data = this.dialogData();\n if (data.nodes) {\n this.tree.initialize(data.nodes);\n }\n if (data.initialFilter) {\n this.filterText.set(data.initialFilter);\n this.doFilter();\n }\n }\n\n /**\n * Confirm the current selection and close the dialog.\n */\n protected ok(): void {\n const node = this.currentNode();\n if (node) {\n this.done.emit({ selectedItems: [node] });\n }\n setTimeout(() => {\n this.dialogRef.close();\n }, 500);\n }\n\n /**\n * Toggle selection of a tree node. Clicking the already-selected node deselects it.\n * @param e - The mouse event (propagation is stopped).\n * @param node - The node that was clicked.\n */\n protected select(e: MouseEvent, node: ItemNode): void {\n if (e) e.stopPropagation();\n if (node) {\n this.currentNode.set(node.id === this.currentNode()?.id ? undefined : node);\n }\n }\n\n /**\n * Clear the active filter text.\n */\n protected clearFilter(): void {\n this.filterText.set('');\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n }\n\n /**\n * Filter the tree nodes by name (minimum 3 characters).\n */\n protected doFilter(): void {\n const text = this.filterText().trim().toLowerCase();\n if (text.length < 3) {\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n return;\n }\n const matches = Array.from(this._nodeMap().values())\n .filter(n => n.name?.toLowerCase().includes(text));\n this.filteredItems.set(matches);\n const idx = matches.length > 0 ? 0 : -1;\n this.filterIndex.set(idx);\n if (idx >= 0) this._scrollToFiltered(idx, matches);\n }\n\n /**\n * Advance to the next matching filtered node and scroll it into view.\n */\n protected nextFiltered(): void {\n const items = this.filteredItems();\n if (!items.length) return;\n const next = (this.filterIndex() + 1) % items.length;\n this.filterIndex.set(next);\n this._scrollToFiltered(next, items);\n }\n\n /**\n * Returns true when the node is the currently highlighted filter match.\n * @param node - tree node to check.\n */\n protected isFilteredNode(node: ItemNode): boolean {\n return this.filteredNode()?.id === node.id;\n }\n\n /**\n * Expands ancestors of the target node and scrolls it into view.\n * @param index - index within `items` to scroll to.\n * @param items - current filtered items array.\n */\n private _scrollToFiltered(index: number, items: ItemNode[]): void {\n const node = items[index];\n if (!node) return;\n this.currentNode.set(node);\n this.expand(node);\n setTimeout(() => {\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n\n /**\n * Expand a node and all of its parent nodes.\n * @param node - The node to expand.\n * @returns Always false.\n */\n public expand(node: ItemNode): boolean {\n this.matTree()?.expand(node);\n let parent = node.parent;\n const visited = new Set<INode>();\n while (parent && !visited.has(parent)) {\n visited.add(parent);\n this.matTree()?.expand(parent as ItemNode);\n parent = parent.parent;\n }\n return false;\n }\n\n /**\n * Recursively find a node by id.\n * @param nodes - Nodes to search.\n * @param id - The id to find.\n */\n private findInTree(nodes: ItemNode[], id: string): ItemNode | undefined {\n for (const node of nodes) {\n if (node.id === id) return node;\n if (node.children?.length) {\n const found = this.findInTree(node.children as ItemNode[], id);\n if (found) return found;\n }\n }\n return undefined;\n }\n\n /**\n * Append a new node to the tree.\n * @param node - The node to insert.\n */\n public appendNode(node: ItemNode): void {\n this.tree.insertNode(node);\n }\n\n /**\n * Collapse all tree nodes and reset the current selection.\n */\n protected collapseAll(): void {\n this.matTree()?.collapseAll();\n this.currentNode.set(undefined);\n }\n\n /**\n * Expand all tree nodes and scroll to the selected node, if any.\n */\n protected expandAll(): void {\n this.matTree()?.expandAll();\n const node = this.currentNode();\n if (node) {\n setTimeout(() => {\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n }\n\n /**\n * Emit an append request with the currently selected node as the parent.\n */\n protected doAppend(): void {\n this.append.emit({ parent: this.currentNode(), owner: this } as SelectTreeDialogAppend);\n }\n\n\n\n}\n\n","<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<div style=\"padding: 0 24px\">\r\n @if (dialogData().description) {\r\n <div class=\"selecttree-description\" [innerHtml]=\"dialogData().description | safeHtml\"></div>\r\n }\r\n <div style=\"padding-bottom: 10px;\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex fxHide.xs>\r\n <mat-form-field style=\"width:100%\" appearance=\"outline\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\r\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\" \r\n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\r\n [ngModel]=\"filterText()\"\r\n (ngModelChange)=\"filterText.set($event)\">\r\n @if (filterText()) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\"\r\n (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (filteredItems().length > 0) {\r\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\r\n </div>\r\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <button type=\"button\" type=\"button\" mat-icon-button (click)=\"nextFiltered()\">\r\n <mat-icon aria-label=\"Vai al prossimo\" matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end center\" style=\"white-space:nowrap\">\r\n <div>\r\n @if (canAppend()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n <button type=\"button\" mat-icon-button (click)=\"collapseAll()\">\r\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\r\n </button>\r\n <button type=\"button\" mat-icon-button (click)=\"expandAll()\">\r\n <mat-icon aria-label=\"Espandi tutto\" matTooltip=\"Espandi tutto\">unfold_more</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n<mat-dialog-content>\r\n <div fxLayout=\"column\" fxFill>\r\n <mat-tree [dataSource]=\"treeNodes()\" [childrenAccessor]=\"childrenAccessor\" class=\"tree\">\r\n <mat-tree-node [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\" (click)=\"select($event, node);\"\r\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill>\r\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\r\n {{node.name}}\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <span fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</span>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node #treeNodeRef=\"matTreeNode\" [attr.data-node-id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\"\r\n matTreeNodePadding [matTreeNodePaddingIndent]=\"20\" class=\"tree-node\"\r\n [class.tree-node-activated]=\"currentNode()?.id === node.id\" [class.tree-node-filtered]=\"isFilteredNode(node)\"\r\n (click)=\"select($event, node);\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n <button type=\"button\" mat-icon-button matTreeNodeToggle [attr.aria-label]=\"'Apri/chiudi ' + node.name\"\r\n class=\"small-icon-button\">\r\n <mat-icon class=\"mat-icon-rtl-mirror\">\r\n {{treeNodeRef.isExpanded ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"small\">\r\n {{node.name}}\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <div fxLayoutAlign=\"end\" class=\"small\">({{node.count}})</div>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!currentNode()\">{{dialogData().okCaption}}</button>\r\n <button mat-button mat-dialog-close>Annulla</button>\r\n </div>\r\n</mat-dialog-actions>","import { TextFieldModule } from \"@angular/cdk/text-field\";\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, output, signal } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from \"@angular/material/dialog\";\nimport { MatFormFieldAppearance, MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { EmailsValidatorDirective, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { SendToDialogResult, SendToPopulateData } from \"../../definitions\";\n\nexport interface SendToDialogData {\n count: number;\n canPopulate?: boolean;\n title?: string;\n text?: string;\n subject?: string;\n info?: string;\n appearance?: MatFormFieldAppearance;\n options?: any;\n}\n\n@Component({\n templateUrl: \"./send-to-dialog.component.html\",\n styleUrl: './send-to-dialog.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatDialogTitle,\n MatDialogContent,\n FormsModule,\n FlexLayoutModule,\n MatFormFieldModule,\n MatInputModule,\n TextFieldModule,\n EmailsValidatorDirective,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n MatCheckboxModule,\n MatDialogActions,\n MatDialogClose,\n SafeHtmlPipe\n ],\n})\nexport class SendToDialogComponent {\n /** Emitted when the user confirms and sends the message. */\n readonly done = output<SendToDialogResult>();\n /** Emitted when the user requests to populate the recipient list. */\n readonly populate = output<SendToPopulateData>();\n private readonly cdr = inject(ChangeDetectorRef);\n /** Dialog configuration, injected and exposed as a signal. */\n protected readonly dialogData = signal<SendToDialogData>((() => {\n const data: SendToDialogData = inject(MAT_DIALOG_DATA) ?? {};\n const count = data.count ?? 0;\n const title = data.title || (count\n ? (count === 1 ? 'Invia documento a...' : `Invia ${count} documenti a...`)\n : undefined);\n return { ...data, count, appearance: data.appearance ?? 'fill', title };\n })());\n /** Form model for the send-to form fields. */\n protected item: SendToDialogResult = {\n recipients: undefined,\n subject: this.dialogData().subject,\n text: this.dialogData().text,\n options: undefined\n };\n\n /**\n * Confirm the form and emit the result.\n */\n protected ok(): void {\n this.item.options = this.dialogData().options;\n this.done.emit(this.item);\n }\n\n /**\n * Request the host to populate the recipient list.\n * Only emits if `canPopulate` is enabled in the dialog data.\n */\n protected populateRecipients(): void {\n if (this.dialogData().canPopulate) {\n this.populate.emit({ item: this.item, source: this });\n }\n }\n\n /**\n * Update the recipient list from an external caller.\n * @param recipients - The new recipients string (semicolon-separated).\n */\n updateRecipients(recipients: string): void {\n this.item.recipients = recipients;\n this.cdr.markForCheck();\n }\n}","<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n <span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n } @else {\r\n <span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n }\r\n</div>\r\n<div mat-dialog-title [innerHTML]=\"dialogData().title | safeHtml\"></div>\r\n<mat-dialog-content class=\"dialog-content\">\r\n <p>{{dialogData().info}}</p>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Destinatari</mat-label>\r\n <textarea matInput [(ngModel)]=\"item.recipients\" name=\"recipients\" maxlength=\"1000\" #recipients=\"ngModel\"\r\n cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" emails required></textarea>\r\n @if (item.recipients) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\"\r\n (click)=\"item.recipients = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n\r\n @if (dialogData().canPopulate) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Popola\"\r\n (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>person</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"start\">Separati da punto e virgola</mat-hint>\r\n <mat-hint align=\"end\">{{recipients.value?.length || 0}}/1000 </mat-hint>\r\n @if (recipients.invalid) {\r\n <mat-error>Non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Oggetto</mat-label>\r\n <input matInput name=\"subject\" [(ngModel)]=\"item.subject\" #subject=\"ngModel\" maxlength=\"200\" required />\r\n @if (subject.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n <mat-hint align=\"end\">{{subject.value?.length || 0}}/200 </mat-hint>\r\n </mat-form-field>\r\n <mat-form-field [appearance]=\"dialogData().appearance\">\r\n <mat-label>Testo</mat-label>\r\n <textarea matInput [(ngModel)]=\"item.text\" name=\"text\" maxlength=\"1000\" #text=\"ngModel\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" required></textarea>\r\n <mat-hint align=\"end\">{{text.value?.length || 0}}/1000 </mat-hint>\r\n @if (subject.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData().options) {\r\n <div 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 </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">Invia</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\">Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, Input, effect, OnDestroy, Optional, Renderer2, Self, inject, input, signal, output } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { Subject } from 'rxjs';\n\n\n@Component({\n selector: 'button-selector',\n standalone: true,\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule,\n MatMenuModule],\n templateUrl: './button-selector.component.html',\n styleUrl: './button-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[id]': 'id',\n '[attr.aria-describedBy]': 'describedBy',\n },\n})\nexport class ButtonSelectorComponent implements OnDestroy, ControlValueAccessor {\n\n /** Emitted whenever the selected value changes (including programmatic resets). */\n readonly changed = output<NameValueItem<any> | undefined>();\n\n /** Emitted when the user explicitly picks an item from the menu. */\n readonly selected = output<NameValueItem<any> | undefined>();\n\n private readonly stateChanges = new Subject<void>();\n private focused = false;\n\n private _value: NameValueItem<any> | undefined = undefined;\n\n set value(value: NameValueItem<any> | undefined) {\n this.setValue(value, true);\n }\n\n /**\n * Updates the internal state. Form propagation is skipped for model->view\n * writes (writeValue) to avoid the CVA echo loop, and performed for\n * user/programmatic changes via the `value` setter.\n * @param value - The new value to store and display.\n * @param propagate - When `true`, notifies the registered onChange callback.\n */\n private setValue(value: NameValueItem<any> | undefined, propagate: boolean): void {\n this._value = value;\n if (propagate) {\n this.propagateChange(this._value);\n }\n this.stateChanges.next();\n this.changed.emit(this._value);\n this.current.set(this._value);\n }\n\n /** The current value as the selected item. */\n get value(): NameValueItem<any> | undefined {\n return this._value;\n }\n\n private _disabled: boolean = false;\n\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled != null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n\n private propagateChange: (_: any) => void = () => {};\n private propagateTouched: () => void = () => {};\n\n id = `button-selector--${SystemUtils.generateUUID()}`;\n describedBy = '';\n\n private readonly renderer = inject(Renderer2);\n\n /** Currently selected item, kept in sync with the form control value. */\n protected readonly current = signal<NameValueItem<any> | undefined>(undefined);\n\n /** Width of the trigger button in pixels. Use `-1` for 100 %, `0` for `auto`. */\n readonly width = input<number>(-1);\n\n /** Border thickness override. Use `-1` to inherit. */\n readonly border = input<number>(-1);\n\n /** CSS border-radius of the trigger button. Defaults to a pill shape. */\n readonly borderRadius = input<string>('9999px');\n\n /** Placeholder label shown when nothing is selected. */\n readonly label = input<string | undefined>(undefined);\n\n /** Label shown above the selected value (replaces `label` when an item is selected). */\n readonly labelSelected = input<string | undefined>(undefined);\n\n /** List of selectable options. */\n readonly options = input<NameValueItem<any>[]>([]);\n\n /** When `true`, the first available option is pre-selected on init. */\n readonly autoSelect = input<boolean>(false);\n\n constructor(@Optional() @Self() public ngControl: NgControl) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // Pre-select the first option whenever options change and autoSelect is enabled\n effect(() => {\n if (this.autoSelect()) {\n const options = this.options();\n // !== undefined: values like 0 or false are legitimate selections\n if (options.length > 0 && options[0].value !== undefined) {\n this.current.set(options[0]);\n }\n }\n });\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n /**\n * Writes a new value to the component (called by the form layer).\n * @param value - The new value to display.\n */\n writeValue(value: any): void {\n // Model -> view write: must NOT propagate back to the form (echo loop)\n this.setValue(value as NameValueItem<any> | undefined, false);\n }\n\n /**\n * Registers the on-change callback (called by the form layer).\n * @param fn - Callback to invoke whenever the value changes.\n */\n registerOnChange(fn: (_: any) => void): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers the on-touched callback (called by the form layer).\n * @param fn - Callback to invoke when the control is touched.\n */\n registerOnTouched(fn: () => void): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Sets the ARIA described-by IDs for accessibility.\n * @param ids - The list of element IDs to associate with this control.\n */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /**\n * Updates the disabled state when the Angular form layer changes it.\n * @param isDisabled - Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n if (isDisabled && this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n this.renderer.setProperty(elem, 'disabled', isDisabled);\n }\n }\n\n /**\n * Handles a click on the container element, focusing it and marking it as touched.\n */\n onContainerClick(): void {\n if (!this.focused) {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n elem.focus();\n this.propagateTouched();\n }\n }\n }\n\n /**\n * Selects an option and optionally emits the `selected` output event.\n * @param item - The item to select.\n * @param notify - When `true` (default), emits the `selected` event.\n */\n select(item: NameValueItem<any>, notify: boolean = true): void {\n this.setValue(item, true);\n if (notify) {\n this.selected.emit(item);\n }\n }\n\n /** Clears the current selection and resets the control to an empty state. */\n reset(): void {\n this.setValue(undefined, true);\n }\n}\n","<button mat-stroked-button class=\"menu-selector-button\" [style.border]=\"border() >= 0 ? border() : 'auto'\"\r\n [style.border-radius]=\"borderRadius()\" [style.height]=\"border() <= 0 ? '40px' : 'auto'\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\" [attr.aria-label]=\"label()\"\r\n [matMenuTriggerFor]=\"optionsMenu\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if(current()) {\r\n <div style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n @if(labelSelected() || label()) {\r\n <div class=\"x-small \">{{labelSelected() ?? label()}}</div>\r\n <div fxHide.xs class=\"small truncated-1\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated-1\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n } @else {\r\n <div fxHide.xs class=\"small truncated\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n }\r\n </div>\r\n } @else if(labelSelected() || label()) {\r\n <div class=\"truncated\" style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n {{labelSelected() ?? label()}}</div>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </div>\r\n </div>\r\n</button>\r\n<mat-menu #optionsMenu=\"matMenu\">\r\n @for (o of options(); track $index) {\r\n <button mat-menu-item (click)=\"select(o)\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n ({{o.bag}})\r\n }\r\n </button>\r\n }\r\n</mat-menu>","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n\nexport interface ButtonToggleInfo {\n value: boolean;\n toggled: boolean;\n}\n\n@Component({\n selector: 'button-toggle',\n standalone: true,\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule, SafeHtmlPipe],\n templateUrl: './button-toggle.component.html',\n styleUrl: './button-toggle.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ButtonToggleComponent {\n\n /** Emitted each time the button is clicked. Carries the current `value` and the new `toggled` state. */\n readonly changed = output<ButtonToggleInfo>();\n\n /** Current value bound from the parent. Drives label and icon selection. */\n readonly value = input<boolean>(false);\n\n /** Width of the button in pixels. Use `-1` for automatic sizing. */\n readonly width = input<number>(-1);\n\n /** Border thickness override in pixels. Use `-1` to inherit. */\n readonly border = input<number>(-1);\n\n /** Label shown when `value` is `true`. */\n readonly labelOn = input<string | undefined>(undefined);\n\n /** Label shown when `value` is `false`. */\n readonly labelOff = input<string | undefined>(undefined);\n\n /** Material icon name shown when `value` is `true`. */\n readonly iconOn = input<string | undefined>(undefined);\n\n /** Material icon name shown when `value` is `false`. */\n readonly iconOff = input<string | undefined>(undefined);\n\n /** CSS class applied to the button at all breakpoints. */\n readonly cssClass = input<string | undefined>(undefined);\n\n /** CSS class applied to the button on `xs` screens. */\n readonly cssClassSmall = input<string | undefined>(undefined);\n\n /** Resolves the appropriate label for the current value state. */\n protected readonly label = computed(() =>\n this.value() ? this.labelOn() ?? '' : this.labelOff() ?? ''\n );\n\n /** Resolves the appropriate icon name for the current value state. */\n protected readonly icon = computed(() =>\n this.value() ? this.iconOn() ?? '' : this.iconOff() ?? ''\n );\n\n /**\n * Toggles the button state and emits the `changed` event.\n * The emitted `toggled` value is the logical inverse of the current `value`.\n */\n toggle(): void {\n const toggled = !this.value();\n this.changed.emit({ value: this.value(), toggled });\n }\n}\n","<button mat-stroked-button [style.border]=\"border() >= 0 ? border() : 'auto'\"\n [style.height]=\"border() <= 0 ? '40px' : 'auto'\" [style.minWidth.px]=\"width() > 0 ? width() : 'auto'\"\n [style.mxn-width.px]=\"width() > 0 ? width() : 'auto'\" [class]=\"cssClass()\" [attr.aria-label]=\"label()\"\n (click)=\"toggle()\" [class.button-on]=\"value() === true\" [fxClass.xs]=\"cssClassSmall()\">\n <div fxLayout=\"row\" fxLayoutGap=\"8px\" fxLayoutAlign=\"center center\" fxFill>\n @if(icon()) {\n <div fxFlex=\"24px\"><mat-icon style=\"display: block;\">{{icon()}}</mat-icon></div>\n }\n <div [innerHtml]=\"label() | safeHtml\"></div>\n </div>\n</button>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, DestroyRef, inject } from '@angular/core';\r\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\r\nimport { MatCalendar } from '@angular/material/datepicker';\r\n\r\n/**\r\n * A blank calendar header that hides the month/year navigation controls.\r\n * Used when an inline calendar should render without any navigation UI.\r\n */\r\n@Component({\r\n template: '<div></div>',\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class CalendarEmptyHeader<D> {\r\n private readonly destroyRef = inject(DestroyRef);\r\n private readonly calendar = inject(MatCalendar<D>);\r\n private readonly changeDetector = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n // Re-run change detection whenever the calendar's internal state changes\r\n // (e.g. active date, selected date) so the blank header stays in sync.\r\n this.calendar.stateChanges\r\n .pipe(takeUntilDestroyed(this.destroyRef))\r\n .subscribe(() => this.changeDetector.markForCheck());\r\n }\r\n}\r\n","import { afterNextRender, booleanAttribute, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, DestroyRef, effect, inject, input, Input, OnDestroy, Optional, Renderer2, Self, signal, output } from '@angular/core';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatSelectModule } from '@angular/material/select';\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { auditTime, animationFrameScheduler, Subject } from 'rxjs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ButtonSelectorComponent } from '../button-selector/button-selector.component';\n\n\n\n@Component({\n selector: 'chips-selector',\n standalone: true,\n imports: [FlexLayoutModule, FormsModule, MatFormFieldModule, MatSelectModule,\n MatChipsModule, MatIconModule, MatButtonModule, MatBadgeModule, MatTooltipModule,\n ButtonSelectorComponent\n ],\n templateUrl: './chips-selector.component.html',\n styleUrl: './chips-selector.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[id]': 'id',\n '[class.floating]': 'shouldLabelFloat',\n '[attr.aria-describedBy]': 'describedBy',\n },\n})\nexport class ChipsSelectorComponent implements OnDestroy, ControlValueAccessor {\n\n /** Emitted when the selection changes. Carries the new array of selected items, or `undefined` when cleared. */\n readonly changed = output<NameValueItem<any>[] | undefined>();\n\n protected readonly containerId = `chips-selector-container--${SystemUtils.generateUUID()}`;\n protected readonly containerWidth = signal(-6);\n\n private focused = false;\n private readonly stateChanges = new Subject<void>();\n private readonly destroyRef = inject(DestroyRef);\n private changesEnabled = false;\n private destroyed = false;\n private widthRetries = 0;\n\n /** Observer that tracks size changes of the container element. */\n private resizeObserver?: ResizeObserver;\n\n /** Debounce bridge for `ResizeObserver` notifications. */\n private readonly resize$ = new Subject<void>();\n\n /** List of available options to display as chips. */\n readonly options = input<NameValueItem<any>[]>([]);\n\n /** Minimum width in pixels when collapsed. Use `-1` for automatic. */\n readonly collapsedWidth = input<number>(-1);\n\n /** Display mode used when the selector is in collapsed state. */\n readonly collapsedDisplayMode = input<'dropdown' | 'button'>('dropdown');\n\n /** Pixel threshold below which the selector collapses. Use `-1` to disable. */\n readonly collapseAt = input<number>(-1);\n\n /** When `true`, `collapseAt` is compared against the container width rather than the window width. */\n readonly collapseAtContainer = input<boolean>(false);\n\n protected readonly collapsed = computed(() => {\n const cw = this.containerWidth();\n const mw = this.collapseAt();\n return this.mode() === 'collapsed' || (mw !== -1 && cw > 0 && mw > 0 && cw < mw);\n });\n\n /** Label shown in the dropdown / above the chip list. */\n readonly label = input<string>('');\n\n /** When `true`, multiple chips can be selected simultaneously. */\n readonly multiple = input<boolean>(false);\n\n /** When `true`, at least one item must remain selected. */\n readonly mustSelect = input<boolean>(false);\n\n /** Layout mode: `'collapsed'` forces dropdown mode, `'dynamic'` collapses based on `collapseAt`. */\n readonly mode = input<'collapsed' | 'dynamic'>('dynamic');\n\n /** When `true`, chips are stacked vertically instead of wrapping horizontally. */\n readonly stacked = input<boolean>(false);\n\n /** Chips below this index receive extra padding to align with other UI elements. */\n readonly padAt = input<number>(0);\n\n /** When `true`, the control is required. */\n readonly required = input<boolean, unknown>(false, { transform: booleanAttribute });\n\n /** Placeholder text shown when no value is selected. */\n readonly placeholder = input<string>('');\n\n private _disabled: boolean = false;\n\n @Input()\n get disabled(): boolean {\n if (this.ngControl && this.ngControl.disabled != null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n\n id = `chips-selector--${SystemUtils.generateUUID()}`;\n describedBy = '';\n\n /** True when the label should float above the field (focused or has a value). */\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n private _value?: NameValueItem<any>[] = [];\n\n set value(value: NameValueItem<any>[] | undefined) {\n this.setValue(value, true);\n }\n\n /**\n * Updates the internal state and selection mirrors.\n * @param value - The new selection array.\n * @param propagate - When `true`, notifies the registered onChange callback.\n */\n private setValue(value: NameValueItem<any>[] | undefined, propagate: boolean): void {\n this._value = value;\n this.selection = [];\n this.singleSelection = undefined;\n if (this._value) {\n this.options().forEach(n => {\n if (this._value?.findIndex((x) => x.value === n.value) !== -1) {\n this.selection.push(n);\n }\n });\n if (this.selection.length > 0) {\n this.singleSelection = this.selection[0];\n }\n }\n this.cdr.markForCheck();\n if (propagate) {\n this.propagateChange(this._value);\n }\n this.stateChanges.next();\n if (this.changesEnabled) {\n this.changed.emit(this._value);\n }\n }\n\n /** The current value as an array of selected items. */\n get value(): NameValueItem<any>[] | undefined {\n return this._value;\n }\n\n /** True when no item is selected. */\n get empty(): boolean {\n return !this._value || this._value.length === 0;\n }\n\n /** True when the control has validation errors and has been touched. */\n get errorState(): boolean {\n return this.ngControl?.errors != null && (this.ngControl?.touched ?? false);\n }\n\n private propagateChange: (_: any) => void = () => {};\n private propagateTouched: () => void = () => {};\n\n private readonly renderer = inject(Renderer2);\n private readonly cdr = inject(ChangeDetectorRef);\n\n /** Currently selected items (may contain multiple entries when `multiple` is `true`). */\n protected selection: NameValueItem<any>[] = [];\n\n /** The single selected item — used in `button` collapsed-display mode. */\n protected singleSelection?: NameValueItem<any>;\n\n constructor(@Optional() @Self() public ngControl: NgControl) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // Notify state changes whenever required or placeholder inputs change\n effect(() => {\n this.required();\n this.placeholder();\n this.stateChanges.next();\n });\n\n // React to container size changes to keep the collapsed state up to date.\n // `auditTime` on the animation-frame scheduler coalesces ResizeObserver bursts\n // without adding perceptible latency, and defers the layout read out of the\n // observer callback to avoid \"ResizeObserver loop\" warnings.\n this.resize$\n .pipe(takeUntilDestroyed(this.destroyRef), auditTime(0, animationFrameScheduler))\n .subscribe(() => {\n if (this.collapseAt() > 0) {\n this.updateContainerWidth();\n }\n });\n\n afterNextRender(() => {\n if (SystemUtils.isBrowser() && typeof ResizeObserver !== 'undefined') {\n const elem = document.getElementById(this.containerId);\n if (elem) {\n this.resizeObserver = new ResizeObserver(() => this.resize$.next());\n this.resizeObserver.observe(elem);\n }\n }\n\n setTimeout(() => {\n this.updateContainerWidth();\n this.changesEnabled = true;\n }, 250);\n });\n }\n\n ngOnDestroy(): void {\n this.destroyed = true;\n this.resizeObserver?.disconnect();\n this.stateChanges.complete();\n }\n\n /**\n * Measures the container (or window) width and updates the `containerWidth` signal,\n * retrying after 100 ms if the element is not yet laid out.\n */\n private updateContainerWidth(): void {\n if (this.destroyed) return;\n const elem = document.getElementById(this.containerId);\n if (elem && elem.clientWidth > 0) {\n this.widthRetries = 0;\n this.containerWidth.set(\n this.collapseAtContainer()\n ? elem.clientWidth\n : window.innerWidth);\n } else if (this.widthRetries < 50) {\n // Bounded retry (max ~5 s): the old unbounded recursion kept running\n // forever, even after the component was destroyed.\n this.widthRetries++;\n setTimeout(() => this.updateContainerWidth(), 100);\n }\n }\n\n /**\n * Resolves the effective selection array for the current display mode.\n * In single-select collapsed button mode the `singleSelection` item is wrapped in an array.\n * @returns The array of currently selected items.\n */\n private getSelection(): NameValueItem<any>[] {\n const value: NameValueItem<any> | NameValueItem<any>[] | undefined =\n !this.multiple() && this.collapsed() && this.collapsedDisplayMode() === 'button'\n ? this.singleSelection\n : this.selection;\n if (Array.isArray(value)) {\n return value;\n }\n return value ? [value] : [];\n }\n\n /**\n * Schedules a value update after a short delay, giving the template time to sync `ngModel`.\n */\n updateValue(): void {\n setTimeout(() => {\n this.setValue(this.getSelection(), true);\n }, 250);\n }\n\n /**\n * Returns `true` when the given item can be selected in the current mode.\n * In single-select mode an already-selected item is not re-selectable.\n * @param item - The item to check.\n * @returns True when the item is selectable.\n */\n isSelectable(item: NameValueItem<any>): boolean {\n return this.multiple() || this.getSelection().findIndex(x => x.value === item.value) === -1;\n }\n\n /**\n * Writes a new value to the component (called by the form layer).\n * @param value - The new selection to display.\n */\n writeValue(value: any): void {\n const next = value as NameValueItem<any>[] | undefined;\n if (this.value !== next) {\n // Model -> view write: must NOT propagate back to the form (echo loop)\n this.setValue(next, false);\n }\n }\n\n /**\n * Registers the on-change callback (called by the form layer).\n * @param fn - Callback to invoke whenever the value changes.\n */\n registerOnChange(fn: (_: any) => void): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers the on-touched callback (called by the form layer).\n * @param fn - Callback to invoke when the control is touched.\n */\n registerOnTouched(fn: () => void): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Sets the ARIA described-by IDs for accessibility.\n * @param ids - The list of element IDs to associate with this control.\n */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /**\n * Updates the disabled state when the Angular form layer changes it.\n * @param isDisabled - Whether the control should be disabled.\n */\n setDisabledState(isDisabled: boolean): void {\n this._disabled = isDisabled;\n if (isDisabled && this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n this.renderer.setProperty(elem, 'disabled', isDisabled);\n }\n }\n\n /**\n * Handles a click on the container element, focusing it and marking it as touched.\n */\n onContainerClick(): void {\n if (!this.focused) {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n elem.focus();\n this.propagateTouched();\n }\n }\n }\n\n /**\n * Clears the current selection and stops the event from bubbling.\n * @param e - The originating click event.\n */\n clear(e: Event): void {\n this.setValue([], true);\n e.stopPropagation();\n }\n\n /**\n * Selects a single item, replacing any existing selection.\n * @param item - The item to select. Does nothing when `undefined`.\n */\n select(item?: NameValueItem<any>): void {\n if (item) {\n this.setValue([item], true);\n }\n }\n\n}\n","<div [id]=\"containerId\" class=\"chips-selector\">\r\n @if(containerWidth() > 0) {\r\n @if(collapsed()) {\r\n @if(collapsedDisplayMode() === 'dropdown') {\r\n <mat-form-field [style.min-width]=\"collapsedWidth() > 0 ? collapsedWidth()+'px' : '100%'\" subscriptSizing=\"dynamic\">\r\n @if(label()) {\r\n <mat-label>{{label()}}</mat-label>\r\n }\r\n <mat-select [(ngModel)]=\"selection\" [multiple]=\"multiple()\" (selectionChange)=\"updateValue()\">\r\n <mat-select-trigger>\r\n @if (value && (value.length || 0) > 0) {\r\n {{value[0].shortName ?? value[0].name}}\r\n }\r\n @if (value && (value.length || 0) > 1) {\r\n <span class=\"collapsed-additional-selection\">\r\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\r\n </span>\r\n }\r\n </mat-select-trigger>\r\n @for (o of options(); track $index) {\r\n <mat-option [value]=\"o\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n ({{o.bag}})\r\n }\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (value && (value.length || 0) > 0) {\r\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [(ngModel)]=\"singleSelection\"\r\n name=\"value\" (selected)=\"updateValue()\"></button-selector>\r\n\r\n }\r\n } @else {\r\n <mat-chip-listbox [class]=\"stacked() ? 'mat-mdc-chip-set-stacked' : ''\" [multiple]=\"multiple()\"\r\n [(ngModel)]=\"selection\" (change)=\"updateValue()\">\r\n @for (o of options(); track $index; let i = $index) {\r\n <mat-chip-option [matBadge]=\"o.bag\" [matTooltip]=\"o.disabled === true ? 'Non disponibile' : (o.bagInfo ?? '')\" [selectable]=\"isSelectable(o)\" [value]=\"o\"\r\n [disabled]=\"o.disabled\" [class.chip-padded]=\"i < padAt()\">{{o.shortName ??\r\n o.name}}</mat-chip-option>\r\n }\r\n </mat-chip-listbox>\r\n }\r\n }\r\n</div>","import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { afterNextRender, ChangeDetectionStrategy, Component, DoCheck, ElementRef, Input, OnDestroy, Optional, Renderer2, Self, inject, input, model, output, signal, viewChild } from '@angular/core';\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\nimport { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\nimport { FileInfo, FileSizeValidatorDirective, SystemUtils } from '@arsedizioni/ars-utils/core';\nimport { Subject } from 'rxjs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatInputModule } from '@angular/material/input';\nimport { UIService } from '@arsedizioni/ars-utils/ui';\n\n@Component({\n selector: 'file-input',\n templateUrl: './file-input.component.html',\n styleUrl: './file-input.component.scss',\n providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }],\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatFormFieldModule, MatInputModule, FormsModule, FileSizeValidatorDirective, MatButtonModule,\n MatIconModule, MatTooltipModule],\n host: {\n '[id]': 'id',\n '[class.floating]': 'shouldLabelFloat',\n '[attr.aria-describedBy]': 'describedBy',\n },\n})\nexport class FileInputComponent\n implements\n OnDestroy,\n DoCheck,\n MatFormFieldControl<FileInfo>,\n ControlValueAccessor {\n\n /** Reference to the hidden native file input element. */\n protected readonly __file = viewChild.required<ElementRef>('__file');\n\n private readonly renderer = inject(Renderer2);\n private readonly uiService = inject(UIService);\n\n // Initialize\n static nextId = 0;\n readonly stateChanges = new Subject<void>();\n private previousNativeValue: any;\n controlType: string = 'file-input';\n focused = false;\n\n /** Whether the device supports camera capture. */\n protected readonly canCapture = signal<boolean>(false);\n\n /** Size in MB of the currently selected file. */\n protected readonly fileSize = signal<number>(0);\n\n private readonly _placeholder = signal<string>('');\n\n private _value: FileInfo = new FileInfo();\n set value(value: FileInfo) {\n this.setValue(value, true);\n }\n\n /**\n * Updates the internal state. Form propagation is skipped for model->view\n * writes (writeValue) to avoid the CVA echo loop, and performed for\n * user-driven changes (selectFile/clearFile) and the public value setter.\n * @param value - The new file info to store and display.\n * @param propagate - When `true`, notifies the registered onChange callback.\n */\n private setValue(value: FileInfo, propagate: boolean): void {\n this._value = value;\n if (propagate) {\n this.propagateChange(this._value);\n }\n this.stateChanges.next();\n this.changed.emit(this._value);\n }\n get value() {\n return this._value;\n }\n get size() {\n return this._value?.file?.size;\n }\n\n private _required: boolean = false;\n @Input()\n get required() {\n return this._required;\n }\n set required(value: boolean) {\n this._required = coerceBooleanProperty(value);\n this.stateChanges.next();\n }\n private _disabled: boolean = false;\n @Input()\n get disabled() {\n if (this.ngControl && this.ngControl.disabled != null) {\n return this.ngControl.disabled;\n }\n return this._disabled;\n }\n set disabled(value: boolean) {\n this._disabled = coerceBooleanProperty(value);\n if (this.focused) {\n this.focused = false;\n this.stateChanges.next();\n }\n }\n @Input()\n get placeholder(): string {\n return this._placeholder();\n }\n set placeholder(value: string) {\n this._placeholder.set(value);\n this.stateChanges.next();\n }\n\n /** The currently displayed file name. Can be bound two-way from outside or updated on file selection. */\n readonly fileName = model<string | undefined>(undefined);\n readonly maxSizeMb = input<number>(5);\n readonly minSizeMb = input<number>(0);\n readonly isNew = input<boolean>(false);\n readonly canPreview = input<boolean>(false);\n readonly appearance = input<'fill' | 'outline' | undefined>(this.uiService.appearance());\n readonly accept = input<string>();\n get empty(): boolean {\n return !this._value || !this._value.file;\n }\n /** True when the control has validation errors and has been touched. */\n get errorState(): boolean {\n return (this.ngControl?.errors != null) && (this.ngControl?.touched ?? false);\n }\n\n id = `${this.controlType}-${FileInputComponent.nextId++}`;\n\n /** True when the label should float above the field. */\n get shouldLabelFloat(): boolean {\n return this.focused || !this.empty;\n }\n\n describedBy = '';\n\n readonly changed = output<FileInfo>();\n readonly download = output();\n readonly preview = output();\n\n private propagateChange: (_: any) => void = (_: any) => { };\n private propagateTouched: () => void = () => { };\n\n\n constructor(\n @Optional() @Self() public ngControl: NgControl) {\n if (this.ngControl != null) {\n this.ngControl.valueAccessor = this;\n }\n\n // Detect camera availability and set the default placeholder after the first render\n afterNextRender(() => { this.setupDevices(); });\n }\n\n /**\n * Detects camera availability and updates the placeholder accordingly.\n */\n private async setupDevices(): Promise<void> {\n this.canCapture.set(false);\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\n try {\n const stream = await navigator.mediaDevices.getUserMedia({ video: true });\n if (stream) {\n this.canCapture.set(true);\n }\n } catch { }\n }\n if (!this.placeholder || this.placeholder === 'Seleziona file') {\n this._placeholder.set(\n this.canCapture()\n ? 'Seleziona file o acquisisci con fotocamera'\n : 'Seleziona file'\n );\n }\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n ngDoCheck(): void {\n this.updateInputDirtyCheck();\n }\n\n /**\n * Writes a new value to the component (called by the form layer).\n * @param value - The new file info to display.\n */\n writeValue(value: any): void {\n // Model -> view write: must NOT propagate back to the form (echo loop)\n this.setValue(value as FileInfo, false);\n }\n\n /**\n * Registers the on-change callback (called by the form layer).\n * @param fn - Callback to invoke whenever the value changes.\n */\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n\n /**\n * Registers the on-touched callback (called by the form layer).\n * @param fn - Callback to invoke when the control is touched.\n */\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n\n /**\n * Sets the ARIA describedby attribute from the given element IDs.\n * @param ids - Array of element IDs that describe this control.\n */\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n /**\n * Updates the disabled state of the underlying native element.\n * @param isDisabled - Whether the control should be disabled.\n */\n setDisabledState?(isDisabled: boolean): void {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n this.renderer.setProperty(elem, 'disabled', isDisabled);\n }\n }\n\n /** Focuses the native input element and marks the control as touched. */\n onContainerClick(): void {\n if (!this.focused) {\n if (!SystemUtils.isBrowser()) return;\n const elem = document.getElementById(this.id);\n if (elem) {\n elem.focus();\n this.propagateTouched();\n }\n }\n }\n\n /**\n * Checks whether the value has changed since the last dirty check and emits `stateChanges` if needed.\n */\n protected updateInputDirtyCheck(): void {\n const newValue = this._value;\n if (this.previousNativeValue !== newValue) {\n this.previousNativeValue = newValue;\n this.stateChanges.next();\n }\n }\n\n /**\n * Handles file selection from the native input element.\n * @param e - The DOM change event from the file input.\n */\n protected selectFile(e: Event): void {\n const input = e.target as HTMLInputElement;\n if (input.files?.length) {\n const f = input.files[0];\n const fileInfo = new FileInfo();\n const fileSizeMb = f.size / 1048576;\n fileInfo.file = f;\n fileInfo.valid =\n (!this.maxSizeMb() || fileSizeMb <= this.maxSizeMb()) &&\n (!this.minSizeMb() || fileSizeMb >= this.minSizeMb());\n this.setValue(fileInfo, true);\n this.fileName.set(f.name);\n this.fileSize.set(Math.round(fileSizeMb));\n }\n }\n\n /**\n * Checks whether a file is currently selected.\n * @returns `true` if a file is attached to the current value.\n */\n protected hasFile(): boolean {\n return !!(this._value?.file);\n }\n\n /**\n * Clears the currently selected file and resets the control.\n */\n protected clearFile(): void {\n if (this.hasFile()) {\n this.fileName.set(undefined);\n this.fileSize.set(0);\n const fi = new FileInfo();\n fi.file = undefined;\n fi.valid = !this.required;\n this.setValue(fi, true);\n this.__file().nativeElement.value = '';\n }\n }\n\n /**\n * Emits the `download` output event if the file is not newly added.\n */\n protected downloadFile(): void {\n if (!this.isNew()) this.download.emit();\n }\n\n /**\n * Emits the `preview` output event if the file is not new and preview is enabled.\n */\n protected previewFile(): void {\n if (!this.isNew() && this.canPreview()) this.preview.emit();\n }\n}\n","<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept()\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [ngModel]=\"fileName()\" (ngModelChange)=\"fileName.set($event)\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize()\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\" [disabled]=\"disabled\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\" [disabled]=\"disabled\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\" [disabled]=\"disabled\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\" [disabled]=\"disabled\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n }\r\n @if (hasFile() && fileSize() > 0) {\r\n <mat-hint align=\"start\">{{fileSize()}} MB</mat-hint>\r\n }\r\n @if (hasFile() && fileSize() == 0) {\r\n <mat-hint align=\"start\">\r\n > 1 MB</mat-hint>\r\n } @if (maxSizeMb()) {\r\n <mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n }\r\n @if (_fileName.invalid && !hasFile()) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n @if (_fileName.invalid && hasFile()) {\r\n <mat-error>Dimensione non consentita.</mat-error>\r\n }\r\n</mat-form-field>","import { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { DialogService, FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { ChangeDetectionStrategy, Component, DestroyRef, ElementRef, inject, signal, viewChild } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent } from '@angular/material/dialog';\nimport { SafeUrlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { MatButtonModule } from '@angular/material/button';\n\nexport interface FilePreviewDialogData {\n url?: string;\n embed?: boolean;\n authToken?: string;\n}\n\n\n@Component({\n templateUrl: './file-preview.component.html',\n styleUrl: './file-preview.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatDialogContent, FlexLayoutModule, MatDialogActions, MatButtonModule, MatTooltipModule,\n MatDialogClose, SafeUrlPipe]\n})\nexport class FilePreviewComponent {\n readonly iframe = viewChild<ElementRef>('iframe');\n private readonly httpClient = inject(HttpClient);\n private readonly dialogService = inject(DialogService);\n protected readonly dialogData = inject<FilePreviewDialogData>(MAT_DIALOG_DATA) ?? {};\n protected readonly url = signal<string | null>(null);\n\n constructor() {\n // Revoke the blob object URL on destroy: createObjectURL keeps the whole\n // downloaded blob alive until revoked — repeated previews leaked memory.\n inject(DestroyRef).onDestroy(() => {\n const u = this.url();\n if (u?.startsWith('blob:')) URL.revokeObjectURL(u);\n });\n\n const data = this.dialogData;\n if (!data?.url) return;\n\n if (!data.embed) {\n this.dialogService.setBusy('Download in corso...');\n this.httpClient.get(data.url, {\n headers: data.authToken\n ? new HttpHeaders().set('Authorization', data.authToken)\n : new HttpHeaders(),\n responseType: 'blob'\n })\n .pipe(takeUntilDestroyed())\n .subscribe({\n next: (res: Blob) => {\n this.url.set(URL.createObjectURL(res));\n this.dialogService.clearBusy();\n },\n error: () => {\n this.dialogService.clearBusy();\n }\n });\n } else {\n this.url.set('https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(data.url));\n }\n }\n\n /**\n * Handles the iframe load event: scrolls to the top and centers a single image when present.\n */\n protected loaded(): void {\n const iframe = this.iframe()?.nativeElement;\n if (!iframe) { return; }\n \n try {\n iframe.contentWindow?.scrollTo(0, 0);\n \n // Resize and center single image\n if (!this.dialogData?.embed && iframe.contentDocument) { \n const images = iframe.contentDocument.querySelectorAll('img') || [];\n if (images.length === 1) { \n Object.assign(images[0].style, {\n position: 'absolute',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n maxWidth: images[0].style.maxWidth || '100%',\n maxHeight: images[0].style.maxHeight || '100%'\n });\n const iframeBody = iframe.contentDocument.body;\n if (iframeBody && !iframeBody.style.height) {\n iframeBody.style.height = '100%';\n }\n }\n }\n } catch (e) {\n console.error('Impossibile accedere al contenuto dell\\'iframe:', e);\n }\n }\n\n /**\n * Opens the current file URL in a new browser tab for manual download.\n */\n protected download(): void {\n const currentUrl = this.url();\n if (currentUrl) {\n window.open(currentUrl, '_blank');\n }\n }\n\n /**\n * Displays a help dialog with browser-specific instructions for enabling PDF preview.\n */\n protected troubles(): void {\n this.dialogService.info(\n \"<p>Se non riesci a visualizzare l'anteprima dei file PDF probabilmente devi abilitare un'impostazione del tuo browser.</p>\" +\n \"<b>Per Google Chrome</b><br>\" +\n \"<p class='small' style='padding-left:10px'><i>impostazioni > privacy e sicurezza > impostazioni sito > documenti PDF</i></p>\" +\n \"<b>Per Microsoft Edge</b><br>\" +\n \"<p class='small' style='padding-left:10px'><i>impostazioni > cookie e autorizzazioni sito > documenti PDF</i></p>\" +\n \"<b>Per Mozilla Firefox</b><br>\" +\n \"<p class='small' style='padding-left:10px'><i>impostazioni > generale > applicazioni</i></p>\" +\n \"<b>Altri browser</b><br>\" +\n \"<p class='small' style='padding-left:10px'>Fate riferimento alla documentazione specifica del vostro browser.</p>\",\n \"Problemi con le anteprime dei file PDF?\"\n )\n }\n}\n\n\n\n","<mat-dialog-content class=\"file-preview\" id=\"file-preview-scrollable\">\r\n <div class=\"content\">\r\n @if (!url()) {\r\n <div class=\"loading\">Caricamento in corso...</div>\r\n } @else {\r\n <iframe class=\"iframe\" #iframe (load)=\"loaded()\" [src]=\"url() | safeUrl\"></iframe>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions id=\"file-preview-fixed\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <button mat-stroked-button (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-stroked-button (click)=\"download()\">Scarica</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, effect, inject, input, output, signal } from \"@angular/core\";\nimport { FormsModule } from \"@angular/forms\";\nimport { MatButtonModule } from \"@angular/material/button\";\nimport { MatDividerModule } from \"@angular/material/divider\";\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\nimport { MatIconModule } from \"@angular/material/icon\";\nimport { MatInputModule } from \"@angular/material/input\";\nimport { MatMenuModule } from \"@angular/material/menu\";\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { CurrentFilter, CurrentFilterChanged, FilterGroup, FilterItem, Filters } from '../../filters';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\n\n\n\n@Component({\n selector: \"filter-bar\",\n templateUrl: \"./filter-bar.component.html\",\n styleUrl: './filter-bar.component.scss',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule,\n MatTooltipModule, MatButtonModule, MatIconModule, MatMenuModule, MatDividerModule, SafeHtmlPipe]\n})\nexport class FilterBarComponent {\n /** Emitted whenever any filter value changes. */\n readonly changed = output<CurrentFilterChanged>();\n\n /** The list of filter groups to display. */\n readonly filters = input<FilterGroup[]>();\n\n readonly canFilterByText = input<boolean>(false);\n readonly canFilterByText2 = input<boolean>(false);\n readonly canFilterByText3 = input<boolean>(false);\n\n /** Initial text values for the search inputs — synced into the model signals on change. */\n readonly initialText = input<string | undefined>(undefined);\n readonly initialText2 = input<string | undefined>(undefined);\n readonly initialText3 = input<string | undefined>(undefined);\n\n readonly textName = input<string>(\"testo\");\n readonly text2Name = input<string>(\"...\");\n readonly text3Name = input<string>(\"...\");\n readonly textLength = input<string>();\n readonly text2Length = input<string>();\n readonly text3Length = input<string>();\n readonly showTextSearchButton = input<boolean>(false);\n readonly appearance = input<'fill' | 'outline' | undefined>('outline');\n\n /** Two-way bindable text filter values. */\n protected readonly text = signal<string | undefined>(undefined);\n protected readonly text2 = signal<string | undefined>(undefined);\n protected readonly text3 = signal<string | undefined>(undefined);\n\n /** Filter group for slot 1, derived reactively from the `filters` input. */\n protected readonly flt1 = computed<FilterGroup | undefined>(() =>\n this.filters()?.find(n => n.group === Filters.FLT_1)\n );\n /** Filter group for slot 2, derived reactively from the `filters` input. */\n protected readonly flt2 = computed<FilterGroup | undefined>(() =>\n this.filters()?.find(n => n.group === Filters.FLT_2)\n );\n /** Filter group for slot 3, derived reactively from the `filters` input. */\n protected readonly flt3 = computed<FilterGroup | undefined>(() =>\n this.filters()?.find(n => n.group === Filters.FLT_3)\n );\n /** Filter group for slot 4, derived reactively from the `filters` input. */\n protected readonly flt4 = computed<FilterGroup | undefined>(() =>\n this.filters()?.find(n => n.group === Filters.FLT_4)\n );\n /** Filter group for slot 5, derived reactively from the `filters` input. */\n protected readonly flt5 = computed<FilterGroup | undefined>(() =>\n this.filters()?.find(n => n.group === Filters.FLT_5)\n );\n\n /** True when filter slot 1 has an action or item list. */\n protected readonly canFilterByFlt1 = computed(() => {\n const g = this.flt1(); return !!(g?.action || (g?.items && g.items.length > 0));\n });\n /** True when filter slot 2 has an action or item list. */\n protected readonly canFilterByFlt2 = computed(() => {\n const g = this.flt2(); return !!(g?.action || (g?.items && g.items.length > 0));\n });\n /** True when filter slot 3 has an action or item list. */\n protected readonly canFilterByFlt3 = computed(() => {\n const g = this.flt3(); return !!(g?.action || (g?.items && g.items.length > 0));\n });\n /** True when filter slot 4 has an action or item list. */\n protected readonly canFilterByFlt4 = computed(() => {\n const g = this.flt4(); return !!(g?.action || (g?.items && g.items.length > 0));\n });\n /** True when filter slot 5 has an action or item list. */\n protected readonly canFilterByFlt5 = computed(() => {\n const g = this.flt5(); return !!(g?.action || (g?.items && g.items.length > 0));\n });\n\n public readonly currentFilter: CurrentFilter = new CurrentFilter();\n\n private readonly cdr = inject(ChangeDetectorRef);\n\n constructor() {\n // Sync the initialText inputs into the model signals whenever they change\n effect(() => {\n this.text.set(this.initialText());\n this.text2.set(this.initialText2());\n this.text3.set(this.initialText3());\n });\n }\n\n /**\n * No-op kept for API compatibility.\n * Filter groups are now computed reactively from the `filters()` input.\n */\n public initializeFilters(): void { }\n\n /**\n * Applies the selected filter item to the current filter state and emits the change.\n * @param filter - The filter item to apply.\n */\n applyFilter(filter: FilterItem): void {\n let changed = false;\n switch (filter.group) {\n case Filters.FLT_1:\n changed = this.currentFilter.flt1 !== filter.value;\n if (changed) {\n this.currentFilter.flt1 = filter.value;\n this.currentFilter.flt1Name = filter.titleSelected;\n }\n break;\n case Filters.FLT_2:\n changed = this.currentFilter.flt2 !== filter.value;\n if (changed) {\n this.currentFilter.flt2 = filter.value;\n this.currentFilter.flt2Name = filter.titleSelected;\n }\n break;\n case Filters.FLT_3:\n changed = this.currentFilter.flt3 !== filter.value;\n if (changed) {\n this.currentFilter.flt3 = filter.value;\n this.currentFilter.flt3Name = filter.titleSelected;\n }\n break;\n case Filters.FLT_4:\n changed = this.currentFilter.flt4 !== filter.value;\n if (changed) {\n this.currentFilter.flt4 = filter.value;\n this.currentFilter.flt4Name = filter.titleSelected;\n }\n break;\n case Filters.FLT_5:\n changed = this.currentFilter.flt5 !== filter.value;\n if (changed) {\n this.currentFilter.flt5 = filter.value;\n this.currentFilter.flt5Name = filter.titleSelected;\n }\n break;\n }\n\n if (changed) {\n this.cdr.markForCheck();\n this.changed.emit({ filter: this.currentFilter, group: filter.group });\n }\n }\n\n /**\n * Executes the action associated with a filter group, or clears the filter.\n * @param group - The filter group number.\n * @param clear - When `true`, clears the filter instead of triggering its action.\n */\n applyFilterAction(group: number, clear: boolean = false): void {\n if (!clear) {\n const g = this.getFilterGroup(group);\n if (g?.action) {\n g.action(this, g);\n }\n } else {\n this.clearFilter(group);\n }\n }\n\n /** Commits the current text inputs to the filter state and emits the change. */\n applyTextFilter(): void {\n this.currentFilter.text = this.text();\n this.currentFilter.text2 = this.text2();\n this.currentFilter.text3 = this.text3();\n this.changed.emit({\n filter: this.currentFilter,\n group: Filters.FLT_TEXT\n });\n }\n\n /**\n * Clears the active filter for the specified group and emits the change if it was set.\n * @param group - The filter group number to clear.\n */\n clearFilter(group: number): void {\n let changed = false;\n switch (group) {\n case Filters.FLT_1:\n changed = this.currentFilter.flt1 != undefined;\n if (changed) {\n this.currentFilter.flt1 = undefined;\n this.currentFilter.flt1Name = undefined;\n }\n break;\n case Filters.FLT_2:\n changed = this.currentFilter.flt2 != undefined;\n if (changed) {\n this.currentFilter.flt2 = undefined;\n this.currentFilter.flt2Name = undefined;\n }\n break;\n case Filters.FLT_3:\n changed = this.currentFilter.flt3 != undefined;\n if (changed) {\n this.currentFilter.flt3 = undefined;\n this.currentFilter.flt3Name = undefined;\n }\n break;\n case Filters.FLT_4:\n changed = this.currentFilter.flt4 != undefined;\n if (changed) {\n this.currentFilter.flt4 = undefined;\n this.currentFilter.flt4Name = undefined;\n }\n break;\n case Filters.FLT_5:\n changed = this.currentFilter.flt5 != undefined;\n if (changed) {\n this.currentFilter.flt5 = undefined;\n this.currentFilter.flt5Name = undefined;\n }\n break;\n }\n if (changed) {\n this.cdr.markForCheck();\n this.changed.emit({ filter: this.currentFilter, group: group });\n }\n }\n\n /** Resets all active filters and text inputs, then emits the change. */\n clearAllFilters(): void {\n this.currentFilter.flt1 = undefined;\n this.currentFilter.flt1Name = undefined;\n this.currentFilter.flt2 = undefined;\n this.currentFilter.flt2Name = undefined;\n this.currentFilter.flt3 = undefined;\n this.currentFilter.flt3Name = undefined;\n this.currentFilter.flt4 = undefined;\n this.currentFilter.flt4Name = undefined;\n this.currentFilter.flt5 = undefined;\n this.currentFilter.flt5Name = undefined;\n this.currentFilter.text = undefined;\n this.currentFilter.text2 = undefined;\n this.currentFilter.text3 = undefined;\n this.text.set(undefined);\n this.text2.set(undefined);\n this.text3.set(undefined);\n this.cdr.markForCheck();\n this.changed.emit({ filter: this.currentFilter, group: -1 });\n }\n\n /**\n * Returns `true` when more than one filter type is active, showing the \"clear all\" button.\n * @returns True when the clear-all button should be visible.\n */\n canClearAllFilters(): boolean {\n let count = 0;\n if (this.canFilterByText()) count++;\n if (this.canFilterByText2()) count++;\n if (this.canFilterByText3()) count++;\n if (this.canFilterByFlt1()) count++;\n if (this.canFilterByFlt2()) count++;\n if (this.canFilterByFlt3()) count++;\n if (this.canFilterByFlt4()) count++;\n if (this.canFilterByFlt5()) count++;\n return count > 1;\n }\n\n /**\n * Returns the filter group matching the given id, or `undefined` if not found.\n * @param id - The group id to look up.\n * @returns The matching `FilterGroup`, or `undefined`.\n */\n private getFilterGroup(id: number): FilterGroup | undefined {\n return this.filters()?.find(n => n.group === id);\n }\n\n /** Synchronises the filter bar display with the values currently stored in `currentFilter`. */\n syncFilter(): void {\n let g = this.getFilterGroup(Filters.FLT_1);\n if (g?.items) {\n this.currentFilter.flt1Name = undefined;\n if (this.currentFilter.flt1) {\n const gi = g.items.find(n => n.value === this.currentFilter.flt1);\n if (gi) this.currentFilter.flt1Name = gi.titleSelected;\n else this.currentFilter.flt1 = undefined;\n }\n }\n\n g = this.getFilterGroup(Filters.FLT_2);\n if (g?.items) {\n this.currentFilter.flt2Name = undefined;\n if (this.currentFilter.flt2) {\n const gi = g.items.find(n => n.value === this.currentFilter.flt2);\n if (gi) this.currentFilter.flt2Name = gi.titleSelected;\n else this.currentFilter.flt2 = undefined;\n }\n }\n\n g = this.getFilterGroup(Filters.FLT_3);\n if (g?.items) {\n this.currentFilter.flt3Name = undefined;\n if (this.currentFilter.flt3) {\n const gi = g.items.find(n => n.value === this.currentFilter.flt3);\n if (gi) this.currentFilter.flt3Name = gi.titleSelected;\n else this.currentFilter.flt3 = undefined;\n }\n }\n\n g = this.getFilterGroup(Filters.FLT_4);\n if (g?.items) {\n this.currentFilter.flt4Name = undefined;\n if (this.currentFilter.flt4) {\n const gi = g.items.find(n => n.value === this.currentFilter.flt4);\n if (gi) this.currentFilter.flt4Name = gi.titleSelected;\n else this.currentFilter.flt4 = undefined;\n }\n }\n\n g = this.getFilterGroup(Filters.FLT_5);\n if (g?.items) {\n this.currentFilter.flt5Name = undefined;\n if (this.currentFilter.flt5) {\n const gi = g.items.find(n => n.value === this.currentFilter.flt5);\n if (gi) this.currentFilter.flt5Name = gi.titleSelected;\n else this.currentFilter.flt5 = undefined;\n }\n }\n\n this.text.set(this.currentFilter.text);\n this.text2.set(this.currentFilter.text2);\n this.text3.set(this.currentFilter.text3);\n this.cdr.markForCheck();\n }\n}\n","<div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"filterbox\"\r\n [class.filterbox-filtered]=\"currentFilter.filtered()\">\r\n <div fxFlex=\"*\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\">\r\n @if (canFilterByText() || canFilterByText2() || canFilterByText3()) {\r\n <div fxFlex.lt-sm=\"100\" fxFlexAlign=\"center\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill style=\"padding:4px;\">\r\n @if (canFilterByText()) {\r\n <mat-form-field [style.width]=\"textLength() ?? '100%'\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{textName()}}...</mat-label>\r\n <input matInput name=\"_text\" [ngModel]=\"text()\" (ngModelChange)=\"text.set($event)\" maxlength=\"100\" #_text=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text.set(undefined); applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (showTextSearchButton()) {\r\n <button type=\"button\" matSuffix mat-icon-button aria-label=\"Trova\" (click)=\"applyTextFilter();\"\r\n matTooltip=\"Trova\">\r\n <mat-icon>search</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (canFilterByText2()) {\r\n <mat-form-field \r\n [style.width]=\"text2Length() ?? '100%'\" [appearance]=\"appearance()\"\r\n subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{text2Name()}}...</mat-label>\r\n <input matInput name=\"_text2\" [ngModel]=\"text2()\" (ngModelChange)=\"text2.set($event)\" maxlength=\"100\" #_text2=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text2()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text2.set(undefined); applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (canFilterByText3()) {\r\n <mat-form-field [style.width]=\"text3Length() ?? '100%'\" [appearance]=\"appearance()\"\r\n subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{text3Name()}}...</mat-label>\r\n <input matInput name=\"_text3\" [ngModel]=\"text3()\" (ngModelChange)=\"text3.set($event)\" maxlength=\"100\" #_text3=\"ngModel\"\r\n (keyup.Enter)=\"applyTextFilter()\" matTooltip=\"Premi INVIO per avviare la ricerca\">\r\n @if (text3()) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\"\r\n (click)=\"text3.set(undefined); applyTextFilter();\" matTooltip=\"Azzera\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n </div>\r\n }\r\n <div fxFlex.lt-sm=\"100\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n @if (canFilterByFlt1() && flt1()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt1()!.tooltip || 'Filtra per ' + flt1()!.title\"\r\n [attr.aria-label]=\"flt1()!.tooltip || 'Filtra per ' + flt1()!.title\" \r\n (click)=\"applyFilterAction(1, false)\">\r\n \r\n @if (!currentFilter.flt1) {\r\n <span>{{flt1()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt1) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(1, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt1() && flt1()?.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt1()!.tooltip || 'Filtra per ' + flt1()!.title\"\r\n [attr.aria-label]=\"flt1()!.tooltip || 'Filtra per ' + flt1()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt1\"\r\n >\r\n \r\n @if (!currentFilter.flt1) {\r\n <span>{{flt1()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt1=\"matMenu\">\r\n @for (f of flt1()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt1()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt2() && flt2()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt2()!.tooltip || 'Filtra per ' + flt2()!.title\"\r\n [attr.aria-label]=\"flt2()!.tooltip || 'Filtra per ' + flt2()!.title\" \r\n (click)=\"applyFilterAction(2, false)\">\r\n \r\n @if (!currentFilter.flt2) {\r\n <span>{{flt2()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt2) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(2, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt2() && flt2()?.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt2()!.tooltip || 'Filtra per ' + flt2()!.title\"\r\n [attr.aria-label]=\"flt2()!.tooltip || 'Filtra per ' + flt2()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt2\"\r\n >\r\n \r\n @if (!currentFilter.flt2) {\r\n <span>{{flt2()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt2=\"matMenu\">\r\n @for (f of flt2()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt2()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt3() && flt3()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt3()!.tooltip || 'Filtra per ' + flt3()!.title\"\r\n [attr.aria-label]=\"flt3()!.tooltip || 'Filtra per ' + flt3()!.title\" \r\n (click)=\"applyFilterAction(3, false)\">\r\n \r\n @if (!currentFilter.flt3) {\r\n <span>{{flt3()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt3) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(3, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt3() && flt3()?.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt3()!.tooltip || 'Filtra per ' + flt3()!.title\"\r\n [attr.aria-label]=\"flt3()!.tooltip || 'Filtra per ' + flt3()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt3\"\r\n >\r\n \r\n @if (!currentFilter.flt3) {\r\n <span>{{flt3()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt3=\"matMenu\">\r\n @for (f of flt3()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt3()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt4() && flt4()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt4()!.tooltip || 'Filtra per ' + flt4()!.title\"\r\n [attr.aria-label]=\"flt4()!.tooltip || 'Filtra per ' + flt4()!.title\" \r\n (click)=\"applyFilterAction(4, false)\">\r\n \r\n @if (!currentFilter.flt4) {\r\n <span>{{flt4()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt4) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(4, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt4() && flt4()?.items) {\r\n <button fxFlexAlign=\"center\" class=\"filterbox-button\" type=\"button\" mat-button [matTooltip]=\"flt4()!.tooltip || 'Filtra per ' + flt4()!.title\"\r\n [attr.aria-label]=\"flt4()!.tooltip || 'Filtra per ' + flt4()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt4\"\r\n >\r\n \r\n @if (!currentFilter.flt4) {\r\n <span>{{flt4()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt4=\"matMenu\">\r\n @for (f of flt4()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt4()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n\r\n @if (canFilterByFlt5() && flt5()?.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt5()!.tooltip || 'Filtra per ' + flt5()!.title\"\r\n [attr.aria-label]=\"flt5()!.tooltip || 'Filtra per ' + flt5()!.title\" \r\n (click)=\"applyFilterAction(5, false)\">\r\n \r\n @if (!currentFilter.flt5) {\r\n <span>{{flt5()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt5) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"Azzera\"\r\n (click)=\"applyFilterAction(5, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt5() && flt5()?.items) {\r\n <button fxFlexAlign=\"center\" class=\"filterbox-button\" type=\"button\" mat-button [matTooltip]=\"flt5()!.tooltip || 'Filtra per ' + flt5()!.title\"\r\n [attr.aria-label]=\"flt5()!.tooltip || 'Filtra per ' + flt5()!.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt5\"\r\n >\r\n \r\n @if (!currentFilter.flt5) {\r\n <span>{{flt5()!.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt5=\"matMenu\">\r\n @for (f of flt5()!.items; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n <button mat-menu-item (click)=\"applyFilter(f)\" [attr.aria-label]=\"f.description\" style=\"min-width: 200px\">\r\n <span [innerHTML]=\"f.title | safeHtml\"></span>\r\n </button>\r\n }\r\n <mat-divider></mat-divider>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxLayoutAlign=\"end\" style=\"width: 100%; min-width: 200px; padding: 4px 4px 0 4px;\">\r\n <button type=\"button\" mat-button (click)=\"clearFilter(flt5()!.items![0].group)\"\r\n aria-label=\"Azzera\">\r\n <mat-icon style=\"font-size:18px; height: 18px; width:18px;\">clear</mat-icon> Azzera\r\n </button>\r\n </div>\r\n </div>\r\n </mat-menu>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n <div>\r\n @if (currentFilter.filtered() && canClearAllFilters()) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera tutti i filtri\" aria-label=\"Azzera tutti i filtri\"\r\n (click)=\"clearAllFilters()\">\r\n <mat-icon>filter_alt_off</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, computed, effect, ElementRef, inject, input, model, output, signal, viewChild } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { INode, SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\nimport { MatTree, MatTreeModule } from '@angular/material/tree';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FlexLayoutModule } from '@arsedizioni/ars-utils/ui';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\n\ninterface TaxonomyMaps {\n parentMap: Map<string, INode>;\n depthMap: Map<string, number>;\n nodeMap: Map<string, INode>;\n}\n\n@Component({\n selector: 'tree-picker',\n templateUrl: './tree-picker.component.html',\n styleUrls: ['./tree-picker.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatTreeModule, MatCheckboxModule, MatIconModule, MatTabsModule, MatChipsModule,\n MatButtonModule, MatTooltipModule, MatFormFieldModule, MatInputModule, FormsModule, FlexLayoutModule, SafeHtmlPipe]\n})\nexport class TreePickerComponent {\n /** Nested tree data to display. */\n readonly tree = input<INode[]>([]);\n\n /** Currently selected node ids. Supports two-way binding via [(selection)]. */\n readonly selection = model<string[]>([]);\n\n /** When true, checkboxes and chip remove buttons are disabled (mirrors Material convention). */\n readonly disabled = input<boolean>(false);\n\n /** Description to display when no selection is made. */\n readonly descriptionEmpty = input<string>('<span>Nessuna selezione: vengono inclusi <strong>tutti gli elementi</strong>.</span>');\n\n /** Maximum number of tree levels to display (default: 3). */\n readonly maxDepth = input<number>(3);\n\n /**\n * List of node IDs at depth >= maxDepth that unlock selection for themselves\n * and all their descendants, regardless of depth.\n */\n readonly maxDepthOverrides = input<string[]>([]);\n\n /**\n * Number of levels to auto-expand on load.\n * 0 or undefined = only top level visible (no expansion);\n * 1 = expand depth-0 nodes; 2 = expand depth-0 and depth-1 nodes; etc.\n * Must be less than maxDepth.\n */\n readonly minDepth = input<number | undefined>(undefined);\n\n /**\n * Emits the count of visible selected nodes whenever the selection changes.\n * Emits 0 when nothing is selected (meaning all items are implicitly included).\n */\n readonly selectionCount = output<number>();\n\n /** Emits void whenever the user changes the selection (toggle, remove, clear). */\n readonly changed = output<void>();\n\n private readonly _treeRef = viewChild(MatTree<INode>);\n private readonly _elRef = inject(ElementRef);\n\n /**\n * Set of all node IDs selectable via overrides: each listed root and all its descendants.\n * Recomputed whenever the tree data or the override list changes.\n */\n private readonly _overrideSubtreeSet = computed(() => {\n const overrideIds = new Set(this.maxDepthOverrides());\n const maps = this._maps();\n const result = new Set<string>();\n for (const id of overrideIds) {\n const root = maps.nodeMap.get(id);\n if (!root) continue;\n const addSubtree = (n: INode): void => {\n result.add(n.id);\n for (const child of (n.children ?? [])) addSubtree(child as INode);\n };\n addSubtree(root);\n }\n return result;\n });\n\n /** All three maps rebuilt lazily as a single computed whenever taxonomy changes. */\n private readonly _maps = computed<TaxonomyMaps>(() => {\n const parentMap = new Map<string, INode>();\n const depthMap = new Map<string, number>();\n const nodeMap = new Map<string, INode>();\n const build = (nodes: INode[], parent?: INode, depth = 0): void => {\n for (const node of nodes) {\n depthMap.set(node.id, depth);\n nodeMap.set(node.id, node);\n if (parent) parentMap.set(node.id, parent);\n if (node.children?.length) build(node.children as INode[], node, depth + 1);\n }\n };\n build(this.tree());\n return { parentMap, depthMap, nodeMap };\n });\n\n /** O(1) set of selected ids, rebuilt only when selection changes. */\n private readonly _selectedSet = computed(() => new Set(this.selection()));\n\n /** True when at least one node is explicitly selected. */\n protected readonly hasSelection = computed(() => this.selection().length > 0);\n\n /** Count of selected nodes within selectable levels (depth < maxDepth or in overrides), shown in the tab label. */\n protected readonly selectedVisibleCount = computed(() =>\n this.selection().filter(id => {\n const node = this._maps().nodeMap.get(id);\n return node ? this._isSelectableNode(node) : false;\n }).length\n );\n\n readonly treeChildrenAccessor = (node: INode): INode[] => {\n return (node.children ?? []) as INode[];\n };\n\n readonly hasChild = (_: number, node: INode): boolean =>\n !!(node.children?.length);\n\n /** Returns true when the node can be selected: depth < maxDepth or explicitly listed in maxDepthOverrides. */\n protected isSelectable(node: INode): boolean {\n return this._isSelectableNode(node);\n }\n\n private _isSelectableNode(node: INode): boolean {\n const depth = this._maps().depthMap.get(node.id) ?? 0;\n return depth < this.maxDepth() || this._overrideSubtreeSet().has(node.id);\n }\n\n\n /** Current filter text. */\n protected readonly filterText = signal<string>('');\n /** Nodes matching the current filter text, in nodeMap iteration order. */\n protected readonly filteredItems = signal<INode[]>([]);\n /** Index of the currently highlighted filtered node (-1 = none). */\n protected readonly filterIndex = signal(-1);\n /** The currently highlighted filtered node, or null. */\n protected readonly filteredNode = computed<INode | null>(() => {\n const idx = this.filterIndex();\n return idx >= 0 ? (this.filteredItems()[idx] ?? null) : null;\n });\n\n constructor() {\n // Expand nodes up to minDepth whenever new taxonomy data arrives\n effect(() => {\n const maps = this._maps();\n const expandLevels = this.minDepth() ?? 0;\n setTimeout(() => {\n const tree = this._treeRef();\n if (!tree) return;\n tree.collapseAll();\n if (expandLevels <= 0) return;\n maps.depthMap.forEach((depth, id) => {\n if (depth < expandLevels) {\n const node = maps.nodeMap.get(id);\n if (node) tree.expand(node);\n }\n });\n });\n });\n // Emit visible selection count on every selection change\n effect(() => {\n this.selectionCount.emit(this.selectedVisibleCount());\n });\n }\n\n /** Expands all visible nodes in the tree. */\n protected expandAll(): void {\n this._treeRef()?.expandAll();\n }\n\n /** Collapses all nodes in the tree. */\n protected collapseAll(): void {\n this._treeRef()?.collapseAll();\n }\n\n /** Clears the entire selection. */\n protected clearAll(): void {\n this.selection.set([]);\n this.changed.emit();\n }\n\n /** Searches nodes by text and moves to the first match. */\n protected doFilter(): void {\n const text = this.filterText().trim().toLowerCase();\n if (text.length < 3) {\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n return;\n }\n const matches = Array.from(this._maps().nodeMap.values())\n .filter(n => n.name?.toLowerCase().includes(text));\n this.filteredItems.set(matches);\n const idx = matches.length > 0 ? 0 : -1;\n this.filterIndex.set(idx);\n if (idx >= 0) this._scrollToFiltered(idx, matches);\n }\n\n /** Clears the filter and restores the original tree state. */\n protected clearFilter(): void {\n this.filterText.set('');\n this.filteredItems.set([]);\n this.filterIndex.set(-1);\n }\n\n /** Moves to the next matching node, cycling back to the first. */\n protected nextFiltered(): void {\n const items = this.filteredItems();\n if (!items.length) return;\n const next = (this.filterIndex() + 1) % items.length;\n this.filterIndex.set(next);\n this._scrollToFiltered(next, items);\n }\n\n /** Returns true when the node is the currently highlighted filter match. */\n protected isFilteredNode(node: INode): boolean {\n return this.filteredNode()?.id === node.id;\n }\n\n /** Expands ancestors of the target node and scrolls it into view. */\n private _scrollToFiltered(index: number, items: INode[]): void {\n const node = items[index];\n if (!node) return;\n const tree = this._treeRef();\n if (tree) {\n let parent = this._maps().parentMap.get(node.id);\n while (parent) {\n tree.expand(parent);\n parent = this._maps().parentMap.get(parent.id);\n }\n }\n setTimeout(() => {\n const el: HTMLElement | null = this._elRef.nativeElement.querySelector(`[data-node-id=\"${node.id}\"]`);\n el?.scrollIntoView({ block: 'nearest', behavior: 'smooth' });\n });\n }\n\n /**\n * Returns true when the node is in the active selection.\n * @param node - tree node to check\n * @returns true if selected\n */\n protected isSelected(node: INode): boolean {\n return this._selectedSet().has(node.id);\n }\n\n /**\n * Returns true when a subset (but not all) of the node's descendants are selected,\n * producing the indeterminate checkbox state.\n * @param node - tree node to evaluate\n * @returns true if the node is in a partial-selection (indeterminate) state\n */\n protected isIndeterminate(node: INode): boolean {\n if (!node.children?.length) return false;\n const descendants = this._getSelectableDescendants(node);\n const set = this._selectedSet();\n const count = descendants.filter(d => set.has(d.id)).length;\n return count > 0 && count < descendants.length;\n }\n\n /**\n * Toggles the node and all its descendants; then syncs the ancestor chain.\n * @param node - the node that was clicked\n */\n protected toggleNode(node: INode): void {\n this.selection.update(current => {\n const set = new Set(current);\n if (set.has(node.id)) {\n set.delete(node.id);\n } else {\n set.add(node.id);\n }\n this._syncParentsInSet(node, set);\n return Array.from(set);\n });\n this.changed.emit();\n }\n\n /**\n * Deselects the node and all its descendants. Called by the chip remove button.\n * @param node - the node to remove from the selection\n */\n protected removeNode(node: INode): void {\n this.selection.update(current => {\n const set = new Set(current);\n set.delete(node.id);\n this._syncParentsInSet(node, set);\n return Array.from(set);\n });\n this.changed.emit();\n }\n\n /**\n * Returns the INode for the given id, or undefined if not found.\n * @param id - node id to look up\n * @returns the matching INode\n */\n protected nodeById(id: string): INode | undefined {\n return this._maps().nodeMap.get(id);\n }\n\n /**\n * Returns true when the node at the given id is within the visible depth range\n * and should appear in the chip list.\n * @param id - node id to check\n * @returns true if the node depth is less than maxDepth\n */\n protected isChipVisible(id: string): boolean {\n const node = this._maps().nodeMap.get(id);\n return node ? this._isSelectableNode(node) : false;\n }\n\n /**\n * Returns only the selectable descendants of node (depth < maxDepth or in overrides),\n * used for indeterminate state and parent auto-selection logic.\n * @param node - root of the subtree to traverse\n * @returns flat array of selectable descendant INodes\n */\n private _getSelectableDescendants(node: INode): INode[] {\n const result: INode[] = [];\n for (const child of (node.children ?? [])) {\n const c = child as INode;\n if (this._isSelectableNode(c)) result.push(c);\n result.push(...this._getSelectableDescendants(c));\n }\n return result;\n }\n\n /**\n * Walks up the ancestor chain from node, selecting a parent only when all\n * its descendants are in the set, deselecting it otherwise.\n * @param node - starting node for the upward traversal\n * @param set - mutable selection set updated in place\n */\n private _syncParentsInSet(node: INode, set: Set<string>): void {\n let parent = this._maps().parentMap.get(node.id);\n while (parent) {\n const descendants = this._getSelectableDescendants(parent);\n if (descendants.length > 0 && descendants.every(d => set.has(d.id))) {\n set.add(parent.id);\n } else {\n set.delete(parent.id);\n }\n parent = this._maps().parentMap.get(parent.id);\n }\n }\n \n}\n","<mat-tab-group class=\"taxonomy-picker-tabs\" style=\"height:100%\">\r\n <mat-tab style=\"overflow-x: hidden !important; height: 100%\">\r\n <ng-template mat-tab-label>\r\n Seleziona\r\n <mat-icon\r\n style=\"font-size:16px;height:16px;width:16px;margin-left:4px;vertical-align:middle;color:var(--mat-sys-primary)\"\r\n [matTooltip]=\"'Nessuna selezione = tutti gli argomenti inclusi;\\r\\nOgni elemento selezionato include sempre tutti i suoi sottoelementi'\"\r\n matTooltipPosition=\"above\">\r\n info\r\n </mat-icon>\r\n </ng-template>\r\n <div fxLayout=\"column\" fxFill style=\"overflow: hidden; height: 100%;\">\r\n <div fxFlex>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxLayoutAlign=\"start center\" fxFill>\r\n <div fxFlex fxHide.xs>\r\n <mat-form-field style=\"width:200px; padding: 8px 0px\" appearance=\"outline\"\r\n subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" (keyup)=\"doFilter()\" matInput [ngModel]=\"filterText()\"\r\n (ngModelChange)=\"filterText.set($event)\"\r\n (keydown.enter)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\"\r\n (keydown.arrowDown)=\"$event.preventDefault(); $event.stopPropagation(); nextFiltered()\">\r\n @if (filterText()) {\r\n <button type=\"button\" type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button\r\n aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n @if (filteredItems().length > 0) {\r\n <div fxFlex=\"50px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <div class=\"small\">{{filterIndex() + 1}} / {{filteredItems().length}}</div>\r\n </div>\r\n <div fxFlex=\"48px\" fxHide.xs fxLayoutAlign=\"end center\">\r\n <button mat-icon-button (click)=\"nextFiltered()\">\r\n <mat-icon aria-label=\"Vai al prossimo\"\r\n matTooltip=\"Vai al prossimo\">arrow_downward</mat-icon>\r\n </button>\r\n </div>\r\n }\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end center\">\r\n <button mat-icon-button [matTooltip]=\"'Espandi tutto'\" (click)=\"expandAll()\">\r\n <mat-icon>unfold_more</mat-icon>\r\n </button>\r\n <button mat-icon-button [matTooltip]=\"'Comprimi tutto'\" (click)=\"collapseAll()\">\r\n <mat-icon>unfold_less</mat-icon>\r\n </button>\r\n <button mat-icon-button [matTooltip]=\"'Azzera selezione'\" [disabled]=\"!hasSelection()\"\r\n (click)=\"clearAll()\">\r\n <mat-icon>deselect</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow-y: auto;\">\r\n <mat-tree [dataSource]=\"tree()\" [childrenAccessor]=\"treeChildrenAccessor\" class=\"tree\">\r\n <!-- Leaf node -->\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node\" [class.tree-node-filtered]=\"filteredNode()?.id === node.id\"\r\n [class.tree-node-no-select]=\"!isSelectable(node)\"\r\n [attr.data-node-id]=\"node.id\">\r\n <button mat-icon-button disabled style=\"visibility: hidden\"></button>\r\n @if (isSelectable(node)) {\r\n <mat-checkbox [checked]=\"isSelected(node)\" [disabled]=\"disabled()\" (change)=\"toggleNode(node)\">\r\n <span class=\"small\">{{node.name}}</span>\r\n </mat-checkbox>\r\n } @else {\r\n <div class=\"tree-node-label-only\">\r\n <span class=\"small\">{{node.name}}</span>\r\n </div>\r\n }\r\n </mat-tree-node>\r\n <!-- Expandable node with children -->\r\n <mat-tree-node *matTreeNodeDef=\"let node; when: hasChild\" matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" #treeNode=\"matTreeNode\" class=\"tree-node\"\r\n [class.tree-node-filtered]=\"filteredNode()?.id === node.id\"\r\n [class.tree-node-no-select]=\"!isSelectable(node)\"\r\n [attr.data-node-id]=\"node.id\">\r\n <button mat-icon-button matTreeNodeToggle>\r\n <mat-icon>{{treeNode.isExpanded ? 'expand_more' : 'chevron_right'}}</mat-icon>\r\n </button>\r\n @if (isSelectable(node)) {\r\n <mat-checkbox [checked]=\"isSelected(node)\" [indeterminate]=\"isIndeterminate(node)\"\r\n [disabled]=\"disabled()\" (change)=\"toggleNode(node)\">\r\n <span class=\"small\">{{node.name}}</span>\r\n </mat-checkbox>\r\n } @else {\r\n <div class=\"tree-node-label-only\">\r\n <span class=\"small\">{{node.name}}</span>\r\n </div>\r\n }\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-tab>\r\n <mat-tab [label]=\"hasSelection() ? 'Selezionati (' + selectedVisibleCount() + ')' : 'Selezionati (tutti)'\"\r\n style=\"height: 100%;\">\r\n <div fxLayout=\"column\" fxFill style=\"overflow: hidden; height: 100%;\">\r\n <div fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"8px\" style=\"padding:12px\">\r\n @if (!hasSelection()) {\r\n <mat-icon>info</mat-icon>\r\n <span [innerHTML]=\"descriptionEmpty() | safeHtml\"></span>\r\n } @else {\r\n <div fxFlex=\"*\" fxLayoutAlign=\"end\">\r\n <button mat-button color=\"warn\" style=\"margin-left:auto\" (click)=\"clearAll()\">\r\n <mat-icon>deselect</mat-icon> Azzera tutto\r\n </button>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div fxFlex=\"*\" style=\"overflow-y: auto; padding-bottom: 12px;\">\r\n <mat-chip-set>\r\n @for (id of selection(); track id) {\r\n @let node = nodeById(id);\r\n @if (node && isChipVisible(id)) {\r\n <mat-chip (removed)=\"removeNode(node)\" style=\"max-width: 280px;\" [matTooltip]=\"node.name\">\r\n {{node.name}}\r\n @if (!disabled()) {\r\n <button matChipRemove matTooltip=\"Elimina\"><mat-icon>cancel</mat-icon></button>\r\n }\r\n </mat-chip>\r\n }\r\n }\r\n </mat-chip-set>\r\n </div>\r\n </div>\r\n </mat-tab>\r\n</mat-tab-group>","/**\n * @file navigation.definitions.ts\n *\n * Data model shared by every variant of the Material Design 3 (Expressive)\n * navigation component: Navigation bar, Navigation rail (collapsed and\n * expanded) and Navigation drawer (standard and modal).\n *\n * Reference: https://m3.material.io/components/navigation-bar/specs\n * https://m3.material.io/components/navigation-rail/specs\n * https://m3.material.io/components/navigation-drawer/specs\n */\n\nimport { BreakpointAlias } from \"@arsedizioni/ars-utils/ui\";\n\n\n\n/**\n * Rendering variants supported by the component.\n *\n * - `bar` — Navigation bar, horizontal, anchored to the bottom edge (compact windows).\n * - `rail` — Collapsed navigation rail, vertical, 96dp wide (medium / expanded windows).\n * - `rail-expanded` — Expanded navigation rail, 220dp+, labels beside icons, supports sections.\n * - `drawer` — Standard navigation drawer, 360dp, inline with the page content.\n * - `modal` — Modal navigation drawer: same as `drawer` but overlaid on a scrim.\n * - `auto` — Resolved at runtime from the active CDK breakpoint (see `autoVariants`).\n */\nexport type NavigationVariant = 'auto' | 'bar' | 'rail' | 'rail-expanded' | 'drawer' | 'modal';\n\n/** Variants that can actually be rendered, i.e. every variant except `auto`. */\nexport type ResolvedNavigationVariant = Exclude<NavigationVariant, 'auto'>;\n\n/**\n * Label visibility policy, mirroring the four Material label visibility modes.\n *\n * - `auto` — Labels are always shown (current M3 guidance).\n * - `labeled` — Labels are always shown.\n * - `selected` — Only the active destination shows its label (legacy M3 \"auto\" behaviour).\n * - `unlabeled` — Icons only; the accessible name comes from `aria-label` / tooltip.\n */\nexport type NavigationLabelVisibility = 'auto' | 'labeled' | 'selected' | 'unlabeled';\n\n/**\n * Item layout inside a destination.\n *\n * - `vertical` — Icon stacked above the label (M3 default for compact windows).\n * - `horizontal` — Icon at the start of the label (M3 Expressive, medium windows and above).\n * - `auto` — `vertical` on compact windows, `horizontal` from 600dp upwards; always\n * `horizontal` for the expanded rail and the drawer.\n */\nexport type NavigationItemLayout = 'auto' | 'vertical' | 'horizontal';\n\n/** Vertical alignment of the destination list inside a rail. */\nexport type NavigationAlignment = 'top' | 'center' | 'bottom';\n\n/** Side the rail / drawer is anchored to. Automatically mirrored in RTL. */\nexport type NavigationPosition = 'start' | 'end';\n\n/**\n * Badge attached to a destination.\n * When `value` is `undefined` a small dot badge is rendered, otherwise a large\n * badge showing the value (clamped to `max`).\n */\nexport interface NavigationBadge {\n /** Numeric or textual content of the badge. Leave `undefined` for a dot badge. */\n value?: number | string;\n /** Upper bound for numeric values; above it the badge renders `${max}+`. Defaults to 999. */\n max?: number;\n /** Accessible description announced together with the destination label. */\n ariaLabel?: string;\n /** Optional CSS colour override for this badge only. */\n color?: string;\n}\n\n/**\n * Frame indices of a sprite sheet, one per interaction state.\n *\n * The same shape describes the light set (declared inline on the sprite) and the\n * dark set (declared under `NavigationIconSprite.dark`), so a sheet holding both\n * themes needs no duplicated geometry.\n */\nexport interface NavigationSpriteFrames {\n /** Zero-based frame index for the resting state. Defaults to 0. */\n normal?: number;\n /** Frame index used on hover and on keyboard focus. Defaults to `normal`. */\n hover?: number;\n /** Frame index used when the destination is selected. Defaults to `hover`. */\n active?: number;\n /** Frame index used when the destination is disabled. Defaults to `normal`. */\n disabled?: number;\n}\n\n/**\n * Sprite sheet descriptor: a single image holding every state frame of an icon,\n * revealed by shifting `background-position` — no extra request per state.\n *\n * Frames are assumed to be square and evenly spaced, laid out along a single\n * axis. Two geometries are described, and they are NOT the same thing:\n * - `size` is the side of a frame INSIDE the image file;\n * - `renderSize` is the side the icon is actually drawn at.\n * The component rescales the whole sheet through `background-size`, so a strip\n * of 26px frames can be drawn at the 24px of the surrounding Material icons\n * without the neighbouring frames bleeding in.\n *\n * The frame indices declared inline are the light-theme set; `dark` overrides\n * the ones that differ when the dark theme is active. A sheet that carries a\n * single set simply omits `dark`.\n */\nexport interface NavigationIconSprite extends NavigationSpriteFrames {\n /** URL of the sprite sheet. */\n url: string;\n /** Side of a single frame inside the image file, in pixels. Defaults to 24. */\n size?: number;\n /** Side the icon is drawn at, in pixels. Defaults to `size`. */\n renderSize?: number;\n /**\n * Total number of frames in the sheet, needed to rescale it.\n * Defaults to the highest referenced frame index plus one, which is correct\n * for any sheet that has no trailing unused frame.\n */\n frames?: number;\n /** Axis the frames are laid out along. Defaults to `vertical`. */\n direction?: 'vertical' | 'horizontal';\n /** Frame indices used when the dark theme is active. Defaults to the light ones. */\n dark?: NavigationSpriteFrames;\n}\n\n/** A single navigation destination. */\nexport interface NavigationItem {\n /** Stable unique identifier; used as the `@for` track key and as the selection value. */\n id: string;\n /** Visible label. Also used as the accessible name and as the tooltip fallback. */\n label: string;\n /** Material Symbols ligature rendered when the destination is NOT selected. */\n icon?: string;\n /** Material Symbols ligature rendered when the destination IS selected (usually the filled variant). */\n activeIcon?: string;\n /** Path of a raster / vector image rendered as the icon. Takes precedence over `icon`. */\n imageIcon?: string;\n /** Image used when the destination is selected. Takes precedence over `activeIcon`. */\n activeImageIcon?: string;\n /**\n * Sprite sheet holding every state frame of the icon. Takes precedence over\n * `imageIcon` and `icon`; state changes cost one `background-position` shift.\n */\n sprite?: NavigationIconSprite;\n /** Name of an SVG icon registered in `MatIconRegistry`; takes precedence over `icon`. */\n svgIcon?: string;\n /** SVG icon used when the destination is selected; takes precedence over `activeIcon`. */\n activeSvgIcon?: string;\n /** Badge shown on top of the icon (collapsed variants) or at the trailing edge (expanded variants). */\n badge?: NavigationBadge;\n /** Short trailing text shown at the end of the row in the expanded rail and in the drawer. */\n trailing?: string;\n /** When `true` the destination is rendered dimmed and is not interactive. */\n disabled?: boolean;\n /**\n * When `true` the destination is not rendered inline in the compact variants:\n * it is moved into the overflow menu instead. Which variants count as compact\n * is decided by the component's `overflowMode` input.\n */\n hideWhenCompact?: boolean;\n /** Tooltip text; defaults to `label` when the label is not visible. */\n tooltip?: string;\n /** Router commands used to build the destination URL. */\n route?: string | readonly unknown[];\n /** Query parameters appended to `route`. */\n queryParams?: Record<string, unknown>;\n /** Fragment appended to `route`. */\n fragment?: string;\n /** When `true` the route must match the whole URL to mark the destination active. Defaults to `false`. */\n exact?: boolean;\n /** External URL. Rendered as a plain anchor and never matched against the router. */\n href?: string;\n /** Anchor target used together with `href`. */\n target?: string;\n /** Explicit accessible name, when the visible label is not descriptive enough. */\n ariaLabel?: string;\n /**\n * Nested destinations. A destination with children never navigates on its own:\n * clicking it expands the group inline (expanded rail / drawer) or opens it in\n * a floating panel (bar / collapsed rail).\n */\n children?: readonly NavigationItem[];\n /** Initial expansion state of a destination that has `children`. Defaults to `false`. */\n expanded?: boolean;\n /**\n * Edge the destination is pinned to inside a rail or a drawer.\n * `bottom` destinations are pushed to the end of the surface. Ignored by the\n * navigation bar, where every destination shares the same row.\n */\n align?: 'top' | 'bottom';\n /** Arbitrary payload echoed back in `NavigationSelection`. */\n data?: unknown;\n}\n\n/**\n * A group of destinations. Section headlines and dividers are only rendered by\n * the expanded rail and by the drawer, exactly as described by the M3 specs.\n */\nexport interface NavigationSection {\n /** Stable unique identifier; used as the `@for` track key. */\n id: string;\n /** Optional headline rendered above the group. */\n label?: string;\n /** Destinations belonging to the section. */\n items: readonly NavigationItem[];\n /** When `true` a divider is rendered after the section. */\n divider?: boolean;\n}\n\n/** Payload emitted when a destination is activated. */\nexport interface NavigationSelection {\n /** The activated destination. */\n item: NavigationItem;\n /** The section the destination belongs to, when sections are in use. */\n section?: NavigationSection;\n /** The parent destination, when a nested destination was activated. */\n parent?: NavigationItem;\n /** Zero-based index of the destination across the whole flattened list. */\n index: number;\n}\n\n/**\n * Policy deciding where `hideWhenCompact` destinations are collapsed into the\n * overflow menu.\n *\n * - `bar` — only in the navigation bar (default).\n * - `compact` — in the navigation bar and in the collapsed rail.\n * - `never` — `hideWhenCompact` is ignored and every destination stays inline.\n */\nexport type NavigationOverflowMode = 'bar' | 'compact' | 'never';\n\n/**\n * Identifier of the synthesized overflow destination. Use it to recognise the\n * overflow entry inside `itemSelected`.\n */\nexport const NAVIGATION_OVERFLOW_ID = '__overflow';\n\n/** Map of breakpoint alias to the variant used when `variant` is `auto`. */\nexport type NavigationAutoVariants = Partial<Record<BreakpointAlias, ResolvedNavigationVariant>>;\n\n/**\n * Default `auto` mapping, aligned with the Material 3 window size classes:\n * compact windows get the navigation bar, medium and expanded windows get the\n * collapsed rail, large and extra-large windows get the expanded rail.\n */\nexport const DEFAULT_NAVIGATION_AUTO_VARIANTS: Required<NavigationAutoVariants> = {\n xs: 'bar',\n sm: 'rail',\n md: 'rail',\n lg: 'rail-expanded',\n xl: 'rail-expanded',\n};\n\n/** Variants that render labels beside the icon and support sections and dividers. */\nexport const EXPANDED_NAVIGATION_VARIANTS: readonly ResolvedNavigationVariant[] = [\n 'rail-expanded',\n 'drawer',\n 'modal',\n];\n","/**\n * @file navigation-bar.component.ts\n *\n * Material Design 3 (Expressive) navigation component.\n *\n * A single adaptive component that renders every navigation surface described\n * by the M3 specs — Navigation bar, collapsed Navigation rail, expanded\n * Navigation rail, standard Navigation drawer and modal Navigation drawer —\n * from one destination model.\n *\n * Design goals:\n * - Zoneless / signal based: no `NgZone`, no `setTimeout`, no manual change detection.\n * - `OnPush` + pre-computed render models: the template contains no method calls.\n * - Zero-DOM active indicator and state layer (rendered as pseudo-elements).\n * - Nested destinations expand inline in the wide variants and open in a single\n * shared overlay in the compact ones — one overlay for the whole component,\n * not one menu instance per destination.\n * - Router integration that degrades gracefully when no `Router` is provided.\n */\n\nimport {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n ElementRef,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n viewChildren,\n} from '@angular/core';\nimport { takeUntilDestroyed, toSignal } from '@angular/core/rxjs-interop';\nimport { CdkTrapFocus } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { CdkConnectedOverlay, ConnectedPosition } from '@angular/cdk/overlay';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule, TooltipPosition } from '@angular/material/tooltip';\nimport { ActivatedRoute, NavigationEnd, Params, Router } from '@angular/router';\nimport { EMPTY, distinctUntilChanged, filter, map } from 'rxjs';\nimport {\n DEFAULT_NAVIGATION_AUTO_VARIANTS,\n EXPANDED_NAVIGATION_VARIANTS,\n NAVIGATION_OVERFLOW_ID,\n NavigationAlignment,\n NavigationAutoVariants,\n NavigationIconSprite,\n NavigationItem,\n NavigationItemLayout,\n NavigationLabelVisibility,\n NavigationOverflowMode,\n NavigationPosition,\n NavigationSection,\n NavigationSelection,\n NavigationSpriteFrames,\n NavigationVariant,\n ResolvedNavigationVariant,\n} from './navigation.definitions';\n\nimport { ThemeService } from '@arsedizioni/ars-utils/core';\nimport { MediaObserver } from '@arsedizioni/ars-utils/ui';\n\n/** Internal, pre-computed render model for a single destination. */\ninterface NavigationRenderItem {\n /** The source destination. */\n readonly item: NavigationItem;\n /** Owning section, when sections are in use. */\n readonly section?: NavigationSection;\n /** Parent destination, for nested destinations. */\n readonly parent?: NavigationItem;\n /** Zero-based index across the whole flattened destination list. */\n readonly index: number;\n /** Nesting level: `0` for a root destination. */\n readonly depth: number;\n /** Resolved URL, when the destination is routed or external. */\n readonly href?: string;\n /** `true` when the destination navigates through the Angular router. */\n readonly routed: boolean;\n /** Material Symbols ligature for the unselected state. */\n readonly iconOff?: string;\n /** Material Symbols ligature for the selected state. */\n readonly iconOn?: string;\n /** Registered SVG icon name for the unselected state. */\n readonly svgOff?: string;\n /** Registered SVG icon name for the selected state. */\n readonly svgOn?: string;\n /** Image URL for the unselected state. */\n readonly imageOff?: string;\n /** Image URL for the selected state. */\n readonly imageOn?: string;\n /** Inline custom properties driving a sprite-sheet icon, when one is used. */\n readonly spriteStyle?: Record<string, string>;\n /** Rendered badge text; empty string means \"dot badge\". */\n readonly badgeText: string;\n /** `true` when the destination carries a badge of any kind. */\n readonly hasBadge: boolean;\n /** `true` when the destination never renders its label, whatever the label policy. */\n readonly iconOnly: boolean;\n /** `true` when the destination owns nested destinations. */\n readonly hasChildren: boolean;\n /** Pre-computed render models of the nested destinations. */\n readonly children: readonly NavigationRenderItem[];\n /** Accessible name announced for the destination. */\n readonly ariaLabel: string;\n /** Tooltip text used when the label is not visible. */\n readonly tooltip: string;\n}\n\n/** Internal render model for a section and its destinations. */\ninterface NavigationRenderSection {\n /** The source section. */\n readonly section: NavigationSection;\n /** Destinations of the section. */\n readonly items: readonly NavigationRenderItem[];\n}\n\n/** Internal render model for one row of the floating submenu panel. */\ninterface NavigationPanelEntry {\n /** Stable `@for` track key. */\n readonly key: string;\n /** Heading text, when the row is a group heading. */\n readonly label?: string;\n /** Destination to render, when the row is an actual entry. */\n readonly render?: NavigationRenderItem;\n}\n\n/** Internal render model for one of the two anchoring groups of a surface. */\ninterface NavigationRenderGroup {\n /** Edge the group is pinned to. */\n readonly align: 'top' | 'bottom';\n /** Sections belonging to the group. */\n readonly sections: readonly NavigationRenderSection[];\n}\n\n/** Default sprite geometry, applied when a `NavigationIconSprite` omits a field. */\nconst SPRITE_DEFAULT_SIZE = 24;\n\n@Component({\n selector: 'navigation-bar',\n standalone: true,\n imports: [MatIconModule, MatTooltipModule, CdkTrapFocus, CdkConnectedOverlay],\n templateUrl: './navigation-bar.component.html',\n styleUrl: './navigation-bar.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n 'class': 'ars-navigation',\n '[attr.data-variant]': 'resolvedVariant()',\n '[attr.data-layout]': 'resolvedLayout()',\n '[attr.data-align]': 'alignment()',\n '[attr.data-position]': 'position()',\n '[attr.data-labels]': 'resolvedLabelVisibility()',\n '[attr.data-indicator]': 'indicatorMode()',\n '[class.ars-navigation--open]': 'isOverlayOpen()',\n '[class.ars-navigation--elevated]': 'elevated()',\n '[class.ars-navigation--bordered]': 'bordered()',\n '[class.ars-navigation--hidden]': 'isHidden()',\n '[style.--ars-navigation-width]': 'widthStyle()',\n },\n})\nexport class NavigationBarComponent {\n\n // ── Injected dependencies ──────────────────────────────────────────────────\n\n private readonly media = inject(MediaObserver);\n // Optional for the same reason `Router` is: the component must still render\n // inside a bare test bed, where no application theme has been bootstrapped.\n private readonly themeService = inject(ThemeService, { optional: true });\n private readonly router = inject(Router, { optional: true });\n private readonly directionality = inject(Directionality, { optional: true });\n private readonly hostRef = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly destroyRef = inject(DestroyRef);\n\n // ── Inputs ─────────────────────────────────────────────────────────────────\n\n /** Flat list of destinations. Ignored when `sections` is provided. */\n readonly items = input<readonly NavigationItem[]>([]);\n\n /** Grouped destinations. Section headlines and dividers only render in the expanded variants. */\n readonly sections = input<readonly NavigationSection[]>([]);\n\n /** Rendering variant. `auto` resolves from the active breakpoint through `autoVariants`. */\n readonly variant = input<NavigationVariant>('auto');\n\n /** Breakpoint → variant map used when `variant` is `auto`. Missing entries fall back to the M3 defaults. */\n readonly autoVariants = input<NavigationAutoVariants>({});\n\n /** Two-way bound id of the selected destination. The router, when active, takes precedence. */\n readonly selectedId = model<string | undefined>(undefined);\n\n /**\n * Two-way bound ids of the expanded parent destinations.\n * Leave unbound (`undefined`) to let the component manage the expansion state\n * on its own, seeding it from `NavigationItem.expanded` and auto-opening the\n * ancestors of the active destination.\n */\n readonly expandedIds = model<readonly string[] | undefined>(undefined);\n\n /** Two-way bound open state of the modal drawer. Ignored by the other variants. */\n readonly open = model<boolean>(false);\n\n /** Label visibility policy. */\n readonly labelVisibility = input<NavigationLabelVisibility>('auto');\n\n /** Icon / label arrangement inside a destination. */\n readonly itemLayout = input<NavigationItemLayout>('auto');\n\n /** Vertical alignment of the `top` destination group inside a rail. */\n readonly alignment = input<NavigationAlignment>('top');\n\n /** Edge the rail / drawer is anchored to. Mirrored automatically in RTL. */\n readonly position = input<NavigationPosition>('start');\n\n /** Headline rendered above the destinations in the expanded rail and in the drawer. */\n readonly headline = input<string | undefined>(undefined);\n\n /** When `true` a leading menu button is rendered; it emits `menuClick`. */\n readonly showMenuButton = input(false, { transform: booleanAttribute });\n\n /** Material Symbols ligature used by the menu button. */\n readonly menuIcon = input<string>('menu');\n\n /** Material Symbols ligature used by the expand / collapse chevron. */\n readonly expandIcon = input<string>('expand_more');\n\n /** Where `hideWhenCompact` destinations are collapsed into the overflow menu. */\n readonly overflowMode = input<NavigationOverflowMode>('bar');\n\n /** Material Symbols ligature of the overflow destination. */\n readonly overflowIcon = input<string>('more_vert');\n\n /** Accessible name and tooltip of the overflow destination, which renders icon-only. */\n readonly overflowLabel = input<string>('More');\n\n /**\n * Hard cap on the destinations rendered inline in the compact variants,\n * applied per anchoring group. The overflow destination counts as one slot.\n * `0` disables the cap; the M3 specs recommend 3 to 5 for the navigation bar.\n */\n readonly maxVisibleItems = input(0, { transform: numberAttribute });\n\n /** Accessible name of the menu button. */\n readonly menuAriaLabel = input<string>('Menu');\n\n /** Accessible name of the navigation landmark. */\n readonly ariaLabel = input<string>('Navigation');\n\n /** When `true` a scrim is rendered behind the modal drawer. */\n readonly scrim = input(true, { transform: booleanAttribute });\n\n /** When `true` the modal drawer closes as soon as a destination is activated. */\n readonly closeOnSelect = input(true, { transform: booleanAttribute });\n\n /** When `true` the surface gets the M3 elevation-3 shadow. */\n readonly elevated = input(true, { transform: booleanAttribute });\n\n /** When `true` a 1px divider separates the surface from the page content. */\n readonly bordered = input(false, { transform: booleanAttribute });\n\n /** When `true` tooltips are shown for destinations whose label is not visible. */\n readonly tooltips = input(true, { transform: booleanAttribute });\n\n /** When `true` the selection follows the current router URL. */\n readonly routerSync = input(true, { transform: booleanAttribute });\n\n /** Route used to resolve relative `route` commands. Absolute resolution when omitted. */\n readonly relativeTo = input<ActivatedRoute | undefined>(undefined);\n\n /** Explicit surface width in pixels for the rail / drawer variants. `0` keeps the spec default. */\n readonly width = input(0, { transform: numberAttribute });\n\n /** When `true` the whole surface is hidden (animated off-screen) without being destroyed. */\n readonly hidden = input(false, { transform: booleanAttribute });\n\n // ── Outputs ────────────────────────────────────────────────────────────────\n\n /** Emitted when a destination is activated by the user. */\n readonly itemSelected = output<NavigationSelection>();\n\n /** Emitted when the leading menu button is pressed. */\n readonly menuClick = output<void>();\n\n // ── View queries ───────────────────────────────────────────────────────────\n\n /** Focusable destination elements, in DOM order; used for keyboard roving. */\n private readonly itemElements = viewChildren<ElementRef<HTMLElement>>('navItem');\n\n /** Focusable entries of the floating submenu panel, in DOM order. */\n private readonly panelElements = viewChildren<ElementRef<HTMLElement>>('panelItem');\n\n // ── Router state ───────────────────────────────────────────────────────────\n\n /** Current router URL, kept in a signal so the template stays zoneless-friendly. */\n private readonly routerUrl = signal<string | undefined>(undefined);\n\n // ── Theme state ────────────────────────────────────────────────────────────\n\n /**\n * Ticks whenever the application theme moves. The emitted value is ignored on\n * purpose: it is a change notification, not the answer.\n *\n * Reads `themeService`, so it MUST stay below the injected dependencies: moved\n * above them it would read `undefined`, `?? EMPTY` would swallow it and the\n * theme would silently stop propagating, with nothing to show for it at\n * compile time.\n */\n private readonly themeChanged = toSignal(this.themeService?.changed ?? EMPTY, { initialValue: undefined });\n\n /**\n * `true` when the dark theme is active; selects the dark frame set of a sprite.\n *\n * The answer comes from `getTheme()`, the only one that resolves `auto`\n * against the OS preference. `getTheme()` already reads a signal for the\n * explicit modes, so `themeChanged()` is read for the one case that is not\n * reactive on its own: mode `auto` plus a change of the OS colour scheme,\n * which leaves the stored mode on `auto` and only travels through `changed`.\n * Falls back to the light set when no `ThemeService` is provided.\n */\n private readonly isDark = computed(() => {\n this.themeChanged();\n return this.themeService?.getTheme() === 'dark';\n });\n\n // ── Submenu overlay state ──────────────────────────────────────────────────\n\n /** Id of the destination whose children are currently shown in the floating panel. */\n private readonly popupId = signal<string | undefined>(undefined);\n\n /**\n * Destination whose children are currently shown in the floating panel.\n *\n * Derived from the id and NOT stored as an object: the render model is rebuilt\n * whenever the destinations, the resolved URLs or the theme change, and a\n * stored object would keep the panel painting the sprite frames of the\n * previous theme until the panel is closed and reopened.\n *\n * The search is recursive because a panel entry can itself own children and\n * open a panel of its own, and those nested render models are not part of the\n * top level of `visibleGroups`.\n *\n * Reads `visibleGroups`, which is declared further down: safe because\n * `computed` is lazy and nothing reads this before the first render — the\n * opposite of `themeChanged` above, which reads its dependency immediately.\n */\n protected readonly popupItem = computed<NavigationRenderItem | undefined>(() => {\n const id = this.popupId();\n if (id === undefined) return undefined;\n const find = (list: readonly NavigationRenderItem[]): NavigationRenderItem | undefined => {\n for (const rendered of list) {\n if (rendered.item.id === id) return rendered;\n const nested = find(rendered.children);\n if (nested) return nested;\n }\n return undefined;\n };\n for (const group of this.visibleGroups()) {\n for (const section of group.sections) {\n const hit = find(section.items);\n if (hit) return hit;\n }\n }\n // The destination went away while its panel was open.\n return undefined;\n });\n\n /** Element the floating panel is anchored to. */\n private readonly popupAnchor = signal<HTMLElement | undefined>(undefined);\n\n constructor() {\n const router = this.router;\n if (router) {\n this.routerUrl.set(router.url);\n router.events\n .pipe(\n filter((e): e is NavigationEnd => e instanceof NavigationEnd),\n map(e => e.urlAfterRedirects),\n distinctUntilChanged(),\n takeUntilDestroyed(this.destroyRef)\n )\n .subscribe(url => this.routerUrl.set(url));\n }\n }\n\n // ── Derived state ──────────────────────────────────────────────────────────\n\n /** Sections actually rendered: the `sections` input, or a single implicit section wrapping `items`. */\n private readonly resolvedSections = computed<readonly NavigationSection[]>(() => {\n const sections = this.sections();\n if (sections.length > 0) return sections;\n return [{ id: '__default', items: this.items() }];\n });\n\n /** Every destination, nested ones included, in depth-first order. */\n private readonly allItems = computed<readonly NavigationItem[]>(() => {\n const result: NavigationItem[] = [];\n const walk = (list: readonly NavigationItem[]): void => {\n for (const item of list) {\n result.push(item);\n if (item.children?.length) walk(item.children);\n }\n };\n for (const section of this.resolvedSections()) walk(section.items);\n return result;\n });\n\n /** Map of destination id to the id of its parent destination. */\n private readonly parentOf = computed<ReadonlyMap<string, string>>(() => {\n const result = new Map<string, string>();\n const walk = (list: readonly NavigationItem[], parentId?: string): void => {\n for (const item of list) {\n if (parentId !== undefined) result.set(item.id, parentId);\n if (item.children?.length) walk(item.children, item.id);\n }\n };\n for (const section of this.resolvedSections()) walk(section.items);\n return result;\n });\n\n /** The variant to render, resolving `auto` against the active CDK breakpoint. */\n protected readonly resolvedVariant = computed<ResolvedNavigationVariant>(() => {\n const variant = this.variant();\n if (variant !== 'auto') return variant;\n const alias = this.media.currentBp();\n return this.autoVariants()[alias] ?? DEFAULT_NAVIGATION_AUTO_VARIANTS[alias];\n });\n\n /** `true` for the variants that render labels beside icons and support sections. */\n protected readonly isExpanded = computed(() =>\n EXPANDED_NAVIGATION_VARIANTS.includes(this.resolvedVariant())\n );\n\n /** `true` when the surface is the modal drawer. */\n protected readonly isModal = computed(() => this.resolvedVariant() === 'modal');\n\n /** `true` when the modal drawer is currently open. */\n protected readonly isOverlayOpen = computed(() => this.isModal() && this.open());\n\n /** `true` when the surface must be visually hidden. */\n protected readonly isHidden = computed(() => this.hidden() || (this.isModal() && !this.open()));\n\n /** Resolved icon / label arrangement. */\n protected readonly resolvedLayout = computed<Exclude<NavigationItemLayout, 'auto'>>(() => {\n if (this.isExpanded()) return 'horizontal';\n const layout = this.itemLayout();\n if (layout !== 'auto') return layout;\n // M3 Expressive: the navigation bar switches to a horizontal item layout from 600dp upwards.\n return this.resolvedVariant() === 'bar' && this.media.currentBp() !== 'xs' ? 'horizontal' : 'vertical';\n });\n\n /** Resolved label visibility; the expanded variants always show labels. */\n protected readonly resolvedLabelVisibility = computed<Exclude<NavigationLabelVisibility, 'auto'>>(() => {\n if (this.isExpanded()) return 'labeled';\n const visibility = this.labelVisibility();\n return visibility === 'auto' ? 'labeled' : visibility;\n });\n\n /** `true` when the headline row (menu button, headline text) is rendered. */\n protected readonly showsHeader = computed(() =>\n this.resolvedVariant() !== 'bar' && (this.showMenuButton() || (this.isExpanded() && !!this.headline()))\n );\n\n /**\n * Geometry of the active indicator:\n * `compact` wraps the icon only (56x32 pill), `wide` wraps icon and label\n * together, exactly as described by the M3 Expressive specs.\n */\n protected readonly indicatorMode = computed<'compact' | 'wide'>(() =>\n this.isExpanded() || this.resolvedLayout() === 'horizontal' ? 'wide' : 'compact'\n );\n\n /** Tooltip placement derived from the variant and from the anchoring edge. */\n protected readonly tooltipPosition = computed<TooltipPosition>(() => {\n if (this.resolvedVariant() === 'bar') return 'above';\n return this.position() === 'end' ? 'before' : 'after';\n });\n\n /** Inline width override for the rail / drawer, or `undefined` to keep the spec default. */\n protected readonly widthStyle = computed<string | undefined>(() => {\n const width = this.width();\n return width > 0 ? `${width}px` : undefined;\n });\n\n /** Map of destination id to resolved URL. Recomputed only when the destinations change. */\n private readonly hrefs = computed<ReadonlyMap<string, string>>(() => {\n const result = new Map<string, string>();\n const router = this.router;\n const relativeTo = this.relativeTo();\n for (const item of this.allItems()) {\n if (item.href) {\n result.set(item.id, item.href);\n continue;\n }\n if (item.route !== undefined && router) {\n const commands = Array.isArray(item.route) ? [...item.route] : [item.route];\n try {\n const tree = router.createUrlTree(commands, {\n queryParams: item.queryParams as Params | undefined,\n fragment: item.fragment,\n relativeTo,\n });\n result.set(item.id, router.serializeUrl(tree));\n } catch {\n // Invalid route commands: the destination degrades to a plain button.\n }\n }\n }\n return result;\n });\n\n /**\n * Static render model, rebuilt only when the destinations, the resolved URLs\n * or the theme change — never when the selection or the expansion state\n * changes. The theme is a dependency because sprite icons carry one frame set\n * per theme, and the frames are baked into the inline style of the icon.\n */\n private readonly renderGroups = computed<readonly NavigationRenderGroup[]>(() => {\n const hrefs = this.hrefs();\n const dark = this.isDark();\n const counter = { value: 0 };\n const top: NavigationRenderSection[] = [];\n const bottom: NavigationRenderSection[] = [];\n\n for (const section of this.resolvedSections()) {\n const topItems: NavigationRenderItem[] = [];\n const bottomItems: NavigationRenderItem[] = [];\n for (const item of section.items) {\n const rendered = NavigationBarComponent.buildRenderItem(item, section, undefined, 0, counter, hrefs, dark);\n (item.align === 'bottom' ? bottomItems : topItems).push(rendered);\n }\n if (topItems.length > 0) top.push({ section, items: topItems });\n if (bottomItems.length > 0) bottom.push({ section, items: bottomItems });\n }\n\n const groups: NavigationRenderGroup[] = [];\n if (top.length > 0) groups.push({ align: 'top', sections: top });\n if (bottom.length > 0) groups.push({ align: 'bottom', sections: bottom });\n return groups;\n });\n\n /** Id of the destination matching the current router URL, using longest-prefix matching. */\n private readonly routerActiveId = computed<string | undefined>(() => {\n if (!this.routerSync()) return undefined;\n const url = this.routerUrl();\n if (!url) return undefined;\n const path = NavigationBarComponent.pathOf(url);\n const hrefs = this.hrefs();\n let best: string | undefined;\n let bestLength = -1;\n for (const item of this.allItems()) {\n if (item.href || item.route === undefined) continue;\n const href = hrefs.get(item.id);\n if (!href) continue;\n const target = NavigationBarComponent.pathOf(href);\n const matches = item.exact\n ? path === target\n : path === target || path.startsWith(target.endsWith('/') ? target : `${target}/`);\n if (matches && target.length > bestLength) {\n best = item.id;\n bestLength = target.length;\n }\n }\n return best;\n });\n\n /** Id of the currently active destination: router URL first, explicit selection as fallback. */\n protected readonly activeId = computed<string | undefined>(\n () => this.routerActiveId() ?? this.selectedId()\n );\n\n /**\n * Expansion state used when `expandedIds` is left unbound: the destinations\n * flagged `expanded`, plus every ancestor of the active destination.\n */\n private readonly defaultExpandedIds = computed<readonly string[]>(() => {\n const result = new Set<string>();\n for (const item of this.allItems()) {\n if (item.expanded) result.add(item.id);\n }\n const parents = this.parentOf();\n const visited = new Set<string>();\n let current = this.activeId();\n while (current !== undefined && !visited.has(current)) {\n visited.add(current);\n const parent = parents.get(current);\n if (parent === undefined) break;\n result.add(parent);\n current = parent;\n }\n return [...result];\n });\n\n /** Ids of the parent destinations currently expanded. */\n protected readonly expandedSet = computed<ReadonlySet<string>>(\n () => new Set(this.expandedIds() ?? this.defaultExpandedIds())\n );\n\n /** `true` when the current variant collapses `hideWhenCompact` destinations into the overflow menu. */\n protected readonly overflowApplies = computed(() => {\n const mode = this.overflowMode();\n if (mode === 'never') return false;\n const variant = this.resolvedVariant();\n return mode === 'bar' ? variant === 'bar' : variant === 'bar' || variant === 'rail';\n });\n\n /**\n * Render model actually walked by the template: the static model with the\n * compact-only destinations moved into the overflow menu and the children of\n * the expanded parents spliced in.\n */\n protected readonly visibleGroups = computed<readonly NavigationRenderGroup[]>(() => {\n const inline = this.isExpanded();\n const open = this.expandedSet();\n const overflow = this.overflowApplies();\n const max = this.maxVisibleItems();\n\n // The bar ignores per-item anchoring, so both groups share a single row and\n // therefore a single overflow entry.\n let groups = this.resolvedVariant() === 'bar'\n ? NavigationBarComponent.mergeGroups(this.renderGroups())\n : this.renderGroups();\n\n if (overflow || max > 0) {\n groups = groups.map(group => this.applyOverflow(group, overflow, max));\n }\n if (!inline) return groups;\n\n const flatten = (list: readonly NavigationRenderItem[]): readonly NavigationRenderItem[] => {\n let expandedAny = false;\n const result: NavigationRenderItem[] = [];\n for (const rendered of list) {\n result.push(rendered);\n if (rendered.hasChildren && open.has(rendered.item.id)) {\n expandedAny = true;\n result.push(...flatten(rendered.children));\n }\n }\n return expandedAny ? result : list;\n };\n\n return groups.map(group => ({\n align: group.align,\n sections: group.sections.map(section => ({\n section: section.section,\n items: flatten(section.items),\n })),\n }));\n });\n\n /**\n * Ids rendered with the selected styling. It is the active destination when it\n * is on screen, otherwise every rendered parent hiding it — a collapsed branch\n * or the overflow entry — so the user still sees where they are.\n */\n protected readonly highlightedIds = computed<ReadonlySet<string>>(() => {\n const active = this.activeId();\n const result = new Set<string>();\n if (active === undefined) return result;\n\n const rendered = new Set<string>();\n const parents: NavigationRenderItem[] = [];\n for (const group of this.visibleGroups()) {\n for (const section of group.sections) {\n for (const item of section.items) {\n rendered.add(item.item.id);\n if (item.hasChildren) parents.push(item);\n }\n }\n }\n\n if (rendered.has(active)) {\n result.add(active);\n return result;\n }\n\n const contains = (list: readonly NavigationRenderItem[]): boolean =>\n list.some(child => child.item.id === active || contains(child.children));\n\n for (const parent of parents) {\n if (contains(parent.children)) result.add(parent.item.id);\n }\n return result;\n });\n\n /**\n * Rows of the floating submenu panel. Nested destinations one level down are\n * flattened under a heading, so the overflow menu can hold parents too.\n */\n protected readonly popupEntries = computed<readonly NavigationPanelEntry[]>(() => {\n const parent = this.popupItem();\n if (!parent) return [];\n const result: NavigationPanelEntry[] = [];\n for (const child of parent.children) {\n if (child.hasChildren) {\n result.push({ key: `${child.item.id}__heading`, label: child.item.label });\n for (const grandChild of child.children) {\n result.push({ key: grandChild.item.id, render: grandChild });\n }\n } else {\n result.push({ key: child.item.id, render: child });\n }\n }\n return result;\n });\n\n /** `true` when the floating submenu panel must be shown. */\n protected readonly isPopupOpen = computed(() => !this.isExpanded() && !!this.popupItem());\n\n /** Element the floating submenu panel is anchored to. */\n protected readonly popupOrigin = computed<HTMLElement>(\n () => this.popupAnchor() ?? this.hostRef.nativeElement\n );\n\n /** Connected positions of the floating submenu panel, derived from the variant. */\n protected readonly popupPositions = computed<ConnectedPosition[]>(() => {\n if (this.resolvedVariant() === 'bar') {\n return [\n { originX: 'center', originY: 'top', overlayX: 'center', overlayY: 'bottom', offsetY: -8 },\n { originX: 'center', originY: 'bottom', overlayX: 'center', overlayY: 'top', offsetY: 8 },\n ];\n }\n if (this.position() === 'end') {\n return [\n { originX: 'start', originY: 'top', overlayX: 'end', overlayY: 'top', offsetX: -8 },\n { originX: 'start', originY: 'bottom', overlayX: 'end', overlayY: 'bottom', offsetX: -8 },\n ];\n }\n return [\n { originX: 'end', originY: 'top', overlayX: 'start', overlayY: 'top', offsetX: 8 },\n { originX: 'end', originY: 'bottom', overlayX: 'start', overlayY: 'bottom', offsetX: 8 },\n ];\n });\n\n /** `true` when the layout runs right-to-left; used to mirror the arrow keys. */\n private readonly isRtl = computed(() => this.directionality?.value === 'rtl');\n\n // ── Event handlers ─────────────────────────────────────────────────────────\n\n /**\n * Activates a destination, or expands it when it owns nested destinations.\n * A parent never navigates: it toggles its group inline in the wide variants\n * and opens the floating panel in the compact ones.\n * @param render - The render model of the activated destination.\n * @param event - The originating mouse or keyboard event.\n */\n protected select(render: NavigationRenderItem, event: Event): void {\n const item = render.item;\n if (item.disabled) {\n event.preventDefault();\n return;\n }\n\n if (render.hasChildren) {\n event.preventDefault();\n if (this.isExpanded()) {\n this.toggleExpanded(item.id);\n } else {\n this.openPopup(render, event);\n }\n return;\n }\n\n // Let the browser handle modified clicks (new tab / new window) natively.\n const mouse = event as MouseEvent;\n if (render.href && (mouse.ctrlKey || mouse.metaKey || mouse.shiftKey || mouse.button === 1)) {\n return;\n }\n\n if (render.routed && render.href) {\n event.preventDefault();\n void this.router?.navigateByUrl(render.href);\n }\n\n this.selectedId.set(item.id);\n this.itemSelected.emit({ item, section: render.section, parent: render.parent, index: render.index });\n\n this.closePopup();\n if (this.isModal() && this.closeOnSelect()) {\n this.open.set(false);\n }\n }\n\n /**\n * Emits `menuClick` when the leading menu button is pressed.\n */\n protected onMenuClick(): void {\n this.menuClick.emit();\n }\n\n /**\n * Closes the modal drawer when the scrim is clicked.\n */\n protected onScrimClick(): void {\n this.open.set(false);\n }\n\n /**\n * Handles keyboard interaction: arrow keys move the focus between\n * destinations, `Home` / `End` jump to the first / last one and `Escape`\n * closes the floating submenu panel or the modal drawer.\n *\n * The same handler serves the surface and the floating panel, and it tells\n * them apart by `currentTarget`: roving inside an open `role=\"menu\"` must stay\n * inside it, and a programmatic `focus()` is NOT stopped by the focus trap, so\n * sharing one element list would send the focus onto the surface behind the\n * overlay.\n *\n * @param event - The originating keyboard event.\n */\n protected onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape') {\n if (this.popupItem()) {\n event.preventDefault();\n this.closePopup();\n return;\n }\n if (this.isOverlayOpen()) {\n event.preventDefault();\n this.open.set(false);\n return;\n }\n }\n\n // The panel is always a vertical list, whatever the variant behind it.\n const inPanel = (event.currentTarget as HTMLElement | null)?.classList.contains('ars-nav-submenu') === true;\n const horizontal = !inPanel && this.resolvedVariant() === 'bar';\n const forward = horizontal ? (this.isRtl() ? 'ArrowLeft' : 'ArrowRight') : 'ArrowDown';\n const backward = horizontal ? (this.isRtl() ? 'ArrowRight' : 'ArrowLeft') : 'ArrowUp';\n\n let delta = 0;\n if (event.key === forward) delta = 1;\n else if (event.key === backward) delta = -1;\n else if (event.key !== 'Home' && event.key !== 'End') return;\n\n const elements = inPanel ? this.panelElements() : this.itemElements();\n if (elements.length === 0) return;\n\n const current = elements.findIndex(ref => ref.nativeElement === event.target);\n let next: number;\n if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = elements.length - 1;\n else if (current < 0) next = 0;\n else next = (current + delta + elements.length) % elements.length;\n\n event.preventDefault();\n elements[next]?.nativeElement.focus();\n }\n\n // ── Public API ─────────────────────────────────────────────────────────────\n\n /**\n * Expands or collapses the parent destination with the given id.\n * @param id - Identifier of the parent destination to toggle.\n */\n toggleExpanded(id: string): void {\n const next = new Set(this.expandedSet());\n if (next.has(id)) next.delete(id);\n else next.add(id);\n this.expandedIds.set([...next]);\n }\n\n /**\n * Opens the floating submenu panel of a parent destination.\n * @param render - The render model of the parent destination.\n * @param event - The originating event, used to anchor the panel.\n */\n protected openPopup(render: NavigationRenderItem, event: Event): void {\n const anchor = event.currentTarget as HTMLElement | null;\n this.popupAnchor.set(anchor ?? undefined);\n this.popupId.set(this.popupItem()?.item.id === render.item.id ? undefined : render.item.id);\n }\n\n /**\n * Closes the floating submenu panel.\n */\n closePopup(): void {\n this.popupId.set(undefined);\n // Otherwise the component keeps a reference to a detached element.\n this.popupAnchor.set(undefined);\n }\n\n /**\n * Opens the modal drawer. No-op for the other variants.\n */\n openDrawer(): void {\n this.open.set(true);\n }\n\n /**\n * Closes the modal drawer. No-op for the other variants.\n */\n closeDrawer(): void {\n this.open.set(false);\n }\n\n /**\n * Toggles the modal drawer. No-op for the other variants.\n */\n toggleDrawer(): void {\n this.open.update(open => !open);\n }\n\n /**\n * Moves the browser focus to the destination with the given id.\n * @param id - Identifier of the destination to focus.\n * @returns `true` when a matching destination was found and focused.\n */\n focusItem(id: string): boolean {\n for (const ref of this.itemElements()) {\n if (ref.nativeElement.dataset['navId'] === id) {\n ref.nativeElement.focus();\n return true;\n }\n }\n return false;\n }\n\n // ── Helpers ────────────────────────────────────────────────────────────────\n\n /**\n * Moves the compact-only destinations of a group into a synthesized overflow\n * destination appended at the end of the group.\n * @param group - The group to process.\n * @param overflow - `true` when `hideWhenCompact` must be honoured.\n * @param max - Hard cap on the inline destinations; `0` disables it.\n * @returns The group with the overflow destination applied.\n */\n private applyOverflow(\n group: NavigationRenderGroup,\n overflow: boolean,\n max: number\n ): NavigationRenderGroup {\n const kept: { sectionIndex: number; render: NavigationRenderItem }[] = [];\n const overflowed: NavigationRenderItem[] = [];\n\n group.sections.forEach((section, sectionIndex) => {\n for (const render of section.items) {\n if (overflow && render.item.hideWhenCompact) overflowed.push(render);\n else kept.push({ sectionIndex, render });\n }\n });\n\n const slots = kept.length + (overflowed.length > 0 ? 1 : 0);\n if (max > 0 && slots > max) {\n const moved = kept.splice(Math.max(1, max - 1));\n for (const entry of moved) overflowed.push(entry.render);\n }\n\n if (overflowed.length === 0) return group;\n\n const sections: NavigationRenderSection[] = group.sections.map((section, sectionIndex) => ({\n section: section.section,\n items: kept.filter(entry => entry.sectionIndex === sectionIndex).map(entry => entry.render),\n }));\n\n const last = sections[sections.length - 1];\n sections[sections.length - 1] = {\n section: last.section,\n items: [...last.items, this.buildOverflowItem(overflowed)],\n };\n\n return { align: group.align, sections: sections.filter(section => section.items.length > 0) };\n }\n\n /**\n * Builds the synthesized, icon-only overflow destination.\n * @param children - The destinations moved into the overflow menu.\n * @returns The render model of the overflow destination.\n */\n private buildOverflowItem(children: readonly NavigationRenderItem[]): NavigationRenderItem {\n const label = this.overflowLabel();\n const icon = this.overflowIcon();\n return {\n item: { id: NAVIGATION_OVERFLOW_ID, label, icon },\n index: -1,\n depth: 0,\n routed: false,\n iconOff: icon,\n iconOn: icon,\n badgeText: '',\n hasBadge: false,\n iconOnly: true,\n hasChildren: true,\n children,\n ariaLabel: label,\n tooltip: label,\n };\n }\n\n /**\n * Merges the `top` and `bottom` groups into a single `top` group, combining\n * the sections that share an id so `@for` track keys stay unique.\n * @param groups - The groups to merge.\n * @returns A single-group array, or the input when there is nothing to merge.\n */\n private static mergeGroups(\n groups: readonly NavigationRenderGroup[]\n ): readonly NavigationRenderGroup[] {\n if (groups.length < 2) return groups;\n const order: string[] = [];\n const byId = new Map<string, NavigationRenderSection>();\n for (const group of groups) {\n for (const section of group.sections) {\n const existing = byId.get(section.section.id);\n if (existing) {\n byId.set(section.section.id, {\n section: existing.section,\n items: [...existing.items, ...section.items],\n });\n } else {\n order.push(section.section.id);\n byId.set(section.section.id, section);\n }\n }\n }\n return [{ align: 'top', sections: order.map(id => byId.get(id)!) }];\n }\n\n /**\n * Builds the render model of a destination and, recursively, of its children.\n * @param item - The source destination.\n * @param section - The section the destination belongs to.\n * @param parent - The parent destination, for nested destinations.\n * @param depth - Nesting level of the destination.\n * @param counter - Shared counter producing the flat destination index.\n * @param hrefs - Map of destination id to resolved URL.\n * @param dark - `true` when the dark theme is active, selecting the dark sprite frames.\n * @returns The render model of the destination.\n */\n private static buildRenderItem(\n item: NavigationItem,\n section: NavigationSection,\n parent: NavigationItem | undefined,\n depth: number,\n counter: { value: number },\n hrefs: ReadonlyMap<string, string>,\n dark: boolean\n ): NavigationRenderItem {\n const href = hrefs.get(item.id);\n // Icon precedence: registered SVG, then sprite sheet, then image, then ligature.\n const svgOff = item.svgIcon;\n const svgOn = item.activeSvgIcon ?? item.svgIcon;\n const spriteStyle = NavigationBarComponent.buildSpriteStyle(item, dark);\n const imageOff = spriteStyle || svgOff ? undefined : item.imageIcon;\n const imageOn = spriteStyle || svgOn ? undefined : (item.activeImageIcon ?? item.imageIcon);\n const index = counter.value++;\n\n const children = (item.children ?? []).map(child =>\n NavigationBarComponent.buildRenderItem(child, section, item, depth + 1, counter, hrefs, dark)\n );\n\n return {\n item,\n section: section.id === '__default' ? undefined : section,\n parent,\n index,\n depth,\n href,\n routed: !!href && !item.href,\n iconOff: svgOff || spriteStyle || imageOff ? undefined : item.icon,\n iconOn: svgOn || spriteStyle || imageOn ? undefined : (item.activeIcon ?? item.icon),\n svgOff,\n svgOn,\n imageOff,\n imageOn,\n spriteStyle,\n badgeText: NavigationBarComponent.formatBadge(item),\n hasBadge: !!item.badge,\n iconOnly: false,\n hasChildren: children.length > 0,\n children,\n ariaLabel: item.ariaLabel ?? item.label,\n tooltip: item.tooltip ?? item.label,\n };\n }\n\n /**\n * Translates a sprite descriptor into the inline custom properties the\n * stylesheet uses to size the icon and to shift `background-position` per\n * interaction state.\n *\n * The sheet is rescaled through `background-size` instead of being drawn at\n * its natural size: that is what lets a strip of 26px frames be painted at the\n * 24px of the surrounding Material icons without the neighbouring frames\n * bleeding into the box, and it makes the step between two frames exactly the\n * rendered side.\n *\n * @param item - The destination whose sprite must be translated.\n * @param dark - `true` when the dark theme is active, selecting the `dark` frame set.\n * @returns The inline style map, or `undefined` when the destination uses no sprite.\n */\n private static buildSpriteStyle(item: NavigationItem, dark: boolean): Record<string, string> | undefined {\n const sprite = item.sprite;\n if (!sprite) return undefined;\n\n // The inline indices are the light set; `dark` overrides only what differs.\n const light: NavigationSpriteFrames = sprite;\n const frames: NavigationSpriteFrames = dark && sprite.dark ? { ...light, ...sprite.dark } : light;\n const normal = frames.normal ?? 0;\n const hover = frames.hover ?? normal;\n const active = frames.active ?? hover;\n const disabled = frames.disabled ?? normal;\n\n const source = sprite.size ?? SPRITE_DEFAULT_SIZE;\n const size = sprite.renderSize ?? source;\n const count = NavigationBarComponent.spriteFrameCount(sprite);\n const vertical = (sprite.direction ?? 'vertical') === 'vertical';\n\n return {\n '--sp-url': `url(\"${sprite.url}\")`,\n '--sp-size': `${size}px`,\n '--sp-sheet-x': vertical ? `${size}px` : `${size * count}px`,\n '--sp-sheet-y': vertical ? `${size * count}px` : `${size}px`,\n '--sp-step-x': vertical ? '0px' : `${-size}px`,\n '--sp-step-y': vertical ? `${-size}px` : '0px',\n '--sp-normal': `${normal}`,\n '--sp-hover': `${hover}`,\n '--sp-active': `${active}`,\n '--sp-disabled': `${disabled}`,\n };\n }\n\n /**\n * Number of frames a sprite sheet holds, needed to rescale it.\n * @param sprite - The sprite descriptor to measure.\n * @returns The declared frame count, or the highest referenced index plus one.\n */\n private static spriteFrameCount(sprite: NavigationIconSprite): number {\n if (sprite.frames !== undefined && sprite.frames > 0) return sprite.frames;\n const indices = [\n sprite.normal, sprite.hover, sprite.active, sprite.disabled,\n sprite.dark?.normal, sprite.dark?.hover, sprite.dark?.active, sprite.dark?.disabled,\n ];\n let highest = 0;\n for (const index of indices) {\n if (index !== undefined && index > highest) highest = index;\n }\n return highest + 1;\n }\n\n /**\n * Formats the badge content of a destination.\n * @param item - The destination whose badge must be formatted.\n * @returns The badge text, or an empty string for a dot badge / no badge.\n */\n private static formatBadge(item: NavigationItem): string {\n const badge = item.badge;\n if (!badge || badge.value === undefined) return '';\n if (typeof badge.value === 'number') {\n const max = badge.max ?? 999;\n return badge.value > max ? `${max}+` : `${badge.value}`;\n }\n return badge.value;\n }\n\n /**\n * Strips the query string and the fragment from a URL.\n * @param url - The URL to normalise.\n * @returns The path portion of the URL.\n */\n private static pathOf(url: string): string {\n const withoutFragment = url.split('#')[0] ?? '';\n return withoutFragment.split('?')[0] ?? '';\n }\n}\n","@if (isModal() && scrim()) {\n <div class=\"ars-nav__scrim\" aria-hidden=\"true\" (click)=\"onScrimClick()\"></div>\n}\n\n<nav class=\"ars-nav\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.role]=\"isModal() ? 'dialog' : undefined\"\n [attr.aria-modal]=\"isModal() ? 'true' : undefined\"\n [attr.inert]=\"isHidden() ? '' : undefined\"\n [cdkTrapFocus]=\"isOverlayOpen()\"\n [cdkTrapFocusAutoCapture]=\"isOverlayOpen()\"\n (keydown)=\"onKeydown($event)\">\n\n @let labels = resolvedLabelVisibility();\n @let wide = isExpanded();\n @let active = activeId();\n @let highlighted = highlightedIds();\n @let openIds = expandedSet();\n @let popupOpenId = popupItem()?.item.id;\n\n @if (showsHeader()) {\n <div class=\"ars-nav__header\">\n @if (showMenuButton()) {\n <button type=\"button\"\n class=\"ars-nav__menu\"\n [attr.aria-label]=\"menuAriaLabel()\"\n (click)=\"onMenuClick()\">\n <mat-icon aria-hidden=\"true\">{{ menuIcon() }}</mat-icon>\n </button>\n }\n @if (wide) {\n @if (headline(); as headlineText) {\n <h2 class=\"ars-nav__headline\">{{ headlineText }}</h2>\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__leading\"><ng-content select=\"[navHeader]\" /></div>\n <div class=\"ars-nav__fab\"><ng-content select=\"[navFab]\" /></div>\n\n @for (group of visibleGroups(); track group.align) {\n <div class=\"ars-nav__items\" [class.ars-nav__items--bottom]=\"group.align === 'bottom'\">\n @for (block of group.sections; track block.section.id) {\n\n @if (wide && block.section.label) {\n <h3 class=\"ars-nav__section-headline\">{{ block.section.label }}</h3>\n }\n\n @for (r of block.items; track r.item.id) {\n @let current = r.item.id === active;\n @let selected = highlighted.has(r.item.id);\n @let labelVisible = !r.iconOnly && (labels === 'labeled' || (labels === 'selected' && selected));\n @let branchOpen = r.hasChildren && openIds.has(r.item.id);\n @let svg = selected ? r.svgOn : r.svgOff;\n @let image = selected ? r.imageOn : r.imageOff;\n @let ligature = selected ? r.iconOn : r.iconOff;\n\n <!--\n The anchor and the button branches duplicate the inner markup on purpose:\n an `ng-template` + `ngTemplateOutlet` would allocate one extra embedded\n view per destination and lose the typed template context.\n -->\n @if (r.href && !r.hasChildren) {\n <a #navItem\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [attr.data-depth]=\"r.depth\"\n [attr.href]=\"r.item.disabled ? undefined : r.href\"\n [attr.target]=\"r.item.target\"\n [attr.rel]=\"r.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-disabled]=\"r.item.disabled ? 'true' : undefined\"\n [attr.tabindex]=\"r.item.disabled ? -1 : 0\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n @if (labels !== 'unlabeled' && !r.iconOnly) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ r.item.label }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n </a>\n } @else {\n <button #navItem\n type=\"button\"\n class=\"ars-nav__item\"\n [class.ars-nav__item--selected]=\"selected\"\n [class.ars-nav__item--disabled]=\"r.item.disabled\"\n [class.ars-nav__item--parent]=\"r.hasChildren\"\n [class.ars-nav__item--icon-only]=\"r.iconOnly\"\n [attr.data-depth]=\"r.depth\"\n [disabled]=\"!!r.item.disabled\"\n [attr.aria-label]=\"r.ariaLabel\"\n [attr.aria-current]=\"current ? 'page' : undefined\"\n [attr.aria-expanded]=\"r.hasChildren ? (wide ? branchOpen : popupOpenId === r.item.id) : undefined\"\n [attr.aria-haspopup]=\"r.hasChildren && !wide ? 'menu' : undefined\"\n [attr.data-nav-id]=\"r.item.id\"\n [matTooltip]=\"r.tooltip\"\n [matTooltipDisabled]=\"!tooltips() || labelVisible\"\n [matTooltipPosition]=\"tooltipPosition()\"\n (click)=\"select(r, $event)\">\n <span class=\"ars-nav__icon-box\">\n @if (svg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (r.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (image; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (ligature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n @if (r.hasBadge) {\n <span class=\"ars-nav__badge\"\n [class.ars-nav__badge--dot]=\"!r.badgeText\"\n [style.background-color]=\"r.item.badge?.color\"\n [attr.aria-label]=\"r.item.badge?.ariaLabel\">{{ r.badgeText }}</span>\n }\n </span>\n @if (labels !== 'unlabeled' && !r.iconOnly) {\n <span class=\"ars-nav__label\" [class.ars-nav__label--hidden]=\"!labelVisible\">{{ r.item.label }}</span>\n }\n @if (wide && r.item.trailing) {\n <span class=\"ars-nav__trailing\">{{ r.item.trailing }}</span>\n }\n @if (r.hasChildren && wide) {\n <mat-icon class=\"ars-nav__chevron\"\n [class.ars-nav__chevron--open]=\"branchOpen\"\n aria-hidden=\"true\">{{ expandIcon() }}</mat-icon>\n }\n </button>\n }\n }\n\n @if (wide && block.section.divider && !$last) {\n <hr class=\"ars-nav__divider\" aria-hidden=\"true\" />\n }\n }\n </div>\n }\n\n <div class=\"ars-nav__footer\"><ng-content select=\"[navFooter]\" /></div>\n</nav>\n\n<!--\n One overlay for the whole component: the overflow entry and every parent\n destination of the compact variants reuse it, instead of allocating a menu\n instance per destination.\n-->\n<ng-template cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"popupOrigin()\"\n [cdkConnectedOverlayOpen]=\"isPopupOpen()\"\n [cdkConnectedOverlayPositions]=\"popupPositions()\"\n [cdkConnectedOverlayPush]=\"true\"\n (overlayOutsideClick)=\"closePopup()\"\n (detach)=\"closePopup()\">\n <div class=\"ars-nav-submenu\"\n role=\"menu\"\n [attr.aria-label]=\"popupItem()?.ariaLabel\"\n [cdkTrapFocus]=\"true\"\n [cdkTrapFocusAutoCapture]=\"true\"\n (keydown)=\"onKeydown($event)\">\n @for (entry of popupEntries(); track entry.key) {\n @if (entry.render; as c) {\n @let childSelected = c.item.id === activeId();\n @let childSvg = childSelected ? c.svgOn : c.svgOff;\n @let childImage = childSelected ? c.imageOn : c.imageOff;\n @let childLigature = childSelected ? c.iconOn : c.iconOff;\n @if (c.href) {\n <a #panelItem\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [attr.href]=\"c.item.disabled ? undefined : c.href\"\n [attr.target]=\"c.item.target\"\n [attr.rel]=\"c.item.target === '_blank' ? 'noopener noreferrer' : undefined\"\n [attr.aria-disabled]=\"c.item.disabled ? 'true' : undefined\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </a>\n } @else {\n <button #panelItem\n type=\"button\"\n class=\"ars-nav-submenu__item\"\n role=\"menuitem\"\n [class.ars-nav-submenu__item--selected]=\"childSelected\"\n [disabled]=\"!!c.item.disabled\"\n [attr.aria-current]=\"childSelected ? 'page' : undefined\"\n (click)=\"select(c, $event)\">\n @if (childSvg; as svgName) {\n <mat-icon class=\"ars-nav__icon\" [svgIcon]=\"svgName\" aria-hidden=\"true\" />\n } @else if (c.spriteStyle; as spriteStyle) {\n <span class=\"ars-nav__icon ars-nav__icon--sprite\" [style]=\"spriteStyle\" aria-hidden=\"true\"></span>\n } @else if (childImage; as imageUrl) {\n <img class=\"ars-nav__icon ars-nav__icon--image\" [src]=\"imageUrl\" alt=\"\" loading=\"lazy\" decoding=\"async\" />\n } @else if (childLigature; as ligatureName) {\n <mat-icon class=\"ars-nav__icon\" aria-hidden=\"true\">{{ ligatureName }}</mat-icon>\n }\n <span class=\"ars-nav-submenu__label\">{{ c.item.label }}</span>\n @if (c.badgeText) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.badgeText }}</span>\n } @else if (c.item.trailing) {\n <span class=\"ars-nav-submenu__trailing\">{{ c.item.trailing }}</span>\n }\n </button>\n }\n } @else {\n <div class=\"ars-nav-submenu__heading\" role=\"presentation\">{{ entry.label }}</div>\n }\n }\n </div>\n</ng-template>\n","/*\r\n * Public API Surface of scm-utils\r\n */\r\nexport * from './ui/definitions';\r\nexport * from './ui/filters';\r\nexport * from './ui/services/index';\r\nexport * from './ui/dialogs/index';\r\nexport * from './ui/components/index';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i2","i8","i9","i5","i3","i6","i1","i4","i7","i10"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"arsedizioni-ars-utils-ui.application.mjs","sources":["../../../projects/ars-utils/ui.application/applicationDialog.service.ts","../../../projects/ars-utils/ui.application/public_api.ts","../../../projects/ars-utils/ui.application/arsedizioni-ars-utils-ui.application.ts"],"sourcesContent":["import { Service } from '@angular/core';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { DialogService } from '@arsedizioni/ars-utils/ui.dialogs';\nimport type { SendToDialogComponent, SelectTreeDialogComponent, SelectDialogComponent } from '@arsedizioni/ars-utils/ui.dialogs.select';\n\nimport { PromptDialogData, PromptDialogType, PromptTimeDialogData, SelectDialogData, SelectFileDialogData, SelectTreeDialogData } from '@arsedizioni/ars-utils/ui';\nimport type { SelectPictureDialogComponent, SelectFileDialogComponent } from '@arsedizioni/ars-utils/ui.files';\n\nimport type { PromptDialogComponent, PromptDateDialogComponent, PromptTimeDialogComponent } from '@arsedizioni/ars-utils/ui.dialogs.prompt';\n\nimport type { PromptOtpDialogComponent } from '@arsedizioni/ars-utils/ui.dialogs.auth';\n\n@Service()\nexport class ApplicationDialogService extends DialogService {\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.application\n */\nexport * from './applicationDialog.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
|