@arsedizioni/ars-utils 21.1.1 → 21.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-ui.application.mjs","sources":["../../../projects/ars-utils/ui.application/ui/directives/resize-table-column.directive.ts","../../../projects/ars-utils/ui.application/ui/definitions.ts","../../../projects/ars-utils/ui.application/ui/filters.ts","../../../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/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/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-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/prompt/prompt-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/prompt/prompt-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/services/applicationDialog.service.ts","../../../projects/ars-utils/ui.application/ui/ui.module.ts","../../../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-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/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/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/calendar-empty-header/calendar-empy-header.component.ts","../../../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/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/button-toggle/button-toggle.component.ts","../../../projects/ars-utils/ui.application/ui/components/button-toggle/button-toggle.component.html","../../../projects/ars-utils/ui.application/public_api.ts","../../../projects/ars-utils/ui.application/arsedizioni-ars-utils-ui.application.ts"],"sourcesContent":["import { Directive, OnInit, Renderer2, ElementRef, inject, input } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: \"[resizeColumn]\",\r\n standalone: true\r\n})\r\nexport class ResizeTableColumnDirective implements OnInit {\r\n readonly resizable = input<boolean>(undefined, { alias: \"resizeColumn\" });\r\n readonly index = input<number>(undefined);\r\n private renderer = inject(Renderer2);\r\n private elementRef = inject(ElementRef);\r\n private startX: number;\r\n private startWidth: number;\r\n private column: HTMLElement = this.elementRef.nativeElement;\r\n private table: HTMLElement;\r\n private pressed: boolean;\r\n\r\n\r\n ngOnInit() {\r\n if (this.resizable()) {\r\n const row = this.renderer.parentNode(this.column);\r\n const thead = this.renderer.parentNode(row);\r\n this.table = this.renderer.parentNode(thead);\r\n const resizer = this.renderer.createElement(\"span\");\r\n this.renderer.addClass(resizer, \"resize-holder\");\r\n this.renderer.appendChild(this.column, resizer);\r\n this.renderer.listen(resizer, \"mousedown\", this.onMouseDown);\r\n this.renderer.listen(this.table, \"mousemove\", this.onMouseMove);\r\n this.renderer.listen(\"document\", \"mouseup\", this.onMouseUp);\r\n }\r\n }\r\n\r\n onMouseDown = (e: MouseEvent) => {\r\n this.pressed = true;\r\n this.startX = e.pageX;\r\n this.startWidth = this.column.offsetWidth;\r\n };\r\n\r\n onMouseMove = (e: MouseEvent) => {\r\n const offset = 35;\r\n if (this.pressed && e.buttons) {\r\n this.renderer.addClass(this.table, \"resizing\");\r\n\r\n // Calculate width of column\r\n let width =\r\n this.startWidth + (e.pageX - this.startX - offset);\r\n\r\n const tableCells = Array.from(this.table.querySelectorAll(\".mat-row\")).map(\r\n (row: any) => row.querySelectorAll(\".mat-cell\").item(this.index())\r\n );\r\n\r\n // Set table header width\r\n this.renderer.setStyle(this.column, \"width\", `${width}px`);\r\n\r\n // Set table cells width\r\n for (const cell of tableCells) {\r\n this.renderer.setStyle(cell, \"width\", `${width}px`);\r\n }\r\n }\r\n };\r\n\r\n onMouseUp = () => {\r\n if (this.pressed) {\r\n this.pressed = false;\r\n this.renderer.removeClass(this.table, \"resizing\");\r\n }\r\n };\r\n}\r\n","\r\nimport { Searchable, SearchBag, NameValueItem, DateInterval } from '@arsedizioni/ars-utils/core';\r\n\r\nexport interface SelectDialogResult {\r\n selectedItems: SelectableItem[];\r\n}\r\n\r\nexport interface SelectTreeDialogResult {\r\n selectedItems: ItemNode[];\r\n}\r\n\r\nexport interface SelectDialogLookup {\r\n items: SelectableItem[];\r\n filter?: string;\r\n params?: any;\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectDialogFilter {\r\n items?: SelectableItem[];\r\n filter?: string;\r\n filterOption?: SelectableFilter;\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectDialogAppend {\r\n items: SelectableItem[];\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectDialogEdit extends SelectDialogAppend {\r\n item: SelectableItem;\r\n}\r\n\r\nexport interface SelectDialogDelete {\r\n items: SelectableItem[];\r\n selectedItems: SelectableItem[];\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectFileOption {\r\n description: string;\r\n value: boolean;\r\n}\r\n\r\nexport interface SelectFile {\r\n file: File;\r\n options?: SelectFileOption[];\r\n}\r\n\r\nexport interface SelectableFilter {\r\n divider?: boolean;\r\n description?: string;\r\n group?: number;\r\n groupName?: string;\r\n radio?: boolean;\r\n checked?: boolean;\r\n value?: any;\r\n icon?: string;\r\n title?: string;\r\n}\r\n\r\nexport interface SelectDialogData {\r\n title: string;\r\n description?: string;\r\n okCaption?: string;\r\n maxItems?: number;\r\n multipleSelection?: boolean;\r\n mustSelect?: boolean;\r\n width?: number;\r\n filter?: string;\r\n filters?: SelectableFilter[];\r\n items?: SelectableItem[];\r\n total?: number;\r\n lookupFields?: NameValueItem<string>[];\r\n lookupOnInit?: boolean;\r\n emptyMessage?: string;\r\n canLookupWithOptions?: boolean;\r\n canLookupWithInlineOptions?: boolean;\r\n canLookup?: boolean;\r\n canDelete?: boolean;\r\n canAppend?: boolean;\r\n canEdit?: boolean;\r\n canView?: boolean;\r\n canFilter?: boolean;\r\n canPaginate?: boolean;\r\n pageSize?: number;\r\n appearance?: string;\r\n header?: string;\r\n searchLabel?: string;\r\n searchButtonLabel?: string;\r\n}\r\n\r\nexport interface SelectTreeDialogData {\r\n title: string;\r\n description?: string;\r\n okCaption?: string;\r\n nodes?: ItemNode[];\r\n initialFilter?: string;\r\n appearance?: string;\r\n owner?: any;\r\n canAppend?: boolean;\r\n}\r\n\r\n\r\nexport interface SelectFileDialogData {\r\n title: string;\r\n description?: string;\r\n okCaption?: string;\r\n helpLink?: string;\r\n helpCaption?: string;\r\n maxSize?: number;\r\n options?: any;\r\n owner?: any;\r\n accept?: string;\r\n appearance?: string;\r\n}\r\n\r\nexport interface SelectPictureFileDialogData extends SelectFileDialogData {\r\n maxWidth?: number;\r\n maxHeight?: number;\r\n}\r\n\r\nexport interface ISelectableItem extends Searchable {\r\n bag: any;\r\n template: string;\r\n}\r\n\r\nexport class SelectableItem implements ISelectableItem {\r\n bag: any;\r\n template: string;\r\n\r\n /**\r\n * Searchable\r\n */\r\n searchBag: SearchBag;\r\n}\r\n\r\nexport class ItemNode {\r\n id: string;\r\n name: string;\r\n count?: number;\r\n parent?: ItemNode;\r\n children?: ItemNode[];\r\n bag: any;\r\n}\r\n\r\nexport class SelectableNode extends ItemNode implements Searchable {\r\n expandable: boolean;\r\n level: number;\r\n\r\n /**\r\n * Searchable\r\n */\r\n searchBag: SearchBag;\r\n\r\n constructor(item: ItemNode, level: number) {\r\n super();\r\n\r\n // Flattened implementation\r\n this.expandable = item.children && item.children.length > 0;\r\n this.level = level;\r\n\r\n // Data\r\n this.id = item.id;\r\n this.name = item.name;\r\n this.count = item.count;\r\n this.parent = item.parent;\r\n this.bag = item.bag;\r\n this.children = item.children;\r\n }\r\n}\r\n\r\nexport interface SendToDialogResult {\r\n recipients: string;\r\n subject: string;\r\n text: string;\r\n options?: any\r\n}\r\n\r\nexport interface PromptDialogResult {\r\n value?: string;\r\n type?: PromptDialogType;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptDateDialogResult {\r\n value?: Date | DateInterval;\r\n type?: PromptDialogType;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptOtpDialogResult {\r\n value?: string;\r\n}\r\n\r\nexport enum PromptDialogType {\r\n Default = 0,\r\n Date = 1,\r\n Number = 2,\r\n Text = 3,\r\n DateInterval = 4,\r\n List = 5,\r\n Time = 6\r\n\r\n}\r\n\r\nexport interface PromptDialogData {\r\n title: string;\r\n type: PromptDialogType;\r\n description?: string;\r\n okCaption?: string;\r\n cancelCaption?: string;\r\n initialValue?: any;\r\n minValue?: number;\r\n maxValue?: number;\r\n required?: boolean;\r\n appearance?: string;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptTimeDialogData extends PromptDialogData {\r\n slots?: string;\r\n}","export const Filters = {\r\n FLT_1: 1,\r\n FLT_2: 2,\r\n FLT_3: 3,\r\n FLT_4: 4,\r\n FLT_5: 5,\r\n FLT_TEXT: 96,\r\n FLT_TEXT_1: 97,\r\n FLT_TEXT_2: 98,\r\n FLT_TEXT_3: 99\r\n};\r\n\r\nexport interface FilterGroup {\r\n group?: number;\r\n title?: string;\r\n tooltip?: string;\r\n items?: FilterItem[];\r\n action?: any;\r\n}\r\nexport interface FilterItem {\r\n group?: number;\r\n title?: string;\r\n titleSelected?: string;\r\n description?: string;\r\n divider?: boolean;\r\n value?: any;\r\n}\r\n\r\nexport class CurrentFilterChanged {\r\n filter: CurrentFilter;\r\n group: number;\r\n}\r\n\r\nexport class CurrentFilter {\r\n flt1?: any;\r\n flt1Name?: string;\r\n flt2?: any;\r\n flt2Name?: string;\r\n flt3?: any;\r\n flt3Name?: string;\r\n flt4?: any;\r\n flt4Name?: string;\r\n flt5?: any;\r\n flt5Name?: string;\r\n text?: string;\r\n text2?: string;\r\n text3?: string;\r\n\r\n /**\r\n * Update filtered value\r\n */\r\n filtered(): boolean {\r\n return (\r\n (this.flt1 !== null && this.flt1 !== undefined) ||\r\n (this.flt2 !== null && this.flt2 !== undefined) ||\r\n (this.flt3 !== null && this.flt3 !== undefined) ||\r\n (this.flt4 !== null && this.flt4 !== undefined) ||\r\n (this.flt5 !== null && this.flt5 !== undefined) ||\r\n (this.text !== null && this.text !== undefined && this.text.length > 0) ||\r\n (this.text2 !== null && this.text2 !== undefined && this.text2.length > 0) ||\r\n (this.text3 !== null && this.text3 !== undefined && this.text3.length > 0)\r\n );\r\n }\r\n}\r\n\r\nexport class CurrentFilterItem<T> {\r\n items?: any[] = undefined;\r\n value?: T = undefined;\r\n enabled?: boolean = true;\r\n title?: string = undefined;\r\n selectedTitle?: string = undefined;\r\n\r\n public clear() {\r\n this.value = undefined;\r\n this.selectedTitle = undefined;\r\n }\r\n}\r\n","import { TextFieldModule } from \"@angular/cdk/text-field\";\r\nimport { ChangeDetectionStrategy, Component, OnInit, inject, output } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from \"@angular/material/dialog\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { EmailsValidatorDirective, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from \"@ngbracket/ngx-layout/flex\";\r\nimport { SendToDialogResult } from \"../../definitions\";\r\n\r\nexport interface SendToDialogData {\r\n count: number;\r\n title?: string ;\r\n info?: string;\r\n appearance?: string;\r\n allowPopulate?: boolean;\r\n options?: any;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: \"./send-to-dialog.component.html\",\r\n styleUrls: [\"./send-to-dialog.component.scss\"],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n FlexModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n TextFieldModule,\r\n EmailsValidatorDirective,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatCheckboxModule,\r\n MatDialogActions,\r\n MatDialogClose,\r\n SafeHtmlPipe\r\n ],\r\n})\r\nexport class SendToDialogComponent implements OnInit {\r\n readonly done = output<SendToDialogResult>();\r\n readonly populate = output<SendToDialogResult>();\r\n\r\n protected dialogData: SendToDialogData = inject(MAT_DIALOG_DATA);\r\n protected item: SendToDialogResult = {\r\n recipients: null,\r\n subject: null,\r\n text: null,\r\n options: null\r\n };\r\n\r\n ngOnInit(): void {\r\n this.dialogData = this.dialogData || { count: 0, appearance: 'fill' };\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.count) {\r\n this.dialogData.count = 0;\r\n }\r\n if (!this.dialogData.title && this.dialogData.count) {\r\n this.dialogData.title =\r\n this.dialogData.count === 1\r\n ? \"Invia documento a...\"\r\n : \"Invia \" + this.dialogData.count + \" documenti a...\";\r\n }\r\n }\r\n\r\n /**\r\n * Submit\r\n */\r\n protected ok() {\r\n // Add selected options\r\n this.item.options = this.dialogData.options;\r\n this.done.emit(this.item);\r\n }\r\n\r\n /**\r\n * Populate recipients\r\n */\r\n protected populateRecipients() {\r\n this.populate.emit(this.item);\r\n }\r\n}","<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n<span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n} @else {\r\n<span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n}\r\n</div>\r\n<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content>\r\n <p>{{dialogData.info}}</p>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData.appearance\">\r\n <mat-label >Destinatari</mat-label>\r\n <textarea matInput\r\n [(ngModel)]=\"item.recipients\" name=\"recipients\" maxlength=\"1024\" #recipients=\"ngModel\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" emails required></textarea>\r\n @if (item.recipients) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix\r\n aria-label=\"Azzera\" (click)=\"item.recipients = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n @if (dialogData.allowPopulate) {\r\n<button type=\"button\" type=\"button\" tabindex=\"-1\" mat-icon-button\r\n matSuffix aria-label=\"Popola\" (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>search</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}}/1024 </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\r\n 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 \r\n [(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}}/1024 </mat-hint>\r\n @if (subject.invalid) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData.options) {\r\n<div>\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" 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>\r\n","import { FlatTreeControl } from '@angular/cdk/tree';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n Injectable,\r\n OnDestroy,\r\n OnInit,\r\n inject,\r\n output,\r\n signal\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule } from '@angular/material/tree';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { BehaviorSubject, Observable, Subject, of as observableOf } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ItemNode, SelectTreeDialogData, SelectTreeDialogResult, SelectableNode } from '../../definitions';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\n@Injectable()\r\nexport class TreeDataSource implements OnDestroy {\r\n dataChange = new BehaviorSubject<ItemNode[]>([]);\r\n\r\n get data(): ItemNode[] {\r\n return this.dataChange.value;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.dataChange.unsubscribe();\r\n }\r\n\r\n /**\r\n * Initialzie the data source\r\n * @param data : data\r\n */\r\n initialize(data: ItemNode[]) {\r\n this.dataChange.next(data);\r\n }\r\n\r\n /**\r\n * Find a node by id recursively\r\n * @param node: the source node\r\n * @param id : the id to search for\r\n */\r\n findNode(node: ItemNode, id: string): ItemNode {\r\n let children;\r\n if (node && node.id === id) return node;\r\n if (node) children = node.children;\r\n else if (this.data && this.data.length > 0)\r\n children = this.data[0].children;\r\n if (children) {\r\n let _n: ItemNode;\r\n children.some(n => {\r\n if (n.id === id) {\r\n _n = n;\r\n return true;\r\n }\r\n _n = this.findNode(n, id);\r\n if (_n) return true;\r\n return false;\r\n });\r\n return _n;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Remove a node\r\n * @param id : the node id to remove\r\n */\r\n removeNode(id: string) {\r\n let n = this.findNode(null, id);\r\n if (!n) return;\r\n if (n.parent) {\r\n const p = n.parent.children.findIndex(n => n.id === id);\r\n if (p != -1) {\r\n n.parent.children.splice(p, 1);\r\n if (n.parent.count > 0) n.parent.count--;\r\n }\r\n } else {\r\n const p = this.data.findIndex(n => n.id === id);\r\n if (p != -1) {\r\n this.data.splice(p, 1);\r\n }\r\n }\r\n\r\n this.dataChange.next(this.data);\r\n }\r\n\r\n /**\r\n * Insert a new node\r\n * @param node : the new node\r\n */\r\n insertNode(node: ItemNode) {\r\n if (node.parent) {\r\n node.parent.children.unshift(node);\r\n node.parent.count++;\r\n } else this.data.unshift(node);\r\n\r\n this.dataChange.next(this.data);\r\n }\r\n\r\n /**\r\n * Rename a node\r\n * @param id : the node id\r\n * @param name : the new node name\r\n */\r\n renameNode(id: string, name: string): ItemNode {\r\n let n = this.findNode(null, id);\r\n if (n) {\r\n n.name = name;\r\n this.dataChange.next(this.data);\r\n }\r\n return n;\r\n }\r\n\r\n /**\r\n * Update data\r\n */\r\n update() {\r\n this.dataChange.next(this.data);\r\n }\r\n}\r\n\r\nexport interface SelectTreeDialogAppend {\r\n parent?: ItemNode;\r\n owner?: any;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './select-tree-dialog.component.html',\r\n styleUrls: ['./select-tree-dialog.component.scss'],\r\n providers: [TreeDataSource],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule, MatButtonModule,\r\n MatIconModule, MatTooltipModule, MatDialogContent, MatTreeModule, MatDialogActions,\r\n MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class SelectTreeDialogComponent implements OnInit, OnDestroy {\r\n readonly done = output<SelectTreeDialogResult>();\r\n readonly append = output<SelectTreeDialogAppend>();\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private dialogRef = inject(MatDialogRef<SelectTreeDialogComponent>);\r\n protected dialogData: SelectTreeDialogData = inject(MAT_DIALOG_DATA);\r\n private tree = inject(TreeDataSource);\r\n private treeFlattener: MatTreeFlattener<ItemNode, SelectableNode>;\r\n protected treeControl: FlatTreeControl<SelectableNode>;\r\n protected treeData: MatTreeFlatDataSource<ItemNode, SelectableNode>;\r\n protected currentNode: ItemNode;\r\n protected filterText: string = '';\r\n protected filteredItems: SelectableNode[] = [];\r\n protected filterIndex: number = -1;\r\n protected canAppend = signal<boolean>(this.dialogData.canAppend || false);\r\n\r\n /**\r\n * Manage flat tree view\r\n */\r\n private getChildren = (node: ItemNode): Observable<ItemNode[]> =>\r\n observableOf(node.children);\r\n private getLevel = (node: SelectableNode) => node.level;\r\n private isExpandable = (node: SelectableNode) => node.expandable;\r\n protected hasChild = (_: number, _node: SelectableNode) => _node.expandable;\r\n protected transformer = (item: ItemNode, level: number) => {\r\n return new SelectableNode(item, level);\r\n };\r\n\r\n ngOnInit() {\r\n this.dialogData = this.dialogData || { appearance: 'outline', title: 'Seleziona', okCaption: 'Ok' };\r\n this.treeFlattener = new MatTreeFlattener(\r\n this.transformer,\r\n this.getLevel,\r\n this.isExpandable,\r\n this.getChildren\r\n );\r\n this.treeControl = new FlatTreeControl<SelectableNode>(\r\n this.getLevel,\r\n this.isExpandable\r\n );\r\n this.treeData = new MatTreeFlatDataSource(\r\n this.treeControl,\r\n this.treeFlattener\r\n );\r\n this.tree.dataChange\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(data => {\r\n this.treeData.data = data;\r\n setTimeout(() => {\r\n if (this.currentNode) {\r\n const n = this.treeControl.dataNodes.find(x => x.id === this.currentNode.id);\r\n if (n) {\r\n this.currentNode = n;\r\n this.treeControl.expand(n);\r\n }\r\n }\r\n });\r\n });\r\n if (this.dialogData.nodes) {\r\n this.tree.initialize(this.dialogData.nodes);\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Seleziona';\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'OK';\r\n }\r\n if (this.dialogData.initialFilter) {\r\n this.doFilter(this.dialogData.initialFilter);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n /**\r\n * Submit selection\r\n */\r\n protected ok() {\r\n this.done.emit({ selectedItems: [this.currentNode] });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Select a node\r\n * @param e : the event\r\n * @param node : the\r\n */\r\n protected select(e: MouseEvent, node: SelectableNode) {\r\n if (e) e.stopPropagation();\r\n if (node) {\r\n this.currentNode = node.id === this.currentNode?.id ? null : node;\r\n }\r\n }\r\n\r\n /**\r\n * Clear filter\r\n */\r\n protected clearFilter() {\r\n this.filterText = '';\r\n }\r\n\r\n /**\r\n * Apply filter\r\n * @param text : the text to filter\r\n */\r\n protected doFilter(text?: string) {\r\n if (text) this.filterText = text;\r\n this.filteredItems = [];\r\n this.filterIndex = -1;\r\n if (this.filterText) {\r\n this.treeControl.dataNodes.forEach(n => {\r\n if (n.name.toLowerCase().indexOf(this.filterText.toLowerCase()) != -1) {\r\n this.filteredItems.push(n);\r\n }\r\n });\r\n\r\n if (this.filteredItems.length > 0) {\r\n this.nextFiltered();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Goto next filtered item\r\n */\r\n protected nextFiltered() {\r\n if (!SystemUtils.isBrowser()) return;\r\n if (this.filteredItems.length === 0) return;\r\n this.filterIndex++;\r\n if (this.filterIndex === this.filteredItems.length) this.filterIndex = 0;\r\n let node = this.filteredItems[this.filterIndex];\r\n this.currentNode = node;\r\n this.expand(node);\r\n let elem = document.getElementById(node.id);\r\n if (elem) elem.scrollIntoView();\r\n }\r\n\r\n /**\r\n * Expand a node and all its parents\r\n * @param node : the selectable node to expand\r\n */\r\n public expand(node: SelectableNode) {\r\n this.treeControl.expand(node);\r\n let parentNode = node.parent;\r\n while (parentNode) {\r\n this.treeControl.dataNodes.some(n => {\r\n if (n.id === parentNode.id) {\r\n this.treeControl.expand(n);\r\n parentNode = parentNode.parent;\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Append a node to the tree\r\n * @param node : the nodo to append\r\n */\r\n public appendNode(node: ItemNode) {\r\n this.tree.insertNode(node);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Append\r\n */\r\n protected doAppend() {\r\n this.append.emit({ parent: this.currentNode, owner: this } as SelectTreeDialogAppend);\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n","<h2 mat-dialog-title (keyup.ArrowDown)=\"nextFiltered()\" [innerHTML]=\"dialogData.title | safeHtml\"></h2>\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=\"50\">\r\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\r\n [(ngModel)]=\"filterText\">\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\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\" class=\"small\">{{filterIndex + 1}} / {{filteredItems.length}}</div>\r\n </div>\r\n }\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\" style=\"white-space:nowrap\">\r\n <div fxFlexAlign=\"center\">\r\n @if (canAppend()) {\r\n <button fxFlexAlign=\"center\" 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 (filteredItems.length > 0) {\r\n <button fxFlexAlign=\"center\" 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 }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"treeControl.collapseAll()\">\r\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"treeControl.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]=\"treeData\" [treeControl]=\"treeControl\">\r\n <mat-tree-node [id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple\" (click)=\"select($event, node);\"\r\n [class.tree-node-activated]=\"currentNode && currentNode.id === node.id\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill class=\"small\">\r\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"uppercase \">\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\">({{node.count}})</span>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node [id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple\"\r\n [class.tree-node-activated]=\"currentNode && currentNode.id === node.id\" (click)=\"select($event, node);\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill class=\"small\">\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 {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"uppercase truncated\">\r\n <div>\r\n {{node.name}}\r\n </div>\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <div fxLayoutAlign=\"end\">({{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 { ChangeDetectionStrategy, Component, inject, signal, output, ChangeDetectorRef } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { SelectFile, SelectPictureFileDialogData } from '../../definitions';\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './select-picture-dialog.component.html',\r\n styleUrls: ['./select-picture-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FlexModule, MatButtonModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class SelectPictureDialogComponent {\r\n readonly done = output<SelectFile>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private dialogService = inject(DialogService);\r\n private dialogRef = inject(MatDialogRef<SelectPictureDialogComponent>);\r\n protected dialogData: SelectPictureFileDialogData = inject(MAT_DIALOG_DATA);\r\n protected file?: File;\r\n protected fileClass = signal<'selectpicture-file' | 'selectpicture-file-drop'>('selectpicture-file');\r\n protected pictureWidth = signal<number>(0);\r\n protected pictureHeight = signal<number>(0);\r\n protected picturePreview = signal<any>(undefined);\r\n\r\n\r\n /**\r\n * Update preview\r\n * @param e : the event\r\n */\r\n protected update(e: any) {\r\n if (e.target.files) {\r\n this.selectFile(e.target.files[0]);\r\n }\r\n }\r\n\r\n /**\r\n * Select a file\r\n * @param file : the file to select \r\n */\r\n private selectFile(file: File) {\r\n const maxSize = this.dialogData.maxSize ?? 0;\r\n if (maxSize > 0) {\r\n const size = file.size / 1048576;\r\n if (size > maxSize) {\r\n this.dialogService.error(\"File troppo grande (massimo \" + SystemUtils.formatFileSize(maxSize * 1048576) + \")\");\r\n return;\r\n }\r\n }\r\n if (this.dialogData.accept) {\r\n const accept = this.dialogData.accept.toLowerCase();\r\n const a = file.name.split('.').pop()?.toLowerCase();\r\n let b = file.type.toLowerCase();\r\n if (b.startsWith('image/') && accept.includes('image/*')) {\r\n b = 'image/*';\r\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\r\n b = 'video/*';\r\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\r\n b = 'audio/*';\r\n }\r\n if (!accept.includes(a) && !accept.includes(b)) {\r\n this.dialogService.error(\"Sono accettati solo questi tipi di file: \" + accept);\r\n return;\r\n }\r\n }\r\n const reader = new FileReader();\r\n reader.onload = (_e: any) => {\r\n const img = new Image();\r\n img.onload = () => {\r\n const maxWidth = this.dialogData.maxWidth ?? 0;\r\n if (maxWidth > 0 && img.width > maxWidth) {\r\n this.dialogService.error(\"Immagine troppo larga (massimo \" + maxWidth + \" pixel)\");\r\n return;\r\n }\r\n const maxHeight = this.dialogData.maxHeight ?? 0;\r\n if (maxHeight > 0 && img.height > maxHeight) {\r\n this.dialogService.error(\"Immagine troppo alta (massimo \" + maxHeight + \" pixel)\");\r\n return;\r\n }\r\n this.pictureWidth.set(img.width);\r\n this.pictureHeight.set(img.height);\r\n this.picturePreview.set((_e.target as FileReader).result);\r\n this.file = file;\r\n this.changeDetector.markForCheck();\r\n };\r\n img.src = _e.target.result;\r\n\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n\r\n\r\n /**\r\n * Format size\r\n * @param size the file size\r\n */\r\n protected size(size: number) {\r\n return SystemUtils.formatFileSize(size);\r\n }\r\n\r\n /**\r\n * Submit selection\r\n */\r\n protected ok() {\r\n this.done.emit({ file: this.file, options: this.dialogData.options });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /**\r\n* Drag & drop functions\r\n*/\r\n protected onDragOver(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file-drop\");\r\n e.preventDefault();\r\n }\r\n protected onDragEnter(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file-drop\");\r\n e.preventDefault();\r\n }\r\n protected onDragEnd(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file\");\r\n e.preventDefault();\r\n }\r\n protected onDragLeave(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file\");\r\n e.preventDefault();\r\n }\r\n protected onDrop(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file\");\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (e.dataTransfer.files) {\r\n this.addFiles(e.dataTransfer.files);\r\n }\r\n }\r\n\r\n /**\r\n* Add files\r\n* @param files : the files to add\r\n*/\r\n private addFiles(files: FileList) {\r\n if (files.length > 0) {\r\n this.selectFile(files[0]);\r\n }\r\n }\r\n}\r\n\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n@if (dialogData.description) {\r\n<div class=\"selectpicture-description\" [innerHtml]=\"dialogData.description | safeHtml\"></div>\r\n}\r\n<mat-dialog-content style=\"padding: 24px 0\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui l'immagine o selezionala</i></div>\r\n <div>\r\n <input #_file type=\"file\" [hidden]=\"true\" [accept]=\"dialogData.accept ?? 'image/*'\"\r\n (change)=\"update($event)\" />\r\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\r\n </div>\r\n @if (file) {\r\n <div style=\"padding:0 24px\">\r\n <div fxLayout=\"column\" fxLayoutGape=\"5px\" fxLayoutAlign=\"center center\" fxFill>\r\n <img [src]=\"picturePreview()\" class=\"selectpicture-preview\">\r\n <div class=\"small accent bold \"><i>{{file.name}}</i></div>\r\n <div class=\"small\">Dimensioni:<i>{{pictureWidth()}} x {{pictureHeight()}} ({{size(file.size)}})</i></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData.options) {\r\n <div style=\"padding-bottom: 24px;\">\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button mat-dialog-close >Annulla</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, signal, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { ArsCoreModule, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { SelectFile, SelectFileDialogData } from '../../definitions';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './select-file-dialog.component.html',\r\n styleUrls: ['./select-file-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FlexModule, MatButtonModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatDialogClose, ArsCoreModule, SafeHtmlPipe]\r\n})\r\nexport class SelectFileDialogComponent {\r\n readonly done = output<SelectFile>();\r\n private dialogService = inject(DialogService);\r\n private dialogRef = inject(MatDialogRef<SelectFileDialogComponent>);\r\n protected dialogData: SelectFileDialogData = inject(MAT_DIALOG_DATA);\r\n protected file?: File;\r\n protected fileClass = signal<'selectfile-file' | 'selectfile-file-drop'>('selectfile-file');\r\n\r\n\r\n /**\r\n * Update preview\r\n * @param e : the event\r\n */\r\n protected update(e: any) {\r\n if (e.target.files) {\r\n this.selectFile(e.target.files[0]);\r\n }\r\n }\r\n\r\n /**\r\n * Select a file\r\n * @param file : the file to select \r\n \r\n */\r\n private selectFile(file: File) {\r\n const maxSize = this.dialogData.maxSize ?? 0;\r\n if (maxSize > 0) {\r\n const size = file.size / 1048576;\r\n if (size > maxSize) {\r\n this.dialogService.error(\"File troppo grande (massimo \" + SystemUtils.formatFileSize(maxSize * 1048576) + \")\");\r\n return;\r\n }\r\n }\r\n if (this.dialogData.accept) {\r\n const accept = this.dialogData.accept.toLowerCase();\r\n const a = file.name.split('.').pop()?.toLowerCase();\r\n let b = file.type.toLowerCase();\r\n if (b.startsWith('image/') && accept.includes('image/*')) {\r\n b = 'image/*';\r\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\r\n b = 'video/*';\r\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\r\n b = 'audio/*';\r\n }\r\n if (!accept.includes(a) && !accept.includes(b)) {\r\n this.dialogService.error(\"Sono accettati solo questi tipi di file: \" + accept);\r\n return;\r\n }\r\n }\r\n this.file = file;\r\n }\r\n\r\n /**\r\n * Format size\r\n * @param size the file size\r\n */\r\n protected size(size: number) {\r\n return SystemUtils.formatFileSize(size);\r\n }\r\n\r\n /**\r\n * Submit selection\r\n */\r\n protected ok() {\r\n this.done.emit({ file: this.file, options: this.dialogData.options });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Drag & drop functions\r\n */\r\n protected onDragOver(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file-drop\");\r\n e.preventDefault();\r\n }\r\n protected onDragEnter(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file-drop\");\r\n e.preventDefault();\r\n }\r\n protected onDragEnd(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file\");\r\n e.preventDefault();\r\n }\r\n protected onDragLeave(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file\");\r\n e.preventDefault();\r\n }\r\n protected onDrop(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file\");\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (e.dataTransfer.files) {\r\n this.addFiles(e.dataTransfer.files);\r\n }\r\n }\r\n\r\n /**\r\n* Add files\r\n* @param files : the files to add\r\n*/\r\n private addFiles(files: FileList) {\r\n if (files.length > 0) {\r\n this.selectFile(files[0]);\r\n }\r\n }\r\n}\r\n\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content style=\"padding: 24px 0;\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\r\n @if (dialogData.description) {\r\n <div style=\"padding-bottom: 10px;\" [innerHtml]=\"dialogData.description | safeHtml\"></div>\r\n }\r\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui il file o selezionalo</i></div>\r\n <div>\r\n <input #_file type=\"file\" [accept]=\"dialogData.accept\" [hidden]=\"true\" (change)=\"update($event)\" />\r\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\r\n </div>\r\n @if (file) {\r\n <div style=\"padding:0 24px\">\r\n <div fxLayout=\"column\" fxLayoutGape=\"5px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div class=\"small accent bold\"><i>{{file.name}}</i></div>\r\n <div class=\"small\">Dimensioni: <i>{{size(file.size)}}</i></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData.options) {\r\n <div style=\"padding-bottom: 24px;\">\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n @if (dialogData.helpLink) {\r\n <a mat-stroked-button href=\"{{dialogData.helpLink}}\" target=\"_blank\"\r\n >{{dialogData.helpCaption}}</a>\r\n }\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { TextFieldModule } from '@angular/cdk/text-field';\r\nimport { ChangeDetectionStrategy, Component, OnInit, inject, output, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDialogData, PromptDialogResult, PromptDialogType } from '../../definitions';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-dialog.component.html',\r\n styleUrls: ['./prompt-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule,\r\n MatButtonModule, MatIconModule, TextFieldModule, MatSelectModule, MatOptionModule, MatCheckboxModule, MatDialogActions, \r\n MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class PromptDialogComponent implements OnInit {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptDialogResult>();\r\n private dialogService = inject(DialogService);\r\n protected dialogData: PromptDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'fill', title: 'Inserisci dato', type: PromptDialogType.Default }\r\n protected value?: any;\r\n\r\n ngOnInit(): void {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Inserisci dato';\r\n }\r\n if (!this.dialogData.type) {\r\n this.dialogData.type = PromptDialogType.Default;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'Ok';\r\n }\r\n if (!this.dialogData.cancelCaption) {\r\n this.dialogData.cancelCaption = 'Annulla';\r\n }\r\n if (this.dialogData.initialValue && this.dialogData.type !== PromptDialogType.List) {\r\n this.value = this.dialogData.initialValue;\r\n }\r\n }\r\n\r\n /**\r\n * Done\r\n */\r\n protected ok() {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error(\"Ci sono degli errori da correggere.\");\r\n return;\r\n }\r\n if (this.dialogData.type === 1) {\r\n // Check date\r\n const date = SystemUtils.parseDate(this.value as string);\r\n if (!date || date.getFullYear() > 9999) {\r\n this.dialogService.error(\"Data non valida.\");\r\n return;\r\n }\r\n }\r\n this.done.emit({\r\n value: this.value,\r\n type: this.dialogData.type,\r\n options: this.dialogData.options\r\n });\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (!dialogData.type) {\r\n <mat-form-field [appearance]=\"dialogData.appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData.description}}</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\"\r\n [required]=\"dialogData.required\" maxlength=\"200\">\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\" (click)=\"value = ''\">\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\" (click)=\"value = ''\">\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\"\r\n [required]=\"dialogData.required\" cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"\r\n maxlength=\"1000\"></textarea>\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\" (click)=\"value = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"end\">{{_value.value?.length || 0}}/1000 </mat-hint>\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData.type === 5) {\r\n <mat-form-field [appearance]=\"dialogData.appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData.description}}</mat-label>\r\n <mat-select [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\" [required]=\"dialogData.required\">\r\n @for (i of dialogData.initialValue; track $index) {\r\n <mat-option [value]=\"i.value\">\r\n {{i.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n @if (dialogData.options) {\r\n <div>\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <br>\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >{{dialogData.cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n inject,\r\n signal,\r\n output,\r\n viewChild\r\n} from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatCheckboxChange, MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatOptionModule } from \"@angular/material/core\";\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\r\nimport { MatDividerModule } from \"@angular/material/divider\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatListModule, MatSelectionList, MatSelectionListChange } from \"@angular/material/list\";\r\nimport { MatMenuModule } from \"@angular/material/menu\";\r\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { SafeHtmlPipe, SearchFilterPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport {\r\n SelectDialogAppend,\r\n SelectDialogData,\r\n SelectDialogDelete,\r\n SelectDialogEdit,\r\n SelectDialogFilter,\r\n SelectDialogLookup,\r\n SelectDialogResult,\r\n SelectableFilter,\r\n SelectableItem,\r\n} from \"../../definitions\";\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: \"./select-dialog.component.html\",\r\n styleUrls: [\"./select-dialog.component.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n FormsModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n MatOptionModule,\r\n MatTooltipModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatCheckboxModule,\r\n MatDialogContent,\r\n MatListModule,\r\n MatDialogActions,\r\n MatDialogClose,\r\n MatPaginatorModule,\r\n SearchFilterPipe,\r\n SafeHtmlPipe\r\n ],\r\n})\r\nexport class SelectDialogComponent implements OnInit {\r\n readonly paginator = viewChild.required<MatPaginator>('paginator');\r\n readonly selection = viewChild.required<MatSelectionList>(\"selection\");\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private dialogRef = inject(MatDialogRef<SelectDialogComponent>);\r\n protected dialogData: SelectDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'outline', title: 'Seleziona' };\r\n readonly done = output<SelectDialogResult>();\r\n readonly edit = output<SelectDialogEdit>();\r\n readonly view = output<SelectableItem>();\r\n readonly append = output<SelectDialogAppend>();\r\n readonly delete = output<SelectDialogDelete>();\r\n readonly lookup = output<SelectDialogLookup>();\r\n readonly lookupOptions = output();\r\n readonly filter = output<SelectDialogFilter>();\r\n protected canEdit = signal<boolean>(false);\r\n protected canView = signal<boolean>(false);\r\n protected canAppend = signal<boolean>(this.dialogData.canAppend ?? false);\r\n protected canDelete = signal<boolean>(false);\r\n protected canPaginate = signal<boolean>(this.dialogData.canPaginate ?? false);\r\n // Handle submit button activity\r\n protected okDisabled = signal<boolean>(this.dialogData.mustSelect ?? true);\r\n // Used for array filtering\r\n protected filterText: string = \"\";\r\n protected filterOptions: SelectableFilter[] = [];\r\n protected filterOptionsInfo: string = \"Tutto\";\r\n // Used to sincronize lookup fields and params\r\n protected lookupField: string = \"\";\r\n private lookupParams?: any;\r\n // Used to display selected elements\r\n protected selectionInfo = signal<string>(null);\r\n protected selectionMasterIndeterminate = signal<boolean>(false);\r\n protected selectionMasterChecked = signal<boolean>(false);\r\n\r\n ngOnInit() {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'outline';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Seleziona';\r\n }\r\n if (this.dialogData.multipleSelection && !this.dialogData.items) {\r\n this.dialogData.multipleSelection = true;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = \"Ok\";\r\n }\r\n if (this.dialogData.canLookup) {\r\n this.dialogData.items = [];\r\n if (this.dialogData.lookupFields && this.dialogData.lookupFields.length > 0) {\r\n this.lookupField = this.dialogData.lookupFields[0].value;\r\n }\r\n if (this.dialogData.canFilter) {\r\n this.filterOptions = this.dialogData.filters;\r\n }\r\n if (this.dialogData.canPaginate) {\r\n if (!this.dialogData.pageSize) {\r\n this.dialogData.pageSize = 100\r\n }\r\n }\r\n }\r\n if (this.dialogData.filter || this.dialogData.lookupOnInit) {\r\n this.doFilter(this.dialogData.filter);\r\n }\r\n }\r\n\r\n /**\r\n * Mark for check\r\n * @param newTotal: the optional new total\r\n */\r\n notifyChanges(newTotal?: number) {\r\n this.dialogData.total = newTotal ?? 0;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Check if every element are selected\r\n */\r\n private isAllSelected() {\r\n const selection = this.selection();\r\n return (\r\n selection &&\r\n selection.selectedOptions &&\r\n selection.selectedOptions.selected &&\r\n selection.selectedOptions.selected.length === this.dialogData.items.length\r\n );\r\n }\r\n\r\n /**\r\n * Checks if exists a selection\r\n */\r\n private hasSelection() {\r\n const selection = this.selection();\r\n return (\r\n selection &&\r\n selection.selectedOptions &&\r\n selection.selectedOptions.selected &&\r\n selection.selectedOptions.selected.length > 0\r\n );\r\n }\r\n\r\n /**\r\n * Master selection toggle\r\n * @param e: the event\r\n */\r\n protected masterSelectionToggle(e: MatCheckboxChange) {\r\n if (e.checked)\r\n // Deselect if not allselected so that toggle makes the right choice\r\n this.selection().selectAll();\r\n else this.selection().deselectAll();\r\n this.selectionMasterIndeterminate.set(false);\r\n this.selectionMasterChecked.set(e.checked);\r\n const selection = this.selection();\r\n this.okDisabled.set(\r\n this.dialogData.mustSelect &&\r\n (!selection || selection.selectedOptions.selected.length === 0));\r\n this.updateSelectionInfo();\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n * @param e: the event\r\n */\r\n protected select(e: MatSelectionListChange) {\r\n const selection = this.selection();\r\n if (!this.dialogData.multipleSelection) {\r\n this.selection().deselectAll();\r\n if (e.options?.length > 0)\r\n e.options[0].selected = true;\r\n this.okDisabled.set(false);\r\n } else {\r\n this.okDisabled.set(\r\n this.dialogData.mustSelect &&\r\n (!selection ||\r\n selection.selectedOptions.selected.length === 0));\r\n }\r\n\r\n // Update editors\r\n this.canEdit.set(\r\n this.dialogData.canEdit &&\r\n selection &&\r\n selection.selectedOptions.selected.length === 1);\r\n this.canView.set(\r\n this.dialogData.canView &&\r\n selection &&\r\n selection.selectedOptions.selected.length === 1);\r\n this.canDelete.set(\r\n this.dialogData.canDelete &&\r\n selection &&\r\n selection.selectedOptions.selected.length > 0);\r\n this.selectionMasterIndeterminate.set(\r\n !this.isAllSelected() && this.hasSelection());\r\n this.selectionMasterChecked.set(this.hasSelection());\r\n this.updateSelectionInfo();\r\n }\r\n\r\n /**\r\n * Update selection info\r\n */\r\n private updateSelectionInfo() {\r\n // Update selection info\r\n const selection = this.selection();\r\n if (selection && selection.selectedOptions.selected.length > 0 && this.dialogData.multipleSelection) {\r\n this.selectionInfo.set(\r\n selection.selectedOptions.selected.length +\r\n \" / \" +\r\n selection.options.length);\r\n } else {\r\n this.selectionInfo.set(null);\r\n }\r\n }\r\n\r\n /**\r\n * Clear current selection\r\n */\r\n clearSelection() {\r\n this.selectionMasterIndeterminate.set(false);\r\n this.selectionMasterChecked.set(false);\r\n this.selection().deselectAll();\r\n this.selectionInfo.set(null);\r\n }\r\n\r\n /**\r\n * Submit selection\r\n */\r\n protected ok() {\r\n if (!this.okDisabled()) {\r\n // Multi selection\r\n const selectedItems: any = [];\r\n this.selection().selectedOptions.selected.forEach((element) => {\r\n selectedItems.push(element.value);\r\n });\r\n this.done.emit({ selectedItems: selectedItems });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Clear filter\r\n */\r\n protected clearFilter() {\r\n this.filterText = \"\";\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Set filter text\r\n * @param text : the new value\r\n */\r\n public setFilter(text: string) {\r\n this.filterText = text;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n /**\r\n * Gt the current filter text\r\n * @returns the filter text\r\n */\r\n public getFilter(): string {\r\n return this.filterText;\r\n }\r\n\r\n /**\r\n * Show filter options\r\n */\r\n protected showFilterOptions() {\r\n if (this.lookupOptions) {\r\n this.lookupOptions.emit();\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter\r\n * @param text : the string to filter to\r\n */\r\n protected doFilter(text?: string, e?: KeyboardEvent) {\r\n if (text) {\r\n this.filterText = text;\r\n }\r\n if (this.dialogData.canLookup) {\r\n if (!e || e.key === 'Enter') {\r\n this.lookup.emit({ items: this.dialogData.items, filter: this.filterText, owner: this });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter using filter options\r\n * @param filterOption : the current filter option\r\n */\r\n protected doFilterByOptions(filterOption: any) {\r\n if (this.dialogData.canLookup && this.dialogData.canFilter) {\r\n this.filter.emit({\r\n items: this.dialogData.items,\r\n filter: this.filterText,\r\n filterOption: filterOption,\r\n owner: this,\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter. This is accessible from public\r\n * @param params : the object with current parameters\r\n */\r\n doLookup(params: any) {\r\n if (this.dialogData.canLookup) {\r\n this.lookupParams = params;\r\n this.lookupParams.first = 0;\r\n this.lookup.emit({ items: this.dialogData.items, params: this.lookupParams, owner: this });\r\n }\r\n }\r\n\r\n /**\r\n * Update lookup paginatro\r\n * @param total : the new total items\r\n */\r\n protected updateLookupPaginator(total: number) {\r\n if (this.canPaginate()) {\r\n const paginator = this.paginator();\r\n if (paginator) {\r\n paginator.pageIndex = 0;\r\n paginator.length = total ?? 0;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n protected doLookupPage(e: PageEvent) {\r\n if (this.canPaginate() && this.dialogData.canLookup) {\r\n this.clearSelection();\r\n if (!this.lookupParams) {\r\n this.lookupParams = {first: 0, count: this.dialogData.pageSize ?? 0};\r\n }\r\n this.lookupParams.first = e.pageIndex * (this.dialogData.pageSize ?? 0);\r\n this.lookup.emit({ items: this.dialogData.items, params: this.lookupParams, owner: this });\r\n }\r\n }\r\n\r\n /**\r\n * Append\r\n */\r\n protected doAppend() {\r\n this.append.emit({ items: this.dialogData.items, owner: this } as SelectDialogAppend);\r\n }\r\n\r\n /**\r\n * Edit\r\n */\r\n protected doEdit() {\r\n const selection = this.selection();\r\n if (selection.selectedOptions.selected?.length > 0) {\r\n this.edit.emit({\r\n item: selection.selectedOptions.selected[0].value,\r\n items: this.dialogData.items,\r\n owner: this\r\n } as SelectDialogEdit);\r\n }\r\n }\r\n\r\n /**\r\n * View\r\n */\r\n protected doView() {\r\n const selection = this.selection();\r\n if (selection.selectedOptions.selected?.length > 0) {\r\n this.view.emit(selection.selectedOptions.selected[0].value);\r\n }\r\n }\r\n\r\n /**\r\n * Delete\r\n */\r\n protected doDelete() {\r\n let selectedItems: any = [];\r\n this.selection().selectedOptions.selected.forEach((element) => {\r\n selectedItems.push(element.value);\r\n });\r\n this.delete.emit({\r\n items: this.dialogData.items,\r\n selectedItems: selectedItems,\r\n } as SelectDialogDelete);\r\n this.canDelete.set(false);\r\n this.canEdit.set(false);\r\n\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\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)=\"doFilter()\" matInput\r\n title=\"{{dialogData.canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\r\n [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (dialogData.canLookupWithInlineOptions) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\r\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\r\n <mat-icon>tune</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (!dialogData.canLookupWithOptions && dialogData.canLookup && dialogData.lookupFields) {\r\n <div fxFlex>\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Come...</mat-label>\r\n <mat-select [(value)]=\"lookupField\">\r\n @for (field of dialogData.lookupFields; track $index) {\r\n <mat-option [value]=\"field.value\">\r\n {{field.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (dialogData.canLookupWithOptions) {\r\n <div fxFlex>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\r\n <mat-icon>search</mat-icon> {{this.dialogData.searchButtonLabel ?? 'Ricerca'}}\r\n </button>\r\n </div>\r\n }\r\n @if (dialogData.canLookup && dialogData.canFilter) {\r\n <div fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\">\r\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\r\n [matMenuTriggerFor]=\"menuFilter\">\r\n <mat-icon>filter_alt</mat-icon> {{filterOptionsInfo}} <mat-icon class=\"icon-menu-drop-down\">\r\n arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\r\n @for (f of filterOptions; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (f.groupName) {\r\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\r\n }\r\n @if (!f.groupName && !f.divider) {\r\n <button mat-menu-item (click)=\"doFilterByOptions(f)\" [attr.aria-label]=\"f.description\">\r\n @if (f.radio && f.value) {\r\n <span style=\"padding-left:40px\"></span>\r\n }\r\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\r\n </button>\r\n }\r\n\r\n }\r\n </mat-menu>\r\n </div>\r\n </div>\r\n }\r\n @if (canEdit() || canAppend() || canView() || canDelete()) {\r\n <div fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" fxLayoutGap=\"10px\">\r\n @if (canAppend()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\r\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\r\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\r\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\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\" fxLayoutGap=\"10px\" fxFill style=\"padding-top: 10px;\">\r\n @if (dialogData.multipleSelection) {\r\n <div fxFlex=\"72px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\r\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (dialogData.header) {\r\n <div class=\"text\" [innerHtml]=\"dialogData.header | safeHtml\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<mat-dialog-content style=\"padding-top:0\">\r\n <div fxLayout=\"column\" fxFill>\r\n @if (dialogData.canLookup && (!dialogData.items || dialogData.items.length == 0)) {\r\n <div class=\"text message\"><i>\r\n @if (!dialogData.emptyMessage) {\r\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\r\n esistente.\r\n @if (dialogData.maxItems > 0) {\r\n <span>Saranno mostrati al massimo {{dialogData.maxItems}} elementi.</span>\r\n }\r\n </span>\r\n } @else {\r\n <span [innerHtml]=\"dialogData.emptyMessage | safeHtml\"></span>\r\n }\r\n </i>\r\n </div>\r\n }\r\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\r\n [multiple]=\"dialogData.multipleSelection\">\r\n @for (item of (dialogData.items | search: (!dialogData.canLookup ? filterText : '')); track $index) {\r\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" checkboxPosition=\"before\">\r\n <div [innerHtml]=\"item.template | safeHtml\"></div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"accent\" style=\"padding-left:20px\">\r\n @if (selectionInfo()) {\r\n <span class=\"bold\">{{selectionInfo()}}</span>&nbsp; <span class=\"small\"> elementi selezionati</span>\r\n } @else {\r\n <span class=\"bold\">{{dialogData.total}}</span>&nbsp; <span class=\"small\">elementi</span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"center\">\r\n @if (canPaginate()) {\r\n <mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData.pageSize\" [showFirstLastButtons]=\"true\"\r\n (page)=\"doLookupPage($event)\" [length]=\"dialogData.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 { inject, Injectable } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { BusyTimer, ConfirmDialogOption, DeleteDialogConfirmMode, DialogService, InfoDialogComponent, ToastComponent } from '@arsedizioni/ars-utils/ui';\r\nimport { SendToDialogComponent } from '../dialogs/send-to/send-to-dialog.component';\r\nimport { SelectTreeDialogComponent } from '../dialogs/select-tree/select-tree-dialog.component';\r\nimport { PromptDialogData, SelectDialogData, SelectFileDialogData, SelectTreeDialogData } from '../definitions';\r\nimport { SelectPictureDialogComponent } from '../dialogs/select-picture/select-picture-dialog.component';\r\nimport { SelectFileDialogComponent } from '../dialogs/select-file/select-file-dialog.component';\r\nimport { PromptDialogComponent } from '../dialogs/prompt/prompt-dialog.component';\r\nimport { SelectDialogComponent } from '../dialogs/select/select-dialog.component';\r\nimport { MatSnackBarRef } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ApplicationDialogService {\r\n\r\n private dialogService = inject(DialogService);\r\n\r\n public readonly baseService: DialogService = this.dialogService;\r\n\r\n /**\r\n * Open a dialog\r\n * @param component : the component\r\n * @param config : the config\r\n * @returns: the dialog object\r\n */\r\n open(component: any, config: any): MatDialogRef<any> {\r\n return this.dialogService.open(component, config);\r\n }\r\n\r\n /**\r\n * Clear busy dialog\r\n */\r\n clearBusy() {\r\n this.dialogService.clearBusy();\r\n }\r\n\r\n /**\r\n * Update busy dialog\r\n * @param message : new message\r\n * @param progress : new progress\r\n * @param progressMode : new mode (default = 'indeterminate')\r\n * @param type: new type (default = 'bar')\r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n setBusy(\r\n message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n type: 'bar' | 'spinner' | 'wait' | 'hourglass' = 'bar',\r\n action?: Observable<Object>\r\n ): boolean {\r\n return this.dialogService.setBusy(message, progress, progressMode, type, action);\r\n }\r\n\r\n /**\r\n * Display a busy dialog\r\n * @param message : new message\r\n * @param progress : new progress\r\n * @param progressMode : new mode (default = 'indeterminate')\r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n busy(message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n action?: Observable<Object>): boolean {\r\n return this.dialogService.setBusy(message, progress, progressMode, 'bar', action);\r\n }\r\n\r\n /**\r\n * Display a busy timer\r\n * @param message : new message\r\n * @param due: the number of milliseconds. Default is 100\r\n * @returns the busy timer object\r\n */\r\n busyTimer(message: string = \"Operazione in corso...\", due: number = 100): BusyTimer {\r\n return this.dialogService.busyTimer(message, due);\r\n }\r\n\r\n /**\r\n * Display a busy indeterminate dialog as hourglass\r\n * @param message : new message\r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n busyHourglass(message: string,\r\n action?: Observable<Object>): boolean {\r\n return this.setBusy(message, undefined, undefined, 'hourglass', action);\r\n }\r\n\r\n /**\r\n * Display a busy spinner dialog\r\n * @param message : new message\r\n * @param progress : new progress\r\n * @param progressMode : new mode (default = 'indeterminate')\r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n busySpinner(message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n action?: Observable<Object>): boolean {\r\n return this.dialogService.setBusy(message, progress, progressMode, 'spinner', action);\r\n }\r\n\r\n /**\r\n * Display a wait spinner \r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n wait(\r\n action?: Observable<Object>): boolean {\r\n return this.dialogService.setBusy(undefined, undefined, undefined, 'wait', action);\r\n }\r\n\r\n\r\n /**\r\n * Display an information dialog\r\n * @param message : message\r\n * @param title : dialog title\r\n * @param okCaption : ok button caption\r\n * @param width: the preferred width\r\n * @param dismissAfter: if specified, the dialog will be closed after dismissAfter milliseconds\r\n * @param details: if specified, the details info\r\n * @param onNavigate: the callback to use for navigation. Default is null\r\n */\r\n info(\r\n message: string,\r\n title: string = 'Informazioni',\r\n okCaption: string = 'Ok',\r\n width: number = 500,\r\n dismissAfter?: number,\r\n details?: string,\r\n onNavigate?: (url: string) => void\r\n ): MatDialogRef<InfoDialogComponent> {\r\n return this.dialogService.info(\r\n message,\r\n title,\r\n okCaption,\r\n width,\r\n dismissAfter,\r\n details,\r\n onNavigate\r\n );\r\n }\r\n\r\n /**\r\n * Display an error dialog\r\n * @param message : message\r\n * @param log : the error log\r\n * @param title : dialog title\r\n * @param okCaption : ok button caption\r\n * @param width: the preferred width\r\n * @param dismissAfter: if specified, the dialog will be closed after dismissAfter milliseconds \r\n */\r\n error(\r\n message: string,\r\n log?: string,\r\n title: string = 'Errore',\r\n okCaption: string = 'Ok',\r\n width: number = 500,\r\n dismissAfter?: number,\r\n ): MatDialogRef<InfoDialogComponent> {\r\n return this.dialogService.error(\r\n message,\r\n log,\r\n title,\r\n okCaption,\r\n width,\r\n dismissAfter\r\n );\r\n }\r\n\r\n /**\r\n * Display toast\r\n * @param message : message to display\r\n * @param duration : duration in msec\r\n * @param icon : the mat-icon to display\r\n * @param actionCaption action button caption\r\n */\r\n toast(\r\n message: string,\r\n duration: number = 2000,\r\n icon: string = 'check',\r\n actionCaption?: string\r\n ): MatSnackBarRef<ToastComponent> {\r\n return this.dialogService.toast(\r\n message,\r\n duration,\r\n icon,\r\n actionCaption);\r\n }\r\n\r\n /**\r\n * Display a confirm dialog\r\n * @param message : html message\r\n * @param title : dialog title\r\n * @param okCaption : ok button caption\r\n * @param cancelCaption : cancel button caption\r\n * @param otherCaption : other button caption\r\n * @param options: check box options\r\n * @param width: the preferred width\r\n */\r\n confirm(\r\n message: string,\r\n title: string = 'Conferma',\r\n okCaption: string = 'Si',\r\n cancelCaption: string = 'No',\r\n otherCaption?: string,\r\n options?: ConfirmDialogOption[],\r\n width: number = 500,\r\n details?: string\r\n ) {\r\n return this.dialogService.confirm(\r\n message,\r\n title,\r\n okCaption,\r\n cancelCaption,\r\n otherCaption,\r\n options,\r\n width,\r\n details\r\n )\r\n }\r\n\r\n /**\r\n * Display a delete dialog\r\n * @param message : html message\r\n * @param title : dialog title\r\n * @param confirmMode : the confirm mode\r\n * @param okCaption : ok button caption\r\n * @param cancelCaption : cancel button caption\r\n * @param otherCaption : other button caption\r\n * @param options: check box options\r\n * @param width: the preferred width\r\n */\r\n delete(\r\n message: string,\r\n title: string = 'Attenzione',\r\n confirmMode: DeleteDialogConfirmMode = DeleteDialogConfirmMode.None,\r\n okCaption: string = 'Si',\r\n cancelCaption: string = 'No',\r\n width: number = 500,\r\n details?: string\r\n ) {\r\n return this.dialogService.delete(\r\n message,\r\n title,\r\n confirmMode,\r\n okCaption,\r\n cancelCaption,\r\n width,\r\n details\r\n )\r\n }\r\n\r\n /**\r\n* Sent to\r\n* @param title : title\r\n* @param allowPopulate: true if the populate fuction is allowed\r\n* @param count : elements to send or null\r\n* @param options : checkable option list\r\n* @param width: the preferred width\r\n*/\r\n sendTo(\r\n title: string = 'Invia per email',\r\n allowPopulate: boolean = false,\r\n count?: number,\r\n options?: any,\r\n width: number = 500\r\n ): MatDialogRef<SendToDialogComponent, any> {\r\n return this.dialogService.open(SendToDialogComponent, {\r\n ariaLabel: 'invia per email',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n count: count,\r\n appearance: 'fill',\r\n allowPopulate: allowPopulate,\r\n options: options\r\n },\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Select a tree node\r\n * @param nodes : tree nodes\r\n * @param title : title\r\n * @param description : description\r\n * @param initialFilter : initial filter\r\n * @param width: the preferred width\r\n * @param okCaption : ok catpion button\r\n */\r\n selectTree(\r\n nodes: any,\r\n title: string = 'Seleziona un elemento',\r\n description?: string,\r\n initialFilter?: string,\r\n width: number = 800,\r\n okCaption: string = 'Ok',\r\n canAppend: boolean = false\r\n ): MatDialogRef<SelectTreeDialogComponent, any> {\r\n return this.dialogService.open(SelectTreeDialogComponent, {\r\n ariaLabel: 'seleziona un elemento',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n description: description,\r\n initialFilter: initialFilter,\r\n okCaption: okCaption,\r\n nodes: nodes,\r\n appearance: 'outline',\r\n canAppend: canAppend\r\n } as SelectTreeDialogData,\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n /**\r\n* Display a select a picture dialog\r\n* @param title : dialog title\r\n* @param descritpion : brief description\r\n* @param okCaption : ok button caption\r\n* @param options : checkable option list\r\n* @param width: the preferred width\r\n* @param maxSize: the maximum file size accepted in mb\r\n* @param maxPictureWidth: the maximum picture width accepted\r\n* @param maxPictureHeight: the maximum picture height accepted\r\n*/\r\n selectPicture(\r\n title: string = 'Seleziona immagine',\r\n descritpion?: string,\r\n okCaption: string = 'Ok',\r\n options?: any,\r\n width: number = 600,\r\n maxSize?: number,\r\n maxPictureWidth?: number,\r\n maxPictureHeight?: number\r\n ): MatDialogRef<SelectPictureDialogComponent, any> {\r\n return this.dialogService.open(SelectPictureDialogComponent, {\r\n ariaLabel: 'seleziona immagine',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n description: descritpion,\r\n okCaption: okCaption,\r\n options: options,\r\n appearance: 'fill',\r\n maxSize: maxSize,\r\n maxWidth: maxPictureWidth,\r\n maxHeight: maxPictureHeight\r\n } as SelectFileDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Display a select a file dialog\r\n * @param title : dialog title\r\n * @param descritpion : brief description\r\n * @param okCaption : ok button caption\r\n * @param helpLink : help link url\r\n * @param helpCaption : help link caption\r\n * @param options : checkable option list\r\n * @param width: the preferred width\r\n * @param maxSize: the maximum file size accepted in mb\r\n * @param accept: the accepted file extensions\r\n */\r\n selectFile(\r\n title: string = 'Seleziona file',\r\n descritpion?: string,\r\n okCaption: string = 'Ok',\r\n helpLink?: string,\r\n helpCaption?: string,\r\n options?: any,\r\n width: number = 600,\r\n maxSize?: number,\r\n accept?: string\r\n ): MatDialogRef<SelectFileDialogComponent, any> {\r\n return this.dialogService.open(SelectFileDialogComponent, {\r\n ariaLabel: 'seleziona file',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n description: descritpion,\r\n okCaption: okCaption,\r\n helpLink: helpLink,\r\n helpCaption: helpCaption,\r\n options: options,\r\n appearance: 'fill',\r\n maxSize: maxSize,\r\n accept: accept\r\n } as SelectFileDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Display a multipourpose selection and CRUD dialog\r\n * @param data : the dialog configuration model\r\n * @param disableClose : dialog disable close param\r\n * @param closeOnNavigation : dialog close on navigation param\r\n */\r\n select(data: SelectDialogData,\r\n disableClose: boolean = true,\r\n closeOnNavigation: boolean = true\r\n ): MatDialogRef<SelectDialogComponent, any> {\r\n if (!data.appearance) data.appearance = 'outline';\r\n return this.dialogService.open(SelectDialogComponent, {\r\n ariaLabel: 'seleziona',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: data,\r\n closeOnNavigation: closeOnNavigation,\r\n disableClose: disableClose,\r\n minWidth: '375px',\r\n maxWidth: (data.width ? data.width : 800) + 'px',\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Prompt user to insert a value\r\n * @param title : the dialog title\r\n * @param type : the input type: 0 = text, 1 = date, 2 = number\r\n * @param description : the placeholder description\r\n * @param initialValue : the initial value\r\n * @param okCaption : ok button caption\r\n * @param cancelCaption : cancel button caption\r\n * @param options : checkable option list\r\n * @param width: the preferred width\r\n * @param required: ture if the input is required\r\n */\r\n prompt(\r\n title: string,\r\n type: number = 0,\r\n description: string,\r\n initialValue?: any,\r\n okCaption: string = 'Ok',\r\n cancelCaption: string = 'Annulla',\r\n options?: any,\r\n width: number = 500,\r\n required?: boolean,\r\n ): MatDialogRef<PromptDialogComponent> {\r\n return this.dialogService.open(PromptDialogComponent, {\r\n ariaLabel: 'inserisci valore',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n type: type,\r\n description: description,\r\n initialValue: initialValue,\r\n okCaption: okCaption,\r\n cancelCaption: cancelCaption,\r\n appearance: 'fill',\r\n required: required,\r\n options: options\r\n } as PromptDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n}","import { NgModule } from \"@angular/core\";\r\nimport { MatPaginatorIntl } from '@angular/material/paginator';\r\nimport { PaginatorIntl } from '@arsedizioni/ars-utils/ui';\r\nimport { ResizeTableColumnDirective } from './directives/resize-table-column.directive';\r\n\r\n@NgModule({\r\n imports: [\r\n ResizeTableColumnDirective,\r\n ],\r\n exports: [\r\n ResizeTableColumnDirective,\r\n ],\r\n providers: [\r\n { provide: MatPaginatorIntl, useClass: PaginatorIntl }\r\n ]\r\n})\r\nexport class ArsUIApplicationModule { }\r\n\r\nexport * from \"./definitions\";\r\nexport * from \"./filters\";\r\nexport * from \"./services/applicationDialog.service\";\r\n\r\n","import { ChangeDetectionStrategy, Component, OnInit, inject, output, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { DateInterval, DateIntervalChangeDirective, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDateDialogResult, PromptDialogData, PromptDialogType } from '../../definitions';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-date-dialog.component.html',\r\n styleUrls: ['./prompt-date-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, DateIntervalChangeDirective, MatButtonModule, MatIconModule,\r\n MatCheckboxModule, MatDialogActions, MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class PromptDateDialogComponent implements OnInit {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptDateDialogResult>();\r\n private dialogService = inject(DialogService);\r\n protected dialogData: PromptDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'fill', title: 'Inserisci dato', type: PromptDialogType.Default }\r\n protected value?: any;\r\n\r\n\r\n ngOnInit(): void {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Inserisci dato';\r\n }\r\n if (!this.dialogData.type) {\r\n this.dialogData.type = PromptDialogType.Default;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'Ok';\r\n }\r\n if (!this.dialogData.cancelCaption) {\r\n this.dialogData.cancelCaption = 'Annulla';\r\n }\r\n if (this.dialogData.type !== PromptDialogType.Date && this.dialogData.type !== PromptDialogType.DateInterval) {\r\n this.dialogData.type = PromptDialogType.Date;\r\n }\r\n if (this.dialogData.type === PromptDialogType.DateInterval) {\r\n if (this.dialogData.initialValue) {\r\n this.value = this.dialogData.initialValue as DateInterval;\r\n } else {\r\n this.value = new DateInterval();\r\n }\r\n } else {\r\n if (this.dialogData.initialValue) {\r\n this.value = this.dialogData.initialValue as Date;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Done\r\n */\r\n protected ok() {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error(\"Ci sono degli errori da correggere.\");\r\n return;\r\n }\r\n this.done.emit({ \r\n value: this.dialogData.type === PromptDialogType.Date \r\n ? this.value as Date\r\n : this.value as DateInterval,\r\n type: this.dialogData.type,\r\n options: this.dialogData.options });\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (dialogData.type === 1) {\r\n <mat-form-field [appearance]=\"dialogData.appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData.description}}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [(ngModel)]=\"value\" name=\"_value\" #_value=\"ngModel\"\r\n [required]=\"dialogData.required\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n @if (_value.invalid) {\r\n <mat-error>Data non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData.type === 4) {\r\n <mat-form-field [appearance]=\"dialogData.appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData.description}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker\" min=\"1750-01-01\" [required]=\"dialogData.required\">\r\n <input matStartDate [(ngModel)]=\"value.from\" [dateIntervalChange]=\"value\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"value.to\" [dateIntervalChange]=\"value\" [end]=\"true\" #rangeTo1=\"ngModel\"\r\n name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (value.from || value.to) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"value.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n </div>\r\n @if (dialogData.options) {\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <br>\r\n\r\n }\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >{{dialogData.cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, OnInit, inject, output, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SafeHtmlPipe, SystemUtils, TimeValidatorDirective } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDialogResult, PromptDialogType, PromptTimeDialogData } from '../../definitions';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-time-dialog.component.html',\r\n styleUrls: ['./prompt-time-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule,\r\n MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule,\r\n MatDialogActions, MatDialogClose, TimeValidatorDirective,SafeHtmlPipe]\r\n})\r\nexport class PromptTimeDialogComponent implements OnInit {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptDialogResult>();\r\n private dialogService = inject(DialogService);\r\n\r\n protected dialogData: PromptTimeDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'fill', title: 'Inserisci dato', type: PromptDialogType.Default }\r\n\r\n protected value?: any;\r\n\r\n\r\n ngOnInit(): void {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Inserisci dato';\r\n }\r\n if (!this.dialogData.type) {\r\n this.dialogData.type = PromptDialogType.Default;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'Ok';\r\n }\r\n if (!this.dialogData.cancelCaption) {\r\n this.dialogData.cancelCaption = 'Annulla';\r\n }\r\n if (this.dialogData.type !== PromptDialogType.Time) {\r\n this.dialogData.type = PromptDialogType.Time;\r\n }\r\n if (this.dialogData.initialValue) {\r\n this.value = this.dialogData.initialValue;\r\n }\r\n }\r\n\r\n /**\r\n * Done\r\n */\r\n ok() {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error(\"Ci sono degli errori da correggere.\");\r\n return;\r\n }\r\n this.done.emit({ value: this.value, options: this.dialogData.options });\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\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\" [required]=\"dialogData.required\"\r\n time [slots]=\"dialogData.slots\">\r\n @if (_value.invalid) {\r\n <mat-error>Ora non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n @if(this.dialogData.slots) {\r\n <div class=\"small bold uppercase\">Orari disponibili:</div>\r\n <ul class=\"small\">\r\n @for (s of this.dialogData.slots.replaceAll('-', ' - ').split('|'); track $index) {\r\n <li>{{s}}</li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData.options) {\r\n <div>\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <br>\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" \r\n (click)=\"ok()\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" \r\n >{{dialogData.cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, OnInit, inject, output, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService, OtpInputComponent } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDialogData, PromptDialogType, PromptOtpDialogResult } from '../../definitions';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-otp-dialog.component.html',\r\n styleUrls: ['./prompt-otp-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatButtonModule, MatIconModule,\r\n MatDialogActions, MatDialogClose, SafeHtmlPipe, OtpInputComponent]\r\n})\r\nexport class PromptOtpDialogComponent implements OnInit {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptOtpDialogResult>();\r\n private dialogService = inject(DialogService);\r\n protected dialogData: PromptDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'fill', title: 'Conferma la tua identità', type: PromptDialogType.Default }\r\n protected value?: any;\r\n\r\n\r\n ngOnInit(): void {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Conferma la tua identità';\r\n }\r\n if (!this.dialogData.type) {\r\n this.dialogData.type = PromptDialogType.Default;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'Ok';\r\n }\r\n if (!this.dialogData.cancelCaption) {\r\n this.dialogData.cancelCaption = 'Annulla';\r\n }\r\n }\r\n\r\n /**\r\n * Done\r\n */\r\n protected ok() {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error(\"Ci sono degli errori da correggere.\");\r\n return;\r\n }\r\n this.done.emit({value: this.value});\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content>\r\n @if (dialogData.description) {\r\n <div [innerHtml]=\"dialogData.description | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <otp-input name=\"otp\" [(ngModel)]=\"value\" required></otp-input> \r\n </div>\r\n <br>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >{{dialogData.cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DoCheck, ElementRef, HostBinding, Input, OnChanges, OnDestroy, OnInit, Optional, Renderer2, Self, SimpleChanges, ViewChild, inject, input, output } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\r\nimport { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FileInfo, FileSizeValidatorDirective, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { Subject } from 'rxjs';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { UIService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Component({\r\n selector: 'file-input',\r\n templateUrl: './file-input.component.html',\r\n styleUrls: ['./file-input.component.scss'],\r\n providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatFormFieldModule, MatInputModule, FormsModule, FileSizeValidatorDirective, MatButtonModule,\r\n MatIconModule, MatTooltipModule]\r\n})\r\nexport class FileInputComponent\r\n implements\r\n OnInit,\r\n OnDestroy,\r\n DoCheck,\r\n OnChanges,\r\n MatFormFieldControl<FileInfo>,\r\n ControlValueAccessor {\r\n\r\n @ViewChild('__file') __file!: ElementRef;\r\n\r\n private renderer = inject(Renderer2);\r\n private uiService = inject(UIService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n\r\n // Initialize\r\n static nextId = 0;\r\n readonly stateChanges = new Subject<void>();\r\n private previousNativeValue: any;\r\n controlType: string = 'file-input';\r\n focused = false;\r\n protected fileSize: number;\r\n\r\n protected canCapture: boolean = false;\r\n\r\n private _value: FileInfo = new FileInfo();\r\n set value(value: FileInfo) {\r\n this._value = value;\r\n this.propagateChange(this._value);\r\n this.stateChanges.next();\r\n this.changed.emit(this._value);\r\n }\r\n get value() {\r\n return this._value;\r\n }\r\n get size() {\r\n return this._value && this._value.file.size;\r\n }\r\n\r\n private _required: boolean = false;\r\n @Input()\r\n get required() {\r\n return this._required;\r\n }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _disabled: boolean = false;\r\n @Input()\r\n get disabled() {\r\n if (this.ngControl && this.ngControl.disabled != null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n private _placeholder: string = '';\r\n @Input()\r\n get placeholder() {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input() fileName?: string;\r\n readonly maxSizeMb = input<number>(5);\r\n readonly minSizeMb = input<number>(0);\r\n readonly isNew = input<boolean>(false);\r\n readonly canPreview = input<boolean>(false);\r\n readonly appearance = input<'fill' | 'outline' | undefined>(this.uiService.appearance);\r\n readonly accept = input<string>();\r\n get empty(): boolean {\r\n return !this._value || !this._value.file;\r\n }\r\n get errorState() {\r\n return this.ngControl.errors != null && this.ngControl.touched;\r\n }\r\n @HostBinding() id = `${this.controlType}-${FileInputComponent.nextId++}`;\r\n @HostBinding('class.floating')\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n @HostBinding('attr.aria-describedBy') describedBy = '';\r\n\r\n readonly changed = output<FileInfo>();\r\n readonly download = output();\r\n readonly preview = output();\r\n\r\n private propagateChange: (_: any) => void = (_: any) => { };\r\n private propagateTouched: () => void = () => { };\r\n\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n async ngOnInit() {\r\n await this.setupDevices();\r\n }\r\n\r\n /**\r\n * Setup capture devices \r\n */\r\n async setupDevices() {\r\n this.canCapture = false;\r\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({\r\n video: true\r\n });\r\n if (stream) {\r\n this.canCapture = true;\r\n }\r\n } catch { }\r\n }\r\n if (!this.placeholder || this.placeholder === 'Seleziona file') {\r\n this.placeholder =\r\n this.canCapture\r\n ? \"Seleziona file o acquisisci con fotocamera\"\r\n : \"Seleziona file\"\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngDoCheck() {\r\n this.updateInputDirtyCheck();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.currentValue != changes.previousValue) {\r\n this.propagateChange(changes.currentValue);\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.propagateTouched = fn;\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n this.renderer.setProperty(elem, 'disabled', isDisabled);\r\n }\r\n }\r\n\r\n onContainerClick() {\r\n if (!this.focused) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n elem.focus();\r\n this.propagateTouched();\r\n }\r\n }\r\n }\r\n\r\n protected updateInputDirtyCheck() {\r\n const newValue = this._value;\r\n if (this.previousNativeValue !== newValue) {\r\n this.previousNativeValue = newValue;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n /**\r\n * Select a file\r\n * @param e : event\r\n */\r\n protected selectFile(e: any) {\r\n if (e.target.files) {\r\n const f = e.target.files[0];\r\n const fileInfo = new FileInfo();\r\n const fileSize = f.size / 1048576;\r\n fileInfo.file = f;\r\n fileInfo.valid =\r\n (!this.maxSizeMb || fileSize <= this.maxSizeMb()) &&\r\n (!this.minSizeMb || fileSize >= this.minSizeMb());\r\n this.writeValue(fileInfo);\r\n this.fileName = f.name;\r\n this.fileSize = Math.round(fileSize);\r\n \r\n }\r\n }\r\n\r\n /**\r\n * Check if a file has been selected\r\n */\r\n protected hasFile(): boolean {\r\n return this._value && this._value.file;\r\n }\r\n\r\n /**\r\n * Clear file\r\n */\r\n protected clearFile() {\r\n if (this.hasFile()) {\r\n this.fileName = undefined;\r\n this.fileSize = 0;\r\n let fi = new FileInfo();\r\n fi.file = undefined;\r\n fi.valid = !this.required\r\n this.writeValue(fi);\r\n this.__file.nativeElement.value = '';\r\n }\r\n }\r\n\r\n /**\r\n * Download\r\n */\r\n protected downloadFile() {\r\n if (!this.isNew()) this.download.emit();\r\n }\r\n\r\n /**\r\n * Preview\r\n */\r\n protected previewFile() {\r\n if (!this.isNew() && this.canPreview()) this.preview.emit();\r\n }\r\n}\r\n","<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept()\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\" [disabled]=\"disabled\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\" [disabled]=\"disabled\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\" [disabled]=\"disabled\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\" [disabled]=\"disabled\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n }\r\n @if (hasFile() && fileSize > 0) {\r\n <mat-hint align=\"start\">{{fileSize}} MB</mat-hint>\r\n }\r\n @if (hasFile() && fileSize == 0) {\r\n <mat-hint align=\"start\">\r\n &gt; 1 MB</mat-hint>\r\n } @if (maxSizeMb()) {\r\n <mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n }\r\n @if (_fileName.invalid && !hasFile()) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n @if (_fileName.invalid && hasFile()) {\r\n <mat-error>Dimensione non consentita.</mat-error>\r\n }\r\n</mat-form-field>","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Component, OnInit, OnDestroy, ChangeDetectionStrategy, inject, signal, ElementRef, viewChild } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { SafeUrlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\nexport interface FilePreviewDialogData {\r\n url?: string;\r\n embed?: boolean;\r\n authToken?: string;\r\n}\r\n\r\n\r\n@Component({\r\n templateUrl: './file-preview.component.html',\r\n styleUrls: ['./file-preview.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogContent, FlexLayoutModule, MatDialogActions, MatButtonModule, MatTooltipModule,\r\n MatDialogClose, SafeUrlPipe]\r\n})\r\nexport class FilePreviewComponent implements OnInit, OnDestroy {\r\n readonly iframe = viewChild<ElementRef>('iframe');\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private httpClient = inject(HttpClient);\r\n private dialogService = inject(DialogService);\r\n protected dialogData: FilePreviewDialogData = inject(MAT_DIALOG_DATA);\r\n protected url = signal(null);\r\n\r\n ngOnInit() {\r\n if (this.dialogData) {\r\n if (!this.dialogData.embed) {\r\n this.dialogService.setBusy(\"Download in corso...\");\r\n this.httpClient.get(\r\n this.dialogData.url,\r\n {\r\n headers:\r\n this.dialogData.authToken\r\n ? new HttpHeaders().set(\"Authorization\", this.dialogData.authToken)\r\n : new HttpHeaders(),\r\n responseType: 'blob'\r\n }\r\n ).subscribe({\r\n next: (res: any) => {\r\n this.url.set(URL.createObjectURL(res));\r\n this.dialogService.clearBusy();\r\n },\r\n error: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n } else {\r\n this.url.set('https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(this.dialogData.url));\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n this.url.set(null);\r\n }\r\n\r\n /**\r\n * Load completed\r\n */\r\n protected loaded() {\r\n const iframe = this.iframe()?.nativeElement;\r\n if (!iframe) { return; }\r\n \r\n try {\r\n iframe.contentWindow?.scrollTo(0, 0);\r\n \r\n // Resize and center single image\r\n if (!this.dialogData?.embed && iframe.contentDocument) { \r\n const images = iframe.contentDocument.querySelectorAll('img') || [];\r\n if (images.length === 1) { \r\n Object.assign(images[0].style, {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n maxWidth: images[0].style.maxWidth || '100%',\r\n maxHeight: images[0].style.maxHeight || '100%'\r\n });\r\n const iframeBody = iframe.contentDocument.body;\r\n if (iframeBody && !iframeBody.style.height) {\r\n iframeBody.style.height = '100%';\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error('Impossibile accedere al contenuto dell\\'iframe:', e);\r\n }\r\n }\r\n\r\n /**\r\n * Download manually\r\n */\r\n protected download() {\r\n window.open(this.url(), '_blank');\r\n }\r\n\r\n /**\r\n * Troubles with pdf?\r\n */\r\n protected troubles() {\r\n this.dialogService.info(\r\n \"<p>Se non riesci a visualizzare l'anteprima dei file PDF probabilmente devi abilitare un'impostazione del tuo browser.</p>\" +\r\n \"<b>Per Google Chrome</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'><i>impostazioni > privacy e sicurezza > impostazioni sito > documenti PDF</i></p>\" +\r\n \"<b>Per Microsoft Chrome</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'><i>impostazioni > cookie e autorizzazioni sito > documenti PDF</i></p>\" +\r\n \"<b>Per Mozilla Firefox</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'><i>impostazioni > generale > applicazioni</i></p>\" +\r\n \"<b>Altri browser</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'>Fate riferimento alla documentazione specifica del vostro browser.</p>\",\r\n \"Problemi con lee anteprime dei file PDF?\"\r\n )\r\n }\r\n}\r\n\r\n\r\n\r\n","<mat-dialog-content class=\"file-preview\" id=\"file-preview-scrollable\">\r\n <div class=\"content\">\r\n @if (!url()) {\r\n <div class=\"loading\">Caricamento in corso...</div>\r\n } @else {\r\n <iframe class=\"iframe\" #iframe (load)=\"loaded()\" [src]=\"url() | safeUrl\"></iframe>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions id=\"file-preview-fixed\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <button mat-stroked-button (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-stroked-button (click)=\"download()\">Scarica</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, effect, inject, input, signal, output } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatDividerModule } from \"@angular/material/divider\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatMenuModule } from \"@angular/material/menu\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { CurrentFilter, CurrentFilterChanged, FilterGroup, FilterItem, Filters } from '../../filters';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\n\r\n@Component({\r\n selector: \"filter-bar\",\r\n templateUrl: \"./filter-bar.component.html\",\r\n styleUrls: [\"./filter-bar.component.scss\"],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule,\r\n MatTooltipModule, MatButtonModule, MatIconModule, MatMenuModule, MatDividerModule, SafeHtmlPipe]\r\n})\r\nexport class FilterBarComponent implements OnInit {\r\n readonly changed = output<CurrentFilterChanged>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n readonly filters = input<any>();\r\n readonly canFilterByFlt1 = signal<boolean>(false);\r\n readonly canFilterByFlt2 = signal<boolean>(false);\r\n readonly canFilterByFlt3 = signal<boolean>(false);\r\n readonly canFilterByFlt4 = signal<boolean>(false);\r\n readonly canFilterByFlt5 = signal<boolean>(false);\r\n readonly canFilterByText = input<boolean>(false);\r\n readonly canFilterByText2 = input<boolean>(false);\r\n readonly canFilterByText3 = input<boolean>(false);\r\n readonly initialText = input<string>(null);\r\n readonly initialText2 = input<string>(null);\r\n readonly initialText3 = input<string>(null);\r\n readonly textName = input<string>(\"testo\");\r\n readonly text2Name = input<string>(\"...\");\r\n readonly text3Name = input<string>(\"...\");\r\n readonly textLength = input<string>();\r\n readonly text2Length = input<string>();\r\n readonly text3Length = input<string>();\r\n readonly showTextSearchButton = input<boolean>(false);\r\n readonly appearance = input<'fill' | 'outline' | undefined>('outline');\r\n\r\n\r\n protected text?: string;\r\n protected text2?: string;\r\n protected text3?: string;\r\n protected flt1: FilterGroup;\r\n protected flt2: FilterGroup;\r\n protected flt3: FilterGroup;\r\n protected flt4: FilterGroup;\r\n protected flt5: FilterGroup;\r\n\r\n public readonly currentFilter: CurrentFilter = new CurrentFilter();\r\n\r\n constructor() {\r\n effect(() => {\r\n this.text = this.initialText();\r\n this.text2 = this.initialText2();\r\n this.text3 = this.initialText3();\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeFilters();\r\n }\r\n\r\n\r\n /**\r\n * Initialize filters\r\n */\r\n initializeFilters() {\r\n if (!this.filters()) return;\r\n this.filters()?.forEach((n: any) => {\r\n switch (n.group) {\r\n case Filters.FLT_1:\r\n this.flt1 = n;\r\n this.canFilterByFlt1.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n case Filters.FLT_2:\r\n this.flt2 = n;\r\n this.canFilterByFlt2.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n case Filters.FLT_3:\r\n this.flt3 = n;\r\n this.canFilterByFlt3.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n case Filters.FLT_4:\r\n this.flt4 = n;\r\n this.canFilterByFlt4.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n case Filters.FLT_5:\r\n this.flt5 = n;\r\n this.canFilterByFlt5.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Apply a filter\r\n * @param filter : the filter to apply\r\n */\r\n applyFilter(filter: FilterItem) {\r\n let changed = false;\r\n switch (filter.group) {\r\n case Filters.FLT_1:\r\n changed = this.currentFilter.flt1 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt1 = filter.value;\r\n this.currentFilter.flt1Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_2:\r\n changed = this.currentFilter.flt2 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt2 = filter.value;\r\n this.currentFilter.flt2Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_3:\r\n changed = this.currentFilter.flt3 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt3 = filter.value;\r\n this.currentFilter.flt3Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_4:\r\n changed = this.currentFilter.flt4 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt4 = filter.value;\r\n this.currentFilter.flt4Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_5:\r\n changed = this.currentFilter.flt5 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt5 = filter.value;\r\n this.currentFilter.flt5Name = filter.titleSelected;\r\n }\r\n break;\r\n }\r\n\r\n if (changed) {\r\n this.changed.emit({ filter: this.currentFilter, group: filter.group });\r\n }\r\n\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Apply a filter action\r\n * @param filter : the filter to apply\r\n * @param clear : true if the filter mus be removed\r\n * @param event : the click event\r\n */\r\n applyFilterAction(group: number, clear: boolean = false) {\r\n if (!clear) {\r\n const g = this.getFilterGroup(group);\r\n if (g.action) {\r\n g.action(this, g, event);\r\n }\r\n } else {\r\n this.clearFilter(group);\r\n }\r\n \r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Apply text filter\r\n */\r\n applyTextFilter() {\r\n this.currentFilter.text = this.text;\r\n this.currentFilter.text2 = this.text2;\r\n this.currentFilter.text3 = this.text3;\r\n this.changed.emit({\r\n filter: this.currentFilter,\r\n group: Filters.FLT_TEXT\r\n });\r\n \r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Clear a filter\r\n * @param group : the filter group\r\n */\r\n clearFilter(group: number) {\r\n let changed = false;\r\n switch (group) {\r\n case Filters.FLT_1:\r\n changed = this.currentFilter.flt1 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt1 = undefined;\r\n this.currentFilter.flt1Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_2:\r\n changed = this.currentFilter.flt2 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt2 = undefined;\r\n this.currentFilter.flt2Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_3:\r\n changed = this.currentFilter.flt3 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt3 = undefined;\r\n this.currentFilter.flt3Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_4:\r\n changed = this.currentFilter.flt4 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt4 = undefined;\r\n this.currentFilter.flt4Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_5:\r\n changed = this.currentFilter.flt5 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt5 = undefined;\r\n this.currentFilter.flt5Name = undefined;\r\n }\r\n break;\r\n }\r\n if (changed) {\r\n this.changed.emit({ filter: this.currentFilter, group: group });\r\n }\r\n }\r\n\r\n /**\r\n * Clear all filters\r\n */\r\n clearAllFilters() {\r\n this.currentFilter.flt1 = undefined;\r\n this.currentFilter.flt1Name = undefined;\r\n this.currentFilter.flt2 = undefined;\r\n this.currentFilter.flt2Name = undefined;\r\n this.currentFilter.flt3 = undefined;\r\n this.currentFilter.flt3Name = undefined;\r\n this.currentFilter.flt4 = undefined;\r\n this.currentFilter.flt4Name = undefined;\r\n this.currentFilter.flt5 = undefined;\r\n this.currentFilter.flt5Name = undefined;\r\n this.currentFilter.text = undefined;\r\n this.currentFilter.text2 = undefined;\r\n this.currentFilter.text3 = undefined;\r\n this.text = undefined;\r\n this.text2 = undefined;\r\n this.text3 = undefined;\r\n this.changed.emit({ filter: this.currentFilter, group: -1 });\r\n }\r\n\r\n /**\r\n * Check if can clear all filters button cab be showed\r\n */\r\n canClearAllFilters(): boolean {\r\n let count = 0;\r\n if (this.canFilterByText) count++;\r\n if (this.canFilterByText2) count++;\r\n if (this.canFilterByText3) count++;\r\n if (this.canFilterByFlt1) count++;\r\n if (this.canFilterByFlt2) count++;\r\n if (this.canFilterByFlt3) count++;\r\n if (this.canFilterByFlt4) count++;\r\n if (this.canFilterByFlt5) count++;\r\n return count > 1;\r\n }\r\n\r\n /**\r\n * Get the filter group\r\n * @param id : the filter id\r\n */\r\n private getFilterGroup(id: number): FilterGroup {\r\n return this.filters()?.find((n: any) => n.group === id);\r\n }\r\n\r\n /**\r\n * Update filter bar using current search params\r\n * @param params : search params\r\n */\r\n syncFilter() {\r\n let g = this.getFilterGroup(Filters.FLT_1);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt1Name = undefined;\r\n if (this.currentFilter.flt1) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt1);\r\n if (gi) this.currentFilter.flt1Name = gi.titleSelected;\r\n else this.currentFilter.flt1 = undefined;\r\n }\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_2);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt2Name = undefined;\r\n if (this.currentFilter.flt2) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt2);\r\n if (gi) this.currentFilter.flt2Name = gi.titleSelected;\r\n else this.currentFilter.flt2 = undefined;\r\n }\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_3);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt3Name = undefined;\r\n if (this.currentFilter.flt3) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt3);\r\n if (gi) this.currentFilter.flt3Name = gi.titleSelected;\r\n else this.currentFilter.flt3 = undefined;\r\n }\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_4);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt4Name = undefined;\r\n if (this.currentFilter.flt4) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt4);\r\n if (gi) this.currentFilter.flt4Name = gi.titleSelected;\r\n else this.currentFilter.flt4 = undefined;\r\n }\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_5);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt5Name = undefined;\r\n if (this.currentFilter.flt5) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt5);\r\n if (gi) this.currentFilter.flt5Name = gi.titleSelected;\r\n else this.currentFilter.flt5 = undefined;\r\n }\r\n }\r\n }\r\n\r\n this.text = this.currentFilter.text;\r\n this.text2 = this.currentFilter.text2;\r\n this.text3 = this.currentFilter.text3;\r\n\r\n this.changeDetector.markForCheck();\r\n }\r\n}\r\n","<div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"filterbox\"\r\n [class.filterbox-filtered]=\"currentFilter.filtered()\">\r\n <div fxFlex=\"*\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\">\r\n @if (canFilterByText() || canFilterByText2() || canFilterByText3()) {\r\n <div fxFlex.lt-sm=\"100\" fxFlexAlign=\"center\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill style=\"padding:4px;\">\r\n @if (canFilterByText()) {\r\n <mat-form-field [style.width]=\"textLength() ?? '100%'\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{textName()}}...</mat-label>\r\n <input matInput name=\"_text\" [(ngModel)]=\"text\" 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 = 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\" 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 = 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\" 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 = 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 && flt1.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt1.tooltip || 'Filtra per ' + flt1.title\"\r\n [attr.aria-label]=\"flt1.tooltip || 'Filtra per ' + flt1.title\" \r\n (click)=\"applyFilterAction(1, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span>{{flt1.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt1) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(1, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt1() && flt1 && flt1.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt1.tooltip || 'Filtra per ' + flt1.title\"\r\n [attr.aria-label]=\"flt1.tooltip || 'Filtra per ' + flt1.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt1\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span>{{flt1.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt1=\"matMenu\">\r\n @for (f of flt1.items; track $index) {\r\n\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 }\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 attr.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 && flt2.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt2.tooltip || 'Filtra per ' + flt2.title\"\r\n [attr.aria-label]=\"flt2.tooltip || 'Filtra per ' + flt2.title\" \r\n (click)=\"applyFilterAction(2, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span>{{flt2.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt2) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(2, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt2() && flt2 && flt2.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt2.tooltip || 'Filtra per ' + flt2.title\"\r\n [attr.aria-label]=\"flt2.tooltip || 'Filtra per ' + flt2.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt2\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span>{{flt2.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt2=\"matMenu\">\r\n @for (f of flt2.items; track $index) {\r\n\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 }\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 attr.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 && flt3.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt3.tooltip || 'Filtra per ' + flt3.title\"\r\n [attr.aria-label]=\"flt3.tooltip || 'Filtra per ' + flt3.title\" \r\n (click)=\"applyFilterAction(3, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span>{{flt3.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt3) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(3, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt3() && flt3 && flt3.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt3.tooltip || 'Filtra per ' + flt3.title\"\r\n [attr.aria-label]=\"flt3.tooltip || 'Filtra per ' + flt3.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt3\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span>{{flt3.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt3=\"matMenu\">\r\n @for (f of flt3.items; track $index) {\r\n\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 }\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 attr.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 && flt4.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt4.tooltip || 'Filtra per ' + flt4.title\"\r\n [attr.aria-label]=\"flt4.tooltip || 'Filtra per ' + flt4.title\" \r\n (click)=\"applyFilterAction(4, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span>{{flt4.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt4) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(4, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt4() && flt4 && flt4.items) {\r\n <button fxFlexAlign=\"center\" class=\"filterbox-button\" type=\"button\" mat-button [matTooltip]=\"flt4.tooltip || 'Filtra per ' + flt4.title\"\r\n [attr.aria-label]=\"flt4.tooltip || 'Filtra per ' + flt4.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt4\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span>{{flt4.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt4=\"matMenu\">\r\n @for (f of flt4.items; track $index) {\r\n\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 }\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 attr.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 && flt5.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt5.tooltip || 'Filtra per ' + flt5.title\"\r\n [attr.aria-label]=\"flt5.tooltip || 'Filtra per ' + flt5.title\" \r\n (click)=\"applyFilterAction(5, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span>{{flt5.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt5) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(5, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt5() && flt5 && flt5.items) {\r\n <button fxFlexAlign=\"center\"class=\"filterbox-button\" type=\"button\" mat-button [matTooltip]=\"flt5.tooltip || 'Filtra per ' + flt5.title\"\r\n [attr.aria-label]=\"flt5.tooltip || 'Filtra per ' + flt5.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt5\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span>{{flt5.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt5=\"matMenu\">\r\n @for (f of flt5.items; track $index) {\r\n\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 }\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 attr.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\" attr.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>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, inject } from '@angular/core';\r\nimport { MatCalendar } from '@angular/material/datepicker';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\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> implements OnDestroy {\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private calendar = inject(MatCalendar<D>);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n this.calendar.stateChanges\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => this.changeDetector.markForCheck());\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n}\r\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, OnDestroy, OnInit, Optional, Renderer2, Self, inject, input, signal, output } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { Subject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n selector: 'button-selector',\r\n standalone: true,\r\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule,\r\n MatMenuModule],\r\n templateUrl: './button-selector.component.html',\r\n styleUrl: './button-selector.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ButtonSelectorComponent implements OnInit, OnDestroy, ControlValueAccessor {\r\n\r\n readonly changed = output<NameValueItem<any> | undefined>();\r\n readonly selected = output<NameValueItem<any> | undefined>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private stateChanges = new Subject<void>();\r\n private focused = false;\r\n\r\n private _value: NameValueItem<any> | undefined = undefined\r\n set value(value: NameValueItem<any> | undefined) {\r\n this._value = value;\r\n this.propagateChange(this._value);\r\n this.stateChanges.next();\r\n this.changed.emit(this._value);\r\n this.current.set(this._value);\r\n }\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n private _disabled: boolean = false;\r\n @Input()\r\n get disabled() {\r\n if (this.ngControl && this.ngControl.disabled != null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n private propagateChange: (_: any) => void = (_: any) => { };\r\n private propagateTouched: () => void = () => { };\r\n\r\n @HostBinding() id = `button-selector--${SystemUtils.generateUUID()}`;\r\n @HostBinding('attr.aria-describedBy') describedBy = '';\r\n\r\n private renderer = inject(Renderer2);\r\n\r\n protected current = signal<NameValueItem<any> | undefined>(undefined);\r\n\r\n readonly width = input<number>(-1);\r\n readonly border = input<number>(-1);\r\n readonly borderRadius = input<string>(\"9999px\");\r\n readonly label = input<string | undefined>(undefined);\r\n readonly labelSelected = input<string | undefined>(undefined);\r\n readonly options = input<NameValueItem<any>[]>([]);\r\n readonly autoSelect = input<boolean>(false);\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.autoSelect()) {\r\n const options = this.options();\r\n if (options && options.length > 0 && options[0].value) {\r\n this.current.set(options[0]);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.propagateTouched = fn;\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n this.renderer.setProperty(elem, 'disabled', isDisabled);\r\n }\r\n }\r\n\r\n onContainerClick() {\r\n if (!this.focused) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n elem.focus();\r\n this.propagateTouched();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Select an element\r\n * @param item : the item to select\r\n * @param notify: true if selection notification must be rised. Default is true\r\n */\r\n select(item: NameValueItem<any>, notify: boolean = true) {\r\n this.writeValue(item);\r\n if (notify) {\r\n this.selected.emit(item);\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Reset value\r\n */\r\n reset() {\r\n this.writeValue(undefined);\r\n }\r\n}\r\n","<button mat-stroked-button class=\"menu-selector-button\" [style.border]=\"border() >= 0 ? border() : 'auto'\"\r\n [style.border-radius]=\"borderRadius()\" [style.height]=\"border() <= 0 ? '40px' : 'auto'\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\" [attr.aria-label]=\"label()\"\r\n [matMenuTriggerFor]=\"optionsMenu\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if(current()) {\r\n <div style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n @if(labelSelected() || label()) {\r\n <div class=\"x-small \">{{labelSelected() ?? label()}}</div>\r\n <div fxHide.xs class=\"small truncated-1\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated-1\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n } @else {\r\n <div fxHide.xs class=\"small truncated\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n }\r\n </div>\r\n } @else if(labelSelected() || label()) {\r\n <div class=\"truncated\" style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n {{labelSelected() ?? label()}}</div>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </div>\r\n </div>\r\n</button>\r\n<mat-menu #optionsMenu=\"matMenu\">\r\n @for (o of options(); track $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 { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, HostBinding, inject, Input, input, OnDestroy, OnInit, Optional, Renderer2, Self, Signal, signal, output } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { debounceTime, fromEvent, Subject, takeUntil } from 'rxjs';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ButtonSelectorComponent } from '../button-selector/button-selector.component';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'chips-selector',\r\n standalone: true,\r\n imports: [FlexLayoutModule, FormsModule, MatFormFieldModule, MatSelectModule,\r\n MatChipsModule, MatIconModule, MatButtonModule, MatBadgeModule, MatTooltipModule,\r\n ButtonSelectorComponent\r\n ],\r\n templateUrl: './chips-selector.component.html',\r\n styleUrl: './chips-selector.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChipsSelectorComponent implements OnInit, OnDestroy, AfterContentInit, ControlValueAccessor {\r\n\r\n readonly changed = output<NameValueItem<any>[] | undefined>();\r\n protected containerId: string = `chips-selector-container--${SystemUtils.generateUUID()}`;\r\n protected containerWidth = signal(-6);\r\n private focused: boolean = false;\r\n private stateChanges: Subject<void> = new Subject<void>();\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private changesEnabled = false;\r\n readonly options = input<NameValueItem<any>[]>([]);\r\n readonly collapsedWidth = input<number>(-1);\r\n readonly collapsedDisplayMode = input<'dropdown' | 'button'>('dropdown');\r\n readonly collapseAt = input<number>(-1);\r\n readonly collapseAtContainer = input<boolean>(false);\r\n protected collapsed: Signal<boolean> = computed(() => {\r\n const cw = this.containerWidth();\r\n const mw = this.collapseAt();\r\n return this.mode() === 'collapsed' || (mw === -1 || (cw > 0 && mw > 0 && cw < mw));\r\n })\r\n readonly label = input<string>('');\r\n readonly multiple = input<boolean>(false);\r\n readonly mustSelect = input<boolean>(false);\r\n readonly mode = input<'collapsed' | 'dinamyc'>('dinamyc');\r\n readonly stacked = input<boolean>(false);\r\n readonly padAt = input<number>(0);\r\n\r\n\r\n private _value?: NameValueItem<any>[] = []\r\n set value(value: NameValueItem<any>[] | undefined) {\r\n this._value = value;\r\n this.selection = [];\r\n this.singleSelection = undefined;\r\n if (this._value) {\r\n this.options().forEach(n => {\r\n if (this._value?.findIndex((x: any) => x.value === n.value) !== -1) {\r\n this.selection.push(n);\r\n }\r\n });\r\n if (this.selection.length > 0) {\r\n this.singleSelection = this.selection[0]\r\n }\r\n }\r\n this.propagateChange(this._value);\r\n this.stateChanges.next();\r\n if (this.changesEnabled) {\r\n this.changed.emit(this._value);\r\n }\r\n }\r\n get value() {\r\n return this._value;\r\n }\r\n get empty(): boolean {\r\n return !this._value || this._value?.length === 0;\r\n }\r\n get errorState() {\r\n return this.ngControl.errors != null && this.ngControl.touched;\r\n }\r\n\r\n private _required: boolean = false;\r\n @Input()\r\n get required() {\r\n return this._required;\r\n }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n\r\n private _disabled: boolean = false;\r\n @Input()\r\n get disabled() {\r\n if (this.ngControl && this.ngControl.disabled != null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n private _placeholder: string = '';\r\n @Input()\r\n get placeholder() {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n\r\n\r\n private propagateChange: (_: any) => void = (_: any) => { };\r\n private propagateTouched: () => void = () => { };\r\n\r\n @HostBinding() id = `chips-selector--${SystemUtils.generateUUID()}`;\r\n @HostBinding('class.floating')\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n @HostBinding('attr.aria-describedBy') describedBy = '';\r\n\r\n private renderer = inject(Renderer2);\r\n\r\n protected selection: NameValueItem<any>[] = [];\r\n protected singleSelection?: NameValueItem<any>;\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe), debounceTime(250))\r\n .subscribe(() => {\r\n if (this.collapseAt() > 0) {\r\n // Close the options menu if open\r\n this.updateContainerWidth();\r\n }\r\n });\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n setTimeout(() => {\r\n this.updateContainerWidth();\r\n this.changesEnabled = true;\r\n this.changeDetector.markForCheck();\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Update container width\r\n */\r\n private updateContainerWidth() {\r\n const elem = document.getElementById(this.containerId);\r\n if (elem && elem.clientWidth > 0) {\r\n this.containerWidth.set(\r\n this.collapseAtContainer()\r\n ? (elem?.clientWidth ?? -1)\r\n : (window.innerWidth ?? -1));\r\n } else {\r\n setTimeout(() => {\r\n this.updateContainerWidth();\r\n }, 100)\r\n }\r\n }\r\n\r\n /**\r\n * Get current selection\r\n * @returns current selection\r\n */\r\n private getSelection(): NameValueItem<any>[] {\r\n const value =\r\n !this.multiple() && this.collapsed() && this.collapsedDisplayMode() === \"button\"\r\n ? this.singleSelection\r\n : this.selection ?? [];\r\n const isArray = Array.isArray(value);\r\n if (isArray) {\r\n return value ?? [];\r\n } else {\r\n return value ? [value] : [];\r\n }\r\n }\r\n\r\n /**\r\n * Update current value with a little delay\r\n */\r\n updateValue() {\r\n setTimeout(() => {\r\n this.writeValue(this.getSelection());\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Check if a item is selectable\r\n * @param item: the item to check\r\n */\r\n isSelectable(item: NameValueItem<any>): boolean {\r\n return this.multiple() || this.getSelection().findIndex(x => x.value === item.value) === -1;\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.value !== value) {\r\n this.value = value;\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.propagateTouched = fn;\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n this.renderer.setProperty(elem, 'disabled', isDisabled);\r\n }\r\n }\r\n\r\n onContainerClick() {\r\n if (!this.focused) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n elem.focus();\r\n this.propagateTouched();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear selection\r\n * @param e : the click event\r\n */\r\n clear(e: Event) {\r\n this.writeValue([]);\r\n e.stopPropagation();\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Select single element\r\n * @param item : the item to select\r\n */\r\n select(item?: NameValueItem<any>) {\r\n if (item) {\r\n this.writeValue([item]);\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n}\r\n","<div [id]=\"containerId\" class=\"chips-selector\">\r\n @if(containerWidth() > 0) {\r\n @if(collapsed()) {\r\n @if(collapsedDisplayMode() === 'dropdown') {\r\n <mat-form-field [style.min-width]=\"collapsedWidth() > 0 ? collapsedWidth()+'px' : '100%'\" subscriptSizing=\"dynamic\">\r\n @if(label()) {\r\n <mat-label>{{label()}}</mat-label>\r\n }\r\n <mat-select [(ngModel)]=\"selection\" [multiple]=\"multiple()\" (selectionChange)=\"updateValue()\">\r\n <mat-select-trigger>\r\n @if (value && (value.length || 0) > 0) {\r\n {{value[0].shortName ?? value[0].name}}\r\n }\r\n @if (value && (value.length || 0) > 1) {\r\n <span class=\"collapsed-additional-selection\">\r\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\r\n </span>\r\n }\r\n </mat-select-trigger>\r\n @for (o of options(); track $index) {\r\n <mat-option [value]=\"o\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n &nbsp; ({{o.bag}})\r\n }\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (value && (value.length || 0) > 0) {\r\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [(ngModel)]=\"singleSelection\"\r\n name=\"value\" (selected)=\"updateValue()\"></button-selector>\r\n\r\n }\r\n } @else {\r\n <mat-chip-listbox [class]=\"stacked() ? 'mat-mdc-chip-set-stacked' : ''\" [multiple]=\"multiple()\"\r\n [(ngModel)]=\"selection\" (change)=\"updateValue()\">\r\n @for (o of options(); track $index; let i = $index) {\r\n <mat-chip-option [matBadge]=\"o.bag\" [matTooltip]=\"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 { ChangeDetectionStrategy, Component, Signal, computed, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\nexport interface ButtonToggleInfo {\r\n value: boolean,\r\n toggled: boolean\r\n}\r\n\r\n@Component({\r\n selector: 'button-toggle',\r\n standalone: true,\r\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule, SafeHtmlPipe],\r\n templateUrl: './button-toggle.component.html',\r\n styleUrl: './button-toggle.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ButtonToggleComponent {\r\n\r\n readonly changed = output<ButtonToggleInfo>();\r\n\r\n protected current: Signal<boolean> = computed(() => {\r\n return this.value();\r\n })\r\n\r\n toggled: boolean = false;\r\n\r\n readonly value = input<boolean>(false);\r\n readonly width = input<number>(-1);\r\n readonly border = input<number>(-1);\r\n readonly labelOn = input<string | undefined>(undefined);\r\n readonly labelOff = input<string | undefined>(undefined);\r\n readonly iconOn = input<string | undefined>(undefined);\r\n readonly iconOff = input<string | undefined>(undefined);\r\n readonly cssClass = input<string | undefined>(undefined);\r\n readonly cssClassSmall = input<string | undefined>(undefined);\r\n\r\n protected label: Signal<string> = computed(() => {\r\n return this.value() ? this.labelOn() ?? '' : this.labelOff() ?? '';\r\n })\r\n\r\n protected icon: Signal<string> = computed(() => {\r\n return this.value() ? this.iconOn() ?? '' : this.iconOff() ?? '';\r\n })\r\n\r\n /**\r\n * Toggle the button\r\n */\r\n toggle() {\r\n this.toggled = !(this.value());\r\n this.changed.emit({ value: this.value(), toggled: this.toggled });\r\n }\r\n\r\n}\r\n","<button mat-stroked-button [style.border]=\"border() >= 0 ? border() : 'auto'\"\r\n [style.height]=\"border() <= 0 ? '40px' : 'auto'\" [style.minWidth.px]=\"width() > 0 ? width() : 'auto'\"\r\n [style.mxn-width.px]=\"width() > 0 ? width() : 'auto'\" [class]=\"cssClass()\" [attr.aria-label]=\"label()\"\r\n (click)=\"toggle()\" [class.button-on]=\"value() === true\" [ngClass.xs]=\"cssClassSmall()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"8px\" fxLayoutAlign=\"center center\" fxFill>\r\n @if(icon()) {\r\n <div fxFlex=\"24px\"><mat-icon style=\"display: block;\">{{icon()}}</mat-icon></div>\r\n }\r\n <div [innerHtml]=\"label() | safeHtml\"></div>\r\n </div>\r\n</button>","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './ui/ui.module';\r\nexport * from './ui/dialogs/prompt/prompt-dialog.component';\r\nexport * from './ui/dialogs/prompt-date/prompt-date-dialog.component';\r\nexport * from './ui/dialogs/prompt-time/prompt-time-dialog.component';\r\nexport * from './ui/dialogs/prompt-otp/prompt-otp-dialog.component';\r\nexport * from './ui/dialogs/select-file/select-file-dialog.component';\r\nexport * from './ui/dialogs/select-picture/select-picture-dialog.component';\r\nexport * from './ui/dialogs/select-tree/select-tree-dialog.component';\r\nexport * from './ui/dialogs/select/select-dialog.component';\r\nexport * from './ui/dialogs/send-to/send-to-dialog.component';\r\nexport * from './ui/components/file-input/file-input.component';\r\nexport * from './ui/components/file-preview/file-preview.component';\r\nexport * from './ui/components/filter-bar/filter-bar.component';\r\nexport * from './ui/components/calendar-empty-header/calendar-empy-header.component';\r\nexport * from './ui/components/chips-selector/chips-selector.component';\r\nexport * from './ui/components/button-selector/button-selector.component';\r\nexport * from './ui/components/button-toggle/button-toggle.component';\r\nexport * from './ui/directives/resize-table-column.directive';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i9","observableOf","i2","i3","i4","i5","i7","i8","i1","i6","i11","takeUntil"],"mappings":"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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-ui.application.mjs","sources":["../../../projects/ars-utils/ui.application/ui/directives/resize-table-column.directive.ts","../../../projects/ars-utils/ui.application/ui/definitions.ts","../../../projects/ars-utils/ui.application/ui/filters.ts","../../../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/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/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-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/prompt/prompt-dialog.component.ts","../../../projects/ars-utils/ui.application/ui/dialogs/prompt/prompt-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/services/applicationDialog.service.ts","../../../projects/ars-utils/ui.application/ui/ui.module.ts","../../../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-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/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/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/calendar-empty-header/calendar-empy-header.component.ts","../../../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/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/button-toggle/button-toggle.component.ts","../../../projects/ars-utils/ui.application/ui/components/button-toggle/button-toggle.component.html","../../../projects/ars-utils/ui.application/public_api.ts","../../../projects/ars-utils/ui.application/arsedizioni-ars-utils-ui.application.ts"],"sourcesContent":["import { Directive, OnInit, Renderer2, ElementRef, inject, input } from \"@angular/core\";\r\n\r\n@Directive({\r\n selector: \"[resizeColumn]\",\r\n standalone: true\r\n})\r\nexport class ResizeTableColumnDirective implements OnInit {\r\n readonly resizable = input<boolean>(undefined, { alias: \"resizeColumn\" });\r\n readonly index = input<number>(undefined);\r\n private renderer = inject(Renderer2);\r\n private elementRef = inject(ElementRef);\r\n private startX: number;\r\n private startWidth: number;\r\n private column: HTMLElement = this.elementRef.nativeElement;\r\n private table: HTMLElement;\r\n private pressed: boolean;\r\n\r\n\r\n ngOnInit() {\r\n if (this.resizable()) {\r\n const row = this.renderer.parentNode(this.column);\r\n const thead = this.renderer.parentNode(row);\r\n this.table = this.renderer.parentNode(thead);\r\n const resizer = this.renderer.createElement(\"span\");\r\n this.renderer.addClass(resizer, \"resize-holder\");\r\n this.renderer.appendChild(this.column, resizer);\r\n this.renderer.listen(resizer, \"mousedown\", this.onMouseDown);\r\n this.renderer.listen(this.table, \"mousemove\", this.onMouseMove);\r\n this.renderer.listen(\"document\", \"mouseup\", this.onMouseUp);\r\n }\r\n }\r\n\r\n onMouseDown = (e: MouseEvent) => {\r\n this.pressed = true;\r\n this.startX = e.pageX;\r\n this.startWidth = this.column.offsetWidth;\r\n };\r\n\r\n onMouseMove = (e: MouseEvent) => {\r\n const offset = 35;\r\n if (this.pressed && e.buttons) {\r\n this.renderer.addClass(this.table, \"resizing\");\r\n\r\n // Calculate width of column\r\n let width =\r\n this.startWidth + (e.pageX - this.startX - offset);\r\n\r\n const tableCells = Array.from(this.table.querySelectorAll(\".mat-row\")).map(\r\n (row: any) => row.querySelectorAll(\".mat-cell\").item(this.index())\r\n );\r\n\r\n // Set table header width\r\n this.renderer.setStyle(this.column, \"width\", `${width}px`);\r\n\r\n // Set table cells width\r\n for (const cell of tableCells) {\r\n this.renderer.setStyle(cell, \"width\", `${width}px`);\r\n }\r\n }\r\n };\r\n\r\n onMouseUp = () => {\r\n if (this.pressed) {\r\n this.pressed = false;\r\n this.renderer.removeClass(this.table, \"resizing\");\r\n }\r\n };\r\n}\r\n","\r\nimport { Searchable, SearchBag, NameValueItem, DateInterval } from '@arsedizioni/ars-utils/core';\r\n\r\nexport interface SelectDialogResult {\r\n selectedItems: SelectableItem[];\r\n}\r\n\r\nexport interface SelectTreeDialogResult {\r\n selectedItems: ItemNode[];\r\n}\r\n\r\nexport interface SelectDialogLookup {\r\n items: SelectableItem[];\r\n filter?: string;\r\n params?: any;\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectDialogFilter {\r\n items?: SelectableItem[];\r\n filter?: string;\r\n filterOption?: SelectableFilter;\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectDialogAppend {\r\n items: SelectableItem[];\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectDialogEdit extends SelectDialogAppend {\r\n item: SelectableItem;\r\n}\r\n\r\nexport interface SelectDialogDelete {\r\n items: SelectableItem[];\r\n selectedItems: SelectableItem[];\r\n owner?: any;\r\n}\r\n\r\nexport interface SelectFileOption {\r\n description: string;\r\n value: boolean;\r\n}\r\n\r\nexport interface SelectFile {\r\n file: File;\r\n options?: SelectFileOption[];\r\n}\r\n\r\nexport interface SelectableFilter {\r\n divider?: boolean;\r\n description?: string;\r\n group?: number;\r\n groupName?: string;\r\n radio?: boolean;\r\n checked?: boolean;\r\n value?: any;\r\n icon?: string;\r\n title?: string;\r\n}\r\n\r\nexport interface SelectDialogData {\r\n title: string;\r\n description?: string;\r\n okCaption?: string;\r\n maxItems?: number;\r\n multipleSelection?: boolean;\r\n mustSelect?: boolean;\r\n width?: number;\r\n filter?: string;\r\n filters?: SelectableFilter[];\r\n items?: SelectableItem[];\r\n total?: number;\r\n lookupFields?: NameValueItem<string>[];\r\n lookupOnInit?: boolean;\r\n emptyMessage?: string;\r\n canLookupWithOptions?: boolean;\r\n canLookupWithInlineOptions?: boolean;\r\n canLookup?: boolean;\r\n canDelete?: boolean;\r\n canAppend?: boolean;\r\n canEdit?: boolean;\r\n canView?: boolean;\r\n canFilter?: boolean;\r\n canPaginate?: boolean;\r\n pageSize?: number;\r\n appearance?: string;\r\n header?: string;\r\n searchLabel?: string;\r\n searchButtonLabel?: string;\r\n}\r\n\r\nexport interface SelectTreeDialogData {\r\n title: string;\r\n description?: string;\r\n okCaption?: string;\r\n nodes?: ItemNode[];\r\n initialFilter?: string;\r\n appearance?: string;\r\n owner?: any;\r\n canAppend?: boolean;\r\n}\r\n\r\n\r\nexport interface SelectFileDialogData {\r\n title: string;\r\n description?: string;\r\n okCaption?: string;\r\n helpLink?: string;\r\n helpCaption?: string;\r\n maxSize?: number;\r\n options?: any;\r\n owner?: any;\r\n accept?: string;\r\n appearance?: string;\r\n}\r\n\r\nexport interface SelectPictureFileDialogData extends SelectFileDialogData {\r\n maxWidth?: number;\r\n maxHeight?: number;\r\n}\r\n\r\nexport interface ISelectableItem extends Searchable {\r\n bag: any;\r\n template: string;\r\n}\r\n\r\nexport class SelectableItem implements ISelectableItem {\r\n bag: any;\r\n template: string;\r\n\r\n /**\r\n * Searchable\r\n */\r\n searchBag: SearchBag;\r\n}\r\n\r\nexport class ItemNode {\r\n id: string;\r\n name: string;\r\n count?: number;\r\n parent?: ItemNode;\r\n children?: ItemNode[];\r\n bag: any;\r\n}\r\n\r\nexport class SelectableNode extends ItemNode implements Searchable {\r\n expandable: boolean;\r\n level: number;\r\n\r\n /**\r\n * Searchable\r\n */\r\n searchBag: SearchBag;\r\n\r\n constructor(item: ItemNode, level: number) {\r\n super();\r\n\r\n // Flattened implementation\r\n this.expandable = item.children && item.children.length > 0;\r\n this.level = level;\r\n\r\n // Data\r\n this.id = item.id;\r\n this.name = item.name;\r\n this.count = item.count;\r\n this.parent = item.parent;\r\n this.bag = item.bag;\r\n this.children = item.children;\r\n }\r\n}\r\n\r\nexport interface SendToDialogResult {\r\n recipients: string;\r\n subject: string;\r\n text: string;\r\n options?: any\r\n}\r\n\r\nexport interface PromptDialogResult {\r\n value?: string;\r\n type?: PromptDialogType;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptDateDialogResult {\r\n value?: Date | DateInterval;\r\n type?: PromptDialogType;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptOtpDialogResult {\r\n value?: string;\r\n}\r\n\r\nexport enum PromptDialogType {\r\n Default = 0,\r\n Date = 1,\r\n Number = 2,\r\n Text = 3,\r\n DateInterval = 4,\r\n List = 5,\r\n Time = 6\r\n\r\n}\r\n\r\nexport interface PromptDialogData {\r\n title: string;\r\n type: PromptDialogType;\r\n description?: string;\r\n okCaption?: string;\r\n cancelCaption?: string;\r\n initialValue?: any;\r\n minValue?: number;\r\n maxValue?: number;\r\n required?: boolean;\r\n appearance?: string;\r\n options?: any;\r\n}\r\n\r\nexport interface PromptTimeDialogData extends PromptDialogData {\r\n slots?: string;\r\n}","export const Filters = {\r\n FLT_1: 1,\r\n FLT_2: 2,\r\n FLT_3: 3,\r\n FLT_4: 4,\r\n FLT_5: 5,\r\n FLT_TEXT: 96,\r\n FLT_TEXT_1: 97,\r\n FLT_TEXT_2: 98,\r\n FLT_TEXT_3: 99\r\n};\r\n\r\nexport interface FilterGroup {\r\n group?: number;\r\n title?: string;\r\n tooltip?: string;\r\n items?: FilterItem[];\r\n action?: any;\r\n}\r\nexport interface FilterItem {\r\n group?: number;\r\n title?: string;\r\n titleSelected?: string;\r\n description?: string;\r\n divider?: boolean;\r\n value?: any;\r\n}\r\n\r\nexport class CurrentFilterChanged {\r\n filter: CurrentFilter;\r\n group: number;\r\n}\r\n\r\nexport class CurrentFilter {\r\n flt1?: any;\r\n flt1Name?: string;\r\n flt2?: any;\r\n flt2Name?: string;\r\n flt3?: any;\r\n flt3Name?: string;\r\n flt4?: any;\r\n flt4Name?: string;\r\n flt5?: any;\r\n flt5Name?: string;\r\n text?: string;\r\n text2?: string;\r\n text3?: string;\r\n\r\n /**\r\n * Update filtered value\r\n */\r\n filtered(): boolean {\r\n return (\r\n (this.flt1 !== null && this.flt1 !== undefined) ||\r\n (this.flt2 !== null && this.flt2 !== undefined) ||\r\n (this.flt3 !== null && this.flt3 !== undefined) ||\r\n (this.flt4 !== null && this.flt4 !== undefined) ||\r\n (this.flt5 !== null && this.flt5 !== undefined) ||\r\n (this.text !== null && this.text !== undefined && this.text.length > 0) ||\r\n (this.text2 !== null && this.text2 !== undefined && this.text2.length > 0) ||\r\n (this.text3 !== null && this.text3 !== undefined && this.text3.length > 0)\r\n );\r\n }\r\n}\r\n\r\nexport class CurrentFilterItem<T> {\r\n items?: any[] = undefined;\r\n value?: T = undefined;\r\n enabled?: boolean = true;\r\n title?: string = undefined;\r\n selectedTitle?: string = undefined;\r\n\r\n public clear() {\r\n this.value = undefined;\r\n this.selectedTitle = undefined;\r\n }\r\n}\r\n","import { TextFieldModule } from \"@angular/cdk/text-field\";\r\nimport { ChangeDetectionStrategy, Component, OnInit, inject, output } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from \"@angular/material/dialog\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { EmailsValidatorDirective, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from \"@ngbracket/ngx-layout/flex\";\r\nimport { SendToDialogResult } from \"../../definitions\";\r\n\r\nexport interface SendToDialogData {\r\n count: number;\r\n title?: string ;\r\n info?: string;\r\n appearance?: string;\r\n allowPopulate?: boolean;\r\n options?: any;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: \"./send-to-dialog.component.html\",\r\n styleUrls: [\"./send-to-dialog.component.scss\"],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [\r\n MatDialogTitle,\r\n MatDialogContent,\r\n FormsModule,\r\n FlexModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n TextFieldModule,\r\n EmailsValidatorDirective,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatTooltipModule,\r\n MatCheckboxModule,\r\n MatDialogActions,\r\n MatDialogClose,\r\n SafeHtmlPipe\r\n ],\r\n})\r\nexport class SendToDialogComponent implements OnInit {\r\n readonly done = output<SendToDialogResult>();\r\n readonly populate = output<SendToDialogResult>();\r\n\r\n protected dialogData: SendToDialogData = inject(MAT_DIALOG_DATA);\r\n protected item: SendToDialogResult = {\r\n recipients: null,\r\n subject: null,\r\n text: null,\r\n options: null\r\n };\r\n\r\n ngOnInit(): void {\r\n this.dialogData = this.dialogData || { count: 0, appearance: 'fill' };\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.count) {\r\n this.dialogData.count = 0;\r\n }\r\n if (!this.dialogData.title && this.dialogData.count) {\r\n this.dialogData.title =\r\n this.dialogData.count === 1\r\n ? \"Invia documento a...\"\r\n : \"Invia \" + this.dialogData.count + \" documenti a...\";\r\n }\r\n }\r\n\r\n /**\r\n * Submit\r\n */\r\n protected ok() {\r\n // Add selected options\r\n this.item.options = this.dialogData.options;\r\n this.done.emit(this.item);\r\n }\r\n\r\n /**\r\n * Populate recipients\r\n */\r\n protected populateRecipients() {\r\n this.populate.emit(this.item);\r\n }\r\n}","<div class=\"dialog-info\">\r\n @if (f.form.invalid) {\r\n<span class=\"dialog-info-error\">Ci sono ancora dei campi obbligatori (*) non compilati.</span>\r\n} @else {\r\n<span class=\"dialog-info-ok\">Tutti i campi obbligatori (*) sono compilati.</span>\r\n}\r\n</div>\r\n<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content>\r\n <p>{{dialogData.info}}</p>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <mat-form-field [appearance]=\"dialogData.appearance\">\r\n <mat-label >Destinatari</mat-label>\r\n <textarea matInput\r\n [(ngModel)]=\"item.recipients\" name=\"recipients\" maxlength=\"1024\" #recipients=\"ngModel\" cdkTextareaAutosize\r\n cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\" emails required></textarea>\r\n @if (item.recipients) {\r\n<button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix\r\n aria-label=\"Azzera\" (click)=\"item.recipients = null;\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n}\r\n @if (dialogData.allowPopulate) {\r\n<button type=\"button\" type=\"button\" tabindex=\"-1\" mat-icon-button\r\n matSuffix aria-label=\"Popola\" (click)=\"populateRecipients()\" matTooltip=\"Popola\">\r\n <mat-icon>search</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}}/1024 </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\r\n 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 \r\n [(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}}/1024 </mat-hint>\r\n @if (subject.invalid) {\r\n<mat-error>Obbligatorio.</mat-error>\r\n}\r\n </mat-form-field>\r\n </div>\r\n @if (dialogData.options) {\r\n<div>\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" 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>\r\n","import { FlatTreeControl } from '@angular/cdk/tree';\r\nimport {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n Injectable,\r\n OnDestroy,\r\n OnInit,\r\n inject,\r\n output,\r\n signal\r\n} from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule } from '@angular/material/tree';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { BehaviorSubject, Observable, Subject, of as observableOf } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { ItemNode, SelectTreeDialogData, SelectTreeDialogResult, SelectableNode } from '../../definitions';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\n@Injectable()\r\nexport class TreeDataSource implements OnDestroy {\r\n dataChange = new BehaviorSubject<ItemNode[]>([]);\r\n\r\n get data(): ItemNode[] {\r\n return this.dataChange.value;\r\n }\r\n\r\n ngOnDestroy() {\r\n this.dataChange.unsubscribe();\r\n }\r\n\r\n /**\r\n * Initialzie the data source\r\n * @param data : data\r\n */\r\n initialize(data: ItemNode[]) {\r\n this.dataChange.next(data);\r\n }\r\n\r\n /**\r\n * Find a node by id recursively\r\n * @param node: the source node\r\n * @param id : the id to search for\r\n */\r\n findNode(node: ItemNode, id: string): ItemNode {\r\n let children;\r\n if (node && node.id === id) return node;\r\n if (node) children = node.children;\r\n else if (this.data && this.data.length > 0)\r\n children = this.data[0].children;\r\n if (children) {\r\n let _n: ItemNode;\r\n children.some(n => {\r\n if (n.id === id) {\r\n _n = n;\r\n return true;\r\n }\r\n _n = this.findNode(n, id);\r\n if (_n) return true;\r\n return false;\r\n });\r\n return _n;\r\n }\r\n return null;\r\n }\r\n /**\r\n * Remove a node\r\n * @param id : the node id to remove\r\n */\r\n removeNode(id: string) {\r\n let n = this.findNode(null, id);\r\n if (!n) return;\r\n if (n.parent) {\r\n const p = n.parent.children.findIndex(n => n.id === id);\r\n if (p != -1) {\r\n n.parent.children.splice(p, 1);\r\n if (n.parent.count > 0) n.parent.count--;\r\n }\r\n } else {\r\n const p = this.data.findIndex(n => n.id === id);\r\n if (p != -1) {\r\n this.data.splice(p, 1);\r\n }\r\n }\r\n\r\n this.dataChange.next(this.data);\r\n }\r\n\r\n /**\r\n * Insert a new node\r\n * @param node : the new node\r\n */\r\n insertNode(node: ItemNode) {\r\n if (node.parent) {\r\n node.parent.children.unshift(node);\r\n node.parent.count++;\r\n } else this.data.unshift(node);\r\n\r\n this.dataChange.next(this.data);\r\n }\r\n\r\n /**\r\n * Rename a node\r\n * @param id : the node id\r\n * @param name : the new node name\r\n */\r\n renameNode(id: string, name: string): ItemNode {\r\n let n = this.findNode(null, id);\r\n if (n) {\r\n n.name = name;\r\n this.dataChange.next(this.data);\r\n }\r\n return n;\r\n }\r\n\r\n /**\r\n * Update data\r\n */\r\n update() {\r\n this.dataChange.next(this.data);\r\n }\r\n}\r\n\r\nexport interface SelectTreeDialogAppend {\r\n parent?: ItemNode;\r\n owner?: any;\r\n}\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './select-tree-dialog.component.html',\r\n styleUrls: ['./select-tree-dialog.component.scss'],\r\n providers: [TreeDataSource],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule, MatButtonModule,\r\n MatIconModule, MatTooltipModule, MatDialogContent, MatTreeModule, MatDialogActions,\r\n MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class SelectTreeDialogComponent implements OnInit, OnDestroy {\r\n readonly done = output<SelectTreeDialogResult>();\r\n readonly append = output<SelectTreeDialogAppend>();\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private dialogRef = inject(MatDialogRef<SelectTreeDialogComponent>);\r\n protected dialogData: SelectTreeDialogData = inject(MAT_DIALOG_DATA);\r\n private tree = inject(TreeDataSource);\r\n private treeFlattener: MatTreeFlattener<ItemNode, SelectableNode>;\r\n protected treeControl: FlatTreeControl<SelectableNode>;\r\n protected treeData: MatTreeFlatDataSource<ItemNode, SelectableNode>;\r\n protected currentNode: ItemNode;\r\n protected filterText: string = '';\r\n protected filteredItems: SelectableNode[] = [];\r\n protected filterIndex: number = -1;\r\n protected canAppend = signal<boolean>(this.dialogData.canAppend || false);\r\n\r\n /**\r\n * Manage flat tree view\r\n */\r\n private getChildren = (node: ItemNode): Observable<ItemNode[]> =>\r\n observableOf(node.children);\r\n private getLevel = (node: SelectableNode) => node.level;\r\n private isExpandable = (node: SelectableNode) => node.expandable;\r\n protected hasChild = (_: number, _node: SelectableNode) => _node.expandable;\r\n protected transformer = (item: ItemNode, level: number) => {\r\n return new SelectableNode(item, level);\r\n };\r\n\r\n ngOnInit() {\r\n this.dialogData = this.dialogData || { appearance: 'outline', title: 'Seleziona', okCaption: 'Ok' };\r\n this.treeFlattener = new MatTreeFlattener(\r\n this.transformer,\r\n this.getLevel,\r\n this.isExpandable,\r\n this.getChildren\r\n );\r\n this.treeControl = new FlatTreeControl<SelectableNode>(\r\n this.getLevel,\r\n this.isExpandable\r\n );\r\n this.treeData = new MatTreeFlatDataSource(\r\n this.treeControl,\r\n this.treeFlattener\r\n );\r\n this.tree.dataChange\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(data => {\r\n this.treeData.data = data;\r\n setTimeout(() => {\r\n if (this.currentNode) {\r\n const n = this.treeControl.dataNodes.find(x => x.id === this.currentNode.id);\r\n if (n) {\r\n this.currentNode = n;\r\n this.treeControl.expand(n);\r\n }\r\n }\r\n });\r\n });\r\n if (this.dialogData.nodes) {\r\n this.tree.initialize(this.dialogData.nodes);\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Seleziona';\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'OK';\r\n }\r\n if (this.dialogData.initialFilter) {\r\n this.doFilter(this.dialogData.initialFilter);\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n /**\r\n * Submit selection\r\n */\r\n protected ok() {\r\n this.done.emit({ selectedItems: [this.currentNode] });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Select a node\r\n * @param e : the event\r\n * @param node : the\r\n */\r\n protected select(e: MouseEvent, node: SelectableNode) {\r\n if (e) e.stopPropagation();\r\n if (node) {\r\n this.currentNode = node.id === this.currentNode?.id ? null : node;\r\n }\r\n }\r\n\r\n /**\r\n * Clear filter\r\n */\r\n protected clearFilter() {\r\n this.filterText = '';\r\n }\r\n\r\n /**\r\n * Apply filter\r\n * @param text : the text to filter\r\n */\r\n protected doFilter(text?: string) {\r\n if (text) this.filterText = text;\r\n this.filteredItems = [];\r\n this.filterIndex = -1;\r\n if (this.filterText) {\r\n this.treeControl.dataNodes.forEach(n => {\r\n if (n.name.toLowerCase().indexOf(this.filterText.toLowerCase()) != -1) {\r\n this.filteredItems.push(n);\r\n }\r\n });\r\n\r\n if (this.filteredItems.length > 0) {\r\n this.nextFiltered();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Goto next filtered item\r\n */\r\n protected nextFiltered() {\r\n if (!SystemUtils.isBrowser()) return;\r\n if (this.filteredItems.length === 0) return;\r\n this.filterIndex++;\r\n if (this.filterIndex === this.filteredItems.length) this.filterIndex = 0;\r\n let node = this.filteredItems[this.filterIndex];\r\n this.currentNode = node;\r\n this.expand(node);\r\n let elem = document.getElementById(node.id);\r\n if (elem) elem.scrollIntoView();\r\n }\r\n\r\n /**\r\n * Expand a node and all its parents\r\n * @param node : the selectable node to expand\r\n */\r\n public expand(node: SelectableNode) {\r\n this.treeControl.expand(node);\r\n let parentNode = node.parent;\r\n while (parentNode) {\r\n this.treeControl.dataNodes.some(n => {\r\n if (n.id === parentNode.id) {\r\n this.treeControl.expand(n);\r\n parentNode = parentNode.parent;\r\n return true;\r\n }\r\n return false;\r\n });\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Append a node to the tree\r\n * @param node : the nodo to append\r\n */\r\n public appendNode(node: ItemNode) {\r\n this.tree.insertNode(node);\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Append\r\n */\r\n protected doAppend() {\r\n this.append.emit({ parent: this.currentNode, owner: this } as SelectTreeDialogAppend);\r\n }\r\n\r\n\r\n\r\n}\r\n\r\n","<h2 mat-dialog-title (keyup.ArrowDown)=\"nextFiltered()\" [innerHTML]=\"dialogData.title | safeHtml\"></h2>\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=\"50\">\r\n <mat-form-field style=\"width:100%\" [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca...</mat-label>\r\n <input type=\"text\" (keyup)=\"doFilter()\" matInput title=\"Digita il testo'\"\r\n [(ngModel)]=\"filterText\">\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\" fxLayoutAlign=\"end\">\r\n <div fxFlexAlign=\"center\" class=\"small\">{{filterIndex + 1}} / {{filteredItems.length}}</div>\r\n </div>\r\n }\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\" style=\"white-space:nowrap\">\r\n <div fxFlexAlign=\"center\">\r\n @if (canAppend()) {\r\n <button fxFlexAlign=\"center\" 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 (filteredItems.length > 0) {\r\n <button fxFlexAlign=\"center\" 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 }\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"treeControl.collapseAll()\">\r\n <mat-icon aria-label=\"Comprimi tutto\" matTooltip=\"Comprimi tutto\">unfold_less</mat-icon>\r\n </button>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button (click)=\"treeControl.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]=\"treeData\" [treeControl]=\"treeControl\">\r\n <mat-tree-node [id]=\"node.id\" *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple\" (click)=\"select($event, node);\"\r\n [class.tree-node-activated]=\"currentNode && currentNode.id === node.id\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill class=\"small\">\r\n <button type=\"button\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"uppercase \">\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\">({{node.count}})</span>\r\n }\r\n </div>\r\n </div>\r\n </mat-tree-node>\r\n\r\n <mat-tree-node [id]=\"node.id\" *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple\"\r\n [class.tree-node-activated]=\"currentNode && currentNode.id === node.id\" (click)=\"select($event, node);\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxFill class=\"small\">\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 {{treeControl.isExpanded(node) ? 'expand_more' : 'chevron_right'}}\r\n </mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\" class=\"uppercase truncated\">\r\n <div>\r\n {{node.name}}\r\n </div>\r\n </div>\r\n <div fxFlex=\"30px\" fxFlexAlign=\"center\">\r\n @if (node.count > 0) {\r\n <div fxLayoutAlign=\"end\">({{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 { ChangeDetectionStrategy, Component, inject, signal, output, ChangeDetectorRef } from '@angular/core';\r\nimport { MatDialogRef, MAT_DIALOG_DATA, MatDialogTitle, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { SelectFile, SelectPictureFileDialogData } from '../../definitions';\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './select-picture-dialog.component.html',\r\n styleUrls: ['./select-picture-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FlexModule, MatButtonModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class SelectPictureDialogComponent {\r\n readonly done = output<SelectFile>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private dialogService = inject(DialogService);\r\n private dialogRef = inject(MatDialogRef<SelectPictureDialogComponent>);\r\n protected dialogData: SelectPictureFileDialogData = inject(MAT_DIALOG_DATA);\r\n protected file?: File;\r\n protected fileClass = signal<'selectpicture-file' | 'selectpicture-file-drop'>('selectpicture-file');\r\n protected pictureWidth = signal<number>(0);\r\n protected pictureHeight = signal<number>(0);\r\n protected picturePreview = signal<any>(undefined);\r\n\r\n\r\n /**\r\n * Update preview\r\n * @param e : the event\r\n */\r\n protected update(e: any) {\r\n if (e.target.files) {\r\n this.selectFile(e.target.files[0]);\r\n }\r\n }\r\n\r\n /**\r\n * Select a file\r\n * @param file : the file to select \r\n */\r\n private selectFile(file: File) {\r\n const maxSize = this.dialogData.maxSize ?? 0;\r\n if (maxSize > 0) {\r\n const size = file.size / 1048576;\r\n if (size > maxSize) {\r\n this.dialogService.error(\"File troppo grande (massimo \" + SystemUtils.formatFileSize(maxSize * 1048576) + \")\");\r\n return;\r\n }\r\n }\r\n if (this.dialogData.accept) {\r\n const accept = this.dialogData.accept.toLowerCase();\r\n const a = file.name.split('.').pop()?.toLowerCase();\r\n let b = file.type.toLowerCase();\r\n if (b.startsWith('image/') && accept.includes('image/*')) {\r\n b = 'image/*';\r\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\r\n b = 'video/*';\r\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\r\n b = 'audio/*';\r\n }\r\n if (!accept.includes(a) && !accept.includes(b)) {\r\n this.dialogService.error(\"Sono accettati solo questi tipi di file: \" + accept);\r\n return;\r\n }\r\n }\r\n const reader = new FileReader();\r\n reader.onload = (_e: any) => {\r\n const img = new Image();\r\n img.onload = () => {\r\n const maxWidth = this.dialogData.maxWidth ?? 0;\r\n if (maxWidth > 0 && img.width > maxWidth) {\r\n this.dialogService.error(\"Immagine troppo larga (massimo \" + maxWidth + \" pixel)\");\r\n return;\r\n }\r\n const maxHeight = this.dialogData.maxHeight ?? 0;\r\n if (maxHeight > 0 && img.height > maxHeight) {\r\n this.dialogService.error(\"Immagine troppo alta (massimo \" + maxHeight + \" pixel)\");\r\n return;\r\n }\r\n this.pictureWidth.set(img.width);\r\n this.pictureHeight.set(img.height);\r\n this.picturePreview.set((_e.target as FileReader).result);\r\n this.file = file;\r\n this.changeDetector.markForCheck();\r\n };\r\n img.src = _e.target.result;\r\n\r\n };\r\n reader.readAsDataURL(file);\r\n }\r\n\r\n\r\n /**\r\n * Format size\r\n * @param size the file size\r\n */\r\n protected size(size: number) {\r\n return SystemUtils.formatFileSize(size);\r\n }\r\n\r\n /**\r\n * Submit selection\r\n */\r\n protected ok() {\r\n this.done.emit({ file: this.file, options: this.dialogData.options });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /**\r\n* Drag & drop functions\r\n*/\r\n protected onDragOver(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file-drop\");\r\n e.preventDefault();\r\n }\r\n protected onDragEnter(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file-drop\");\r\n e.preventDefault();\r\n }\r\n protected onDragEnd(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file\");\r\n e.preventDefault();\r\n }\r\n protected onDragLeave(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file\");\r\n e.preventDefault();\r\n }\r\n protected onDrop(e: DragEvent) {\r\n this.fileClass.set(\"selectpicture-file\");\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (e.dataTransfer.files) {\r\n this.addFiles(e.dataTransfer.files);\r\n }\r\n }\r\n\r\n /**\r\n* Add files\r\n* @param files : the files to add\r\n*/\r\n private addFiles(files: FileList) {\r\n if (files.length > 0) {\r\n this.selectFile(files[0]);\r\n }\r\n }\r\n}\r\n\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n@if (dialogData.description) {\r\n<div class=\"selectpicture-description\" [innerHtml]=\"dialogData.description | safeHtml\"></div>\r\n}\r\n<mat-dialog-content style=\"padding: 24px 0\">\r\n <div fxLayout=\"column\" fxLayoutAlign=\"center center\" fxLayoutGap=\"24px\" fxFill>\r\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui l'immagine o selezionala</i></div>\r\n <div>\r\n <input #_file type=\"file\" [hidden]=\"true\" [accept]=\"dialogData.accept ?? 'image/*'\"\r\n (change)=\"update($event)\" />\r\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\r\n </div>\r\n @if (file) {\r\n <div style=\"padding:0 24px\">\r\n <div fxLayout=\"column\" fxLayoutGape=\"5px\" fxLayoutAlign=\"center center\" fxFill>\r\n <img [src]=\"picturePreview()\" class=\"selectpicture-preview\">\r\n <div class=\"small accent bold \"><i>{{file.name}}</i></div>\r\n <div class=\"small\">Dimensioni:<i>{{pictureWidth()}} x {{pictureHeight()}} ({{size(file.size)}})</i></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData.options) {\r\n <div style=\"padding-bottom: 24px;\">\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button mat-dialog-close >Annulla</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, inject, signal, output } from '@angular/core';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { ArsCoreModule, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { SelectFile, SelectFileDialogData } from '../../definitions';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './select-file-dialog.component.html',\r\n styleUrls: ['./select-file-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FlexModule, MatButtonModule, MatCheckboxModule, FormsModule,\r\n MatDialogActions, MatDialogClose, ArsCoreModule, SafeHtmlPipe]\r\n})\r\nexport class SelectFileDialogComponent {\r\n readonly done = output<SelectFile>();\r\n private dialogService = inject(DialogService);\r\n private dialogRef = inject(MatDialogRef<SelectFileDialogComponent>);\r\n protected dialogData: SelectFileDialogData = inject(MAT_DIALOG_DATA);\r\n protected file?: File;\r\n protected fileClass = signal<'selectfile-file' | 'selectfile-file-drop'>('selectfile-file');\r\n\r\n\r\n /**\r\n * Update preview\r\n * @param e : the event\r\n */\r\n protected update(e: any) {\r\n if (e.target.files) {\r\n this.selectFile(e.target.files[0]);\r\n }\r\n }\r\n\r\n /**\r\n * Select a file\r\n * @param file : the file to select \r\n \r\n */\r\n private selectFile(file: File) {\r\n const maxSize = this.dialogData.maxSize ?? 0;\r\n if (maxSize > 0) {\r\n const size = file.size / 1048576;\r\n if (size > maxSize) {\r\n this.dialogService.error(\"File troppo grande (massimo \" + SystemUtils.formatFileSize(maxSize * 1048576) + \")\");\r\n return;\r\n }\r\n }\r\n if (this.dialogData.accept) {\r\n const accept = this.dialogData.accept.toLowerCase();\r\n const a = file.name.split('.').pop()?.toLowerCase();\r\n let b = file.type.toLowerCase();\r\n if (b.startsWith('image/') && accept.includes('image/*')) {\r\n b = 'image/*';\r\n } else if (b.startsWith('video/') && accept.includes('video/*')) {\r\n b = 'video/*';\r\n } else if (b.startsWith('audio/') && accept.includes('audio/*')) {\r\n b = 'audio/*';\r\n }\r\n if (!accept.includes(a) && !accept.includes(b)) {\r\n this.dialogService.error(\"Sono accettati solo questi tipi di file: \" + accept);\r\n return;\r\n }\r\n }\r\n this.file = file;\r\n }\r\n\r\n /**\r\n * Format size\r\n * @param size the file size\r\n */\r\n protected size(size: number) {\r\n return SystemUtils.formatFileSize(size);\r\n }\r\n\r\n /**\r\n * Submit selection\r\n */\r\n protected ok() {\r\n this.done.emit({ file: this.file, options: this.dialogData.options });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n\r\n /**\r\n * Drag & drop functions\r\n */\r\n protected onDragOver(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file-drop\");\r\n e.preventDefault();\r\n }\r\n protected onDragEnter(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file-drop\");\r\n e.preventDefault();\r\n }\r\n protected onDragEnd(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file\");\r\n e.preventDefault();\r\n }\r\n protected onDragLeave(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file\");\r\n e.preventDefault();\r\n }\r\n protected onDrop(e: DragEvent) {\r\n this.fileClass.set(\"selectfile-file\");\r\n e.preventDefault();\r\n e.stopPropagation();\r\n if (e.dataTransfer.files) {\r\n this.addFiles(e.dataTransfer.files);\r\n }\r\n }\r\n\r\n /**\r\n* Add files\r\n* @param files : the files to add\r\n*/\r\n private addFiles(files: FileList) {\r\n if (files.length > 0) {\r\n this.selectFile(files[0]);\r\n }\r\n }\r\n}\r\n\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content style=\"padding: 24px 0;\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\r\n @if (dialogData.description) {\r\n <div style=\"padding-bottom: 10px;\" [innerHtml]=\"dialogData.description | safeHtml\"></div>\r\n }\r\n <div fxFlex=\"*\" [class]=\"fileClass()\" (drop)=\"onDrop($event)\" (dragover)=\"onDragOver($event)\"\r\n (dragleave)=\"onDragLeave($event)\" (dragenter)=\"onDragEnter($event)\" (dragend)=\"onDragEnd($event)\">\r\n <div fxLayout=\"column\" fxLayoutGap=\"24px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div fxFlex=\"10px\" fxFlexAlign=\"start\" class=\"x-small secondary\"><i>Trascina qui il file o selezionalo</i></div>\r\n <div>\r\n <input #_file type=\"file\" [accept]=\"dialogData.accept\" [hidden]=\"true\" (change)=\"update($event)\" />\r\n <button type=\"button\" mat-stroked-button (click)=\"_file.click()\">Seleziona file...</button>\r\n </div>\r\n @if (file) {\r\n <div style=\"padding:0 24px\">\r\n <div fxLayout=\"column\" fxLayoutGape=\"5px\" fxLayoutAlign=\"center center\" fxFill>\r\n <div class=\"small accent bold\"><i>{{file.name}}</i></div>\r\n <div class=\"small\">Dimensioni: <i>{{size(file.size)}}</i></div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData.options) {\r\n <div style=\"padding-bottom: 24px;\">\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n @if (dialogData.helpLink) {\r\n <a mat-stroked-button href=\"{{dialogData.helpLink}}\" target=\"_blank\"\r\n >{{dialogData.helpCaption}}</a>\r\n }\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-flat-button (click)=\"ok()\" [disabled]=\"!file\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Annulla</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { TextFieldModule } from '@angular/cdk/text-field';\r\nimport { ChangeDetectionStrategy, Component, OnInit, inject, output, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDialogData, PromptDialogResult, PromptDialogType } from '../../definitions';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-dialog.component.html',\r\n styleUrls: ['./prompt-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule,\r\n MatButtonModule, MatIconModule, TextFieldModule, MatSelectModule, MatOptionModule, MatCheckboxModule, MatDialogActions, \r\n MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class PromptDialogComponent implements OnInit {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptDialogResult>();\r\n private dialogService = inject(DialogService);\r\n protected dialogData: PromptDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'fill', title: 'Inserisci dato', type: PromptDialogType.Default }\r\n protected value?: any;\r\n\r\n ngOnInit(): void {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Inserisci dato';\r\n }\r\n if (!this.dialogData.type) {\r\n this.dialogData.type = PromptDialogType.Default;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'Ok';\r\n }\r\n if (!this.dialogData.cancelCaption) {\r\n this.dialogData.cancelCaption = 'Annulla';\r\n }\r\n if (this.dialogData.initialValue && this.dialogData.type !== PromptDialogType.List) {\r\n this.value = this.dialogData.initialValue;\r\n }\r\n }\r\n\r\n /**\r\n * Done\r\n */\r\n protected ok() {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error(\"Ci sono degli errori da correggere.\");\r\n return;\r\n }\r\n if (this.dialogData.type === 1) {\r\n // Check date\r\n const date = SystemUtils.parseDate(this.value as string);\r\n if (!date || date.getFullYear() > 9999) {\r\n this.dialogService.error(\"Data non valida.\");\r\n return;\r\n }\r\n }\r\n this.done.emit({\r\n value: this.value,\r\n type: this.dialogData.type,\r\n options: this.dialogData.options\r\n });\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (!dialogData.type) {\r\n <mat-form-field [appearance]=\"dialogData.appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData.description}}</mat-label>\r\n <input type=\"text\" matInput [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\"\r\n [required]=\"dialogData.required\" maxlength=\"200\">\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\" (click)=\"value = ''\">\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\" (click)=\"value = ''\">\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\"\r\n [required]=\"dialogData.required\" cdkTextareaAutosize cdkAutosizeMinRows=\"1\" cdkAutosizeMaxRows=\"10\"\r\n maxlength=\"1000\"></textarea>\r\n @if (value) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Pulisci\" (click)=\"value = ''\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-hint align=\"end\">{{_value.value?.length || 0}}/1000 </mat-hint>\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData.type === 5) {\r\n <mat-form-field [appearance]=\"dialogData.appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData.description}}</mat-label>\r\n <mat-select [(ngModel)]=\"value\" #_value=\"ngModel\" name=\"_value\" [required]=\"dialogData.required\">\r\n @for (i of dialogData.initialValue; track $index) {\r\n <mat-option [value]=\"i.value\">\r\n {{i.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (_value.invalid) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n </div>\r\n @if (dialogData.options) {\r\n <div>\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <br>\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >{{dialogData.cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Component,\r\n OnInit,\r\n inject,\r\n signal,\r\n output,\r\n viewChild\r\n} from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatCheckboxChange, MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatOptionModule } from \"@angular/material/core\";\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogRef, MatDialogTitle } from \"@angular/material/dialog\";\r\nimport { MatDividerModule } from \"@angular/material/divider\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatListModule, MatSelectionList, MatSelectionListChange } from \"@angular/material/list\";\r\nimport { MatMenuModule } from \"@angular/material/menu\";\r\nimport { MatPaginator, MatPaginatorModule, PageEvent } from '@angular/material/paginator';\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { SafeHtmlPipe, SearchFilterPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport {\r\n SelectDialogAppend,\r\n SelectDialogData,\r\n SelectDialogDelete,\r\n SelectDialogEdit,\r\n SelectDialogFilter,\r\n SelectDialogLookup,\r\n SelectDialogResult,\r\n SelectableFilter,\r\n SelectableItem,\r\n} from \"../../definitions\";\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: \"./select-dialog.component.html\",\r\n styleUrls: [\"./select-dialog.component.scss\"],\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n standalone: true,\r\n imports: [\r\n FlexLayoutModule,\r\n MatDialogTitle,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n FormsModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatSelectModule,\r\n MatOptionModule,\r\n MatTooltipModule,\r\n MatMenuModule,\r\n MatDividerModule,\r\n MatCheckboxModule,\r\n MatDialogContent,\r\n MatListModule,\r\n MatDialogActions,\r\n MatDialogClose,\r\n MatPaginatorModule,\r\n SearchFilterPipe,\r\n SafeHtmlPipe\r\n ],\r\n})\r\nexport class SelectDialogComponent implements OnInit {\r\n readonly paginator = viewChild.required<MatPaginator>('paginator');\r\n readonly selection = viewChild.required<MatSelectionList>(\"selection\");\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private dialogRef = inject(MatDialogRef<SelectDialogComponent>);\r\n protected dialogData: SelectDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'outline', title: 'Seleziona' };\r\n readonly done = output<SelectDialogResult>();\r\n readonly edit = output<SelectDialogEdit>();\r\n readonly view = output<SelectableItem>();\r\n readonly append = output<SelectDialogAppend>();\r\n readonly delete = output<SelectDialogDelete>();\r\n readonly lookup = output<SelectDialogLookup>();\r\n readonly lookupOptions = output();\r\n readonly filter = output<SelectDialogFilter>();\r\n protected canEdit = signal<boolean>(false);\r\n protected canView = signal<boolean>(false);\r\n protected canAppend = signal<boolean>(this.dialogData.canAppend ?? false);\r\n protected canDelete = signal<boolean>(false);\r\n protected canPaginate = signal<boolean>(this.dialogData.canPaginate ?? false);\r\n // Handle submit button activity\r\n protected okDisabled = signal<boolean>(this.dialogData.mustSelect ?? true);\r\n // Used for array filtering\r\n protected filterText: string = \"\";\r\n protected filterOptions: SelectableFilter[] = [];\r\n protected filterOptionsInfo = signal<string>(\"Tutto\");\r\n // Used to sincronize lookup fields and params\r\n protected lookupField: string = \"\";\r\n private lookupParams?: any;\r\n // Used to display selected elements\r\n protected selectionInfo = signal<string>(null);\r\n protected selectionMasterIndeterminate = signal<boolean>(false);\r\n protected selectionMasterChecked = signal<boolean>(false);\r\n\r\n ngOnInit() {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'outline';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Seleziona';\r\n }\r\n if (this.dialogData.multipleSelection && !this.dialogData.items) {\r\n this.dialogData.multipleSelection = true;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = \"Ok\";\r\n }\r\n if (this.dialogData.canLookup) {\r\n this.dialogData.items = [];\r\n if (this.dialogData.lookupFields && this.dialogData.lookupFields.length > 0) {\r\n this.lookupField = this.dialogData.lookupFields[0].value;\r\n }\r\n if (this.dialogData.canFilter) {\r\n this.filterOptions = this.dialogData.filters;\r\n }\r\n if (this.dialogData.canPaginate) {\r\n if (!this.dialogData.pageSize) {\r\n this.dialogData.pageSize = 100\r\n }\r\n }\r\n }\r\n if (this.dialogData.filter || this.dialogData.lookupOnInit) {\r\n this.doFilter(this.dialogData.filter);\r\n }\r\n }\r\n\r\n /**\r\n * Mark for check\r\n * @param newTotal: the optional new total\r\n */\r\n notifyChanges(newTotal?: number) {\r\n this.dialogData.total = newTotal ?? 0;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n\r\n /**\r\n * Check if every element are selected\r\n */\r\n private isAllSelected() {\r\n const selection = this.selection();\r\n return (\r\n selection &&\r\n selection.selectedOptions &&\r\n selection.selectedOptions.selected &&\r\n selection.selectedOptions.selected.length === this.dialogData.items.length\r\n );\r\n }\r\n\r\n /**\r\n * Checks if exists a selection\r\n */\r\n private hasSelection() {\r\n const selection = this.selection();\r\n return (\r\n selection &&\r\n selection.selectedOptions &&\r\n selection.selectedOptions.selected &&\r\n selection.selectedOptions.selected.length > 0\r\n );\r\n }\r\n\r\n /**\r\n * Master selection toggle\r\n * @param e: the event\r\n */\r\n protected masterSelectionToggle(e: MatCheckboxChange) {\r\n if (e.checked)\r\n // Deselect if not allselected so that toggle makes the right choice\r\n this.selection().selectAll();\r\n else this.selection().deselectAll();\r\n this.selectionMasterIndeterminate.set(false);\r\n this.selectionMasterChecked.set(e.checked);\r\n const selection = this.selection();\r\n this.okDisabled.set(\r\n this.dialogData.mustSelect &&\r\n (!selection || selection.selectedOptions.selected.length === 0));\r\n this.updateSelectionInfo();\r\n }\r\n\r\n /**\r\n * Handle selection/deselection of an item\r\n * @param e: the event\r\n */\r\n protected select(e: MatSelectionListChange) {\r\n const selection = this.selection();\r\n if (!this.dialogData.multipleSelection) {\r\n this.selection().deselectAll();\r\n if (e.options?.length > 0)\r\n e.options[0].selected = true;\r\n this.okDisabled.set(false);\r\n } else {\r\n this.okDisabled.set(\r\n this.dialogData.mustSelect &&\r\n (!selection ||\r\n selection.selectedOptions.selected.length === 0));\r\n }\r\n\r\n // Update editors\r\n this.canEdit.set(\r\n this.dialogData.canEdit &&\r\n selection &&\r\n selection.selectedOptions.selected.length === 1);\r\n this.canView.set(\r\n this.dialogData.canView &&\r\n selection &&\r\n selection.selectedOptions.selected.length === 1);\r\n this.canDelete.set(\r\n this.dialogData.canDelete &&\r\n selection &&\r\n selection.selectedOptions.selected.length > 0);\r\n this.selectionMasterIndeterminate.set(\r\n !this.isAllSelected() && this.hasSelection());\r\n this.selectionMasterChecked.set(this.hasSelection());\r\n this.updateSelectionInfo();\r\n }\r\n\r\n /**\r\n * Update selection info\r\n */\r\n private updateSelectionInfo() {\r\n // Update selection info\r\n const selection = this.selection();\r\n if (selection && selection.selectedOptions.selected.length > 0 && this.dialogData.multipleSelection) {\r\n this.selectionInfo.set(\r\n selection.selectedOptions.selected.length +\r\n \" / \" +\r\n selection.options.length);\r\n } else {\r\n this.selectionInfo.set(null);\r\n }\r\n }\r\n\r\n /**\r\n * Clear current selection\r\n */\r\n clearSelection() {\r\n this.selectionMasterIndeterminate.set(false);\r\n this.selectionMasterChecked.set(false);\r\n this.selection().deselectAll();\r\n this.selectionInfo.set(null);\r\n }\r\n\r\n /**\r\n * Submit selection\r\n */\r\n protected ok() {\r\n if (!this.okDisabled()) {\r\n // Multi selection\r\n const selectedItems: any = [];\r\n this.selection().selectedOptions.selected.forEach((element) => {\r\n selectedItems.push(element.value);\r\n });\r\n this.done.emit({ selectedItems: selectedItems });\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n }\r\n }\r\n\r\n /**\r\n * Clear filter\r\n */\r\n protected clearFilter() {\r\n this.filterText = \"\";\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Set filter text\r\n * @param text : the new value\r\n */\r\n public setFilter(text: string) {\r\n this.filterText = text;\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n\r\n /**\r\n * Gt the current filter text\r\n * @returns the filter text\r\n */\r\n public getFilter(): string {\r\n return this.filterText;\r\n }\r\n\r\n /**\r\n * Show filter options\r\n */\r\n protected showFilterOptions() {\r\n if (this.lookupOptions) {\r\n this.lookupOptions.emit();\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter\r\n * @param text : the string to filter to\r\n */\r\n protected doFilter(text?: string, e?: KeyboardEvent) {\r\n if (text) {\r\n this.filterText = text;\r\n }\r\n if (this.dialogData.canLookup) {\r\n if (!e || e.key === 'Enter') {\r\n this.lookup.emit({ items: this.dialogData.items, filter: this.filterText, owner: this });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter using filter options\r\n * @param filterOption : the current filter option\r\n */\r\n protected doFilterByOptions(filterOption: any) {\r\n if (this.dialogData.canLookup && this.dialogData.canFilter) {\r\n this.filter.emit({\r\n items: this.dialogData.items,\r\n filter: this.filterText,\r\n filterOption: filterOption,\r\n owner: this,\r\n });\r\n this.filterOptionsInfo.set(filterOption ? (filterOption.title ?? \"Tutto\") : \"Tutto\");\r\n \r\n }\r\n }\r\n\r\n /**\r\n * Apply filter. This is accessible from public\r\n * @param params : the object with current parameters\r\n */\r\n doLookup(params: any) {\r\n if (this.dialogData.canLookup) {\r\n this.lookupParams = params;\r\n this.lookupParams.first = 0;\r\n this.lookup.emit({ items: this.dialogData.items, params: this.lookupParams, owner: this });\r\n }\r\n }\r\n\r\n /**\r\n * Update lookup paginatro\r\n * @param total : the new total items\r\n */\r\n protected updateLookupPaginator(total: number) {\r\n if (this.canPaginate()) {\r\n const paginator = this.paginator();\r\n if (paginator) {\r\n paginator.pageIndex = 0;\r\n paginator.length = total ?? 0;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Apply filter\r\n * @param e : the MatPaginator PageEvent data\r\n */\r\n protected doLookupPage(e: PageEvent) {\r\n if (this.canPaginate() && this.dialogData.canLookup) {\r\n this.clearSelection();\r\n if (!this.lookupParams) {\r\n this.lookupParams = {first: 0, count: this.dialogData.pageSize ?? 0};\r\n }\r\n this.lookupParams.first = e.pageIndex * (this.dialogData.pageSize ?? 0);\r\n this.lookup.emit({ items: this.dialogData.items, params: this.lookupParams, owner: this });\r\n }\r\n }\r\n\r\n /**\r\n * Append\r\n */\r\n protected doAppend() {\r\n this.append.emit({ items: this.dialogData.items, owner: this } as SelectDialogAppend);\r\n }\r\n\r\n /**\r\n * Edit\r\n */\r\n protected doEdit() {\r\n const selection = this.selection();\r\n if (selection.selectedOptions.selected?.length > 0) {\r\n this.edit.emit({\r\n item: selection.selectedOptions.selected[0].value,\r\n items: this.dialogData.items,\r\n owner: this\r\n } as SelectDialogEdit);\r\n }\r\n }\r\n\r\n /**\r\n * View\r\n */\r\n protected doView() {\r\n const selection = this.selection();\r\n if (selection.selectedOptions.selected?.length > 0) {\r\n this.view.emit(selection.selectedOptions.selected[0].value);\r\n }\r\n }\r\n\r\n /**\r\n * Delete\r\n */\r\n protected doDelete() {\r\n let selectedItems: any = [];\r\n this.selection().selectedOptions.selected.forEach((element) => {\r\n selectedItems.push(element.value);\r\n });\r\n this.delete.emit({\r\n items: this.dialogData.items,\r\n selectedItems: selectedItems,\r\n } as SelectDialogDelete);\r\n this.canDelete.set(false);\r\n this.canEdit.set(false);\r\n\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\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)=\"doFilter()\" matInput\r\n title=\"{{dialogData.canLookup ? 'Digita il testo e premi invio' : 'Digita il testo'}}\"\r\n [(ngModel)]=\"filterText\">\r\n @if (filterText) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Clear\" (click)=\"clearFilter()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (dialogData.canLookupWithInlineOptions) {\r\n <button type=\"button\" tabindex=\"-1\" matSuffix mat-icon-button aria-label=\"Ricerca\"\r\n (click)=\"showFilterOptions()\" matTooltip=\"Opzioni di ricerca\">\r\n <mat-icon>tune</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (!dialogData.canLookupWithOptions && dialogData.canLookup && dialogData.lookupFields) {\r\n <div fxFlex>\r\n <mat-form-field style='width:100%' [appearance]=\"dialogData.appearance\" subscriptSizing=\"dynamic\">\r\n <mat-label>Come...</mat-label>\r\n <mat-select [(value)]=\"lookupField\">\r\n @for (field of dialogData.lookupFields; track $index) {\r\n <mat-option [value]=\"field.value\">\r\n {{field.name}}\r\n </mat-option>\r\n }\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n }\r\n @if (dialogData.canLookupWithOptions) {\r\n <div fxFlex>\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-button aria-label=\"Ricerca\" (click)=\"showFilterOptions()\">\r\n <mat-icon>search</mat-icon> {{this.dialogData.searchButtonLabel ?? 'Ricerca'}}\r\n </button>\r\n </div>\r\n }\r\n @if (dialogData.canLookup && dialogData.canFilter) {\r\n <div fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\">\r\n <button type=\"button\" mat-button matTooltip=\"Filtra\" [attr.aria-label]=\"'Filtra'\"\r\n [matMenuTriggerFor]=\"menuFilter\">\r\n <mat-icon>filter_alt</mat-icon> {{filterOptionsInfo()}} <mat-icon class=\"icon-menu-drop-down\">\r\n arrow_drop_down</mat-icon>\r\n </button>\r\n <mat-menu #menuFilter=\"matMenu\" class=\"mat-menu-300\">\r\n @for (f of filterOptions; track $index) {\r\n @if (f.divider) {\r\n <mat-divider></mat-divider>\r\n }\r\n @if (f.groupName) {\r\n <span style='font-size:small; padding: 2px 4px;'><i><b>{{f.groupName}}</b></i></span>\r\n }\r\n @if (!f.groupName && !f.divider) {\r\n <button mat-menu-item (click)=\"doFilterByOptions(f)\" [attr.aria-label]=\"f.description\">\r\n @if (f.radio && f.value) {\r\n <span style=\"padding-left:40px\"></span>\r\n }\r\n <mat-icon>{{f.icon}}</mat-icon> {{f.title}}\r\n </button>\r\n }\r\n\r\n }\r\n </mat-menu>\r\n </div>\r\n </div>\r\n }\r\n @if (canEdit() || canAppend() || canView() || canDelete()) {\r\n <div fxFlex>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end center\" fxLayoutGap=\"10px\">\r\n @if (canAppend()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doAppend()\">\r\n <mat-icon aria-label=\"Aggiungi\" matTooltip=\"Aggiungi\">add</mat-icon>\r\n </button>\r\n }\r\n @if (canEdit()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doEdit()\">\r\n <mat-icon aria-label=\"Modifica\" matTooltip=\"Modifica\">edit</mat-icon>\r\n </button>\r\n }\r\n @if (canView()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doView()\">\r\n <mat-icon aria-label=\"Mostra\" matTooltip=\"Mostra\">visibility</mat-icon>\r\n </button>\r\n }\r\n @if (canDelete()) {\r\n <button type=\"button\" mat-icon-button (click)=\"doDelete()\">\r\n <mat-icon aria-label=\"Elimina\" matTooltip=\"Elimina\">delete</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n </div>\r\n }\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\" fxLayoutGap=\"10px\" fxFill style=\"padding-top: 10px;\">\r\n @if (dialogData.multipleSelection) {\r\n <div fxFlex=\"72px\" fxFlexAlign=\"center\" style=\"padding-left: 8px;\">\r\n <mat-checkbox (change)=\"$event ? masterSelectionToggle($event) : null\"\r\n [indeterminate]=\"selectionMasterIndeterminate()\" [checked]=\"selectionMasterChecked()\"\r\n [attr.aria-label]=\"'Seleziona/deseleziona tutto'\" matTooltip=\"Seleziona/deseleziona tutto\">\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if (dialogData.header) {\r\n <div class=\"text\" [innerHtml]=\"dialogData.header | safeHtml\"></div>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n</div>\r\n<mat-dialog-content style=\"padding-top:0\">\r\n <div fxLayout=\"column\" fxFill>\r\n @if (dialogData.canLookup && (!dialogData.items || dialogData.items.length == 0)) {\r\n <div class=\"text message\"><i>\r\n @if (!dialogData.emptyMessage) {\r\n <span>Nessun elemento da visualizzare.<br>Esegui una nuova ricerca o modifica quella\r\n esistente.\r\n @if (dialogData.maxItems > 0) {\r\n <span>Saranno mostrati al massimo {{dialogData.maxItems}} elementi.</span>\r\n }\r\n </span>\r\n } @else {\r\n <span [innerHtml]=\"dialogData.emptyMessage | safeHtml\"></span>\r\n }\r\n </i>\r\n </div>\r\n }\r\n <mat-selection-list #selection (selectionChange)=\"select($event)\" dense hideSingleSelectionIndicator=\"true\"\r\n [multiple]=\"dialogData.multipleSelection\">\r\n @for (item of (dialogData.items | search: (!dialogData.canLookup ? filterText : '')); track $index) {\r\n <mat-list-option [value]=\"item\" [selected]=\"item.selected\" checkboxPosition=\"before\">\r\n <div [innerHtml]=\"item.template | safeHtml\"></div>\r\n </mat-list-option>\r\n }\r\n </mat-selection-list>\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"space-between center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"accent\" style=\"padding-left:20px\">\r\n @if (selectionInfo()) {\r\n <span class=\"bold\">{{selectionInfo()}}</span>&nbsp; <span class=\"small\"> elementi selezionati</span>\r\n } @else {\r\n <span class=\"bold\">{{dialogData.total}}</span>&nbsp; <span class=\"small\">elementi</span>\r\n }\r\n </div>\r\n <div fxFlexAlign=\"center\">\r\n @if (canPaginate()) {\r\n <mat-paginator #paginator [hidePageSize]=\"true\" [pageSize]=\"dialogData.pageSize\" [showFirstLastButtons]=\"true\"\r\n (page)=\"doLookupPage($event)\" [length]=\"dialogData.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 { inject, Injectable } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { BusyTimer, ConfirmDialogOption, DeleteDialogConfirmMode, DialogService, InfoDialogComponent, ToastComponent } from '@arsedizioni/ars-utils/ui';\r\nimport { SendToDialogComponent } from '../dialogs/send-to/send-to-dialog.component';\r\nimport { SelectTreeDialogComponent } from '../dialogs/select-tree/select-tree-dialog.component';\r\nimport { PromptDialogData, SelectDialogData, SelectFileDialogData, SelectTreeDialogData } from '../definitions';\r\nimport { SelectPictureDialogComponent } from '../dialogs/select-picture/select-picture-dialog.component';\r\nimport { SelectFileDialogComponent } from '../dialogs/select-file/select-file-dialog.component';\r\nimport { PromptDialogComponent } from '../dialogs/prompt/prompt-dialog.component';\r\nimport { SelectDialogComponent } from '../dialogs/select/select-dialog.component';\r\nimport { MatSnackBarRef } from '@angular/material/snack-bar';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class ApplicationDialogService {\r\n\r\n private dialogService = inject(DialogService);\r\n\r\n public readonly baseService: DialogService = this.dialogService;\r\n\r\n /**\r\n * Open a dialog\r\n * @param component : the component\r\n * @param config : the config\r\n * @returns: the dialog object\r\n */\r\n open(component: any, config: any): MatDialogRef<any> {\r\n return this.dialogService.open(component, config);\r\n }\r\n\r\n /**\r\n * Clear busy dialog\r\n */\r\n clearBusy() {\r\n this.dialogService.clearBusy();\r\n }\r\n\r\n /**\r\n * Update busy dialog\r\n * @param message : new message\r\n * @param progress : new progress\r\n * @param progressMode : new mode (default = 'indeterminate')\r\n * @param type: new type (default = 'bar')\r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n setBusy(\r\n message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n type: 'bar' | 'spinner' | 'wait' | 'hourglass' = 'bar',\r\n action?: Observable<Object>\r\n ): boolean {\r\n return this.dialogService.setBusy(message, progress, progressMode, type, action);\r\n }\r\n\r\n /**\r\n * Display a busy dialog\r\n * @param message : new message\r\n * @param progress : new progress\r\n * @param progressMode : new mode (default = 'indeterminate')\r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n busy(message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n action?: Observable<Object>): boolean {\r\n return this.dialogService.setBusy(message, progress, progressMode, 'bar', action);\r\n }\r\n\r\n /**\r\n * Display a busy timer\r\n * @param message : new message\r\n * @param due: the number of milliseconds. Default is 100\r\n * @returns the busy timer object\r\n */\r\n busyTimer(message: string = \"Operazione in corso...\", due: number = 100): BusyTimer {\r\n return this.dialogService.busyTimer(message, due);\r\n }\r\n\r\n /**\r\n * Display a busy indeterminate dialog as hourglass\r\n * @param message : new message\r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n busyHourglass(message: string,\r\n action?: Observable<Object>): boolean {\r\n return this.setBusy(message, undefined, undefined, 'hourglass', action);\r\n }\r\n\r\n /**\r\n * Display a busy spinner dialog\r\n * @param message : new message\r\n * @param progress : new progress\r\n * @param progressMode : new mode (default = 'indeterminate')\r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n busySpinner(message: string,\r\n progress: number = -1,\r\n progressMode: 'determinate' | 'indeterminate' = 'indeterminate',\r\n action?: Observable<Object>): boolean {\r\n return this.dialogService.setBusy(message, progress, progressMode, 'spinner', action);\r\n }\r\n\r\n /**\r\n * Display a wait spinner \r\n * @param action : action to do during the execution (optional)\r\n * @returns true if a new popup has been opened\r\n */\r\n wait(\r\n action?: Observable<Object>): boolean {\r\n return this.dialogService.setBusy(undefined, undefined, undefined, 'wait', action);\r\n }\r\n\r\n\r\n /**\r\n * Display an information dialog\r\n * @param message : message\r\n * @param title : dialog title\r\n * @param okCaption : ok button caption\r\n * @param width: the preferred width\r\n * @param dismissAfter: if specified, the dialog will be closed after dismissAfter milliseconds\r\n * @param details: if specified, the details info\r\n * @param onNavigate: the callback to use for navigation. Default is null\r\n */\r\n info(\r\n message: string,\r\n title: string = 'Informazioni',\r\n okCaption: string = 'Ok',\r\n width: number = 500,\r\n dismissAfter?: number,\r\n details?: string,\r\n onNavigate?: (url: string) => void\r\n ): MatDialogRef<InfoDialogComponent> {\r\n return this.dialogService.info(\r\n message,\r\n title,\r\n okCaption,\r\n width,\r\n dismissAfter,\r\n details,\r\n onNavigate\r\n );\r\n }\r\n\r\n /**\r\n * Display an error dialog\r\n * @param message : message\r\n * @param log : the error log\r\n * @param title : dialog title\r\n * @param okCaption : ok button caption\r\n * @param width: the preferred width\r\n * @param dismissAfter: if specified, the dialog will be closed after dismissAfter milliseconds \r\n */\r\n error(\r\n message: string,\r\n log?: string,\r\n title: string = 'Errore',\r\n okCaption: string = 'Ok',\r\n width: number = 500,\r\n dismissAfter?: number,\r\n ): MatDialogRef<InfoDialogComponent> {\r\n return this.dialogService.error(\r\n message,\r\n log,\r\n title,\r\n okCaption,\r\n width,\r\n dismissAfter\r\n );\r\n }\r\n\r\n /**\r\n * Display toast\r\n * @param message : message to display\r\n * @param duration : duration in msec\r\n * @param icon : the mat-icon to display\r\n * @param actionCaption action button caption\r\n */\r\n toast(\r\n message: string,\r\n duration: number = 2000,\r\n icon: string = 'check',\r\n actionCaption?: string\r\n ): MatSnackBarRef<ToastComponent> {\r\n return this.dialogService.toast(\r\n message,\r\n duration,\r\n icon,\r\n actionCaption);\r\n }\r\n\r\n /**\r\n * Display a confirm dialog\r\n * @param message : html message\r\n * @param title : dialog title\r\n * @param okCaption : ok button caption\r\n * @param cancelCaption : cancel button caption\r\n * @param otherCaption : other button caption\r\n * @param options: check box options\r\n * @param width: the preferred width\r\n */\r\n confirm(\r\n message: string,\r\n title: string = 'Conferma',\r\n okCaption: string = 'Si',\r\n cancelCaption: string = 'No',\r\n otherCaption?: string,\r\n options?: ConfirmDialogOption[],\r\n width: number = 500,\r\n details?: string\r\n ) {\r\n return this.dialogService.confirm(\r\n message,\r\n title,\r\n okCaption,\r\n cancelCaption,\r\n otherCaption,\r\n options,\r\n width,\r\n details\r\n )\r\n }\r\n\r\n /**\r\n * Display a delete dialog\r\n * @param message : html message\r\n * @param title : dialog title\r\n * @param confirmMode : the confirm mode\r\n * @param okCaption : ok button caption\r\n * @param cancelCaption : cancel button caption\r\n * @param otherCaption : other button caption\r\n * @param options: check box options\r\n * @param width: the preferred width\r\n */\r\n delete(\r\n message: string,\r\n title: string = 'Attenzione',\r\n confirmMode: DeleteDialogConfirmMode = DeleteDialogConfirmMode.None,\r\n okCaption: string = 'Si',\r\n cancelCaption: string = 'No',\r\n width: number = 500,\r\n details?: string\r\n ) {\r\n return this.dialogService.delete(\r\n message,\r\n title,\r\n confirmMode,\r\n okCaption,\r\n cancelCaption,\r\n width,\r\n details\r\n )\r\n }\r\n\r\n /**\r\n* Sent to\r\n* @param title : title\r\n* @param allowPopulate: true if the populate fuction is allowed\r\n* @param count : elements to send or null\r\n* @param options : checkable option list\r\n* @param width: the preferred width\r\n*/\r\n sendTo(\r\n title: string = 'Invia per email',\r\n allowPopulate: boolean = false,\r\n count?: number,\r\n options?: any,\r\n width: number = 500\r\n ): MatDialogRef<SendToDialogComponent, any> {\r\n return this.dialogService.open(SendToDialogComponent, {\r\n ariaLabel: 'invia per email',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n count: count,\r\n appearance: 'fill',\r\n allowPopulate: allowPopulate,\r\n options: options\r\n },\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Select a tree node\r\n * @param nodes : tree nodes\r\n * @param title : title\r\n * @param description : description\r\n * @param initialFilter : initial filter\r\n * @param width: the preferred width\r\n * @param okCaption : ok catpion button\r\n */\r\n selectTree(\r\n nodes: any,\r\n title: string = 'Seleziona un elemento',\r\n description?: string,\r\n initialFilter?: string,\r\n width: number = 800,\r\n okCaption: string = 'Ok',\r\n canAppend: boolean = false\r\n ): MatDialogRef<SelectTreeDialogComponent, any> {\r\n return this.dialogService.open(SelectTreeDialogComponent, {\r\n ariaLabel: 'seleziona un elemento',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n description: description,\r\n initialFilter: initialFilter,\r\n okCaption: okCaption,\r\n nodes: nodes,\r\n appearance: 'outline',\r\n canAppend: canAppend\r\n } as SelectTreeDialogData,\r\n closeOnNavigation: false,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n /**\r\n* Display a select a picture dialog\r\n* @param title : dialog title\r\n* @param descritpion : brief description\r\n* @param okCaption : ok button caption\r\n* @param options : checkable option list\r\n* @param width: the preferred width\r\n* @param maxSize: the maximum file size accepted in mb\r\n* @param maxPictureWidth: the maximum picture width accepted\r\n* @param maxPictureHeight: the maximum picture height accepted\r\n*/\r\n selectPicture(\r\n title: string = 'Seleziona immagine',\r\n descritpion?: string,\r\n okCaption: string = 'Ok',\r\n options?: any,\r\n width: number = 600,\r\n maxSize?: number,\r\n maxPictureWidth?: number,\r\n maxPictureHeight?: number\r\n ): MatDialogRef<SelectPictureDialogComponent, any> {\r\n return this.dialogService.open(SelectPictureDialogComponent, {\r\n ariaLabel: 'seleziona immagine',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n description: descritpion,\r\n okCaption: okCaption,\r\n options: options,\r\n appearance: 'fill',\r\n maxSize: maxSize,\r\n maxWidth: maxPictureWidth,\r\n maxHeight: maxPictureHeight\r\n } as SelectFileDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Display a select a file dialog\r\n * @param title : dialog title\r\n * @param descritpion : brief description\r\n * @param okCaption : ok button caption\r\n * @param helpLink : help link url\r\n * @param helpCaption : help link caption\r\n * @param options : checkable option list\r\n * @param width: the preferred width\r\n * @param maxSize: the maximum file size accepted in mb\r\n * @param accept: the accepted file extensions\r\n */\r\n selectFile(\r\n title: string = 'Seleziona file',\r\n descritpion?: string,\r\n okCaption: string = 'Ok',\r\n helpLink?: string,\r\n helpCaption?: string,\r\n options?: any,\r\n width: number = 600,\r\n maxSize?: number,\r\n accept?: string\r\n ): MatDialogRef<SelectFileDialogComponent, any> {\r\n return this.dialogService.open(SelectFileDialogComponent, {\r\n ariaLabel: 'seleziona file',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n description: descritpion,\r\n okCaption: okCaption,\r\n helpLink: helpLink,\r\n helpCaption: helpCaption,\r\n options: options,\r\n appearance: 'fill',\r\n maxSize: maxSize,\r\n accept: accept\r\n } as SelectFileDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Display a multipourpose selection and CRUD dialog\r\n * @param data : the dialog configuration model\r\n * @param disableClose : dialog disable close param\r\n * @param closeOnNavigation : dialog close on navigation param\r\n */\r\n select(data: SelectDialogData,\r\n disableClose: boolean = true,\r\n closeOnNavigation: boolean = true\r\n ): MatDialogRef<SelectDialogComponent, any> {\r\n if (!data.appearance) data.appearance = 'outline';\r\n return this.dialogService.open(SelectDialogComponent, {\r\n ariaLabel: 'seleziona',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: data,\r\n closeOnNavigation: closeOnNavigation,\r\n disableClose: disableClose,\r\n minWidth: '375px',\r\n maxWidth: (data.width ? data.width : 800) + 'px',\r\n width: '100%'\r\n });\r\n }\r\n\r\n /**\r\n * Prompt user to insert a value\r\n * @param title : the dialog title\r\n * @param type : the input type: 0 = text, 1 = date, 2 = number\r\n * @param description : the placeholder description\r\n * @param initialValue : the initial value\r\n * @param okCaption : ok button caption\r\n * @param cancelCaption : cancel button caption\r\n * @param options : checkable option list\r\n * @param width: the preferred width\r\n * @param required: ture if the input is required\r\n */\r\n prompt(\r\n title: string,\r\n type: number = 0,\r\n description: string,\r\n initialValue?: any,\r\n okCaption: string = 'Ok',\r\n cancelCaption: string = 'Annulla',\r\n options?: any,\r\n width: number = 500,\r\n required?: boolean,\r\n ): MatDialogRef<PromptDialogComponent> {\r\n return this.dialogService.open(PromptDialogComponent, {\r\n ariaLabel: 'inserisci valore',\r\n autoFocus: true,\r\n restoreFocus: false,\r\n data: {\r\n title: title,\r\n type: type,\r\n description: description,\r\n initialValue: initialValue,\r\n okCaption: okCaption,\r\n cancelCaption: cancelCaption,\r\n appearance: 'fill',\r\n required: required,\r\n options: options\r\n } as PromptDialogData,\r\n closeOnNavigation: false,\r\n disableClose: true,\r\n minWidth: '375px',\r\n maxWidth: width + 'px',\r\n width: '100%'\r\n });\r\n }\r\n}","import { NgModule } from \"@angular/core\";\r\nimport { MatPaginatorIntl } from '@angular/material/paginator';\r\nimport { PaginatorIntl } from '@arsedizioni/ars-utils/ui';\r\nimport { ResizeTableColumnDirective } from './directives/resize-table-column.directive';\r\n\r\n@NgModule({\r\n imports: [\r\n ResizeTableColumnDirective,\r\n ],\r\n exports: [\r\n ResizeTableColumnDirective,\r\n ],\r\n providers: [\r\n { provide: MatPaginatorIntl, useClass: PaginatorIntl }\r\n ]\r\n})\r\nexport class ArsUIApplicationModule { }\r\n\r\nexport * from \"./definitions\";\r\nexport * from \"./filters\";\r\nexport * from \"./services/applicationDialog.service\";\r\n\r\n","import { ChangeDetectionStrategy, Component, OnInit, inject, output, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { DateInterval, DateIntervalChangeDirective, SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDateDialogResult, PromptDialogData, PromptDialogType } from '../../definitions';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-date-dialog.component.html',\r\n styleUrls: ['./prompt-date-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatFormFieldModule, MatInputModule, MatDatepickerModule, DateIntervalChangeDirective, MatButtonModule, MatIconModule,\r\n MatCheckboxModule, MatDialogActions, MatDialogClose, SafeHtmlPipe]\r\n})\r\nexport class PromptDateDialogComponent implements OnInit {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptDateDialogResult>();\r\n private dialogService = inject(DialogService);\r\n protected dialogData: PromptDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'fill', title: 'Inserisci dato', type: PromptDialogType.Default }\r\n protected value?: any;\r\n\r\n\r\n ngOnInit(): void {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Inserisci dato';\r\n }\r\n if (!this.dialogData.type) {\r\n this.dialogData.type = PromptDialogType.Default;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'Ok';\r\n }\r\n if (!this.dialogData.cancelCaption) {\r\n this.dialogData.cancelCaption = 'Annulla';\r\n }\r\n if (this.dialogData.type !== PromptDialogType.Date && this.dialogData.type !== PromptDialogType.DateInterval) {\r\n this.dialogData.type = PromptDialogType.Date;\r\n }\r\n if (this.dialogData.type === PromptDialogType.DateInterval) {\r\n if (this.dialogData.initialValue) {\r\n this.value = this.dialogData.initialValue as DateInterval;\r\n } else {\r\n this.value = new DateInterval();\r\n }\r\n } else {\r\n if (this.dialogData.initialValue) {\r\n this.value = this.dialogData.initialValue as Date;\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Done\r\n */\r\n protected ok() {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error(\"Ci sono degli errori da correggere.\");\r\n return;\r\n }\r\n this.done.emit({ \r\n value: this.dialogData.type === PromptDialogType.Date \r\n ? this.value as Date\r\n : this.value as DateInterval,\r\n type: this.dialogData.type,\r\n options: this.dialogData.options });\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content>\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n @if (dialogData.type === 1) {\r\n <mat-form-field [appearance]=\"dialogData.appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData.description}}</mat-label>\r\n <input matInput [matDatepicker]=\"picker\" [(ngModel)]=\"value\" name=\"_value\" #_value=\"ngModel\"\r\n [required]=\"dialogData.required\">\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-datepicker #picker></mat-datepicker>\r\n @if (_value.invalid) {\r\n <mat-error>Data non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n @if (dialogData.type === 4) {\r\n <mat-form-field [appearance]=\"dialogData.appearance\" style=\"width: 100%;\">\r\n <mat-label>{{dialogData.description}}</mat-label>\r\n <mat-date-range-input [rangePicker]=\"picker\" min=\"1750-01-01\" [required]=\"dialogData.required\">\r\n <input matStartDate [(ngModel)]=\"value.from\" [dateIntervalChange]=\"value\" #rangeFrom1=\"ngModel\"\r\n name=\"rangeFrom1\" placeholder=\"Da data\">\r\n <input matEndDate [(ngModel)]=\"value.to\" [dateIntervalChange]=\"value\" [end]=\"true\" #rangeTo1=\"ngModel\"\r\n name=\"rangeTo1\" placeholder=\"A data\">\r\n </mat-date-range-input>\r\n @if (value.from || value.to) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"value.clear()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n <mat-date-range-picker #picker></mat-date-range-picker>\r\n @if (rangeFrom1.invalid || rangeTo1.invalid) {\r\n <mat-error>Intervallo non valido.</mat-error>\r\n }\r\n </mat-form-field>\r\n }\r\n\r\n </div>\r\n @if (dialogData.options) {\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <br>\r\n\r\n }\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >{{dialogData.cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, OnInit, inject, output, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { SafeHtmlPipe, SystemUtils, TimeValidatorDirective } from '@arsedizioni/ars-utils/core';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDialogResult, PromptDialogType, PromptTimeDialogData } from '../../definitions';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-time-dialog.component.html',\r\n styleUrls: ['./prompt-time-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule,\r\n MatFormFieldModule, MatInputModule, MatButtonModule, MatIconModule,\r\n MatDialogActions, MatDialogClose, TimeValidatorDirective,SafeHtmlPipe]\r\n})\r\nexport class PromptTimeDialogComponent implements OnInit {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptDialogResult>();\r\n private dialogService = inject(DialogService);\r\n\r\n protected dialogData: PromptTimeDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'fill', title: 'Inserisci dato', type: PromptDialogType.Default }\r\n\r\n protected value?: any;\r\n\r\n\r\n ngOnInit(): void {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Inserisci dato';\r\n }\r\n if (!this.dialogData.type) {\r\n this.dialogData.type = PromptDialogType.Default;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'Ok';\r\n }\r\n if (!this.dialogData.cancelCaption) {\r\n this.dialogData.cancelCaption = 'Annulla';\r\n }\r\n if (this.dialogData.type !== PromptDialogType.Time) {\r\n this.dialogData.type = PromptDialogType.Time;\r\n }\r\n if (this.dialogData.initialValue) {\r\n this.value = this.dialogData.initialValue;\r\n }\r\n }\r\n\r\n /**\r\n * Done\r\n */\r\n ok() {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error(\"Ci sono degli errori da correggere.\");\r\n return;\r\n }\r\n this.done.emit({ value: this.value, options: this.dialogData.options });\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\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\" [required]=\"dialogData.required\"\r\n time [slots]=\"dialogData.slots\">\r\n @if (_value.invalid) {\r\n <mat-error>Ora non valida.</mat-error>\r\n }\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n <div fxFlex=\"45\" fxFlex.xs=\"100\" fxFlexAlign=\"start\">\r\n @if(this.dialogData.slots) {\r\n <div class=\"small bold uppercase\">Orari disponibili:</div>\r\n <ul class=\"small\">\r\n @for (s of this.dialogData.slots.replaceAll('-', ' - ').split('|'); track $index) {\r\n <li>{{s}}</li>\r\n }\r\n </ul>\r\n }\r\n </div>\r\n </div>\r\n @if (dialogData.options) {\r\n <div>\r\n @for (o of dialogData.options; track $index; let i = $index) {\r\n <div>\r\n <mat-checkbox [(ngModel)]=\"o.value\" name=\"opt_{{i}}\">\r\n {{o.description}}\r\n </mat-checkbox>\r\n </div>\r\n }\r\n <br>\r\n </div>\r\n }\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" \r\n (click)=\"ok()\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" \r\n >{{dialogData.cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, Component, OnInit, inject, output, viewChild } from '@angular/core';\r\nimport { FormsModule, NgForm } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogActions, MatDialogClose, MatDialogContent, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { DialogService, OtpInputComponent } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexModule } from '@ngbracket/ngx-layout/flex';\r\nimport { PromptDialogData, PromptDialogType, PromptOtpDialogResult } from '../../definitions';\r\n\r\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './prompt-otp-dialog.component.html',\r\n styleUrls: ['./prompt-otp-dialog.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogTitle, MatDialogContent, FormsModule, FlexModule, MatButtonModule, MatIconModule,\r\n MatDialogActions, MatDialogClose, SafeHtmlPipe, OtpInputComponent]\r\n})\r\nexport class PromptOtpDialogComponent implements OnInit {\r\n readonly f = viewChild.required<NgForm>('f');\r\n readonly done = output<PromptOtpDialogResult>();\r\n private dialogService = inject(DialogService);\r\n protected dialogData: PromptDialogData = inject(MAT_DIALOG_DATA) ?? { appearance: 'fill', title: 'Conferma la tua identità', type: PromptDialogType.Default }\r\n protected value?: any;\r\n\r\n\r\n ngOnInit(): void {\r\n if (!this.dialogData.appearance) {\r\n this.dialogData.appearance = 'fill';\r\n }\r\n if (!this.dialogData.title) {\r\n this.dialogData.title = 'Conferma la tua identità';\r\n }\r\n if (!this.dialogData.type) {\r\n this.dialogData.type = PromptDialogType.Default;\r\n }\r\n if (!this.dialogData.okCaption) {\r\n this.dialogData.okCaption = 'Ok';\r\n }\r\n if (!this.dialogData.cancelCaption) {\r\n this.dialogData.cancelCaption = 'Annulla';\r\n }\r\n }\r\n\r\n /**\r\n * Done\r\n */\r\n protected ok() {\r\n if (this.f().form.invalid) {\r\n this.dialogService.error(\"Ci sono degli errori da correggere.\");\r\n return;\r\n }\r\n this.done.emit({value: this.value});\r\n }\r\n}\r\n","<h2 mat-dialog-title [innerHTML]=\"dialogData.title | safeHtml\"></h2>\r\n<mat-dialog-content>\r\n @if (dialogData.description) {\r\n <div [innerHtml]=\"dialogData.description | safeHtml\" style=\"padding-bottom: 20px;\"></div>\r\n }\r\n <form name=\"form\" #f=\"ngForm\" novalidate>\r\n <div fxLayout=\"column\" fxLayoutGap=\"32px\" fxFill>\r\n <div fxFlex=\"*\" fxLayout=\"column\" fxFill>\r\n <otp-input name=\"otp\" [(ngModel)]=\"value\" required></otp-input> \r\n </div>\r\n <br>\r\n </div>\r\n </form>\r\n</mat-dialog-content>\r\n<mat-dialog-actions>\r\n <div fxLayout=\"row\" fxLayoutAlign=\"end\" fxFill>\r\n <button mat-flat-button [disabled]=\"f.form.invalid\" (click)=\"ok()\">{{dialogData.okCaption}}</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >{{dialogData.cancelCaption}}</button>\r\n </div>\r\n</mat-dialog-actions>","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, DoCheck, ElementRef, HostBinding, Input, OnChanges, OnDestroy, OnInit, Optional, Renderer2, Self, SimpleChanges, ViewChild, inject, input, output } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl, FormsModule } from '@angular/forms';\r\nimport { MatFormFieldControl, MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FileInfo, FileSizeValidatorDirective, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { Subject } from 'rxjs';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { UIService } from '@arsedizioni/ars-utils/ui';\r\n\r\n@Component({\r\n selector: 'file-input',\r\n templateUrl: './file-input.component.html',\r\n styleUrls: ['./file-input.component.scss'],\r\n providers: [{ provide: MatFormFieldControl, useExisting: FileInputComponent }],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatFormFieldModule, MatInputModule, FormsModule, FileSizeValidatorDirective, MatButtonModule,\r\n MatIconModule, MatTooltipModule]\r\n})\r\nexport class FileInputComponent\r\n implements\r\n OnInit,\r\n OnDestroy,\r\n DoCheck,\r\n OnChanges,\r\n MatFormFieldControl<FileInfo>,\r\n ControlValueAccessor {\r\n\r\n @ViewChild('__file') __file!: ElementRef;\r\n\r\n private renderer = inject(Renderer2);\r\n private uiService = inject(UIService);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n\r\n // Initialize\r\n static nextId = 0;\r\n readonly stateChanges = new Subject<void>();\r\n private previousNativeValue: any;\r\n controlType: string = 'file-input';\r\n focused = false;\r\n protected fileSize: number;\r\n\r\n protected canCapture: boolean = false;\r\n\r\n private _value: FileInfo = new FileInfo();\r\n set value(value: FileInfo) {\r\n this._value = value;\r\n this.propagateChange(this._value);\r\n this.stateChanges.next();\r\n this.changed.emit(this._value);\r\n }\r\n get value() {\r\n return this._value;\r\n }\r\n get size() {\r\n return this._value && this._value.file.size;\r\n }\r\n\r\n private _required: boolean = false;\r\n @Input()\r\n get required() {\r\n return this._required;\r\n }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n private _disabled: boolean = false;\r\n @Input()\r\n get disabled() {\r\n if (this.ngControl && this.ngControl.disabled != null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n private _placeholder: string = '';\r\n @Input()\r\n get placeholder() {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n\r\n @Input() fileName?: string;\r\n readonly maxSizeMb = input<number>(5);\r\n readonly minSizeMb = input<number>(0);\r\n readonly isNew = input<boolean>(false);\r\n readonly canPreview = input<boolean>(false);\r\n readonly appearance = input<'fill' | 'outline' | undefined>(this.uiService.appearance);\r\n readonly accept = input<string>();\r\n get empty(): boolean {\r\n return !this._value || !this._value.file;\r\n }\r\n get errorState() {\r\n return this.ngControl.errors != null && this.ngControl.touched;\r\n }\r\n @HostBinding() id = `${this.controlType}-${FileInputComponent.nextId++}`;\r\n @HostBinding('class.floating')\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n @HostBinding('attr.aria-describedBy') describedBy = '';\r\n\r\n readonly changed = output<FileInfo>();\r\n readonly download = output();\r\n readonly preview = output();\r\n\r\n private propagateChange: (_: any) => void = (_: any) => { };\r\n private propagateTouched: () => void = () => { };\r\n\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n async ngOnInit() {\r\n await this.setupDevices();\r\n }\r\n\r\n /**\r\n * Setup capture devices \r\n */\r\n async setupDevices() {\r\n this.canCapture = false;\r\n if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {\r\n try {\r\n const stream = await navigator.mediaDevices.getUserMedia({\r\n video: true\r\n });\r\n if (stream) {\r\n this.canCapture = true;\r\n }\r\n } catch { }\r\n }\r\n if (!this.placeholder || this.placeholder === 'Seleziona file') {\r\n this.placeholder =\r\n this.canCapture\r\n ? \"Seleziona file o acquisisci con fotocamera\"\r\n : \"Seleziona file\"\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n ngOnDestroy() {\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngDoCheck() {\r\n this.updateInputDirtyCheck();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n if (changes.currentValue != changes.previousValue) {\r\n this.propagateChange(changes.currentValue);\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.propagateTouched = fn;\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n this.renderer.setProperty(elem, 'disabled', isDisabled);\r\n }\r\n }\r\n\r\n onContainerClick() {\r\n if (!this.focused) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n elem.focus();\r\n this.propagateTouched();\r\n }\r\n }\r\n }\r\n\r\n protected updateInputDirtyCheck() {\r\n const newValue = this._value;\r\n if (this.previousNativeValue !== newValue) {\r\n this.previousNativeValue = newValue;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n /**\r\n * Select a file\r\n * @param e : event\r\n */\r\n protected selectFile(e: any) {\r\n if (e.target.files) {\r\n const f = e.target.files[0];\r\n const fileInfo = new FileInfo();\r\n const fileSize = f.size / 1048576;\r\n fileInfo.file = f;\r\n fileInfo.valid =\r\n (!this.maxSizeMb || fileSize <= this.maxSizeMb()) &&\r\n (!this.minSizeMb || fileSize >= this.minSizeMb());\r\n this.writeValue(fileInfo);\r\n this.fileName = f.name;\r\n this.fileSize = Math.round(fileSize);\r\n \r\n }\r\n }\r\n\r\n /**\r\n * Check if a file has been selected\r\n */\r\n protected hasFile(): boolean {\r\n return this._value && this._value.file;\r\n }\r\n\r\n /**\r\n * Clear file\r\n */\r\n protected clearFile() {\r\n if (this.hasFile()) {\r\n this.fileName = undefined;\r\n this.fileSize = 0;\r\n let fi = new FileInfo();\r\n fi.file = undefined;\r\n fi.valid = !this.required\r\n this.writeValue(fi);\r\n this.__file.nativeElement.value = '';\r\n }\r\n }\r\n\r\n /**\r\n * Download\r\n */\r\n protected downloadFile() {\r\n if (!this.isNew()) this.download.emit();\r\n }\r\n\r\n /**\r\n * Preview\r\n */\r\n protected previewFile() {\r\n if (!this.isNew() && this.canPreview()) this.preview.emit();\r\n }\r\n}\r\n","<mat-form-field style=\"width:100%\" [appearance]=\"appearance()\">\r\n <mat-label>{{placeholder}}</mat-label>\r\n <input type=\"file\" [hidden]=\"true\" [accept]=\"accept()\" (change)=\"selectFile($event)\" #__file />\r\n <input name=\"_fileName\" #_fileName=\"ngModel\" [(ngModel)]=\"fileName\" [id]=\"id\" matInput readonly [required]=\"required\"\r\n fileSize [size]=\"fileSize\" [maxSizeMb]=\"maxSizeMb()\" [minSizeMb]=\"minSizeMb()\" [disabled]=\"disabled\" />\r\n @if (hasFile()) {\r\n <button type=\"button\" tabindex=\"-1\" mat-icon-button matSuffix aria-label=\"Azzera\" (click)=\"clearFile()\" [disabled]=\"disabled\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n @if (!disabled) {\r\n <button type=\"button\" type=\"button\" mat-icon-button matSuffix (click)=\"__file.click()\" aria-label=\"Seleziona file\"\r\n matTooltip=\"Seleziona\" [disabled]=\"disabled\">\r\n <mat-icon>add</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew() && canPreview()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"previewFile()\" aria-label=\"Anteprima\" matTooltip=\"Anteprima\" [disabled]=\"disabled\">\r\n <mat-icon>preview</mat-icon>\r\n </button>\r\n }\r\n @if (!isNew()) {\r\n <button type=\"button\" mat-icon-button matSuffix (click)=\"downloadFile()\" aria-label=\"Scarica file\"\r\n matTooltip=\"Scarica\" [disabled]=\"disabled\">\r\n <mat-icon>save_alt</mat-icon>\r\n </button>\r\n }\r\n @if (hasFile() && fileSize > 0) {\r\n <mat-hint align=\"start\">{{fileSize}} MB</mat-hint>\r\n }\r\n @if (hasFile() && fileSize == 0) {\r\n <mat-hint align=\"start\">\r\n &gt; 1 MB</mat-hint>\r\n } @if (maxSizeMb()) {\r\n <mat-hint align=\"end\">Massimo {{maxSizeMb()}} MB\r\n </mat-hint>\r\n }\r\n @if (_fileName.invalid && !hasFile()) {\r\n <mat-error>Obbligatorio.</mat-error>\r\n }\r\n @if (_fileName.invalid && hasFile()) {\r\n <mat-error>Dimensione non consentita.</mat-error>\r\n }\r\n</mat-form-field>","import { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Component, OnInit, OnDestroy, ChangeDetectionStrategy, inject, signal, ElementRef, viewChild } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogActions, MatDialogClose } from '@angular/material/dialog';\r\nimport { Subject } from 'rxjs';\r\nimport { SafeUrlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\nexport interface FilePreviewDialogData {\r\n url?: string;\r\n embed?: boolean;\r\n authToken?: string;\r\n}\r\n\r\n\r\n@Component({\r\n templateUrl: './file-preview.component.html',\r\n styleUrls: ['./file-preview.component.scss'],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [MatDialogContent, FlexLayoutModule, MatDialogActions, MatButtonModule, MatTooltipModule,\r\n MatDialogClose, SafeUrlPipe]\r\n})\r\nexport class FilePreviewComponent implements OnInit, OnDestroy {\r\n readonly iframe = viewChild<ElementRef>('iframe');\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private httpClient = inject(HttpClient);\r\n private dialogService = inject(DialogService);\r\n protected dialogData: FilePreviewDialogData = inject(MAT_DIALOG_DATA);\r\n protected url = signal(null);\r\n\r\n ngOnInit() {\r\n if (this.dialogData) {\r\n if (!this.dialogData.embed) {\r\n this.dialogService.setBusy(\"Download in corso...\");\r\n this.httpClient.get(\r\n this.dialogData.url,\r\n {\r\n headers:\r\n this.dialogData.authToken\r\n ? new HttpHeaders().set(\"Authorization\", this.dialogData.authToken)\r\n : new HttpHeaders(),\r\n responseType: 'blob'\r\n }\r\n ).subscribe({\r\n next: (res: any) => {\r\n this.url.set(URL.createObjectURL(res));\r\n this.dialogService.clearBusy();\r\n },\r\n error: () => {\r\n this.dialogService.clearBusy();\r\n }\r\n });\r\n } else {\r\n this.url.set('https://view.officeapps.live.com/op/embed.aspx?src=' + encodeURIComponent(this.dialogData.url));\r\n }\r\n }\r\n\r\n }\r\n\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n this.url.set(null);\r\n }\r\n\r\n /**\r\n * Load completed\r\n */\r\n protected loaded() {\r\n const iframe = this.iframe()?.nativeElement;\r\n if (!iframe) { return; }\r\n \r\n try {\r\n iframe.contentWindow?.scrollTo(0, 0);\r\n \r\n // Resize and center single image\r\n if (!this.dialogData?.embed && iframe.contentDocument) { \r\n const images = iframe.contentDocument.querySelectorAll('img') || [];\r\n if (images.length === 1) { \r\n Object.assign(images[0].style, {\r\n position: 'absolute',\r\n top: '50%',\r\n left: '50%',\r\n transform: 'translate(-50%, -50%)',\r\n maxWidth: images[0].style.maxWidth || '100%',\r\n maxHeight: images[0].style.maxHeight || '100%'\r\n });\r\n const iframeBody = iframe.contentDocument.body;\r\n if (iframeBody && !iframeBody.style.height) {\r\n iframeBody.style.height = '100%';\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.error('Impossibile accedere al contenuto dell\\'iframe:', e);\r\n }\r\n }\r\n\r\n /**\r\n * Download manually\r\n */\r\n protected download() {\r\n window.open(this.url(), '_blank');\r\n }\r\n\r\n /**\r\n * Troubles with pdf?\r\n */\r\n protected troubles() {\r\n this.dialogService.info(\r\n \"<p>Se non riesci a visualizzare l'anteprima dei file PDF probabilmente devi abilitare un'impostazione del tuo browser.</p>\" +\r\n \"<b>Per Google Chrome</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'><i>impostazioni > privacy e sicurezza > impostazioni sito > documenti PDF</i></p>\" +\r\n \"<b>Per Microsoft Chrome</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'><i>impostazioni > cookie e autorizzazioni sito > documenti PDF</i></p>\" +\r\n \"<b>Per Mozilla Firefox</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'><i>impostazioni > generale > applicazioni</i></p>\" +\r\n \"<b>Altri browser</b><br>\" +\r\n \"<p class='small' style='padding-left:10px'>Fate riferimento alla documentazione specifica del vostro browser.</p>\",\r\n \"Problemi con lee anteprime dei file PDF?\"\r\n )\r\n }\r\n}\r\n\r\n\r\n\r\n","<mat-dialog-content class=\"file-preview\" id=\"file-preview-scrollable\">\r\n <div class=\"content\">\r\n @if (!url()) {\r\n <div class=\"loading\">Caricamento in corso...</div>\r\n } @else {\r\n <iframe class=\"iframe\" #iframe (load)=\"loaded()\" [src]=\"url() | safeUrl\"></iframe>\r\n }\r\n </div>\r\n</mat-dialog-content>\r\n<mat-dialog-actions id=\"file-preview-fixed\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"50\">\r\n <button mat-stroked-button (click)=\"troubles()\"\r\n matTooltip=\"Fai click se non riesci a visualizzare l'anteprima dei file PDF\">Problemi con i PDF?</button>\r\n </div>\r\n <div fxFlex=\"50\" fxLayoutAlign=\"end\">\r\n <button mat-stroked-button (click)=\"download()\">Scarica</button>\r\n <button mat-stroked-button [mat-dialog-close]=\"true\" >Chiudi</button>\r\n </div>\r\n </div>\r\n</mat-dialog-actions>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnInit, effect, inject, input, signal, output } from \"@angular/core\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatDividerModule } from \"@angular/material/divider\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatMenuModule } from \"@angular/material/menu\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { CurrentFilter, CurrentFilterChanged, FilterGroup, FilterItem, Filters } from '../../filters';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\n\r\n@Component({\r\n selector: \"filter-bar\",\r\n templateUrl: \"./filter-bar.component.html\",\r\n styleUrls: [\"./filter-bar.component.scss\"],\r\n standalone: true,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n imports: [FlexLayoutModule, MatFormFieldModule, MatInputModule, FormsModule,\r\n MatTooltipModule, MatButtonModule, MatIconModule, MatMenuModule, MatDividerModule, SafeHtmlPipe]\r\n})\r\nexport class FilterBarComponent implements OnInit {\r\n readonly changed = output<CurrentFilterChanged>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n readonly filters = input<any>();\r\n readonly canFilterByFlt1 = signal<boolean>(false);\r\n readonly canFilterByFlt2 = signal<boolean>(false);\r\n readonly canFilterByFlt3 = signal<boolean>(false);\r\n readonly canFilterByFlt4 = signal<boolean>(false);\r\n readonly canFilterByFlt5 = signal<boolean>(false);\r\n readonly canFilterByText = input<boolean>(false);\r\n readonly canFilterByText2 = input<boolean>(false);\r\n readonly canFilterByText3 = input<boolean>(false);\r\n readonly initialText = input<string>(null);\r\n readonly initialText2 = input<string>(null);\r\n readonly initialText3 = input<string>(null);\r\n readonly textName = input<string>(\"testo\");\r\n readonly text2Name = input<string>(\"...\");\r\n readonly text3Name = input<string>(\"...\");\r\n readonly textLength = input<string>();\r\n readonly text2Length = input<string>();\r\n readonly text3Length = input<string>();\r\n readonly showTextSearchButton = input<boolean>(false);\r\n readonly appearance = input<'fill' | 'outline' | undefined>('outline');\r\n\r\n\r\n protected text?: string;\r\n protected text2?: string;\r\n protected text3?: string;\r\n protected flt1: FilterGroup;\r\n protected flt2: FilterGroup;\r\n protected flt3: FilterGroup;\r\n protected flt4: FilterGroup;\r\n protected flt5: FilterGroup;\r\n\r\n public readonly currentFilter: CurrentFilter = new CurrentFilter();\r\n\r\n constructor() {\r\n effect(() => {\r\n this.text = this.initialText();\r\n this.text2 = this.initialText2();\r\n this.text3 = this.initialText3();\r\n })\r\n }\r\n\r\n ngOnInit() {\r\n this.initializeFilters();\r\n }\r\n\r\n\r\n /**\r\n * Initialize filters\r\n */\r\n initializeFilters() {\r\n if (!this.filters()) return;\r\n this.filters()?.forEach((n: any) => {\r\n switch (n.group) {\r\n case Filters.FLT_1:\r\n this.flt1 = n;\r\n this.canFilterByFlt1.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n case Filters.FLT_2:\r\n this.flt2 = n;\r\n this.canFilterByFlt2.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n case Filters.FLT_3:\r\n this.flt3 = n;\r\n this.canFilterByFlt3.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n case Filters.FLT_4:\r\n this.flt4 = n;\r\n this.canFilterByFlt4.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n case Filters.FLT_5:\r\n this.flt5 = n;\r\n this.canFilterByFlt5.set(n.action || (n.items && n.items.length > 0));\r\n break;\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Apply a filter\r\n * @param filter : the filter to apply\r\n */\r\n applyFilter(filter: FilterItem) {\r\n let changed = false;\r\n switch (filter.group) {\r\n case Filters.FLT_1:\r\n changed = this.currentFilter.flt1 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt1 = filter.value;\r\n this.currentFilter.flt1Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_2:\r\n changed = this.currentFilter.flt2 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt2 = filter.value;\r\n this.currentFilter.flt2Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_3:\r\n changed = this.currentFilter.flt3 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt3 = filter.value;\r\n this.currentFilter.flt3Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_4:\r\n changed = this.currentFilter.flt4 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt4 = filter.value;\r\n this.currentFilter.flt4Name = filter.titleSelected;\r\n }\r\n break;\r\n case Filters.FLT_5:\r\n changed = this.currentFilter.flt5 != filter.value;\r\n if (changed) {\r\n this.currentFilter.flt5 = filter.value;\r\n this.currentFilter.flt5Name = filter.titleSelected;\r\n }\r\n break;\r\n }\r\n\r\n if (changed) {\r\n this.changed.emit({ filter: this.currentFilter, group: filter.group });\r\n }\r\n\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Apply a filter action\r\n * @param filter : the filter to apply\r\n * @param clear : true if the filter mus be removed\r\n * @param event : the click event\r\n */\r\n applyFilterAction(group: number, clear: boolean = false) {\r\n if (!clear) {\r\n const g = this.getFilterGroup(group);\r\n if (g.action) {\r\n g.action(this, g, event);\r\n }\r\n } else {\r\n this.clearFilter(group);\r\n }\r\n \r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Apply text filter\r\n */\r\n applyTextFilter() {\r\n this.currentFilter.text = this.text;\r\n this.currentFilter.text2 = this.text2;\r\n this.currentFilter.text3 = this.text3;\r\n this.changed.emit({\r\n filter: this.currentFilter,\r\n group: Filters.FLT_TEXT\r\n });\r\n \r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Clear a filter\r\n * @param group : the filter group\r\n */\r\n clearFilter(group: number) {\r\n let changed = false;\r\n switch (group) {\r\n case Filters.FLT_1:\r\n changed = this.currentFilter.flt1 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt1 = undefined;\r\n this.currentFilter.flt1Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_2:\r\n changed = this.currentFilter.flt2 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt2 = undefined;\r\n this.currentFilter.flt2Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_3:\r\n changed = this.currentFilter.flt3 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt3 = undefined;\r\n this.currentFilter.flt3Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_4:\r\n changed = this.currentFilter.flt4 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt4 = undefined;\r\n this.currentFilter.flt4Name = undefined;\r\n }\r\n break;\r\n case Filters.FLT_5:\r\n changed = this.currentFilter.flt5 != undefined;\r\n if (changed) {\r\n this.currentFilter.flt5 = undefined;\r\n this.currentFilter.flt5Name = undefined;\r\n }\r\n break;\r\n }\r\n if (changed) {\r\n this.changed.emit({ filter: this.currentFilter, group: group });\r\n }\r\n }\r\n\r\n /**\r\n * Clear all filters\r\n */\r\n clearAllFilters() {\r\n this.currentFilter.flt1 = undefined;\r\n this.currentFilter.flt1Name = undefined;\r\n this.currentFilter.flt2 = undefined;\r\n this.currentFilter.flt2Name = undefined;\r\n this.currentFilter.flt3 = undefined;\r\n this.currentFilter.flt3Name = undefined;\r\n this.currentFilter.flt4 = undefined;\r\n this.currentFilter.flt4Name = undefined;\r\n this.currentFilter.flt5 = undefined;\r\n this.currentFilter.flt5Name = undefined;\r\n this.currentFilter.text = undefined;\r\n this.currentFilter.text2 = undefined;\r\n this.currentFilter.text3 = undefined;\r\n this.text = undefined;\r\n this.text2 = undefined;\r\n this.text3 = undefined;\r\n this.changed.emit({ filter: this.currentFilter, group: -1 });\r\n }\r\n\r\n /**\r\n * Check if can clear all filters button cab be showed\r\n */\r\n canClearAllFilters(): boolean {\r\n let count = 0;\r\n if (this.canFilterByText) count++;\r\n if (this.canFilterByText2) count++;\r\n if (this.canFilterByText3) count++;\r\n if (this.canFilterByFlt1) count++;\r\n if (this.canFilterByFlt2) count++;\r\n if (this.canFilterByFlt3) count++;\r\n if (this.canFilterByFlt4) count++;\r\n if (this.canFilterByFlt5) count++;\r\n return count > 1;\r\n }\r\n\r\n /**\r\n * Get the filter group\r\n * @param id : the filter id\r\n */\r\n private getFilterGroup(id: number): FilterGroup {\r\n return this.filters()?.find((n: any) => n.group === id);\r\n }\r\n\r\n /**\r\n * Update filter bar using current search params\r\n * @param params : search params\r\n */\r\n syncFilter() {\r\n let g = this.getFilterGroup(Filters.FLT_1);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt1Name = undefined;\r\n if (this.currentFilter.flt1) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt1);\r\n if (gi) this.currentFilter.flt1Name = gi.titleSelected;\r\n else this.currentFilter.flt1 = undefined;\r\n }\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_2);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt2Name = undefined;\r\n if (this.currentFilter.flt2) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt2);\r\n if (gi) this.currentFilter.flt2Name = gi.titleSelected;\r\n else this.currentFilter.flt2 = undefined;\r\n }\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_3);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt3Name = undefined;\r\n if (this.currentFilter.flt3) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt3);\r\n if (gi) this.currentFilter.flt3Name = gi.titleSelected;\r\n else this.currentFilter.flt3 = undefined;\r\n }\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_4);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt4Name = undefined;\r\n if (this.currentFilter.flt4) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt4);\r\n if (gi) this.currentFilter.flt4Name = gi.titleSelected;\r\n else this.currentFilter.flt4 = undefined;\r\n }\r\n }\r\n }\r\n\r\n g = this.getFilterGroup(Filters.FLT_5);\r\n if (g) {\r\n if (g.items) {\r\n this.currentFilter.flt5Name = undefined;\r\n if (this.currentFilter.flt5) {\r\n const gi = g.items.find(n => n.value === this.currentFilter.flt5);\r\n if (gi) this.currentFilter.flt5Name = gi.titleSelected;\r\n else this.currentFilter.flt5 = undefined;\r\n }\r\n }\r\n }\r\n\r\n this.text = this.currentFilter.text;\r\n this.text2 = this.currentFilter.text2;\r\n this.text3 = this.currentFilter.text3;\r\n\r\n this.changeDetector.markForCheck();\r\n }\r\n}\r\n","<div fxLayout=\"row\" fxLayoutAlign=\"start center\" class=\"filterbox\"\r\n [class.filterbox-filtered]=\"currentFilter.filtered()\">\r\n <div fxFlex=\"*\" fxLayout=\"row wrap\" fxLayoutAlign=\"space-between\">\r\n @if (canFilterByText() || canFilterByText2() || canFilterByText3()) {\r\n <div fxFlex.lt-sm=\"100\" fxFlexAlign=\"center\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill style=\"padding:4px;\">\r\n @if (canFilterByText()) {\r\n <mat-form-field [style.width]=\"textLength() ?? '100%'\" [appearance]=\"appearance()\" subscriptSizing=\"dynamic\">\r\n <mat-label>Cerca per {{textName()}}...</mat-label>\r\n <input matInput name=\"_text\" [(ngModel)]=\"text\" 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 = 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\" 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 = 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\" 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 = 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 && flt1.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt1.tooltip || 'Filtra per ' + flt1.title\"\r\n [attr.aria-label]=\"flt1.tooltip || 'Filtra per ' + flt1.title\" \r\n (click)=\"applyFilterAction(1, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span>{{flt1.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt1) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(1, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt1() && flt1 && flt1.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt1.tooltip || 'Filtra per ' + flt1.title\"\r\n [attr.aria-label]=\"flt1.tooltip || 'Filtra per ' + flt1.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt1\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt1) {\r\n <span>{{flt1.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt1Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt1=\"matMenu\">\r\n @for (f of flt1.items; track $index) {\r\n\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 }\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 attr.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 && flt2.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt2.tooltip || 'Filtra per ' + flt2.title\"\r\n [attr.aria-label]=\"flt2.tooltip || 'Filtra per ' + flt2.title\" \r\n (click)=\"applyFilterAction(2, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span>{{flt2.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt2) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(2, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt2() && flt2 && flt2.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt2.tooltip || 'Filtra per ' + flt2.title\"\r\n [attr.aria-label]=\"flt2.tooltip || 'Filtra per ' + flt2.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt2\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt2) {\r\n <span>{{flt2.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt2Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt2=\"matMenu\">\r\n @for (f of flt2.items; track $index) {\r\n\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 }\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 attr.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 && flt3.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt3.tooltip || 'Filtra per ' + flt3.title\"\r\n [attr.aria-label]=\"flt3.tooltip || 'Filtra per ' + flt3.title\" \r\n (click)=\"applyFilterAction(3, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span>{{flt3.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt3) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(3, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt3() && flt3 && flt3.items) {\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt3.tooltip || 'Filtra per ' + flt3.title\"\r\n [attr.aria-label]=\"flt3.tooltip || 'Filtra per ' + flt3.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt3\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt3) {\r\n <span>{{flt3.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt3Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt3=\"matMenu\">\r\n @for (f of flt3.items; track $index) {\r\n\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 }\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 attr.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 && flt4.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt4.tooltip || 'Filtra per ' + flt4.title\"\r\n [attr.aria-label]=\"flt4.tooltip || 'Filtra per ' + flt4.title\" \r\n (click)=\"applyFilterAction(4, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span>{{flt4.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt4) {\r\n <button fxFlexAlign=\"center\" type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(4, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt4() && flt4 && flt4.items) {\r\n <button fxFlexAlign=\"center\" class=\"filterbox-button\" type=\"button\" mat-button [matTooltip]=\"flt4.tooltip || 'Filtra per ' + flt4.title\"\r\n [attr.aria-label]=\"flt4.tooltip || 'Filtra per ' + flt4.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt4\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt4) {\r\n <span>{{flt4.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt4Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt4=\"matMenu\">\r\n @for (f of flt4.items; track $index) {\r\n\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 }\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 attr.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 && flt5.action) {\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\">\r\n <button type=\"button\" class=\"filterbox-button\" mat-button [matTooltip]=\"flt5.tooltip || 'Filtra per ' + flt5.title\"\r\n [attr.aria-label]=\"flt5.tooltip || 'Filtra per ' + flt5.title\" \r\n (click)=\"applyFilterAction(5, false)\">\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span>{{flt5.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n </button>\r\n @if (currentFilter.flt5) {\r\n <button type=\"button\" mat-icon-button matTooltip=\"Azzera\" aria-label=\"'Azzera'\"\r\n (click)=\"applyFilterAction(5, true);\" class=\"small-icon-button\">\r\n <mat-icon>clear</mat-icon>\r\n </button>\r\n }\r\n </div>\r\n } @else if (canFilterByFlt5() && flt5 && flt5.items) {\r\n <button fxFlexAlign=\"center\"class=\"filterbox-button\" type=\"button\" mat-button [matTooltip]=\"flt5.tooltip || 'Filtra per ' + flt5.title\"\r\n [attr.aria-label]=\"flt5.tooltip || 'Filtra per ' + flt5.title\" [matMenuTriggerFor]=\"menuApplyFilterFlt5\"\r\n >\r\n &nbsp;\r\n @if (!currentFilter.flt5) {\r\n <span>{{flt5.title}}</span>\r\n } @else {\r\n <span class=\"filterbox-selected\" [innerHtml]=\"currentFilter.flt5Name | safeHtml\"></span>\r\n }\r\n <mat-icon class=\"icon-menu-drop-down\">expand_more</mat-icon>\r\n <mat-menu #menuApplyFilterFlt5=\"matMenu\">\r\n @for (f of flt5.items; track $index) {\r\n\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 }\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 attr.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\" attr.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>","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, inject } from '@angular/core';\r\nimport { MatCalendar } from '@angular/material/datepicker';\r\nimport { Subject } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\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> implements OnDestroy {\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private calendar = inject(MatCalendar<D>);\r\n private changeDetector = inject(ChangeDetectorRef);\r\n\r\n constructor() {\r\n this.calendar.stateChanges\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(() => this.changeDetector.markForCheck());\r\n }\r\n\r\n ngOnDestroy() {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n}\r\n","import { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { ChangeDetectionStrategy, ChangeDetectorRef, Component, HostBinding, Input, OnDestroy, OnInit, Optional, Renderer2, Self, inject, input, signal, output } from '@angular/core';\r\nimport { ControlValueAccessor, NgControl } from '@angular/forms';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { Subject } from 'rxjs';\r\n\r\n\r\n@Component({\r\n selector: 'button-selector',\r\n standalone: true,\r\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule,\r\n MatMenuModule],\r\n templateUrl: './button-selector.component.html',\r\n styleUrl: './button-selector.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ButtonSelectorComponent implements OnInit, OnDestroy, ControlValueAccessor {\r\n\r\n readonly changed = output<NameValueItem<any> | undefined>();\r\n readonly selected = output<NameValueItem<any> | undefined>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private stateChanges = new Subject<void>();\r\n private focused = false;\r\n\r\n private _value: NameValueItem<any> | undefined = undefined\r\n set value(value: NameValueItem<any> | undefined) {\r\n this._value = value;\r\n this.propagateChange(this._value);\r\n this.stateChanges.next();\r\n this.changed.emit(this._value);\r\n this.current.set(this._value);\r\n }\r\n get value() {\r\n return this._value;\r\n }\r\n\r\n private _disabled: boolean = false;\r\n @Input()\r\n get disabled() {\r\n if (this.ngControl && this.ngControl.disabled != null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n\r\n private propagateChange: (_: any) => void = (_: any) => { };\r\n private propagateTouched: () => void = () => { };\r\n\r\n @HostBinding() id = `button-selector--${SystemUtils.generateUUID()}`;\r\n @HostBinding('attr.aria-describedBy') describedBy = '';\r\n\r\n private renderer = inject(Renderer2);\r\n\r\n protected current = signal<NameValueItem<any> | undefined>(undefined);\r\n\r\n readonly width = input<number>(-1);\r\n readonly border = input<number>(-1);\r\n readonly borderRadius = input<string>(\"9999px\");\r\n readonly label = input<string | undefined>(undefined);\r\n readonly labelSelected = input<string | undefined>(undefined);\r\n readonly options = input<NameValueItem<any>[]>([]);\r\n readonly autoSelect = input<boolean>(false);\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n if (this.autoSelect()) {\r\n const options = this.options();\r\n if (options && options.length > 0 && options[0].value) {\r\n this.current.set(options[0]);\r\n }\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.stateChanges.complete();\r\n }\r\n\r\n writeValue(value: any): void {\r\n this.value = value;\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.propagateTouched = fn;\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n this.renderer.setProperty(elem, 'disabled', isDisabled);\r\n }\r\n }\r\n\r\n onContainerClick() {\r\n if (!this.focused) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n elem.focus();\r\n this.propagateTouched();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Select an element\r\n * @param item : the item to select\r\n * @param notify: true if selection notification must be rised. Default is true\r\n */\r\n select(item: NameValueItem<any>, notify: boolean = true) {\r\n this.writeValue(item);\r\n if (notify) {\r\n this.selected.emit(item);\r\n }\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Reset value\r\n */\r\n reset() {\r\n this.writeValue(undefined);\r\n }\r\n}\r\n","<button mat-stroked-button class=\"menu-selector-button\" [style.border]=\"border() >= 0 ? border() : 'auto'\"\r\n [style.border-radius]=\"borderRadius()\" [style.height]=\"border() <= 0 ? '40px' : 'auto'\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\" [attr.aria-label]=\"label()\"\r\n [matMenuTriggerFor]=\"optionsMenu\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill>\r\n <div fxFlex=\"100\" fxFlexAlign=\"center\">\r\n @if(current()) {\r\n <div style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n @if(labelSelected() || label()) {\r\n <div class=\"x-small \">{{labelSelected() ?? label()}}</div>\r\n <div fxHide.xs class=\"small truncated-1\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated-1\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n } @else {\r\n <div fxHide.xs class=\"small truncated\">{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n <div fxHide.gt-xs class=\"x-small truncated\" style=\"max-width: 120px;\">\r\n <div>{{current()?.shortName ?? current()?.name ?? ''}}</div>\r\n </div>\r\n }\r\n </div>\r\n } @else if(labelSelected() || label()) {\r\n <div class=\"truncated\" style=\"text-align: left;\"\r\n [style.min-width]=\"width() > 0 ? width()+'px' : (width() === -1 ? '100%' : 'auto')\">\r\n {{labelSelected() ?? label()}}</div>\r\n }\r\n </div>\r\n <div fxLayoutAlign=\"end\" fxFlexAlign=\"center\">\r\n <mat-icon>arrow_drop_down</mat-icon>\r\n </div>\r\n </div>\r\n</button>\r\n<mat-menu #optionsMenu=\"matMenu\">\r\n @for (o of options(); track $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 { coerceBooleanProperty } from '@angular/cdk/coercion';\r\nimport { AfterContentInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, computed, HostBinding, inject, Input, input, OnDestroy, OnInit, Optional, Renderer2, Self, Signal, signal, output } from '@angular/core';\r\nimport { ControlValueAccessor, FormsModule, NgControl } from '@angular/forms';\r\nimport { MatBadgeModule } from '@angular/material/badge';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { NameValueItem, SystemUtils } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { debounceTime, fromEvent, Subject, takeUntil } from 'rxjs';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { ButtonSelectorComponent } from '../button-selector/button-selector.component';\r\n\r\n\r\n\r\n@Component({\r\n selector: 'chips-selector',\r\n standalone: true,\r\n imports: [FlexLayoutModule, FormsModule, MatFormFieldModule, MatSelectModule,\r\n MatChipsModule, MatIconModule, MatButtonModule, MatBadgeModule, MatTooltipModule,\r\n ButtonSelectorComponent\r\n ],\r\n templateUrl: './chips-selector.component.html',\r\n styleUrl: './chips-selector.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ChipsSelectorComponent implements OnInit, OnDestroy, AfterContentInit, ControlValueAccessor {\r\n\r\n readonly changed = output<NameValueItem<any>[] | undefined>();\r\n protected containerId: string = `chips-selector-container--${SystemUtils.generateUUID()}`;\r\n protected containerWidth = signal(-6);\r\n private focused: boolean = false;\r\n private stateChanges: Subject<void> = new Subject<void>();\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private changesEnabled = false;\r\n readonly options = input<NameValueItem<any>[]>([]);\r\n readonly collapsedWidth = input<number>(-1);\r\n readonly collapsedDisplayMode = input<'dropdown' | 'button'>('dropdown');\r\n readonly collapseAt = input<number>(-1);\r\n readonly collapseAtContainer = input<boolean>(false);\r\n protected collapsed: Signal<boolean> = computed(() => {\r\n const cw = this.containerWidth();\r\n const mw = this.collapseAt();\r\n return this.mode() === 'collapsed' || (mw === -1 || (cw > 0 && mw > 0 && cw < mw));\r\n })\r\n readonly label = input<string>('');\r\n readonly multiple = input<boolean>(false);\r\n readonly mustSelect = input<boolean>(false);\r\n readonly mode = input<'collapsed' | 'dinamyc'>('dinamyc');\r\n readonly stacked = input<boolean>(false);\r\n readonly padAt = input<number>(0);\r\n\r\n\r\n private _value?: NameValueItem<any>[] = []\r\n set value(value: NameValueItem<any>[] | undefined) {\r\n this._value = value;\r\n this.selection = [];\r\n this.singleSelection = undefined;\r\n if (this._value) {\r\n this.options().forEach(n => {\r\n if (this._value?.findIndex((x: any) => x.value === n.value) !== -1) {\r\n this.selection.push(n);\r\n }\r\n });\r\n if (this.selection.length > 0) {\r\n this.singleSelection = this.selection[0]\r\n }\r\n }\r\n this.propagateChange(this._value);\r\n this.stateChanges.next();\r\n if (this.changesEnabled) {\r\n this.changed.emit(this._value);\r\n }\r\n }\r\n get value() {\r\n return this._value;\r\n }\r\n get empty(): boolean {\r\n return !this._value || this._value?.length === 0;\r\n }\r\n get errorState() {\r\n return this.ngControl.errors != null && this.ngControl.touched;\r\n }\r\n\r\n private _required: boolean = false;\r\n @Input()\r\n get required() {\r\n return this._required;\r\n }\r\n set required(value: boolean) {\r\n this._required = coerceBooleanProperty(value);\r\n this.stateChanges.next();\r\n }\r\n\r\n private _disabled: boolean = false;\r\n @Input()\r\n get disabled() {\r\n if (this.ngControl && this.ngControl.disabled != null) {\r\n return this.ngControl.disabled;\r\n }\r\n return this._disabled;\r\n }\r\n set disabled(value: boolean) {\r\n this._disabled = coerceBooleanProperty(value);\r\n if (this.focused) {\r\n this.focused = false;\r\n this.stateChanges.next();\r\n }\r\n }\r\n private _placeholder: string = '';\r\n @Input()\r\n get placeholder() {\r\n return this._placeholder;\r\n }\r\n set placeholder(value: string) {\r\n this._placeholder = value;\r\n this.stateChanges.next();\r\n }\r\n\r\n\r\n private propagateChange: (_: any) => void = (_: any) => { };\r\n private propagateTouched: () => void = () => { };\r\n\r\n @HostBinding() id = `chips-selector--${SystemUtils.generateUUID()}`;\r\n @HostBinding('class.floating')\r\n get shouldLabelFloat() {\r\n return this.focused || !this.empty;\r\n }\r\n @HostBinding('attr.aria-describedBy') describedBy = '';\r\n\r\n private renderer = inject(Renderer2);\r\n\r\n protected selection: NameValueItem<any>[] = [];\r\n protected singleSelection?: NameValueItem<any>;\r\n\r\n constructor(\r\n @Optional() @Self() public ngControl: NgControl,\r\n ) {\r\n if (this.ngControl != null) {\r\n this.ngControl.valueAccessor = this;\r\n }\r\n }\r\n\r\n ngOnInit(): void {\r\n // React to window size change\r\n fromEvent(window, 'resize')\r\n .pipe(takeUntil(this.unsubscribe), debounceTime(250))\r\n .subscribe(() => {\r\n if (this.collapseAt() > 0) {\r\n // Close the options menu if open\r\n this.updateContainerWidth();\r\n }\r\n });\r\n\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n this.stateChanges.complete();\r\n }\r\n\r\n ngAfterContentInit(): void {\r\n setTimeout(() => {\r\n this.updateContainerWidth();\r\n this.changesEnabled = true;\r\n this.changeDetector.markForCheck();\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Update container width\r\n */\r\n private updateContainerWidth() {\r\n const elem = document.getElementById(this.containerId);\r\n if (elem && elem.clientWidth > 0) {\r\n this.containerWidth.set(\r\n this.collapseAtContainer()\r\n ? (elem?.clientWidth ?? -1)\r\n : (window.innerWidth ?? -1));\r\n } else {\r\n setTimeout(() => {\r\n this.updateContainerWidth();\r\n }, 100)\r\n }\r\n }\r\n\r\n /**\r\n * Get current selection\r\n * @returns current selection\r\n */\r\n private getSelection(): NameValueItem<any>[] {\r\n const value =\r\n !this.multiple() && this.collapsed() && this.collapsedDisplayMode() === \"button\"\r\n ? this.singleSelection\r\n : this.selection ?? [];\r\n const isArray = Array.isArray(value);\r\n if (isArray) {\r\n return value ?? [];\r\n } else {\r\n return value ? [value] : [];\r\n }\r\n }\r\n\r\n /**\r\n * Update current value with a little delay\r\n */\r\n updateValue() {\r\n setTimeout(() => {\r\n this.writeValue(this.getSelection());\r\n }, 250);\r\n }\r\n\r\n /**\r\n * Check if a item is selectable\r\n * @param item: the item to check\r\n */\r\n isSelectable(item: NameValueItem<any>): boolean {\r\n return this.multiple() || this.getSelection().findIndex(x => x.value === item.value) === -1;\r\n }\r\n\r\n writeValue(value: any): void {\r\n if (this.value !== value) {\r\n this.value = value;\r\n }\r\n }\r\n\r\n registerOnChange(fn: any): void {\r\n this.propagateChange = fn;\r\n }\r\n\r\n registerOnTouched(fn: any): void {\r\n this.propagateTouched = fn;\r\n }\r\n\r\n setDescribedByIds(ids: string[]) {\r\n this.describedBy = ids.join(' ');\r\n }\r\n\r\n setDisabledState?(isDisabled: boolean) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n this.renderer.setProperty(elem, 'disabled', isDisabled);\r\n }\r\n }\r\n\r\n onContainerClick() {\r\n if (!this.focused) {\r\n if (!SystemUtils.isBrowser()) return;\r\n let elem = document.getElementById(this.id);\r\n if (elem) {\r\n elem.focus();\r\n this.propagateTouched();\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Clear selection\r\n * @param e : the click event\r\n */\r\n clear(e: Event) {\r\n this.writeValue([]);\r\n e.stopPropagation();\r\n this.changeDetector.markForCheck();\r\n }\r\n\r\n /**\r\n * Select single element\r\n * @param item : the item to select\r\n */\r\n select(item?: NameValueItem<any>) {\r\n if (item) {\r\n this.writeValue([item]);\r\n this.changeDetector.markForCheck();\r\n }\r\n }\r\n\r\n}\r\n","<div [id]=\"containerId\" class=\"chips-selector\">\r\n @if(containerWidth() > 0) {\r\n @if(collapsed()) {\r\n @if(collapsedDisplayMode() === 'dropdown') {\r\n <mat-form-field [style.min-width]=\"collapsedWidth() > 0 ? collapsedWidth()+'px' : '100%'\" subscriptSizing=\"dynamic\">\r\n @if(label()) {\r\n <mat-label>{{label()}}</mat-label>\r\n }\r\n <mat-select [(ngModel)]=\"selection\" [multiple]=\"multiple()\" (selectionChange)=\"updateValue()\">\r\n <mat-select-trigger>\r\n @if (value && (value.length || 0) > 0) {\r\n {{value[0].shortName ?? value[0].name}}\r\n }\r\n @if (value && (value.length || 0) > 1) {\r\n <span class=\"collapsed-additional-selection\">\r\n (+{{(value.length || 0) - 1}} {{value.length === 2 ? 'altro' : 'altri'}})\r\n </span>\r\n }\r\n </mat-select-trigger>\r\n @for (o of options(); track $index) {\r\n <mat-option [value]=\"o\" [disabled]=\"o.disabled\">\r\n {{o.name}}\r\n @if(o.bag) {\r\n &nbsp; ({{o.bag}})\r\n }\r\n </mat-option>\r\n }\r\n </mat-select>\r\n @if (value && (value.length || 0) > 0) {\r\n <button matSuffix tabindex=\"-1\" mat-icon-button aria-label=\"Pulisci\" (click)=\"clear($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n }\r\n </mat-form-field>\r\n } @else {\r\n <button-selector [label]=\"label()\" [options]=\"options()\" [width]=\"collapsedWidth()\" [(ngModel)]=\"singleSelection\"\r\n name=\"value\" (selected)=\"updateValue()\"></button-selector>\r\n\r\n }\r\n } @else {\r\n <mat-chip-listbox [class]=\"stacked() ? 'mat-mdc-chip-set-stacked' : ''\" [multiple]=\"multiple()\"\r\n [(ngModel)]=\"selection\" (change)=\"updateValue()\">\r\n @for (o of options(); track $index; let i = $index) {\r\n <mat-chip-option [matBadge]=\"o.bag\" [matTooltip]=\"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 { ChangeDetectionStrategy, Component, Signal, computed, input, output } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { SafeHtmlPipe } from '@arsedizioni/ars-utils/core';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\n\r\n\r\nexport interface ButtonToggleInfo {\r\n value: boolean,\r\n toggled: boolean\r\n}\r\n\r\n@Component({\r\n selector: 'button-toggle',\r\n standalone: true,\r\n imports: [FlexLayoutModule, MatIconModule, MatButtonModule, SafeHtmlPipe],\r\n templateUrl: './button-toggle.component.html',\r\n styleUrl: './button-toggle.component.scss',\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class ButtonToggleComponent {\r\n\r\n readonly changed = output<ButtonToggleInfo>();\r\n\r\n protected current: Signal<boolean> = computed(() => {\r\n return this.value();\r\n })\r\n\r\n toggled: boolean = false;\r\n\r\n readonly value = input<boolean>(false);\r\n readonly width = input<number>(-1);\r\n readonly border = input<number>(-1);\r\n readonly labelOn = input<string | undefined>(undefined);\r\n readonly labelOff = input<string | undefined>(undefined);\r\n readonly iconOn = input<string | undefined>(undefined);\r\n readonly iconOff = input<string | undefined>(undefined);\r\n readonly cssClass = input<string | undefined>(undefined);\r\n readonly cssClassSmall = input<string | undefined>(undefined);\r\n\r\n protected label: Signal<string> = computed(() => {\r\n return this.value() ? this.labelOn() ?? '' : this.labelOff() ?? '';\r\n })\r\n\r\n protected icon: Signal<string> = computed(() => {\r\n return this.value() ? this.iconOn() ?? '' : this.iconOff() ?? '';\r\n })\r\n\r\n /**\r\n * Toggle the button\r\n */\r\n toggle() {\r\n this.toggled = !(this.value());\r\n this.changed.emit({ value: this.value(), toggled: this.toggled });\r\n }\r\n\r\n}\r\n","<button mat-stroked-button [style.border]=\"border() >= 0 ? border() : 'auto'\"\r\n [style.height]=\"border() <= 0 ? '40px' : 'auto'\" [style.minWidth.px]=\"width() > 0 ? width() : 'auto'\"\r\n [style.mxn-width.px]=\"width() > 0 ? width() : 'auto'\" [class]=\"cssClass()\" [attr.aria-label]=\"label()\"\r\n (click)=\"toggle()\" [class.button-on]=\"value() === true\" [ngClass.xs]=\"cssClassSmall()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"8px\" fxLayoutAlign=\"center center\" fxFill>\r\n @if(icon()) {\r\n <div fxFlex=\"24px\"><mat-icon style=\"display: block;\">{{icon()}}</mat-icon></div>\r\n }\r\n <div [innerHtml]=\"label() | safeHtml\"></div>\r\n </div>\r\n</button>","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './ui/ui.module';\r\nexport * from './ui/dialogs/prompt/prompt-dialog.component';\r\nexport * from './ui/dialogs/prompt-date/prompt-date-dialog.component';\r\nexport * from './ui/dialogs/prompt-time/prompt-time-dialog.component';\r\nexport * from './ui/dialogs/prompt-otp/prompt-otp-dialog.component';\r\nexport * from './ui/dialogs/select-file/select-file-dialog.component';\r\nexport * from './ui/dialogs/select-picture/select-picture-dialog.component';\r\nexport * from './ui/dialogs/select-tree/select-tree-dialog.component';\r\nexport * from './ui/dialogs/select/select-dialog.component';\r\nexport * from './ui/dialogs/send-to/send-to-dialog.component';\r\nexport * from './ui/components/file-input/file-input.component';\r\nexport * from './ui/components/file-preview/file-preview.component';\r\nexport * from './ui/components/filter-bar/filter-bar.component';\r\nexport * from './ui/components/calendar-empty-header/calendar-empy-header.component';\r\nexport * from './ui/components/chips-selector/chips-selector.component';\r\nexport * from './ui/components/button-selector/button-selector.component';\r\nexport * from './ui/components/button-toggle/button-toggle.component';\r\nexport * from './ui/directives/resize-table-column.directive';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["i9","observableOf","i2","i3","i4","i5","i7","i8","i1","i6","i11","takeUntil"],"mappings":"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"}