@arsedizioni/ars-utils 21.0.1 → 21.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -135,10 +135,10 @@ class IndexTreeDataSource {
135
135
  update() {
136
136
  this.dataChange.next(this.data);
137
137
  }
138
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: IndexTreeDataSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
139
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: IndexTreeDataSource }); }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: IndexTreeDataSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
139
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: IndexTreeDataSource }); }
140
140
  }
141
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: IndexTreeDataSource, decorators: [{
141
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: IndexTreeDataSource, decorators: [{
142
142
  type: Injectable
143
143
  }] });
144
144
  class HelpViewerComponent {
@@ -151,15 +151,15 @@ class HelpViewerComponent {
151
151
  this.dialogService = inject(DialogService);
152
152
  this.helpService = inject(HelpService);
153
153
  this.breakpointObserver = inject(BreakpointObserver);
154
- this.busy = signal(false, { ...(ngDevMode ? { debugName: "busy" } : {}) });
155
- this.page = signal(null, { ...(ngDevMode ? { debugName: "page" } : {}) });
154
+ this.busy = signal(false, ...(ngDevMode ? [{ debugName: "busy" }] : []));
155
+ this.page = signal(null, ...(ngDevMode ? [{ debugName: "page" }] : []));
156
156
  this.indexId = undefined;
157
157
  this.indexPaneClosed = false;
158
158
  this.indexNode = undefined;
159
- this.history = signal([], { ...(ngDevMode ? { debugName: "history" } : {}) });
159
+ this.history = signal([], ...(ngDevMode ? [{ debugName: "history" }] : []));
160
160
  this.canGoBack = computed(() => {
161
161
  return this.history()?.length > 1;
162
- }, { ...(ngDevMode ? { debugName: "canGoBack" } : {}) });
162
+ }, ...(ngDevMode ? [{ debugName: "canGoBack" }] : []));
163
163
  /**
164
164
  * Manage flat tree view
165
165
  */
@@ -432,10 +432,10 @@ class HelpViewerComponent {
432
432
  let n = this.history().pop();
433
433
  this.getChapter(n.id, n.position + 1);
434
434
  }
435
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: HelpViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
436
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.1", type: HelpViewerComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [IndexTreeDataSource], viewQueries: [{ propertyName: "indexPane", first: true, predicate: ["indexPane"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"helpviewer-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar z-index=\"11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div class=\"dialog-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"dialog-menu\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Mostra menu\" [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"toggleIndexPane()\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>Guida</h2>\r\n </div>\r\n <div fxFlex=\"100px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (canGoBack()) {\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<mat-dialog-content id=\"helpviewer-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #indexPane mode=\"side\" [autoFocus]=\"false\" class=\"drawer-small drawer-transparent\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\">\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\" class=\"tree \" style=\"max-width:310px\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple tree-node-style\"\r\n (click)=\"getChapter(node.id);\" [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node tree-node-simple tree-node-style\"\r\n [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\" (click)=\"getChapter(node.id)\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Apri/chiudi ' + node.name\" 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 fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <mat-drawer-content id=\"helpviewer-scroller\">\r\n <div style=\"padding: 0 24px;\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div class=\"fill\" (click)=\"gotoChapter($event)\" [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </mat-drawer-content>\r\n </mat-drawer-container>\r\n</mat-dialog-content>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.dialog-menu{margin-top:4px!important}.tree{overflow-x:hidden}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-simple,.tree-node-simple>div{min-height:36px!important}.tree-node-activated,.tree-node-activated>div{min-height:36px!important;font-weight:700!important;color:var(--ars-color-accent, #7894ae)!important}a.help-link,.help-link>a{text-decoration:none;color:#2a91e0}.help-title-2,.help-title-1{font-weight:600!important}.help-word-hit{font-size:inherit;background-color:var(--ars-word-hit-background-color, yellow);padding:0 4px}.help-hint{margin:10px;padding:5px 20px;background-color:var(--ars-help-hint-background-color, lightgoldenrodyellow);border-radius:12px}.help-summary{margin:10px;padding:5px 20px;background-color:var(--ars-help-summary-background-color, lavender);border-radius:12px}.help-img{display:flex;align-items:center;justify-content:center;margin:10px}.help-img-200,.help-img-300,.help-img-400,.help-img-500,.help-img-700,.help-img-800{width:100%}.help-img-200{max-width:200px}.help-img-300{max-width:300px}.help-img-400{max-width:400px}.help-img-500{max-width:500px}.help-img-600{max-width:600px}.help-img-700{max-width:700px}.help-img-800{max-width:800px}.help-filter-box{background-color:var(--ars-filterbox-filtered-background-color, #f9fbe7);border-radius:12px;padding:6px;display:inline-block;margin:0 0 8px 10px}.mat-mdc-dialog-content{max-height:unset!important;padding:0!important}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i6.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i6.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i6.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i7.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i7.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i7.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i7.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i7.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
435
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: HelpViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
436
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "21.0.3", type: HelpViewerComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [IndexTreeDataSource], viewQueries: [{ propertyName: "indexPane", first: true, predicate: ["indexPane"], descendants: true, isSignal: true }], ngImport: i0, template: "<div class=\"helpviewer-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar z-index=\"11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div class=\"dialog-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"dialog-menu\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Mostra menu\" [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"toggleIndexPane()\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>Guida</h2>\r\n </div>\r\n <div fxFlex=\"100px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (canGoBack()) {\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<mat-dialog-content id=\"helpviewer-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #indexPane mode=\"side\" [autoFocus]=\"false\" class=\"drawer-small drawer-transparent\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\">\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\" class=\"tree \" style=\"max-width:310px\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple tree-node-style\"\r\n (click)=\"getChapter(node.id);\" [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node tree-node-simple tree-node-style\"\r\n [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\" (click)=\"getChapter(node.id)\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Apri/chiudi ' + node.name\" 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 fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <mat-drawer-content id=\"helpviewer-scroller\">\r\n <div style=\"padding: 0 24px;\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div class=\"fill\" (click)=\"gotoChapter($event)\" [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </mat-drawer-content>\r\n </mat-drawer-container>\r\n</mat-dialog-content>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.dialog-menu{margin-top:4px!important}.tree{overflow-x:hidden}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-simple,.tree-node-simple>div{min-height:36px!important}.tree-node-activated,.tree-node-activated>div{min-height:36px!important;font-weight:700!important;color:var(--ars-color-accent, #7894ae)!important}a.help-link,.help-link>a{text-decoration:none;color:#2a91e0}.help-title-2,.help-title-1{font-weight:600!important}.help-word-hit{font-size:inherit;background-color:var(--ars-word-hit-background-color, yellow);padding:0 4px}.help-hint{margin:10px;padding:5px 20px;background-color:var(--ars-help-hint-background-color, lightgoldenrodyellow);border-radius:12px}.help-summary{margin:10px;padding:5px 20px;background-color:var(--ars-help-summary-background-color, lavender);border-radius:12px}.help-img{display:flex;align-items:center;justify-content:center;margin:10px}.help-img-200,.help-img-300,.help-img-400,.help-img-500,.help-img-700,.help-img-800{width:100%}.help-img-200{max-width:200px}.help-img-300{max-width:300px}.help-img-400{max-width:400px}.help-img-500{max-width:500px}.help-img-600{max-width:600px}.help-img-700{max-width:700px}.help-img-800{max-width:800px}.help-filter-box{background-color:var(--ars-filterbox-filtered-background-color, #f9fbe7);border-radius:12px;padding:6px;display:inline-block;margin:0 0 8px 10px}.mat-mdc-dialog-content{max-height:unset!important;padding:0!important}\n"], dependencies: [{ kind: "ngmodule", type: FlexLayoutModule }, { kind: "directive", type: i1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i1.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { kind: "directive", type: i1.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }, { kind: "directive", type: i1.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i2.MatIconButton, selector: "button[mat-icon-button], a[mat-icon-button], button[matIconButton], a[matIconButton]", exportAs: ["matButton", "matAnchor"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i4.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i5.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i6.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i6.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "component", type: i6.MatDrawerContent, selector: "mat-drawer-content" }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i7.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i7.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i7.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i7.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i7.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
437
437
  }
438
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: HelpViewerComponent, decorators: [{
438
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: HelpViewerComponent, decorators: [{
439
439
  type: Component,
440
440
  args: [{ host: { 'Bind': SystemUtils.generateUUID() }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [IndexTreeDataSource], standalone: true, imports: [FlexLayoutModule, MatButtonModule, MatTooltipModule, MatIconModule, MatProgressBarModule, MatDialogTitle, MatDialogContent,
441
441
  MatSidenavModule, MatTreeModule, SafeHtmlPipe], template: "<div class=\"helpviewer-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar z-index=\"11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div class=\"dialog-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"dialog-menu\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Mostra menu\" [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"toggleIndexPane()\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>Guida</h2>\r\n </div>\r\n <div fxFlex=\"100px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (canGoBack()) {\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<mat-dialog-content id=\"helpviewer-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #indexPane mode=\"side\" [autoFocus]=\"false\" class=\"drawer-small drawer-transparent\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\">\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\" class=\"tree \" style=\"max-width:310px\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple tree-node-style\"\r\n (click)=\"getChapter(node.id);\" [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node tree-node-simple tree-node-style\"\r\n [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\" (click)=\"getChapter(node.id)\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Apri/chiudi ' + node.name\" 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 fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <mat-drawer-content id=\"helpviewer-scroller\">\r\n <div style=\"padding: 0 24px;\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div class=\"fill\" (click)=\"gotoChapter($event)\" [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </mat-drawer-content>\r\n </mat-drawer-container>\r\n</mat-dialog-content>", styles: [".dialog-info{font-size:x-small;font-weight:700;text-align:right;padding:10px}.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #388E3C)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #a80710)}.dialog-header{padding-bottom:20px}.dialog-close{margin-right:5px;margin-top:0}.dialog-menu{margin-left:10px;margin-top:10px}.dialog-title{padding:0 24px}.section-title{font-size:large;font-weight:600;padding-top:10px;padding-bottom:8px}.center{text-align:center}.wide{min-width:100%!important;max-width:100%!important;width:100%!important}.fill{min-width:100%!important;max-width:100%!important;width:100%!important;min-height:100%!important;max-height:100%!important;height:100%!important}.scroll-auto{overflow:auto;height:100%}.scroll-hidden{overflow:hidden;height:100%}b{font-weight:700}.large{font-size:large!important}.smaller{font-size:smaller!important}.small{font-size:small!important;line-height:16px!important}.small-icon-button{width:1.5rem!important;height:1.5rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.small-icon-button .mat-mdc-button-touch-target{width:1.5rem!important;height:1.5rem!important}.x-small{font-size:x-small!important;line-height:14px!important}.bold{font-weight:700}.uppercase{text-transform:uppercase!important}.lowercase{text-transform:lowercase!important}.truncated{min-width:0;max-width:100%}@supports (-webkit-line-clamp: 2){.truncated{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.truncated span,.truncated div{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@supports (-webkit-line-clamp: 2){.truncated span,.truncated div{overflow:hidden;text-overflow:ellipsis;white-space:initial;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}.clipped{min-width:0;max-width:100%}.clipped span,.clipped div{white-space:nowrap;overflow:hidden;text-overflow:clip}.accent{color:var(--ars-color-accent, #7894ae)!important}.primary{color:var(--ars-color-primary, #00a293)!important}.secondary{color:var(--ars-color-secondary, #4a635f)!important}.error{color:var(--ars-color-error, #ff5449)!important}.success{color:var(--ars-color-ok, #388E3C)!important}.warning{color:var(--ars-color-warning, #FFC107)!important}.text{color:var(--ars-color-text, #191c1b)!important}.overlay{position:absolute;top:0;left:0;width:100%;height:100%;z-index:10;background-color:var(--ars-color-overlay, rgba(255, 255, 255, .75))}.drawer-content{padding-top:10px}.drawer .title-container,.drawer-small .title-container{padding:20px 5px 20px 0}.drawer .title-container-with-loader,.drawer-small .title-container-with-loader{padding:14px 5px 20px 0}.drawer .title,.drawer-small .title{font-size:19.2px!important;font-weight:600;padding-left:15px;min-width:150px;width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.drawer .accordion-panel,.drawer-small .accordion-panel{background-color:transparent!important}.drawer .accordion-header,.drawer-small .accordion-header{padding-left:10px;padding-right:10px;border-radius:var(--mat-expansion-container-shape)}.drawer .mat-expansion-panel-body,.drawer-small .mat-expansion-panel-body{padding-left:10px!important;padding-right:10px!important;padding-bottom:20px!important}@media screen and (min-width:0px)and (max-width:430px){.drawer,.drawer-small{border-radius:0!important;min-width:100%!important;max-width:100%!important}}@media screen and (min-width:431px){.drawer{min-width:420px!important;max-width:420px!important}.drawer .title{min-width:200px}.drawer .mat-expansion-panel-body{padding-left:15px!important;padding-right:15px!important;padding-bottom:20px!important}.drawer-small{min-width:360px!important;max-width:360px!important}}.drawer-with-loader{padding-top:0!important}.drawer-transparent{background-color:transparent}.fade-in{animation:fadein .5s linear}@keyframes fadein{0%{opacity:0}to{opacity:1}}@media(prefers-color-scheme:dark){.dialog-info-green,.dialog-info-ok{color:var(--ars-color-ok, #4CAF50)}.dialog-info-red,.dialog-info-error{color:var(--mat-form-field-error-text-color, #ff5449)}b{font-weight:600}}.dialog-menu{margin-top:4px!important}.tree{overflow-x:hidden}.tree-node{min-height:36px!important;padding-right:12px;margin-right:0}.tree-node .small-icon-button{width:2rem!important;height:2rem!important;padding:0!important;display:inline-flex!important;align-items:center;justify-content:center}.tree-node .small-icon-button .mat-mdc-button-touch-target{width:2rem!important;height:2rem!important}.tree-node:hover{cursor:pointer;background-color:var(--mat-menu-item-hover-state-layer-color, transparent);border-radius:24px}.tree-node-simple,.tree-node-simple>div{min-height:36px!important}.tree-node-activated,.tree-node-activated>div{min-height:36px!important;font-weight:700!important;color:var(--ars-color-accent, #7894ae)!important}a.help-link,.help-link>a{text-decoration:none;color:#2a91e0}.help-title-2,.help-title-1{font-weight:600!important}.help-word-hit{font-size:inherit;background-color:var(--ars-word-hit-background-color, yellow);padding:0 4px}.help-hint{margin:10px;padding:5px 20px;background-color:var(--ars-help-hint-background-color, lightgoldenrodyellow);border-radius:12px}.help-summary{margin:10px;padding:5px 20px;background-color:var(--ars-help-summary-background-color, lavender);border-radius:12px}.help-img{display:flex;align-items:center;justify-content:center;margin:10px}.help-img-200,.help-img-300,.help-img-400,.help-img-500,.help-img-700,.help-img-800{width:100%}.help-img-200{max-width:200px}.help-img-300{max-width:300px}.help-img-400{max-width:400px}.help-img-500{max-width:500px}.help-img-600{max-width:600px}.help-img-700{max-width:700px}.help-img-800{max-width:800px}.help-filter-box{background-color:var(--ars-filterbox-filtered-background-color, #f9fbe7);border-radius:12px;padding:6px;display:inline-block;margin:0 0 8px 10px}.mat-mdc-dialog-content{max-height:unset!important;padding:0!important}\n"] }]
@@ -503,10 +503,10 @@ class HelpService {
503
503
  height: '100%'
504
504
  });
505
505
  }
506
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: HelpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
507
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: HelpService, providedIn: 'root' }); }
506
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: HelpService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
507
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: HelpService, providedIn: 'root' }); }
508
508
  }
509
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: HelpService, decorators: [{
509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: HelpService, decorators: [{
510
510
  type: Injectable,
511
511
  args: [{
512
512
  providedIn: 'root'
@@ -514,11 +514,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
514
514
  }] });
515
515
 
516
516
  class ArsHelpModule {
517
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ArsHelpModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
518
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.1", ngImport: i0, type: ArsHelpModule }); }
519
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ArsHelpModule }); }
517
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ArsHelpModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
518
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.3", ngImport: i0, type: ArsHelpModule }); }
519
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ArsHelpModule }); }
520
520
  }
521
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ArsHelpModule, decorators: [{
521
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ArsHelpModule, decorators: [{
522
522
  type: NgModule
523
523
  }] });
524
524
 
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-help.mjs","sources":["../../../projects/ars-utils/help/components/help-viewer/help-viewer.component.ts","../../../projects/ars-utils/help/components/help-viewer/help-viewer.component.html","../../../projects/ars-utils/help/services/help.service.ts","../../../projects/ars-utils/help/help.module.ts","../../../projects/ars-utils/help/public_api.ts","../../../projects/ars-utils/help/arsedizioni-ars-utils-help.ts"],"sourcesContent":["import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Injectable, OnDestroy, OnInit, Signal, ViewEncapsulation, computed, inject, signal, viewChild } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\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 { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { BehaviorSubject, Observable, Subject, of as observableOf } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { HelpService } from '../../services/help.service';\r\n\r\nexport interface HelpViewerDialogData {\r\n id?: string;\r\n}\r\n\r\nexport class IndexInfo {\r\n id: string;\r\n parent?: IndexInfo;\r\n name: string;\r\n itemsCount?: number;\r\n children?: IndexInfo[];\r\n}\r\n\r\nexport class IndexNode extends IndexInfo {\r\n expandable: boolean;\r\n level: number;\r\n\r\n constructor(item: IndexInfo, 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.itemsCount = item.itemsCount;\r\n this.parent = item.parent;\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class IndexTreeDataSource implements OnDestroy {\r\n dataChange = new BehaviorSubject<IndexInfo[]>([]);\r\n\r\n get data(): IndexInfo[] {\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: IndexInfo[]) {\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: IndexInfo, id: string): IndexInfo {\r\n let children;\r\n if (node && node.id === id) return node;\r\n if (node) children = node.children;\r\n else children = this.data;\r\n if (children) {\r\n let _n = undefined;\r\n children.some(n => {\r\n n.parent = node;\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 /**\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 n.parent.itemsCount--;\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: IndexInfo) {\r\n if (node.parent) {\r\n node.parent.children.unshift(node);\r\n node.parent.itemsCount++;\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) {\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 }\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\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './help-viewer.component.html',\r\n styleUrls: ['./help-viewer.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [IndexTreeDataSource],\r\n standalone: true,\r\n imports: [FlexLayoutModule, MatButtonModule, MatTooltipModule, MatIconModule, MatProgressBarModule, MatDialogTitle, MatDialogContent,\r\n MatSidenavModule, MatTreeModule, SafeHtmlPipe]\r\n})\r\nexport class HelpViewerComponent implements OnInit, OnDestroy, AfterViewInit {\r\n readonly indexPane = viewChild.required<MatSidenav>('indexPane');\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private dialogRef = inject(MatDialogRef<HelpViewerComponent>);\r\n protected dialogData: HelpViewerDialogData = inject(MAT_DIALOG_DATA) ?? { id: \"1\" };\r\n private dialogService = inject(DialogService);\r\n private helpService = inject(HelpService);\r\n protected breakpointObserver = inject(BreakpointObserver);\r\n protected busy = signal<boolean>(false);\r\n protected page = signal<string>(null);\r\n private indexId: string = undefined;\r\n private indexPaneClosed: boolean = false;\r\n protected indexNode: IndexInfo = undefined;\r\n private history = signal([]);\r\n protected canGoBack: Signal<boolean> = computed(() => {\r\n return this.history()?.length > 1;\r\n })\r\n\r\n /**\r\n * Manage flat tree view\r\n */\r\n private tree = inject(IndexTreeDataSource);\r\n private treeFlattener: MatTreeFlattener<IndexInfo, IndexNode>;\r\n protected treeControl: FlatTreeControl<IndexNode>;\r\n protected treeData: MatTreeFlatDataSource<IndexInfo, IndexNode>;\r\n private folders?: IndexInfo[];\r\n private getChildren = (node: IndexInfo): Observable<IndexInfo[]> =>\r\n observableOf(node.children);\r\n private getLevel = (node: IndexNode) => node.level;\r\n private isExpandable = (node: IndexNode) => node.expandable;\r\n protected hasChild = (_: number, _node: IndexNode) => _node.expandable;\r\n protected transformer = (item: IndexInfo, level: number) => {\r\n return new IndexNode(item, level);\r\n };\r\n\r\n ngOnInit(): void {\r\n\r\n // Setup tree structure\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<IndexNode>(\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\r\n // Subscribe data change\r\n this.tree.dataChange\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(data => (this.treeData.data = data));\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n });\r\n\r\n this.getToc();\r\n\r\n this.indexId = this.dialogData.id;\r\n if (this.indexId) {\r\n this.getChapter(this.indexId);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.handleFilterPaneVisibility();\r\n this.indexPaneClosed = !this.indexPane().opened;\r\n }, 0);\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n\r\n /**\r\n* Handle filter pane visibility\r\n*/\r\n private handleFilterPaneVisibility() {\r\n const indexPane = this.indexPane();\r\n if (indexPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (indexPane.opened) {\r\n indexPane.close();\r\n }\r\n } else {\r\n if (!indexPane.opened && !this.indexPaneClosed) {\r\n indexPane.open();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Show hide index pane manually\r\n */\r\n protected toggleIndexPane() {\r\n this.indexPaneClosed = !this.indexPaneClosed;\r\n this.indexPane()?.toggle();\r\n }\r\n\r\n\r\n /**\r\n * Close dialog\r\n */\r\n protected close(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Get the toc\r\n */\r\n protected getToc(): void {\r\n this.busy.set(true);\r\n this.helpService\r\n .getToc()\r\n .subscribe({\r\n next: r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.folders = r.value.children;\r\n if (this.folders.length > 0) {\r\n this.tree.initialize(this.folders);\r\n this.indexNode = this.folders[0];\r\n this.expandCurrentFolder(); \r\n }\r\n }\r\n },\r\n complete: () => {\r\n this.busy.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * React to click event and find new help target to go to\r\n * @param event : the click event\r\n * @returns : always false, to stop navigation\r\n */\r\n protected gotoChapter(e: any): boolean {\r\n if (e.srcElement.nodeName !== 'A') return false;\r\n let tag = e.srcElement.outerHTML;\r\n let id = '';\r\n let p = tag.indexOf('help-target=\"');\r\n if (p !== -1) {\r\n p += 13;\r\n while (tag[p] !== '\"') {\r\n id += tag[p];\r\n p++;\r\n }\r\n }\r\n if (id) this.getChapter(id);\r\n return false;\r\n }\r\n\r\n /**\r\n * Find a node by id\r\n * @param id : folder id\r\n * @returns: the folder info\r\n */\r\n private findFolder(id: string): IndexInfo {\r\n let node = undefined;\r\n if (this.folders) {\r\n this.folders.some(n => {\r\n node = this.tree.findNode(n, id);\r\n if (node) return true;\r\n return false;\r\n });\r\n }\r\n return node;\r\n }\r\n\r\n /**\r\n * Expand current fodler node\r\n */\r\n private expandCurrentFolder(): void {\r\n if (this.indexNode) {\r\n this.treeControl.expand(\r\n this.treeControl.dataNodes.find(n => n.id === this.indexNode.id)\r\n );\r\n if (this.indexNode.parent) {\r\n // Apply previous selection\r\n let n = this.indexNode.parent;\r\n while (n) {\r\n this.treeControl.expand(\r\n this.treeControl.dataNodes.find(x => x.id === n.id)\r\n );\r\n n = n.parent;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve a new chapter\r\n * @param id the chapter id#anchor\r\n * @param position : the position to scroll to\r\n */\r\n protected getChapter(id: string, position: number = 0): void {\r\n // Detect anchor if exists\r\n let anchor: string = undefined;\r\n const p = id.indexOf('#');\r\n if (p !== -1) {\r\n anchor = id.substring(p + 1);\r\n id = id.substring(0, p);\r\n }\r\n if (id !== '.') {\r\n this.busy.set(true);\r\n this.helpService.getChapter(id)\r\n .subscribe({\r\n next: r => {\r\n let found = false;\r\n if (!r.success) {\r\n this.dialogService.error(\"Capitolo non trovato.\");\r\n } else {\r\n if (!position)\r\n this.history().push({ id: this.indexId, position: this.getPosition() });\r\n this.indexId = id;\r\n this.page.set(r.value.data);\r\n found = r.value.chapter?.name?.length > 0;\r\n if (found) {\r\n // Update folder\r\n this.indexNode = this.findFolder(id);\r\n this.expandCurrentFolder();\r\n // Handle positioning\r\n this.gotoPosition(anchor, position);\r\n }\r\n }\r\n\r\n if (!found) {\r\n this.getChapter(\"1\");\r\n }\r\n },\r\n complete: () => {\r\n this.busy.set(false);\r\n }\r\n });\r\n } else {\r\n if (!position)\r\n this.history().push({ id: this.indexId, position: this.getPosition() });\r\n // Move on the same chapter\r\n this.gotoPosition(anchor, position);\r\n }\r\n }\r\n\r\n /**\r\n * Goto position\r\n * @param anchor the anchor to go to\r\n * @param position the offset to go to\r\n */\r\n protected gotoPosition(anchor: string, position: number = 0): void {\r\n // Handle positioning\r\n setTimeout(() => {\r\n // Handle anchor first\r\n if (anchor) {\r\n let elms = document.getElementsByName(anchor.toUpperCase());\r\n if (elms) position = elms[0].offsetTop;\r\n }\r\n // Then position\r\n if (position > 0) this.setPosition(position - 1);\r\n else this.setPosition(0);\r\n }, 50);\r\n }\r\n\r\n /**\r\n * Get scroll position\r\n * @returns: the new scroll top\r\n */\r\n protected getPosition(): number {\r\n let elem = document.getElementById('helpviewer-scroller');\r\n if (elem) {\r\n return elem.scrollTop;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Set scroll position\r\n * @param position : the position to go to\r\n */\r\n protected setPosition(position: number): void {\r\n let elem = document.getElementById('helpviewer-scroller');\r\n if (elem) {\r\n elem.scrollTo(0, position);\r\n }\r\n }\r\n\r\n /**\r\n * Go back\r\n */\r\n protected back(): void {\r\n if (!this.history || this.history.length === 0) return;\r\n let n = this.history().pop();\r\n this.getChapter(n.id, n.position + 1);\r\n }\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","<div class=\"helpviewer-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar z-index=\"11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div class=\"dialog-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"dialog-menu\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Mostra menu\" [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"toggleIndexPane()\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>Guida</h2>\r\n </div>\r\n <div fxFlex=\"100px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (canGoBack()) {\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<mat-dialog-content id=\"helpviewer-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #indexPane mode=\"side\" [autoFocus]=\"false\" class=\"drawer-small drawer-transparent\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\">\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\" class=\"tree \" style=\"max-width:310px\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple tree-node-style\"\r\n (click)=\"getChapter(node.id);\" [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node tree-node-simple tree-node-style\"\r\n [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\" (click)=\"getChapter(node.id)\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Apri/chiudi ' + node.name\" 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 fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <mat-drawer-content id=\"helpviewer-scroller\">\r\n <div style=\"padding: 0 24px;\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div class=\"fill\" (click)=\"gotoChapter($event)\" [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </mat-drawer-content>\r\n </mat-drawer-container>\r\n</mat-dialog-content>","import { Injectable, inject } from '@angular/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { ApiResult } from '@arsedizioni/ars-utils/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { HelpViewerComponent, IndexInfo } from '../components/help-viewer/help-viewer.component';\r\nimport { Chapter, ChapterBag } from '../definitions';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HelpService {\r\n \r\n private httpClient = inject(HttpClient); \r\n private dialogService = inject(DialogService);\r\n private serviceUri: string;\r\n\r\n /**\r\n * Initialize help service\r\n * @param serviceUri : the service uri\r\n */\r\n initialize(serviceUri: string) {\r\n this.serviceUri = serviceUri;\r\n }\r\n\r\n /**\r\n * Retrieve an help chapter\r\n * @param id the chapter id\r\n * @param query the search query\r\n */\r\n getChapter(id: string, query: string = null) {\r\n return this.httpClient.get<ApiResult<ChapterBag>>(\r\n this.serviceUri +\r\n '/help/chapter/' +\r\n id +\r\n '/?query=' +\r\n (query == null ? '' : query)\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve an help chapater info\r\n * @param id the chapter id\r\n */\r\n getChapterInfo(id: string) {\r\n return this.httpClient.get<ApiResult<Chapter>>(\r\n this.serviceUri + '/help/chapter/info/' + id\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve a repository item\r\n * @param id the file id\r\n */\r\n getRepo(id: string) {\r\n return this.httpClient.get<ApiResult<any>>(\r\n this.serviceUri + '/help/repo/' + id\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve an help toc\r\n */\r\n getToc() {\r\n return this.httpClient.get<ApiResult<IndexInfo>>(\r\n this.serviceUri + '/help/toc'\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Open help viewer\r\n */\r\n show(id: string = '1') {\r\n this.dialogService.open(HelpViewerComponent, {\r\n ariaLabel: 'guida',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: {\r\n id: id\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1200px',\r\n width: '100%',\r\n height: '100%'\r\n });\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule()\r\nexport class ArsHelpModule { }\r\n\r\nexport * from './services/help.service';\r\n","/*\r\n * Public API Surface \r\n */\r\nexport * from './help.module';\r\nexport * from './definitions';\r\nexport * from './components/help-viewer/help-viewer.component';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["observableOf"],"mappings":"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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-help.mjs","sources":["../../../projects/ars-utils/help/components/help-viewer/help-viewer.component.ts","../../../projects/ars-utils/help/components/help-viewer/help-viewer.component.html","../../../projects/ars-utils/help/services/help.service.ts","../../../projects/ars-utils/help/help.module.ts","../../../projects/ars-utils/help/public_api.ts","../../../projects/ars-utils/help/arsedizioni-ars-utils-help.ts"],"sourcesContent":["import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';\r\nimport { FlatTreeControl } from '@angular/cdk/tree';\r\nimport { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, Injectable, OnDestroy, OnInit, Signal, ViewEncapsulation, computed, inject, signal, viewChild } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';\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 { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { FlexLayoutModule } from '@ngbracket/ngx-layout';\r\nimport { BehaviorSubject, Observable, Subject, of as observableOf } from 'rxjs';\r\nimport { takeUntil } from 'rxjs/operators';\r\nimport { HelpService } from '../../services/help.service';\r\n\r\nexport interface HelpViewerDialogData {\r\n id?: string;\r\n}\r\n\r\nexport class IndexInfo {\r\n id: string;\r\n parent?: IndexInfo;\r\n name: string;\r\n itemsCount?: number;\r\n children?: IndexInfo[];\r\n}\r\n\r\nexport class IndexNode extends IndexInfo {\r\n expandable: boolean;\r\n level: number;\r\n\r\n constructor(item: IndexInfo, 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.itemsCount = item.itemsCount;\r\n this.parent = item.parent;\r\n }\r\n}\r\n\r\n@Injectable()\r\nexport class IndexTreeDataSource implements OnDestroy {\r\n dataChange = new BehaviorSubject<IndexInfo[]>([]);\r\n\r\n get data(): IndexInfo[] {\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: IndexInfo[]) {\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: IndexInfo, id: string): IndexInfo {\r\n let children;\r\n if (node && node.id === id) return node;\r\n if (node) children = node.children;\r\n else children = this.data;\r\n if (children) {\r\n let _n = undefined;\r\n children.some(n => {\r\n n.parent = node;\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 /**\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 n.parent.itemsCount--;\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: IndexInfo) {\r\n if (node.parent) {\r\n node.parent.children.unshift(node);\r\n node.parent.itemsCount++;\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) {\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 }\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\n@Component({\r\n host: { 'Bind': SystemUtils.generateUUID() },\r\n templateUrl: './help-viewer.component.html',\r\n styleUrls: ['./help-viewer.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n changeDetection: ChangeDetectionStrategy.OnPush,\r\n providers: [IndexTreeDataSource],\r\n standalone: true,\r\n imports: [FlexLayoutModule, MatButtonModule, MatTooltipModule, MatIconModule, MatProgressBarModule, MatDialogTitle, MatDialogContent,\r\n MatSidenavModule, MatTreeModule, SafeHtmlPipe]\r\n})\r\nexport class HelpViewerComponent implements OnInit, OnDestroy, AfterViewInit {\r\n readonly indexPane = viewChild.required<MatSidenav>('indexPane');\r\n\r\n private unsubscribe: Subject<void> = new Subject<void>();\r\n private changeDetector = inject(ChangeDetectorRef);\r\n private dialogRef = inject(MatDialogRef<HelpViewerComponent>);\r\n protected dialogData: HelpViewerDialogData = inject(MAT_DIALOG_DATA) ?? { id: \"1\" };\r\n private dialogService = inject(DialogService);\r\n private helpService = inject(HelpService);\r\n protected breakpointObserver = inject(BreakpointObserver);\r\n protected busy = signal<boolean>(false);\r\n protected page = signal<string>(null);\r\n private indexId: string = undefined;\r\n private indexPaneClosed: boolean = false;\r\n protected indexNode: IndexInfo = undefined;\r\n private history = signal([]);\r\n protected canGoBack: Signal<boolean> = computed(() => {\r\n return this.history()?.length > 1;\r\n })\r\n\r\n /**\r\n * Manage flat tree view\r\n */\r\n private tree = inject(IndexTreeDataSource);\r\n private treeFlattener: MatTreeFlattener<IndexInfo, IndexNode>;\r\n protected treeControl: FlatTreeControl<IndexNode>;\r\n protected treeData: MatTreeFlatDataSource<IndexInfo, IndexNode>;\r\n private folders?: IndexInfo[];\r\n private getChildren = (node: IndexInfo): Observable<IndexInfo[]> =>\r\n observableOf(node.children);\r\n private getLevel = (node: IndexNode) => node.level;\r\n private isExpandable = (node: IndexNode) => node.expandable;\r\n protected hasChild = (_: number, _node: IndexNode) => _node.expandable;\r\n protected transformer = (item: IndexInfo, level: number) => {\r\n return new IndexNode(item, level);\r\n };\r\n\r\n ngOnInit(): void {\r\n\r\n // Setup tree structure\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<IndexNode>(\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\r\n // Subscribe data change\r\n this.tree.dataChange\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(data => (this.treeData.data = data));\r\n\r\n // Observe layout changes\r\n this.breakpointObserver\r\n .observe([\r\n Breakpoints.XSmall,\r\n Breakpoints.Small,\r\n Breakpoints.Medium,\r\n Breakpoints.Large,\r\n Breakpoints.XLarge,\r\n ])\r\n .pipe(takeUntil(this.unsubscribe))\r\n .subscribe(result => {\r\n for (const query of Object.keys(result.breakpoints)) {\r\n if (result.breakpoints[query]) {\r\n this.handleFilterPaneVisibility();\r\n }\r\n }\r\n });\r\n\r\n this.getToc();\r\n\r\n this.indexId = this.dialogData.id;\r\n if (this.indexId) {\r\n this.getChapter(this.indexId);\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.unsubscribe.next();\r\n this.unsubscribe.complete();\r\n }\r\n\r\n ngAfterViewInit(): void {\r\n setTimeout(() => {\r\n this.handleFilterPaneVisibility();\r\n this.indexPaneClosed = !this.indexPane().opened;\r\n }, 0);\r\n this.changeDetector.detectChanges();\r\n }\r\n\r\n\r\n /**\r\n* Handle filter pane visibility\r\n*/\r\n private handleFilterPaneVisibility() {\r\n const indexPane = this.indexPane();\r\n if (indexPane) {\r\n if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Small) ||\r\n this.breakpointObserver.isMatched(Breakpoints.Medium)) {\r\n if (indexPane.opened) {\r\n indexPane.close();\r\n }\r\n } else {\r\n if (!indexPane.opened && !this.indexPaneClosed) {\r\n indexPane.open();\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Show hide index pane manually\r\n */\r\n protected toggleIndexPane() {\r\n this.indexPaneClosed = !this.indexPaneClosed;\r\n this.indexPane()?.toggle();\r\n }\r\n\r\n\r\n /**\r\n * Close dialog\r\n */\r\n protected close(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n /**\r\n * Get the toc\r\n */\r\n protected getToc(): void {\r\n this.busy.set(true);\r\n this.helpService\r\n .getToc()\r\n .subscribe({\r\n next: r => {\r\n if (!r.success) {\r\n this.dialogService.error(r.message);\r\n } else {\r\n this.folders = r.value.children;\r\n if (this.folders.length > 0) {\r\n this.tree.initialize(this.folders);\r\n this.indexNode = this.folders[0];\r\n this.expandCurrentFolder(); \r\n }\r\n }\r\n },\r\n complete: () => {\r\n this.busy.set(false);\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * React to click event and find new help target to go to\r\n * @param event : the click event\r\n * @returns : always false, to stop navigation\r\n */\r\n protected gotoChapter(e: any): boolean {\r\n if (e.srcElement.nodeName !== 'A') return false;\r\n let tag = e.srcElement.outerHTML;\r\n let id = '';\r\n let p = tag.indexOf('help-target=\"');\r\n if (p !== -1) {\r\n p += 13;\r\n while (tag[p] !== '\"') {\r\n id += tag[p];\r\n p++;\r\n }\r\n }\r\n if (id) this.getChapter(id);\r\n return false;\r\n }\r\n\r\n /**\r\n * Find a node by id\r\n * @param id : folder id\r\n * @returns: the folder info\r\n */\r\n private findFolder(id: string): IndexInfo {\r\n let node = undefined;\r\n if (this.folders) {\r\n this.folders.some(n => {\r\n node = this.tree.findNode(n, id);\r\n if (node) return true;\r\n return false;\r\n });\r\n }\r\n return node;\r\n }\r\n\r\n /**\r\n * Expand current fodler node\r\n */\r\n private expandCurrentFolder(): void {\r\n if (this.indexNode) {\r\n this.treeControl.expand(\r\n this.treeControl.dataNodes.find(n => n.id === this.indexNode.id)\r\n );\r\n if (this.indexNode.parent) {\r\n // Apply previous selection\r\n let n = this.indexNode.parent;\r\n while (n) {\r\n this.treeControl.expand(\r\n this.treeControl.dataNodes.find(x => x.id === n.id)\r\n );\r\n n = n.parent;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Retrieve a new chapter\r\n * @param id the chapter id#anchor\r\n * @param position : the position to scroll to\r\n */\r\n protected getChapter(id: string, position: number = 0): void {\r\n // Detect anchor if exists\r\n let anchor: string = undefined;\r\n const p = id.indexOf('#');\r\n if (p !== -1) {\r\n anchor = id.substring(p + 1);\r\n id = id.substring(0, p);\r\n }\r\n if (id !== '.') {\r\n this.busy.set(true);\r\n this.helpService.getChapter(id)\r\n .subscribe({\r\n next: r => {\r\n let found = false;\r\n if (!r.success) {\r\n this.dialogService.error(\"Capitolo non trovato.\");\r\n } else {\r\n if (!position)\r\n this.history().push({ id: this.indexId, position: this.getPosition() });\r\n this.indexId = id;\r\n this.page.set(r.value.data);\r\n found = r.value.chapter?.name?.length > 0;\r\n if (found) {\r\n // Update folder\r\n this.indexNode = this.findFolder(id);\r\n this.expandCurrentFolder();\r\n // Handle positioning\r\n this.gotoPosition(anchor, position);\r\n }\r\n }\r\n\r\n if (!found) {\r\n this.getChapter(\"1\");\r\n }\r\n },\r\n complete: () => {\r\n this.busy.set(false);\r\n }\r\n });\r\n } else {\r\n if (!position)\r\n this.history().push({ id: this.indexId, position: this.getPosition() });\r\n // Move on the same chapter\r\n this.gotoPosition(anchor, position);\r\n }\r\n }\r\n\r\n /**\r\n * Goto position\r\n * @param anchor the anchor to go to\r\n * @param position the offset to go to\r\n */\r\n protected gotoPosition(anchor: string, position: number = 0): void {\r\n // Handle positioning\r\n setTimeout(() => {\r\n // Handle anchor first\r\n if (anchor) {\r\n let elms = document.getElementsByName(anchor.toUpperCase());\r\n if (elms) position = elms[0].offsetTop;\r\n }\r\n // Then position\r\n if (position > 0) this.setPosition(position - 1);\r\n else this.setPosition(0);\r\n }, 50);\r\n }\r\n\r\n /**\r\n * Get scroll position\r\n * @returns: the new scroll top\r\n */\r\n protected getPosition(): number {\r\n let elem = document.getElementById('helpviewer-scroller');\r\n if (elem) {\r\n return elem.scrollTop;\r\n }\r\n return 0;\r\n }\r\n\r\n /**\r\n * Set scroll position\r\n * @param position : the position to go to\r\n */\r\n protected setPosition(position: number): void {\r\n let elem = document.getElementById('helpviewer-scroller');\r\n if (elem) {\r\n elem.scrollTo(0, position);\r\n }\r\n }\r\n\r\n /**\r\n * Go back\r\n */\r\n protected back(): void {\r\n if (!this.history || this.history.length === 0) return;\r\n let n = this.history().pop();\r\n this.getChapter(n.id, n.position + 1);\r\n }\r\n\r\n\r\n\r\n\r\n\r\n}\r\n","<div class=\"helpviewer-fixed\">\r\n <div style=\"height:6px\">\r\n @if (busy()) {\r\n <mat-progress-bar z-index=\"11\" mode=\"indeterminate\"></mat-progress-bar>\r\n }\r\n </div>\r\n <div class=\"dialog-header\">\r\n <div fxLayout=\"row\" fxLayoutAlign=\"start center\" fxLayoutGap=\"10px\" fxFill>\r\n <div class=\"dialog-menu\">\r\n <button type=\"button\" mat-icon-button matTooltip=\"Mostra menu\" [attr.aria-label]=\"'Mostra indice'\"\r\n (click)=\"toggleIndexPane()\">\r\n <mat-icon>menu</mat-icon>\r\n </button>\r\n </div>\r\n <div fxFlex=\"*\">\r\n <h2 mat-dialog-title>Guida</h2>\r\n </div>\r\n <div fxFlex=\"100px\" fxLayoutAlign=\"end\" class=\"dialog-close\">\r\n @if (canGoBack()) {\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Indietro\" (click)=\"back()\">\r\n <mat-icon>arrow_back</mat-icon>\r\n </button>\r\n }\r\n <button fxFlexAlign=\"start\" type=\"button\" mat-icon-button matTooltip=\"Chiudi\" (click)=\"close()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n</div>\r\n<mat-dialog-content id=\"helpviewer-scrollable\">\r\n <mat-drawer-container class=\"fill\">\r\n <mat-drawer #indexPane mode=\"side\" [autoFocus]=\"false\" class=\"drawer-small drawer-transparent\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div fxFlex=\"*\">\r\n <mat-tree [dataSource]=\"treeData\" [treeControl]=\"treeControl\" class=\"tree \" style=\"max-width:310px\">\r\n <mat-tree-node *matTreeNodeDef=\"let node\" matTreeNodeToggle matTreeNodePadding\r\n [matTreeNodePaddingIndent]=\"20\" class=\"tree-node tree-node-simple tree-node-style\"\r\n (click)=\"getChapter(node.id);\" [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button disabled class=\"small-icon-button\"></button>\r\n <div fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n <mat-tree-node *matTreeNodeDef=\"let node;when: hasChild\" matTreeNodePadding [matTreeNodePaddingIndent]=\"20\"\r\n class=\"tree-node tree-node-simple tree-node-style\"\r\n [class.tree-node-activated]=\"indexNode && indexNode.id === node.id\" (click)=\"getChapter(node.id)\"\r\n [disabled]=\"busy()\">\r\n <div fxLayout=\"row\" fxLayoutGap=\"10px\" fxFill class=\"small uppercase\">\r\n <button type=\"button\" fxFlexAlign=\"center\" mat-icon-button matTreeNodeToggle\r\n [attr.aria-label]=\"'Apri/chiudi ' + node.name\" 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 fxFlex=\"*\" fxFlexAlign=\"center\">{{node.name}}</div>\r\n </div>\r\n </mat-tree-node>\r\n </mat-tree>\r\n </div>\r\n </div>\r\n </mat-drawer>\r\n <mat-drawer-content id=\"helpviewer-scroller\">\r\n <div style=\"padding: 0 24px;\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div class=\"fill\" (click)=\"gotoChapter($event)\" [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\r\n </mat-drawer-content>\r\n </mat-drawer-container>\r\n</mat-dialog-content>","import { Injectable, inject } from '@angular/core';\r\nimport { DialogService } from '@arsedizioni/ars-utils/ui';\r\nimport { ApiResult } from '@arsedizioni/ars-utils/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { HelpViewerComponent, IndexInfo } from '../components/help-viewer/help-viewer.component';\r\nimport { Chapter, ChapterBag } from '../definitions';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class HelpService {\r\n \r\n private httpClient = inject(HttpClient); \r\n private dialogService = inject(DialogService);\r\n private serviceUri: string;\r\n\r\n /**\r\n * Initialize help service\r\n * @param serviceUri : the service uri\r\n */\r\n initialize(serviceUri: string) {\r\n this.serviceUri = serviceUri;\r\n }\r\n\r\n /**\r\n * Retrieve an help chapter\r\n * @param id the chapter id\r\n * @param query the search query\r\n */\r\n getChapter(id: string, query: string = null) {\r\n return this.httpClient.get<ApiResult<ChapterBag>>(\r\n this.serviceUri +\r\n '/help/chapter/' +\r\n id +\r\n '/?query=' +\r\n (query == null ? '' : query)\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve an help chapater info\r\n * @param id the chapter id\r\n */\r\n getChapterInfo(id: string) {\r\n return this.httpClient.get<ApiResult<Chapter>>(\r\n this.serviceUri + '/help/chapter/info/' + id\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve a repository item\r\n * @param id the file id\r\n */\r\n getRepo(id: string) {\r\n return this.httpClient.get<ApiResult<any>>(\r\n this.serviceUri + '/help/repo/' + id\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve an help toc\r\n */\r\n getToc() {\r\n return this.httpClient.get<ApiResult<IndexInfo>>(\r\n this.serviceUri + '/help/toc'\r\n );\r\n }\r\n\r\n\r\n /**\r\n * Open help viewer\r\n */\r\n show(id: string = '1') {\r\n this.dialogService.open(HelpViewerComponent, {\r\n ariaLabel: 'guida',\r\n autoFocus: false,\r\n restoreFocus: false,\r\n disableClose: true,\r\n data: {\r\n id: id\r\n },\r\n minWidth: '375px',\r\n maxWidth: '1200px',\r\n width: '100%',\r\n height: '100%'\r\n });\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule()\r\nexport class ArsHelpModule { }\r\n\r\nexport * from './services/help.service';\r\n","/*\r\n * Public API Surface \r\n */\r\nexport * from './help.module';\r\nexport * from './definitions';\r\nexport * from './components/help-viewer/help-viewer.component';\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["observableOf"],"mappings":"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"}
@@ -48,7 +48,7 @@ class SupportService {
48
48
  this.broadcastService = inject(BroadcastService);
49
49
  this.products = SupportProduct.None;
50
50
  this.productModules = SupportProductModule.None;
51
- this.unreadNotifications = signal(undefined, { ...(ngDevMode ? { debugName: "unreadNotifications" } : {}) });
51
+ this.unreadNotifications = signal(undefined, ...(ngDevMode ? [{ debugName: "unreadNotifications" }] : []));
52
52
  }
53
53
  get serviceUri() {
54
54
  return this._serviceUri;
@@ -124,10 +124,10 @@ class SupportService {
124
124
  dowloadNotificationDocument(documentId) {
125
125
  return this.httpClient.get(this._serviceUri + '/documents/download/' + documentId, { responseType: 'blob' });
126
126
  }
127
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SupportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
128
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SupportService, providedIn: 'root' }); }
127
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: SupportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
128
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: SupportService, providedIn: 'root' }); }
129
129
  }
130
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: SupportService, decorators: [{
130
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: SupportService, decorators: [{
131
131
  type: Injectable,
132
132
  args: [{
133
133
  providedIn: 'root',
@@ -135,11 +135,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImpor
135
135
  }] });
136
136
 
137
137
  class ArsSupportCommonModule {
138
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ArsSupportCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
139
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.1", ngImport: i0, type: ArsSupportCommonModule }); }
140
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ArsSupportCommonModule }); }
138
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ArsSupportCommonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
139
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "21.0.3", ngImport: i0, type: ArsSupportCommonModule }); }
140
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ArsSupportCommonModule }); }
141
141
  }
142
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.1", ngImport: i0, type: ArsSupportCommonModule, decorators: [{
142
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "21.0.3", ngImport: i0, type: ArsSupportCommonModule, decorators: [{
143
143
  type: NgModule
144
144
  }] });
145
145
 
@@ -1 +1 @@
1
- {"version":3,"file":"arsedizioni-ars-utils-support.common.mjs","sources":["../../../projects/ars-utils/support.common/common/messages.ts","../../../projects/ars-utils/support.common/common/definitions.ts","../../../projects/ars-utils/support.common/common/services/support.service.ts","../../../projects/ars-utils/support.common/common/common.module.ts","../../../projects/ars-utils/support.common/public_api.ts","../../../projects/ars-utils/support.common/arsedizioni-ars-utils-support.common.ts"],"sourcesContent":["export const SupportMessages = {\r\n /**\r\n * Messages\r\n */\r\n // Error\r\n ERROR: '§support-error',\r\n\r\n // Login\r\n LOGIN_CHANGED: '§support-login-changed',\r\n LOGIN_COMPLETED: '§support-login-completed',\r\n LOGOUT_COMPLETED: '§support-logout-completed',\r\n LOGIN_PENDING: '§support-login-pending',\r\n LOGOUT: '§support-logout',\r\n\r\n // Notifications\r\n NOTIFICATION_READ: '§support-notification-read',\r\n};\r\n","import { LoginResult } from '@arsedizioni/ars-utils/core';\r\nimport { LoginOAuthType } from '@arsedizioni/ars-utils/ui.oauth';\r\n\r\n\r\nexport interface SupportUserInfo {\r\n id: number;\r\n groups?: number;\r\n groupNames?: string;\r\n displayName?: string;\r\n dashboard?: string;\r\n sessionId?: string;\r\n email?: string;\r\n customerId?: number;\r\n companyName?: string;\r\n role: number;\r\n scopes?: string[];\r\n sla: number;\r\n isCommercial?: boolean;\r\n isAdministrator: boolean;\r\n isGuest: boolean;\r\n isUser: boolean;\r\n isOperator: boolean;\r\n isTemporary: boolean;\r\n}\r\n\r\n\r\nexport interface SupportLoginResult extends LoginResult<SupportUserInfo> {\r\n}\r\n\r\nexport interface SupportLoginInfo {\r\n context: SupportUserInfo;\r\n oauth?: LoginOAuthType;\r\n remember?: boolean;\r\n}\r\n\r\nexport interface SupportNotificationsSearchParams {\r\n any?: string;\r\n products?: number;\r\n productModules?: number;\r\n first?: number;\r\n count?: number;\r\n}\r\n\r\nexport interface SupportNotificationsSearchResult {\r\n interval?: string;\r\n items?: SupportNotificationInfo[];\r\n total?: number;\r\n}\r\n\r\nexport interface Notification {\r\n id: number;\r\n products: number;\r\n productModules?: number;\r\n publishingDate?: Date;\r\n title: string;\r\n text: string;\r\n state: number;\r\n created: Date;\r\n createdBy: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n productNames?: string;\r\n productModuleNames?: string;\r\n isPublished: boolean;\r\n isInternal: boolean;\r\n stateName: string;\r\n documents?: Document[];\r\n isRead: boolean;\r\n totalRead: number;\r\n}\r\n\r\nexport interface SupportDocumentInfo {\r\n id: number;\r\n origin?: number;\r\n ownerId?: number;\r\n name?: string;\r\n description?: string;\r\n size?: number;\r\n binaryId?: number;\r\n url?: string;\r\n customerId?: number;\r\n created?: Date;\r\n createdBy?: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n isBinary?: boolean;\r\n}\r\n\r\nexport interface SupportNotificationInfo {\r\n id: number;\r\n products?: number;\r\n productModules?: number;\r\n publishingDate?: Date;\r\n title: string;\r\n text: string;\r\n state: number;\r\n created: Date;\r\n createdBy: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n productNames?: string;\r\n productModuleNames?: string;\r\n isPublished: boolean;\r\n isInternal: boolean;\r\n stateName: string;\r\n documents?: Document[];\r\n isRead: boolean;\r\n totalRead: number;\r\n isMenuOpen?: boolean;\r\n isOver?: boolean;\r\n\r\n}\r\n\r\nexport interface SupportNotificationsMarkParams {\r\n ids: number[];\r\n unmark: boolean;\r\n}\r\n\r\nexport enum SupportProduct {\r\n None = 0,\r\n Clipper = 1,\r\n Evolution = 1 << 1,\r\n DGInfo = 1 << 2\r\n}\r\n\r\nexport enum SupportProductModule {\r\n None = 0,\r\n EvoFormazione = 1,\r\n EvoDPI = 1 << 1,\r\n EvoSorveglianzaSanitaria = 1 << 2,\r\n EvoRegistroEScadenzario = 1 << 3,\r\n EvoAttrezzatureEImpianti = 1 << 4,\r\n EvoMonitoraggio = 1 << 5,\r\n EvoBollettino = 1 << 6,\r\n DgiADR = 1 << 7,\r\n DgiRID = 1 << 8,\r\n DgiIMDG = 1 << 9,\r\n DgiCLP = 1 << 10,\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, inject, signal } from '@angular/core';\r\nimport { ApiResult, BroadcastMessageInfo, BroadcastService } from '@arsedizioni/ars-utils/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { SupportMessages } from '../messages';\r\nimport { SupportNotificationInfo, SupportNotificationsMarkParams, SupportNotificationsSearchParams, SupportNotificationsSearchResult, SupportProduct, SupportProductModule } from '../definitions';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SupportService implements OnDestroy {\r\n\r\n private httpClient = inject(HttpClient);\r\n private broadcastService = inject(BroadcastService);\r\n private broadcastServiceSubscription?: Subscription;\r\n private _serviceUri?: string;\r\n get serviceUri(): string {\r\n return this._serviceUri;\r\n }\r\n public products: SupportProduct = SupportProduct.None;\r\n public productModules: SupportProductModule = SupportProductModule.None;\r\n\r\n public readonly unreadNotifications = signal<number | undefined>(undefined);\r\n\r\n ngOnDestroy() {\r\n // Clean-up\r\n if (this.broadcastServiceSubscription) {\r\n this.broadcastServiceSubscription.unsubscribe();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Initialize service\r\n * @param serviceUri : the service uri\r\n * @param products: the supported products\r\n * @param productModules: the supported product modules\r\n */\r\n initialize(\r\n serviceUri: string,\r\n products: SupportProduct = SupportProduct.None,\r\n productModules: SupportProductModule = SupportProductModule.None) {\r\n\r\n // Initialize\r\n this._serviceUri = serviceUri;\r\n this.products = products;\r\n this.productModules = productModules;\r\n\r\n // React to message broadcasting\r\n if (!this.broadcastServiceSubscription) {\r\n this.broadcastServiceSubscription = this.broadcastService.getMessage().subscribe((message: BroadcastMessageInfo) => {\r\n if (message.id === SupportMessages.NOTIFICATION_READ) {\r\n this.countUnreadNotifications();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ////\r\n // NOTIFICATIONS\r\n ////\r\n\r\n /**\r\n * Count unread notifications\r\n */\r\n countUnreadNotifications() {\r\n this.httpClient.get<ApiResult<number>>(\r\n this._serviceUri + '/notifications/unread/?products=' + (this.products ?? 0) + \"&modules=\" + (this.productModules ?? 0)\r\n ).subscribe((r: ApiResult<number>) => {\r\n if (r.success) {\r\n this.unreadNotifications.set(r.value > 0 ? r.value : undefined)\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Query notifications\r\n * @param params: query parameters\r\n */\r\n queryNotifications(params: SupportNotificationsSearchParams) {\r\n params.products = this.products ?? 0;\r\n params.productModules = this.productModules ?? 0;\r\n return this.httpClient.post<ApiResult<SupportNotificationsSearchResult>>(\r\n this._serviceUri + '/notifications',\r\n params\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve a notification\r\n * @param id: the notification id\r\n */\r\n getNotification(id: number) {\r\n return this.httpClient.get<ApiResult<SupportNotificationInfo>>(\r\n this._serviceUri +\r\n '/notifications/' +\r\n id\r\n );\r\n }\r\n\r\n /**\r\n * Mark a group of notifications as read\r\n * @param ids: the array of notification's ids to set as read\r\n */\r\n markNotifications(params: SupportNotificationsMarkParams) {\r\n return this.httpClient.post<ApiResult<boolean>>(\r\n this._serviceUri + '/notifications/mark',\r\n params\r\n );\r\n }\r\n\r\n /**\r\n * Download a notification document\r\n * @param documentId : the notification document id\r\n */\r\n dowloadNotificationDocument(documentId: number) {\r\n return this.httpClient.get(\r\n this._serviceUri + '/documents/download/' + documentId,\r\n { responseType: 'blob' }\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule()\r\nexport class ArsSupportCommonModule {}\r\n\r\n// Other exports\r\nexport * from './messages';\r\nexport * from './definitions';\r\nexport * from './services/support.service';\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './common/common.module';\r\nexport * from './common/messages';\r\nexport * from './common/definitions';\r\nexport * from './common/services/support.service';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"arsedizioni-ars-utils-support.common.mjs","sources":["../../../projects/ars-utils/support.common/common/messages.ts","../../../projects/ars-utils/support.common/common/definitions.ts","../../../projects/ars-utils/support.common/common/services/support.service.ts","../../../projects/ars-utils/support.common/common/common.module.ts","../../../projects/ars-utils/support.common/public_api.ts","../../../projects/ars-utils/support.common/arsedizioni-ars-utils-support.common.ts"],"sourcesContent":["export const SupportMessages = {\r\n /**\r\n * Messages\r\n */\r\n // Error\r\n ERROR: '§support-error',\r\n\r\n // Login\r\n LOGIN_CHANGED: '§support-login-changed',\r\n LOGIN_COMPLETED: '§support-login-completed',\r\n LOGOUT_COMPLETED: '§support-logout-completed',\r\n LOGIN_PENDING: '§support-login-pending',\r\n LOGOUT: '§support-logout',\r\n\r\n // Notifications\r\n NOTIFICATION_READ: '§support-notification-read',\r\n};\r\n","import { LoginResult } from '@arsedizioni/ars-utils/core';\r\nimport { LoginOAuthType } from '@arsedizioni/ars-utils/ui.oauth';\r\n\r\n\r\nexport interface SupportUserInfo {\r\n id: number;\r\n groups?: number;\r\n groupNames?: string;\r\n displayName?: string;\r\n dashboard?: string;\r\n sessionId?: string;\r\n email?: string;\r\n customerId?: number;\r\n companyName?: string;\r\n role: number;\r\n scopes?: string[];\r\n sla: number;\r\n isCommercial?: boolean;\r\n isAdministrator: boolean;\r\n isGuest: boolean;\r\n isUser: boolean;\r\n isOperator: boolean;\r\n isTemporary: boolean;\r\n}\r\n\r\n\r\nexport interface SupportLoginResult extends LoginResult<SupportUserInfo> {\r\n}\r\n\r\nexport interface SupportLoginInfo {\r\n context: SupportUserInfo;\r\n oauth?: LoginOAuthType;\r\n remember?: boolean;\r\n}\r\n\r\nexport interface SupportNotificationsSearchParams {\r\n any?: string;\r\n products?: number;\r\n productModules?: number;\r\n first?: number;\r\n count?: number;\r\n}\r\n\r\nexport interface SupportNotificationsSearchResult {\r\n interval?: string;\r\n items?: SupportNotificationInfo[];\r\n total?: number;\r\n}\r\n\r\nexport interface Notification {\r\n id: number;\r\n products: number;\r\n productModules?: number;\r\n publishingDate?: Date;\r\n title: string;\r\n text: string;\r\n state: number;\r\n created: Date;\r\n createdBy: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n productNames?: string;\r\n productModuleNames?: string;\r\n isPublished: boolean;\r\n isInternal: boolean;\r\n stateName: string;\r\n documents?: Document[];\r\n isRead: boolean;\r\n totalRead: number;\r\n}\r\n\r\nexport interface SupportDocumentInfo {\r\n id: number;\r\n origin?: number;\r\n ownerId?: number;\r\n name?: string;\r\n description?: string;\r\n size?: number;\r\n binaryId?: number;\r\n url?: string;\r\n customerId?: number;\r\n created?: Date;\r\n createdBy?: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n isBinary?: boolean;\r\n}\r\n\r\nexport interface SupportNotificationInfo {\r\n id: number;\r\n products?: number;\r\n productModules?: number;\r\n publishingDate?: Date;\r\n title: string;\r\n text: string;\r\n state: number;\r\n created: Date;\r\n createdBy: string;\r\n lastUpdated?: Date;\r\n lastUpdatedBy?: string;\r\n productNames?: string;\r\n productModuleNames?: string;\r\n isPublished: boolean;\r\n isInternal: boolean;\r\n stateName: string;\r\n documents?: Document[];\r\n isRead: boolean;\r\n totalRead: number;\r\n isMenuOpen?: boolean;\r\n isOver?: boolean;\r\n\r\n}\r\n\r\nexport interface SupportNotificationsMarkParams {\r\n ids: number[];\r\n unmark: boolean;\r\n}\r\n\r\nexport enum SupportProduct {\r\n None = 0,\r\n Clipper = 1,\r\n Evolution = 1 << 1,\r\n DGInfo = 1 << 2\r\n}\r\n\r\nexport enum SupportProductModule {\r\n None = 0,\r\n EvoFormazione = 1,\r\n EvoDPI = 1 << 1,\r\n EvoSorveglianzaSanitaria = 1 << 2,\r\n EvoRegistroEScadenzario = 1 << 3,\r\n EvoAttrezzatureEImpianti = 1 << 4,\r\n EvoMonitoraggio = 1 << 5,\r\n EvoBollettino = 1 << 6,\r\n DgiADR = 1 << 7,\r\n DgiRID = 1 << 8,\r\n DgiIMDG = 1 << 9,\r\n DgiCLP = 1 << 10,\r\n}\r\n","import { HttpClient } from '@angular/common/http';\r\nimport { Injectable, OnDestroy, inject, signal } from '@angular/core';\r\nimport { ApiResult, BroadcastMessageInfo, BroadcastService } from '@arsedizioni/ars-utils/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { SupportMessages } from '../messages';\r\nimport { SupportNotificationInfo, SupportNotificationsMarkParams, SupportNotificationsSearchParams, SupportNotificationsSearchResult, SupportProduct, SupportProductModule } from '../definitions';\r\n\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SupportService implements OnDestroy {\r\n\r\n private httpClient = inject(HttpClient);\r\n private broadcastService = inject(BroadcastService);\r\n private broadcastServiceSubscription?: Subscription;\r\n private _serviceUri?: string;\r\n get serviceUri(): string {\r\n return this._serviceUri;\r\n }\r\n public products: SupportProduct = SupportProduct.None;\r\n public productModules: SupportProductModule = SupportProductModule.None;\r\n\r\n public readonly unreadNotifications = signal<number | undefined>(undefined);\r\n\r\n ngOnDestroy() {\r\n // Clean-up\r\n if (this.broadcastServiceSubscription) {\r\n this.broadcastServiceSubscription.unsubscribe();\r\n }\r\n\r\n }\r\n\r\n /**\r\n * Initialize service\r\n * @param serviceUri : the service uri\r\n * @param products: the supported products\r\n * @param productModules: the supported product modules\r\n */\r\n initialize(\r\n serviceUri: string,\r\n products: SupportProduct = SupportProduct.None,\r\n productModules: SupportProductModule = SupportProductModule.None) {\r\n\r\n // Initialize\r\n this._serviceUri = serviceUri;\r\n this.products = products;\r\n this.productModules = productModules;\r\n\r\n // React to message broadcasting\r\n if (!this.broadcastServiceSubscription) {\r\n this.broadcastServiceSubscription = this.broadcastService.getMessage().subscribe((message: BroadcastMessageInfo) => {\r\n if (message.id === SupportMessages.NOTIFICATION_READ) {\r\n this.countUnreadNotifications();\r\n }\r\n });\r\n }\r\n }\r\n\r\n ////\r\n // NOTIFICATIONS\r\n ////\r\n\r\n /**\r\n * Count unread notifications\r\n */\r\n countUnreadNotifications() {\r\n this.httpClient.get<ApiResult<number>>(\r\n this._serviceUri + '/notifications/unread/?products=' + (this.products ?? 0) + \"&modules=\" + (this.productModules ?? 0)\r\n ).subscribe((r: ApiResult<number>) => {\r\n if (r.success) {\r\n this.unreadNotifications.set(r.value > 0 ? r.value : undefined)\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Query notifications\r\n * @param params: query parameters\r\n */\r\n queryNotifications(params: SupportNotificationsSearchParams) {\r\n params.products = this.products ?? 0;\r\n params.productModules = this.productModules ?? 0;\r\n return this.httpClient.post<ApiResult<SupportNotificationsSearchResult>>(\r\n this._serviceUri + '/notifications',\r\n params\r\n );\r\n }\r\n\r\n /**\r\n * Retrieve a notification\r\n * @param id: the notification id\r\n */\r\n getNotification(id: number) {\r\n return this.httpClient.get<ApiResult<SupportNotificationInfo>>(\r\n this._serviceUri +\r\n '/notifications/' +\r\n id\r\n );\r\n }\r\n\r\n /**\r\n * Mark a group of notifications as read\r\n * @param ids: the array of notification's ids to set as read\r\n */\r\n markNotifications(params: SupportNotificationsMarkParams) {\r\n return this.httpClient.post<ApiResult<boolean>>(\r\n this._serviceUri + '/notifications/mark',\r\n params\r\n );\r\n }\r\n\r\n /**\r\n * Download a notification document\r\n * @param documentId : the notification document id\r\n */\r\n dowloadNotificationDocument(documentId: number) {\r\n return this.httpClient.get(\r\n this._serviceUri + '/documents/download/' + documentId,\r\n { responseType: 'blob' }\r\n );\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\n@NgModule()\r\nexport class ArsSupportCommonModule {}\r\n\r\n// Other exports\r\nexport * from './messages';\r\nexport * from './definitions';\r\nexport * from './services/support.service';\r\n","/*\r\n * Public API Surface of ars-utils\r\n */\r\nexport * from './common/common.module';\r\nexport * from './common/messages';\r\nexport * from './common/definitions';\r\nexport * from './common/services/support.service';\r\n\r\n\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}