@arsedizioni/ars-utils 18.5.61 → 19.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs +14 -12
- package/fesm2022/arsedizioni-ars-utils-clipper.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs +41 -41
- package/fesm2022/arsedizioni-ars-utils-clipper.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-core.mjs +99 -99
- package/fesm2022/arsedizioni-ars-utils-core.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs +15 -13
- package/fesm2022/arsedizioni-ars-utils-evolution.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-help.mjs +13 -13
- package/fesm2022/arsedizioni-ars-utils-help.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs +14 -12
- package/fesm2022/arsedizioni-ars-utils-support.common.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs +6 -6
- package/fesm2022/arsedizioni-ars-utils-support.ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs +7 -7
- package/fesm2022/arsedizioni-ars-utils-tinymce.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs +58 -58
- package/fesm2022/arsedizioni-ars-utils-ui.application.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.mjs +34 -34
- package/fesm2022/arsedizioni-ars-utils-ui.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs +7 -7
- package/fesm2022/arsedizioni-ars-utils-ui.oauth.mjs.map +1 -1
- package/fesm2022/arsedizioni-ars-utils.mjs.map +1 -1
- package/package.json +9 -33
- package/clipper.ui/ui/clipper.scss +0 -530
- package/esm2022/arsedizioni-ars-utils.mjs +0 -5
- package/esm2022/clipper.common/arsedizioni-ars-utils-clipper.common.mjs +0 -5
- package/esm2022/clipper.common/common/common.module.mjs +0 -16
- package/esm2022/clipper.common/common/definitions.mjs +0 -2041
- package/esm2022/clipper.common/common/interceptors/auth.interceptor.mjs +0 -100
- package/esm2022/clipper.common/common/messages.mjs +0 -36
- package/esm2022/clipper.common/common/services/clipper.service.mjs +0 -1009
- package/esm2022/clipper.common/public_api.mjs +0 -5
- package/esm2022/clipper.ui/arsedizioni-ars-utils-clipper.ui.mjs +0 -5
- package/esm2022/clipper.ui/documents.mjs +0 -50
- package/esm2022/clipper.ui/public_api.mjs +0 -18
- package/esm2022/clipper.ui/ui/browser-dialog/browser-dialog.component.mjs +0 -766
- package/esm2022/clipper.ui/ui/document/document.component.mjs +0 -688
- package/esm2022/clipper.ui/ui/document-index/document-index.component.mjs +0 -118
- package/esm2022/clipper.ui/ui/document-manager/document-manager.mjs +0 -441
- package/esm2022/clipper.ui/ui/document-menu/document-menu.component.mjs +0 -217
- package/esm2022/clipper.ui/ui/references/references.component.mjs +0 -380
- package/esm2022/clipper.ui/ui/search-calendar/search-calendar.component.mjs +0 -116
- package/esm2022/clipper.ui/ui/search-dialog/search-dialog.component.mjs +0 -339
- package/esm2022/clipper.ui/ui/search-facets/search-facets.component.mjs +0 -251
- package/esm2022/clipper.ui/ui/search-free-text-help/search-free-text-help.component.mjs +0 -17
- package/esm2022/clipper.ui/ui/search-free-text-query-builder/search-free-text-query-builder.component.mjs +0 -106
- package/esm2022/clipper.ui/ui/search-result-item/search-result-item.component.mjs +0 -120
- package/esm2022/clipper.ui/ui/search-result-manager/search-result-manager.mjs +0 -531
- package/esm2022/core/arsedizioni-ars-utils-core.mjs +0 -5
- package/esm2022/core/core.module.mjs +0 -151
- package/esm2022/core/dateFnsAdapter.mjs +0 -203
- package/esm2022/core/definitions.mjs +0 -47
- package/esm2022/core/directives/autoFocusDirective.mjs +0 -22
- package/esm2022/core/directives/changeDateIntervalDirective.mjs +0 -48
- package/esm2022/core/directives/copyClipboardDirective.mjs +0 -46
- package/esm2022/core/directives/validators.mjs +0 -502
- package/esm2022/core/pipes/format.pipe.mjs +0 -53
- package/esm2022/core/pipes/replace.pipe.mjs +0 -29
- package/esm2022/core/pipes/safe-html.pipe.mjs +0 -24
- package/esm2022/core/pipes/safe-url.pipe.mjs +0 -24
- package/esm2022/core/pipes/search-callback.pipe.mjs +0 -21
- package/esm2022/core/pipes/search-filter.pipe.mjs +0 -50
- package/esm2022/core/public_api.mjs +0 -22
- package/esm2022/core/selectable.mjs +0 -131
- package/esm2022/core/services/broadcast.service.mjs +0 -35
- package/esm2022/core/services/broadcastChannelManager.mjs +0 -80
- package/esm2022/core/services/environment.service.mjs +0 -29
- package/esm2022/core/services/screen.service.mjs +0 -23
- package/esm2022/core/services/theme.service.mjs +0 -140
- package/esm2022/core/system.mjs +0 -664
- package/esm2022/evolution.common/arsedizioni-ars-utils-evolution.common.mjs +0 -5
- package/esm2022/evolution.common/common/common.module.mjs +0 -16
- package/esm2022/evolution.common/common/definitions.mjs +0 -454
- package/esm2022/evolution.common/common/interceptors/auth.interceptor.mjs +0 -100
- package/esm2022/evolution.common/common/messages.mjs +0 -8
- package/esm2022/evolution.common/common/services/evolution.service.mjs +0 -488
- package/esm2022/evolution.common/public_api.mjs +0 -5
- package/esm2022/help/arsedizioni-ars-utils-help.mjs +0 -5
- package/esm2022/help/components/help-viewer/help-viewer.component.mjs +0 -442
- package/esm2022/help/definitions.mjs +0 -2
- package/esm2022/help/help.module.mjs +0 -12
- package/esm2022/help/public_api.mjs +0 -7
- package/esm2022/help/services/help.service.mjs +0 -77
- package/esm2022/public_api.mjs +0 -15
- package/esm2022/support.common/arsedizioni-ars-utils-support.common.mjs +0 -5
- package/esm2022/support.common/common/common.module.mjs +0 -16
- package/esm2022/support.common/common/definitions.mjs +0 -29
- package/esm2022/support.common/common/interceptors/auth.interceptor.mjs +0 -100
- package/esm2022/support.common/common/messages.mjs +0 -13
- package/esm2022/support.common/common/services/support.service.mjs +0 -287
- package/esm2022/support.common/public_api.mjs +0 -8
- package/esm2022/support.ui/arsedizioni-ars-utils-support.ui.mjs +0 -5
- package/esm2022/support.ui/public_api.mjs +0 -5
- package/esm2022/support.ui/ui/notifications-browser/notification/notification.component.mjs +0 -80
- package/esm2022/support.ui/ui/notifications-browser/notifications-browser.component.mjs +0 -233
- package/esm2022/tinymce/arsedizioni-ars-utils-tinymce.mjs +0 -5
- package/esm2022/tinymce/full-screen-editor/full-screen-editor.component.mjs +0 -48
- package/esm2022/tinymce/public_api.mjs +0 -7
- package/esm2022/tinymce/tinymce.module.mjs +0 -19
- package/esm2022/tinymce/utils.mjs +0 -150
- package/esm2022/ui/arsedizioni-ars-utils-ui.mjs +0 -5
- package/esm2022/ui/public_api.mjs +0 -12
- package/esm2022/ui/ui/components/button-selector/button-selector.component.mjs +0 -150
- package/esm2022/ui/ui/components/button-toggle/button-toggle.component.mjs +0 -51
- package/esm2022/ui/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
- package/esm2022/ui/ui/components/chips-selector/chips-selector.component.mjs +0 -272
- package/esm2022/ui/ui/components/file-input/file-input.component.mjs +0 -264
- package/esm2022/ui/ui/components/file-preview/file-preview.component.mjs +0 -73
- package/esm2022/ui/ui/components/filter-bar/filter-bar.component.mjs +0 -356
- package/esm2022/ui/ui/definitions.mjs +0 -2
- package/esm2022/ui/ui/dialogs/busy/busy-dialog.component.mjs +0 -47
- package/esm2022/ui/ui/dialogs/confirm/confirm-dialog.component.mjs +0 -101
- package/esm2022/ui/ui/dialogs/credentials/credentials-dialog.component.mjs +0 -86
- package/esm2022/ui/ui/dialogs/info/info-dialog.component.mjs +0 -51
- package/esm2022/ui/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
- package/esm2022/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
- package/esm2022/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
- package/esm2022/ui/ui/dialogs/recover-password/recover-password-dialog.component.mjs +0 -49
- package/esm2022/ui/ui/dialogs/reset-password/reset-password-dialog.component.mjs +0 -89
- package/esm2022/ui/ui/dialogs/select/select-dialog.component.mjs +0 -374
- package/esm2022/ui/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
- package/esm2022/ui/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
- package/esm2022/ui/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
- package/esm2022/ui/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
- package/esm2022/ui/ui/dialogs/toast/toast.component.mjs +0 -32
- package/esm2022/ui/ui/directives/resize-table-column.directive.mjs +0 -63
- package/esm2022/ui/ui/filters.mjs +0 -43
- package/esm2022/ui/ui/paginatorIntl.mjs +0 -34
- package/esm2022/ui/ui/services/dialog.service.mjs +0 -417
- package/esm2022/ui/ui/services/ui.service.mjs +0 -21
- package/esm2022/ui/ui/ui.module.mjs +0 -21
- package/esm2022/ui.application/arsedizioni-ars-utils-ui.application.mjs +0 -5
- package/esm2022/ui.application/public_api.mjs +0 -21
- package/esm2022/ui.application/ui/components/button-selector/button-selector.component.mjs +0 -150
- package/esm2022/ui.application/ui/components/button-toggle/button-toggle.component.mjs +0 -51
- package/esm2022/ui.application/ui/components/calendar-empty-header/calendar-empy-header.component.mjs +0 -30
- package/esm2022/ui.application/ui/components/chips-selector/chips-selector.component.mjs +0 -272
- package/esm2022/ui.application/ui/components/file-input/file-input.component.mjs +0 -264
- package/esm2022/ui.application/ui/components/file-preview/file-preview.component.mjs +0 -73
- package/esm2022/ui.application/ui/components/filter-bar/filter-bar.component.mjs +0 -356
- package/esm2022/ui.application/ui/definitions.mjs +0 -31
- package/esm2022/ui.application/ui/dialogs/prompt/prompt-dialog.component.mjs +0 -77
- package/esm2022/ui.application/ui/dialogs/prompt-date/prompt-date-dialog.component.mjs +0 -79
- package/esm2022/ui.application/ui/dialogs/prompt-time/prompt-time-dialog.component.mjs +0 -72
- package/esm2022/ui.application/ui/dialogs/select/select-dialog.component.mjs +0 -374
- package/esm2022/ui.application/ui/dialogs/select-file/select-file-dialog.component.mjs +0 -106
- package/esm2022/ui.application/ui/dialogs/select-picture/select-picture-dialog.component.mjs +0 -62
- package/esm2022/ui.application/ui/dialogs/select-tree/select-tree-dialog.component.mjs +0 -277
- package/esm2022/ui.application/ui/dialogs/send-to/send-to-dialog.component.mjs +0 -90
- package/esm2022/ui.application/ui/directives/resize-table-column.directive.mjs +0 -63
- package/esm2022/ui.application/ui/filters.mjs +0 -43
- package/esm2022/ui.application/ui/services/applicationDialog.service.mjs +0 -304
- package/esm2022/ui.application/ui/ui.module.mjs +0 -30
- package/esm2022/ui.oauth/arsedizioni-ars-utils-ui.oauth.mjs +0 -5
- package/esm2022/ui.oauth/public_api.mjs +0 -6
- package/esm2022/ui.oauth/ui/components/login/login-oauth.component.mjs +0 -199
- package/esm2022/ui.oauth/ui/definitions.mjs +0 -7
- package/esm2022/ui.oauth/ui/ui.module.mjs +0 -13
- package/styles/ui.colors.scss +0 -77
- package/styles/ui.scss +0 -318
- package/ui/ui/components/button-selector/button-selector.component.d.ts +0 -52
- package/ui/ui/components/button-toggle/button-toggle.component.d.ts +0 -28
- package/ui/ui/components/calendar-empty-header/calendar-empy-header.component.d.ts +0 -11
- package/ui/ui/components/chips-selector/chips-selector.component.d.ts +0 -82
- package/ui/ui/components/file-input/file-input.component.d.ts +0 -88
- package/ui/ui/components/file-preview/file-preview.component.d.ts +0 -26
- package/ui/ui/components/filter-bar/filter-bar.component.d.ts +0 -83
- package/ui/ui/dialogs/prompt/prompt-dialog.component.d.ts +0 -18
- package/ui/ui/dialogs/prompt-date/prompt-date-dialog.component.d.ts +0 -18
- package/ui/ui/dialogs/prompt-time/prompt-time-dialog.component.d.ts +0 -18
- package/ui/ui/dialogs/select/select-dialog.component.d.ts +0 -122
- package/ui/ui/dialogs/select-file/select-file-dialog.component.d.ts +0 -36
- package/ui/ui/dialogs/select-picture/select-picture-dialog.component.d.ts +0 -26
- package/ui/ui/dialogs/select-tree/select-tree-dialog.component.d.ts +0 -98
- package/ui/ui/dialogs/send-to/send-to-dialog.component.d.ts +0 -28
- package/ui/ui/directives/resize-table-column.directive.d.ts +0 -19
- package/ui/ui/filters.d.ts +0 -57
|
@@ -1,442 +0,0 @@
|
|
|
1
|
-
import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout';
|
|
2
|
-
import { FlatTreeControl } from '@angular/cdk/tree';
|
|
3
|
-
import { NgClass, NgStyle } from '@angular/common';
|
|
4
|
-
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Injectable, ViewChild, ViewEncapsulation, computed, inject, signal } from '@angular/core';
|
|
5
|
-
import { MatButtonModule } from '@angular/material/button';
|
|
6
|
-
import { MAT_DIALOG_DATA, MatDialogContent, MatDialogRef, MatDialogTitle } from '@angular/material/dialog';
|
|
7
|
-
import { MatIconModule } from '@angular/material/icon';
|
|
8
|
-
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
9
|
-
import { MatSidenavModule } from '@angular/material/sidenav';
|
|
10
|
-
import { MatTooltipModule } from '@angular/material/tooltip';
|
|
11
|
-
import { MatTreeFlatDataSource, MatTreeFlattener, MatTreeModule } from '@angular/material/tree';
|
|
12
|
-
import { SafeHtmlPipe, SystemUtils } from '@arsedizioni/ars-utils/core';
|
|
13
|
-
import { DialogService } from '@arsedizioni/ars-utils/ui';
|
|
14
|
-
import { FlexLayoutModule } from '@ngbracket/ngx-layout';
|
|
15
|
-
import { BehaviorSubject, Subject, of as observableOf } from 'rxjs';
|
|
16
|
-
import { takeUntil } from 'rxjs/operators';
|
|
17
|
-
import { HelpService } from '../../services/help.service';
|
|
18
|
-
import * as i0 from "@angular/core";
|
|
19
|
-
import * as i1 from "@ngbracket/ngx-layout/flex";
|
|
20
|
-
import * as i2 from "@ngbracket/ngx-layout/extended";
|
|
21
|
-
import * as i3 from "@angular/material/button";
|
|
22
|
-
import * as i4 from "@angular/material/tooltip";
|
|
23
|
-
import * as i5 from "@angular/material/icon";
|
|
24
|
-
import * as i6 from "@angular/material/progress-bar";
|
|
25
|
-
import * as i7 from "@angular/material/sidenav";
|
|
26
|
-
import * as i8 from "@angular/material/tree";
|
|
27
|
-
export class IndexInfo {
|
|
28
|
-
}
|
|
29
|
-
export class IndexNode extends IndexInfo {
|
|
30
|
-
constructor(item, level) {
|
|
31
|
-
super();
|
|
32
|
-
// Flattened implementation
|
|
33
|
-
this.expandable = item.children && item.children.length > 0;
|
|
34
|
-
this.level = level;
|
|
35
|
-
// Data
|
|
36
|
-
this.id = item.id;
|
|
37
|
-
this.name = item.name;
|
|
38
|
-
this.itemsCount = item.itemsCount;
|
|
39
|
-
this.parent = item.parent;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
export class IndexTreeDataSource {
|
|
43
|
-
constructor() {
|
|
44
|
-
this.dataChange = new BehaviorSubject([]);
|
|
45
|
-
}
|
|
46
|
-
get data() {
|
|
47
|
-
return this.dataChange.value;
|
|
48
|
-
}
|
|
49
|
-
ngOnDestroy() {
|
|
50
|
-
this.dataChange.unsubscribe();
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Initialzie the data source
|
|
54
|
-
* @param data : data
|
|
55
|
-
*/
|
|
56
|
-
initialize(data) {
|
|
57
|
-
this.dataChange.next(data);
|
|
58
|
-
}
|
|
59
|
-
/**
|
|
60
|
-
* Find a node by id recursively
|
|
61
|
-
* @param node: the source node
|
|
62
|
-
* @param id : the id to search for
|
|
63
|
-
*/
|
|
64
|
-
findNode(node, id) {
|
|
65
|
-
let children;
|
|
66
|
-
if (node && node.id === id)
|
|
67
|
-
return node;
|
|
68
|
-
if (node)
|
|
69
|
-
children = node.children;
|
|
70
|
-
else
|
|
71
|
-
children = this.data;
|
|
72
|
-
if (children) {
|
|
73
|
-
let _n = null;
|
|
74
|
-
children.some(n => {
|
|
75
|
-
n.parent = node;
|
|
76
|
-
_n = this.findNode(n, id);
|
|
77
|
-
if (_n)
|
|
78
|
-
return true;
|
|
79
|
-
return false;
|
|
80
|
-
});
|
|
81
|
-
return _n;
|
|
82
|
-
}
|
|
83
|
-
return null;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Remove a node
|
|
87
|
-
* @param id : the node id to remove
|
|
88
|
-
*/
|
|
89
|
-
removeNode(id) {
|
|
90
|
-
let n = this.findNode(null, id);
|
|
91
|
-
if (!n)
|
|
92
|
-
return;
|
|
93
|
-
if (n.parent) {
|
|
94
|
-
const p = n.parent.children.findIndex(n => n.id === id);
|
|
95
|
-
if (p !== -1) {
|
|
96
|
-
n.parent.children.splice(p, 1);
|
|
97
|
-
n.parent.itemsCount--;
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
const p = this.data.findIndex(n => n.id === id);
|
|
102
|
-
if (p !== -1) {
|
|
103
|
-
this.data.splice(p, 1);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
this.dataChange.next(this.data);
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Insert a new node
|
|
110
|
-
* @param node : the new node
|
|
111
|
-
*/
|
|
112
|
-
insertNode(node) {
|
|
113
|
-
if (node.parent) {
|
|
114
|
-
node.parent.children.unshift(node);
|
|
115
|
-
node.parent.itemsCount++;
|
|
116
|
-
}
|
|
117
|
-
else
|
|
118
|
-
this.data.unshift(node);
|
|
119
|
-
this.dataChange.next(this.data);
|
|
120
|
-
}
|
|
121
|
-
/**
|
|
122
|
-
* Rename a node
|
|
123
|
-
* @param id : the node id
|
|
124
|
-
* @param name : the new node name
|
|
125
|
-
*/
|
|
126
|
-
renameNode(id, name) {
|
|
127
|
-
let n = this.findNode(null, id);
|
|
128
|
-
if (n) {
|
|
129
|
-
n.name = name;
|
|
130
|
-
this.dataChange.next(this.data);
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Update data
|
|
135
|
-
*/
|
|
136
|
-
update() {
|
|
137
|
-
this.dataChange.next(this.data);
|
|
138
|
-
}
|
|
139
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: IndexTreeDataSource, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
140
|
-
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: IndexTreeDataSource }); }
|
|
141
|
-
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: IndexTreeDataSource, decorators: [{
|
|
143
|
-
type: Injectable
|
|
144
|
-
}] });
|
|
145
|
-
export class HelpViewerComponent {
|
|
146
|
-
constructor() {
|
|
147
|
-
this.unsubscribe = new Subject();
|
|
148
|
-
this.changeDetector = inject(ChangeDetectorRef);
|
|
149
|
-
this.dialogRef = inject((MatDialogRef));
|
|
150
|
-
this.dialogData = inject(MAT_DIALOG_DATA) ?? { id: "1" };
|
|
151
|
-
this.dialogService = inject(DialogService);
|
|
152
|
-
this.helpService = inject(HelpService);
|
|
153
|
-
this.breakpointObserver = inject(BreakpointObserver);
|
|
154
|
-
this.busy = signal(false);
|
|
155
|
-
this.page = signal(null);
|
|
156
|
-
this.indexId = null;
|
|
157
|
-
this.indexPaneClosed = false;
|
|
158
|
-
this.indexNode = null;
|
|
159
|
-
this.history = signal([]);
|
|
160
|
-
this.canGoBack = computed(() => {
|
|
161
|
-
return this.history()?.length > 1;
|
|
162
|
-
});
|
|
163
|
-
/**
|
|
164
|
-
* Manage flat tree view
|
|
165
|
-
*/
|
|
166
|
-
this.tree = inject(IndexTreeDataSource);
|
|
167
|
-
this.folders = null;
|
|
168
|
-
this.getChildren = (node) => observableOf(node.children);
|
|
169
|
-
this.getLevel = (node) => node.level;
|
|
170
|
-
this.isExpandable = (node) => node.expandable;
|
|
171
|
-
this.hasChild = (_, _node) => _node.expandable;
|
|
172
|
-
this.transformer = (item, level) => {
|
|
173
|
-
return new IndexNode(item, level);
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
ngOnInit() {
|
|
177
|
-
// Setup tree structure
|
|
178
|
-
this.treeFlattener = new MatTreeFlattener(this.transformer, this.getLevel, this.isExpandable, this.getChildren);
|
|
179
|
-
this.treeControl = new FlatTreeControl(this.getLevel, this.isExpandable);
|
|
180
|
-
this.treeData = new MatTreeFlatDataSource(this.treeControl, this.treeFlattener);
|
|
181
|
-
// Subscribe data change
|
|
182
|
-
this.tree.dataChange
|
|
183
|
-
.pipe(takeUntil(this.unsubscribe))
|
|
184
|
-
.subscribe(data => (this.treeData.data = data));
|
|
185
|
-
// Observe layout changes
|
|
186
|
-
this.breakpointObserver
|
|
187
|
-
.observe([
|
|
188
|
-
Breakpoints.XSmall,
|
|
189
|
-
Breakpoints.Small,
|
|
190
|
-
Breakpoints.Medium,
|
|
191
|
-
Breakpoints.Large,
|
|
192
|
-
Breakpoints.XLarge,
|
|
193
|
-
])
|
|
194
|
-
.pipe(takeUntil(this.unsubscribe))
|
|
195
|
-
.subscribe(result => {
|
|
196
|
-
for (const query of Object.keys(result.breakpoints)) {
|
|
197
|
-
if (result.breakpoints[query]) {
|
|
198
|
-
this.handleFilterPaneVisibility();
|
|
199
|
-
}
|
|
200
|
-
}
|
|
201
|
-
});
|
|
202
|
-
this.getToc();
|
|
203
|
-
this.indexId = this.dialogData.id;
|
|
204
|
-
if (this.indexId) {
|
|
205
|
-
this.getChapter(this.indexId);
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
ngOnDestroy() {
|
|
209
|
-
this.unsubscribe.next();
|
|
210
|
-
this.unsubscribe.complete();
|
|
211
|
-
}
|
|
212
|
-
ngAfterViewInit() {
|
|
213
|
-
setTimeout(() => {
|
|
214
|
-
this.handleFilterPaneVisibility();
|
|
215
|
-
this.indexPaneClosed = !this.indexPane.opened;
|
|
216
|
-
}, 0);
|
|
217
|
-
this.changeDetector.detectChanges();
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Handle filter pane visibility
|
|
221
|
-
*/
|
|
222
|
-
handleFilterPaneVisibility() {
|
|
223
|
-
if (this.indexPane) {
|
|
224
|
-
if (this.breakpointObserver.isMatched(Breakpoints.XSmall) ||
|
|
225
|
-
this.breakpointObserver.isMatched(Breakpoints.Small) ||
|
|
226
|
-
this.breakpointObserver.isMatched(Breakpoints.Medium)) {
|
|
227
|
-
if (this.indexPane.opened) {
|
|
228
|
-
this.indexPane.close();
|
|
229
|
-
}
|
|
230
|
-
}
|
|
231
|
-
else {
|
|
232
|
-
if (!this.indexPane.opened && !this.indexPaneClosed) {
|
|
233
|
-
this.indexPane.open();
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
/**
|
|
239
|
-
* Show hide index pane manually
|
|
240
|
-
*/
|
|
241
|
-
toggleIndexPane() {
|
|
242
|
-
this.indexPaneClosed = !this.indexPaneClosed;
|
|
243
|
-
this.indexPane?.toggle();
|
|
244
|
-
}
|
|
245
|
-
/**
|
|
246
|
-
* Close dialog
|
|
247
|
-
*/
|
|
248
|
-
close() {
|
|
249
|
-
this.dialogRef.close();
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Get the toc
|
|
253
|
-
*/
|
|
254
|
-
getToc() {
|
|
255
|
-
this.busy.set(true);
|
|
256
|
-
this.helpService
|
|
257
|
-
.getToc()
|
|
258
|
-
.subscribe({
|
|
259
|
-
next: r => {
|
|
260
|
-
if (!r.success) {
|
|
261
|
-
this.dialogService.error(r.message);
|
|
262
|
-
}
|
|
263
|
-
else {
|
|
264
|
-
this.folders = r.value.children;
|
|
265
|
-
this.tree.initialize(r.value.children);
|
|
266
|
-
}
|
|
267
|
-
},
|
|
268
|
-
complete: () => {
|
|
269
|
-
this.busy.set(false);
|
|
270
|
-
}
|
|
271
|
-
});
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* React to click event and find new help target to go to
|
|
275
|
-
* @param event : the click event
|
|
276
|
-
* @returns : always false, to stop navigation
|
|
277
|
-
*/
|
|
278
|
-
gotoChapter(event) {
|
|
279
|
-
if (event.srcElement.nodeName !== 'A')
|
|
280
|
-
return false;
|
|
281
|
-
let tag = event.srcElement.outerHTML;
|
|
282
|
-
let id = '';
|
|
283
|
-
let p = tag.indexOf('help-target="');
|
|
284
|
-
if (p !== -1) {
|
|
285
|
-
p += 13;
|
|
286
|
-
while (tag[p] !== '"') {
|
|
287
|
-
id += tag[p];
|
|
288
|
-
p++;
|
|
289
|
-
}
|
|
290
|
-
}
|
|
291
|
-
if (id)
|
|
292
|
-
this.getChapter(id);
|
|
293
|
-
return false;
|
|
294
|
-
}
|
|
295
|
-
/**
|
|
296
|
-
* Find a node by id
|
|
297
|
-
* @param id : folder id
|
|
298
|
-
* @returns: the folder info
|
|
299
|
-
*/
|
|
300
|
-
findFolder(id) {
|
|
301
|
-
let node = null;
|
|
302
|
-
if (this.folders) {
|
|
303
|
-
this.folders.some(n => {
|
|
304
|
-
node = this.tree.findNode(n, id);
|
|
305
|
-
if (node)
|
|
306
|
-
return true;
|
|
307
|
-
return false;
|
|
308
|
-
});
|
|
309
|
-
}
|
|
310
|
-
return node;
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Expand current fodler node
|
|
314
|
-
*/
|
|
315
|
-
expandCurrentFolder() {
|
|
316
|
-
if (this.indexNode) {
|
|
317
|
-
this.treeControl.expand(this.treeControl.dataNodes.find(n => n.id === this.indexNode.id));
|
|
318
|
-
if (this.indexNode.parent) {
|
|
319
|
-
// Apply previous selection
|
|
320
|
-
let n = this.indexNode.parent;
|
|
321
|
-
while (n) {
|
|
322
|
-
this.treeControl.expand(this.treeControl.dataNodes.find(x => x.id === n.id));
|
|
323
|
-
n = n.parent;
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
}
|
|
327
|
-
}
|
|
328
|
-
/**
|
|
329
|
-
* Retrieve a new chapter
|
|
330
|
-
* @param id the chapter id#anchor
|
|
331
|
-
* @param position : the position to scroll to
|
|
332
|
-
*/
|
|
333
|
-
getChapter(id, position = 0) {
|
|
334
|
-
// Detect anchor if exists
|
|
335
|
-
let anchor = null;
|
|
336
|
-
const p = id.indexOf('#');
|
|
337
|
-
if (p !== -1) {
|
|
338
|
-
anchor = id.substring(p + 1);
|
|
339
|
-
id = id.substring(0, p);
|
|
340
|
-
}
|
|
341
|
-
if (id !== '.') {
|
|
342
|
-
this.busy.set(true);
|
|
343
|
-
this.helpService.getChapter(id)
|
|
344
|
-
.subscribe({
|
|
345
|
-
next: r => {
|
|
346
|
-
let found = false;
|
|
347
|
-
if (!r.success) {
|
|
348
|
-
this.dialogService.error("Capitolo non trovato.");
|
|
349
|
-
}
|
|
350
|
-
else {
|
|
351
|
-
if (!position)
|
|
352
|
-
this.history().push({ id: this.indexId, position: this.getPosition() });
|
|
353
|
-
this.indexId = id;
|
|
354
|
-
this.page.set(r.value.data);
|
|
355
|
-
found = r.value.chapter?.name?.length > 0;
|
|
356
|
-
if (found) {
|
|
357
|
-
// Update folder
|
|
358
|
-
this.indexNode = this.findFolder(id);
|
|
359
|
-
this.expandCurrentFolder();
|
|
360
|
-
// Handle positioning
|
|
361
|
-
this.gotoPosition(anchor, position);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
if (!found) {
|
|
365
|
-
this.getChapter("1");
|
|
366
|
-
}
|
|
367
|
-
},
|
|
368
|
-
complete: () => {
|
|
369
|
-
this.busy.set(false);
|
|
370
|
-
}
|
|
371
|
-
});
|
|
372
|
-
}
|
|
373
|
-
else {
|
|
374
|
-
if (!position)
|
|
375
|
-
this.history().push({ id: this.indexId, position: this.getPosition() });
|
|
376
|
-
// Move on the same chapter
|
|
377
|
-
this.gotoPosition(anchor, position);
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
/**
|
|
381
|
-
* Goto position
|
|
382
|
-
* @param anchor the anchor to go to
|
|
383
|
-
* @param position the offset to go to
|
|
384
|
-
*/
|
|
385
|
-
gotoPosition(anchor, position = 0) {
|
|
386
|
-
// Handle positioning
|
|
387
|
-
setTimeout(() => {
|
|
388
|
-
// Handle anchor first
|
|
389
|
-
if (anchor) {
|
|
390
|
-
let elms = document.getElementsByName(anchor.toUpperCase());
|
|
391
|
-
if (elms)
|
|
392
|
-
position = elms[0].offsetTop;
|
|
393
|
-
}
|
|
394
|
-
// Then position
|
|
395
|
-
if (position > 0)
|
|
396
|
-
this.setPosition(position - 1);
|
|
397
|
-
else
|
|
398
|
-
this.setPosition(0);
|
|
399
|
-
}, 50);
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Get scroll position
|
|
403
|
-
* @returns: the new scroll top
|
|
404
|
-
*/
|
|
405
|
-
getPosition() {
|
|
406
|
-
let elem = document.getElementById('helpviewer-scroller');
|
|
407
|
-
if (elem) {
|
|
408
|
-
return elem.scrollTop;
|
|
409
|
-
}
|
|
410
|
-
return 0;
|
|
411
|
-
}
|
|
412
|
-
/**
|
|
413
|
-
* Set scroll position
|
|
414
|
-
* @param position : the position to go to
|
|
415
|
-
*/
|
|
416
|
-
setPosition(position) {
|
|
417
|
-
let elem = document.getElementById('helpviewer-scroller');
|
|
418
|
-
if (elem) {
|
|
419
|
-
elem.scrollTo(0, position);
|
|
420
|
-
}
|
|
421
|
-
}
|
|
422
|
-
/**
|
|
423
|
-
* Go back
|
|
424
|
-
*/
|
|
425
|
-
back() {
|
|
426
|
-
if (!this.history || this.history.length === 0)
|
|
427
|
-
return;
|
|
428
|
-
let n = this.history().pop();
|
|
429
|
-
this.getChapter(n.id, n.position + 1);
|
|
430
|
-
}
|
|
431
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: HelpViewerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
432
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.10", type: HelpViewerComponent, isStandalone: true, selector: "ng-component", host: { attributes: { "Bind": SystemUtils.generateUUID() } }, providers: [IndexTreeDataSource], viewQueries: [{ propertyName: "indexPane", first: true, predicate: ["indexPane"], descendants: 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);\" [ngClass]=\"{'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 [ngClass]=\"{'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 <div style=\"padding: 0 24px;\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div class=\"fill\" id=\"helpviewer-scroller\" (click)=\"gotoChapter($event)\"\r\n [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\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:10px}.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}.small{font-size:small!important;line-height:16px}.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}.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}.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 10px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em!important;font-weight:600;padding-left:20px;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:#ff0;border:1px solid silver;padding:0 4px}.help-hint{margin:10px;padding:5px 20px;background-color:#fafad2;border-radius:12px}.help-summary{margin:10px;padding:5px 20px;background-color:#e6e6fa;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:#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: "directive", type: i2.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i3.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i5.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatProgressBarModule }, { kind: "component", type: i6.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: i7.MatDrawer, selector: "mat-drawer", inputs: ["position", "mode", "disableClose", "autoFocus", "opened"], outputs: ["openedChange", "opened", "openedStart", "closed", "closedStart", "positionChanged"], exportAs: ["matDrawer"] }, { kind: "component", type: i7.MatDrawerContainer, selector: "mat-drawer-container", inputs: ["autosize", "hasBackdrop"], outputs: ["backdropClick"], exportAs: ["matDrawerContainer"] }, { kind: "ngmodule", type: MatTreeModule }, { kind: "directive", type: i8.MatTreeNodeDef, selector: "[matTreeNodeDef]", inputs: ["matTreeNodeDefWhen", "matTreeNode"] }, { kind: "directive", type: i8.MatTreeNodePadding, selector: "[matTreeNodePadding]", inputs: ["matTreeNodePadding", "matTreeNodePaddingIndent"] }, { kind: "directive", type: i8.MatTreeNodeToggle, selector: "[matTreeNodeToggle]", inputs: ["matTreeNodeToggleRecursive"] }, { kind: "component", type: i8.MatTree, selector: "mat-tree", exportAs: ["matTree"] }, { kind: "directive", type: i8.MatTreeNode, selector: "mat-tree-node", inputs: ["tabIndex", "disabled"], outputs: ["activation", "expandedChange"], exportAs: ["matTreeNode"] }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "pipe", type: SafeHtmlPipe, name: "safeHtml" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
433
|
-
}
|
|
434
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: HelpViewerComponent, decorators: [{
|
|
435
|
-
type: Component,
|
|
436
|
-
args: [{ host: { 'Bind': SystemUtils.generateUUID() }, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [IndexTreeDataSource], standalone: true, imports: [FlexLayoutModule, MatButtonModule, MatTooltipModule, MatIconModule, MatProgressBarModule, MatDialogTitle, MatDialogContent,
|
|
437
|
-
NgStyle, MatSidenavModule, MatTreeModule, NgClass, 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);\" [ngClass]=\"{'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 [ngClass]=\"{'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 <div style=\"padding: 0 24px;\">\r\n <div fxLayout=\"column\" fxFill>\r\n <div class=\"fill\" id=\"helpviewer-scroller\" (click)=\"gotoChapter($event)\"\r\n [innerHtml]=\"(page() ?? '') | safeHtml\"></div>\r\n </div>\r\n </div>\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:10px}.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}.small{font-size:small!important;line-height:16px}.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}.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}.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 10px 20px 0}.drawer .title,.drawer-small .title{font-size:1.2em!important;font-weight:600;padding-left:20px;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:#ff0;border:1px solid silver;padding:0 4px}.help-hint{margin:10px;padding:5px 20px;background-color:#fafad2;border-radius:12px}.help-summary{margin:10px;padding:5px 20px;background-color:#e6e6fa;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:#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"] }]
|
|
438
|
-
}], propDecorators: { indexPane: [{
|
|
439
|
-
type: ViewChild,
|
|
440
|
-
args: ['indexPane']
|
|
441
|
-
}] } });
|
|
442
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC12aWV3ZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYXJzLXV0aWxzL2hlbHAvY29tcG9uZW50cy9oZWxwLXZpZXdlci9oZWxwLXZpZXdlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvaGVscC9jb21wb25lbnRzL2hlbHAtdmlld2VyL2hlbHAtdmlld2VyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQTZCLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNwTSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGVBQWUsRUFBRSxnQkFBZ0IsRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0csT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ3RFLE9BQU8sRUFBYyxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQzdELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxnQkFBZ0IsRUFBRSxh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QUFoQyxTQUFTO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBCcmVha3BvaW50T2JzZXJ2ZXIsIEJyZWFrcG9pbnRzIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2xheW91dCc7XHJcbmltcG9ydCB7IEZsYXRUcmVlQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay90cmVlJztcclxuaW1wb3J0IHsgTmdDbGFzcywgTmdTdHlsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbmplY3RhYmxlLCBPbkRlc3Ryb3ksIE9uSW5pdCwgU2lnbmFsLCBWaWV3Q2hpbGQsIFZpZXdFbmNhcHN1bGF0aW9uLCBjb21wdXRlZCwgaW5qZWN0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTWF0QnV0dG9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvYnV0dG9uJztcclxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2dDb250ZW50LCBNYXREaWFsb2dSZWYsIE1hdERpYWxvZ1RpdGxlIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvZGlhbG9nJztcclxuaW1wb3J0IHsgTWF0SWNvbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2ljb24nO1xyXG5pbXBvcnQgeyBNYXRQcm9ncmVzc0Jhck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Byb2dyZXNzLWJhcic7XHJcbmltcG9ydCB7IE1hdFNpZGVuYXYsIE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcclxuaW1wb3J0IHsgTWF0VG9vbHRpcE1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL3Rvb2x0aXAnO1xyXG5pbXBvcnQgeyBNYXRUcmVlRmxhdERhdGFTb3VyY2UsIE1hdFRyZWVGbGF0dGVuZXIsIE1hdFRyZWVNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC90cmVlJztcclxuaW1wb3J0IHsgU2FmZUh0bWxQaXBlLCBTeXN0ZW1VdGlscyB9IGZyb20gJ0BhcnNlZGl6aW9uaS9hcnMtdXRpbHMvY29yZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICdAYXJzZWRpemlvbmkvYXJzLXV0aWxzL3VpJztcclxuaW1wb3J0IHsgRmxleExheW91dE1vZHVsZSB9IGZyb20gJ0BuZ2JyYWNrZXQvbmd4LWxheW91dCc7XHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgU3ViamVjdCwgb2YgYXMgb2JzZXJ2YWJsZU9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgSGVscFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9oZWxwLnNlcnZpY2UnO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBIZWxwVmlld2VyRGlhbG9nRGF0YSB7XHJcbiAgaWQ/OiBzdHJpbmcgfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSW5kZXhJbmZvIHtcclxuICBpZDogc3RyaW5nO1xyXG4gIHBhcmVudD86IEluZGV4SW5mbyB8IG51bGw7XHJcbiAgbmFtZTogc3RyaW5nO1xyXG4gIGl0ZW1zQ291bnQ/OiBudW1iZXIgfCBudWxsO1xyXG4gIGNoaWxkcmVuPzogSW5kZXhJbmZvW10gfCBudWxsO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgSW5kZXhOb2RlIGV4dGVuZHMgSW5kZXhJbmZvIHtcclxuICBleHBhbmRhYmxlOiBib29sZWFuO1xyXG4gIGxldmVsOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGl0ZW06IEluZGV4SW5mbywgbGV2ZWw6IG51bWJlcikge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICAvLyBGbGF0dGVuZWQgaW1wbGVtZW50YXRpb25cclxuICAgIHRoaXMuZXhwYW5kYWJsZSA9IGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlbi5sZW5ndGggPiAwO1xyXG4gICAgdGhpcy5sZXZlbCA9IGxldmVsO1xyXG5cclxuICAgIC8vIERhdGFcclxuICAgIHRoaXMuaWQgPSBpdGVtLmlkO1xyXG4gICAgdGhpcy5uYW1lID0gaXRlbS5uYW1lO1xyXG4gICAgdGhpcy5pdGVtc0NvdW50ID0gaXRlbS5pdGVtc0NvdW50O1xyXG4gICAgdGhpcy5wYXJlbnQgPSBpdGVtLnBhcmVudDtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKClcclxuZXhwb3J0IGNsYXNzIEluZGV4VHJlZURhdGFTb3VyY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG4gIGRhdGFDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEluZGV4SW5mb1tdPihbXSk7XHJcblxyXG4gIGdldCBkYXRhKCk6IEluZGV4SW5mb1tdIHtcclxuICAgIHJldHVybiB0aGlzLmRhdGFDaGFuZ2UudmFsdWU7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbHppZSB0aGUgZGF0YSBzb3VyY2VcclxuICAgKiBAcGFyYW0gZGF0YSA6IGRhdGFcclxuICAgKi9cclxuICBpbml0aWFsaXplKGRhdGE6IEluZGV4SW5mb1tdKSB7XHJcbiAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dChkYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEZpbmQgYSBub2RlIGJ5IGlkIHJlY3Vyc2l2ZWx5XHJcbiAgICogQHBhcmFtIG5vZGU6IHRoZSBzb3VyY2Ugbm9kZVxyXG4gICAqIEBwYXJhbSBpZCA6IHRoZSBpZCB0byBzZWFyY2ggZm9yXHJcbiAgICovXHJcbiAgZmluZE5vZGUobm9kZTogSW5kZXhJbmZvLCBpZDogc3RyaW5nKTogSW5kZXhJbmZvIHtcclxuICAgIGxldCBjaGlsZHJlbjtcclxuICAgIGlmIChub2RlICYmIG5vZGUuaWQgPT09IGlkKSByZXR1cm4gbm9kZTtcclxuICAgIGlmIChub2RlKSBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XHJcbiAgICBlbHNlIGNoaWxkcmVuID0gdGhpcy5kYXRhO1xyXG4gICAgaWYgKGNoaWxkcmVuKSB7XHJcbiAgICAgIGxldCBfbiA9IG51bGw7XHJcbiAgICAgIGNoaWxkcmVuLnNvbWUobiA9PiB7XHJcbiAgICAgICAgbi5wYXJlbnQgPSBub2RlO1xyXG4gICAgICAgIF9uID0gdGhpcy5maW5kTm9kZShuLCBpZCk7XHJcbiAgICAgICAgaWYgKF9uKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gX247XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbW92ZSBhIG5vZGVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgbm9kZSBpZCB0byByZW1vdmVcclxuICAgKi9cclxuICByZW1vdmVOb2RlKGlkOiBzdHJpbmcpIHtcclxuICAgIGxldCBuID0gdGhpcy5maW5kTm9kZShudWxsLCBpZCk7XHJcbiAgICBpZiAoIW4pIHJldHVybjtcclxuICAgIGlmIChuLnBhcmVudCkge1xyXG4gICAgICBjb25zdCBwID0gbi5wYXJlbnQuY2hpbGRyZW4uZmluZEluZGV4KG4gPT4gbi5pZCA9PT0gaWQpO1xyXG4gICAgICBpZiAocCAhPT0gLTEpIHtcclxuICAgICAgICBuLnBhcmVudC5jaGlsZHJlbi5zcGxpY2UocCwgMSk7XHJcbiAgICAgICAgbi5wYXJlbnQuaXRlbXNDb3VudC0tO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zdCBwID0gdGhpcy5kYXRhLmZpbmRJbmRleChuID0+IG4uaWQgPT09IGlkKTtcclxuICAgICAgaWYgKHAgIT09IC0xKSB7XHJcbiAgICAgICAgdGhpcy5kYXRhLnNwbGljZShwLCAxKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbnNlcnQgYSBuZXcgbm9kZVxyXG4gICAqIEBwYXJhbSBub2RlIDogdGhlIG5ldyBub2RlXHJcbiAgICovXHJcbiAgaW5zZXJ0Tm9kZShub2RlOiBJbmRleEluZm8pIHtcclxuICAgIGlmIChub2RlLnBhcmVudCkge1xyXG4gICAgICBub2RlLnBhcmVudC5jaGlsZHJlbi51bnNoaWZ0KG5vZGUpO1xyXG4gICAgICBub2RlLnBhcmVudC5pdGVtc0NvdW50Kys7XHJcbiAgICB9IGVsc2UgdGhpcy5kYXRhLnVuc2hpZnQobm9kZSk7XHJcblxyXG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlbmFtZSBhIG5vZGVcclxuICAgKiBAcGFyYW0gaWQgOiB0aGUgbm9kZSBpZFxyXG4gICAqIEBwYXJhbSBuYW1lIDogdGhlIG5ldyBub2RlIG5hbWVcclxuICAgKi9cclxuICByZW5hbWVOb2RlKGlkOiBzdHJpbmcsIG5hbWU6IHN0cmluZykge1xyXG4gICAgbGV0IG4gPSB0aGlzLmZpbmROb2RlKG51bGwsIGlkKTtcclxuICAgIGlmIChuKSB7XHJcbiAgICAgIG4ubmFtZSA9IG5hbWU7XHJcbiAgICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgZGF0YVxyXG4gICAqL1xyXG4gIHVwZGF0ZSgpIHtcclxuICAgIHRoaXMuZGF0YUNoYW5nZS5uZXh0KHRoaXMuZGF0YSk7XHJcbiAgfVxyXG59XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBob3N0OiB7ICdCaW5kJzogU3lzdGVtVXRpbHMuZ2VuZXJhdGVVVUlEKCkgfSxcclxuICB0ZW1wbGF0ZVVybDogJy4vaGVscC12aWV3ZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2hlbHAtdmlld2VyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcclxuICBwcm92aWRlcnM6IFtJbmRleFRyZWVEYXRhU291cmNlXSxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtGbGV4TGF5b3V0TW9kdWxlLCBNYXRCdXR0b25Nb2R1bGUsIE1hdFRvb2x0aXBNb2R1bGUsIE1hdEljb25Nb2R1bGUsIE1hdFByb2dyZXNzQmFyTW9kdWxlLCBNYXREaWFsb2dUaXRsZSwgTWF0RGlhbG9nQ29udGVudCxcclxuICAgIE5nU3R5bGUsIE1hdFNpZGVuYXZNb2R1bGUsIE1hdFRyZWVNb2R1bGUsIE5nQ2xhc3MsIFNhZmVIdG1sUGlwZV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEhlbHBWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgQWZ0ZXJWaWV3SW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgnaW5kZXhQYW5lJykgaW5kZXhQYW5lITogTWF0U2lkZW5hdjtcclxuXHJcbiAgcHJpdmF0ZSB1bnN1YnNjcmliZTogU3ViamVjdDx2b2lkPiA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcbiAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSBkaWFsb2dSZWYgPSBpbmplY3QoTWF0RGlhbG9nUmVmPEhlbHBWaWV3ZXJDb21wb25lbnQ+KTtcclxuICBwcm90ZWN0ZWQgZGlhbG9nRGF0YTogSGVscFZpZXdlckRpYWxvZ0RhdGEgPSBpbmplY3QoTUFUX0RJQUxPR19EQVRBKSA/PyB7IGlkOiBcIjFcIiB9O1xyXG4gIHByaXZhdGUgZGlhbG9nU2VydmljZSA9IGluamVjdChEaWFsb2dTZXJ2aWNlKTtcclxuICBwcml2YXRlIGhlbHBTZXJ2aWNlID0gaW5qZWN0KEhlbHBTZXJ2aWNlKTtcclxuICBwcm90ZWN0ZWQgYnJlYWtwb2ludE9ic2VydmVyID0gaW5qZWN0KEJyZWFrcG9pbnRPYnNlcnZlcik7XHJcbiAgcHJvdGVjdGVkIGJ1c3kgPSBzaWduYWw8Ym9vbGVhbj4oZmFsc2UpO1xyXG4gIHByb3RlY3RlZCBwYWdlID0gc2lnbmFsPHN0cmluZz4obnVsbCk7XHJcbiAgcHJpdmF0ZSBpbmRleElkOiBzdHJpbmcgPSBudWxsO1xyXG4gIHByaXZhdGUgaW5kZXhQYW5lQ2xvc2VkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJvdGVjdGVkIGluZGV4Tm9kZTogSW5kZXhJbmZvID0gbnVsbDtcclxuICBwcml2YXRlIGhpc3RvcnkgPSBzaWduYWwoW10pO1xyXG4gIHByb3RlY3RlZCBjYW5Hb0JhY2s6IFNpZ25hbDxib29sZWFuPiA9IGNvbXB1dGVkKCgpID0+IHtcclxuICAgIHJldHVybiB0aGlzLmhpc3RvcnkoKT8ubGVuZ3RoID4gMTtcclxuICB9KVxyXG5cclxuICAvKipcclxuICogTWFuYWdlIGZsYXQgdHJlZSB2aWV3XHJcbiAqL1xyXG4gIHByaXZhdGUgdHJlZSA9IGluamVjdChJbmRleFRyZWVEYXRhU291cmNlKTtcclxuICBwcml2YXRlIHRyZWVGbGF0dGVuZXI6IE1hdFRyZWVGbGF0dGVuZXI8SW5kZXhJbmZvLCBJbmRleE5vZGU+O1xyXG4gIHByb3RlY3RlZCB0cmVlQ29udHJvbDogRmxhdFRyZWVDb250cm9sPEluZGV4Tm9kZT47XHJcbiAgcHJvdGVjdGVkIHRyZWVEYXRhOiBNYXRUcmVlRmxhdERhdGFTb3VyY2U8SW5kZXhJbmZvLCBJbmRleE5vZGU+O1xyXG4gIHByaXZhdGUgZm9sZGVyczogSW5kZXhJbmZvW10gfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIGdldENoaWxkcmVuID0gKG5vZGU6IEluZGV4SW5mbyk6IE9ic2VydmFibGU8SW5kZXhJbmZvW10+ID0+XHJcbiAgICBvYnNlcnZhYmxlT2Yobm9kZS5jaGlsZHJlbik7XHJcbiAgcHJpdmF0ZSBnZXRMZXZlbCA9IChub2RlOiBJbmRleE5vZGUpID0+IG5vZGUubGV2ZWw7XHJcbiAgcHJpdmF0ZSBpc0V4cGFuZGFibGUgPSAobm9kZTogSW5kZXhOb2RlKSA9PiBub2RlLmV4cGFuZGFibGU7XHJcbiAgcHJvdGVjdGVkIGhhc0NoaWxkID0gKF86IG51bWJlciwgX25vZGU6IEluZGV4Tm9kZSkgPT4gX25vZGUuZXhwYW5kYWJsZTtcclxuICBwcm90ZWN0ZWQgdHJhbnNmb3JtZXIgPSAoaXRlbTogSW5kZXhJbmZvLCBsZXZlbDogbnVtYmVyKSA9PiB7XHJcbiAgICByZXR1cm4gbmV3IEluZGV4Tm9kZShpdGVtLCBsZXZlbCk7XHJcbiAgfTtcclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgLy8gU2V0dXAgdHJlZSBzdHJ1Y3R1cmVcclxuICAgIHRoaXMudHJlZUZsYXR0ZW5lciA9IG5ldyBNYXRUcmVlRmxhdHRlbmVyKFxyXG4gICAgICB0aGlzLnRyYW5zZm9ybWVyLFxyXG4gICAgICB0aGlzLmdldExldmVsLFxyXG4gICAgICB0aGlzLmlzRXhwYW5kYWJsZSxcclxuICAgICAgdGhpcy5nZXRDaGlsZHJlblxyXG4gICAgKTtcclxuICAgIHRoaXMudHJlZUNvbnRyb2wgPSBuZXcgRmxhdFRyZWVDb250cm9sPEluZGV4Tm9kZT4oXHJcbiAgICAgIHRoaXMuZ2V0TGV2ZWwsXHJcbiAgICAgIHRoaXMuaXNFeHBhbmRhYmxlXHJcbiAgICApO1xyXG4gICAgdGhpcy50cmVlRGF0YSA9IG5ldyBNYXRUcmVlRmxhdERhdGFTb3VyY2UoXHJcbiAgICAgIHRoaXMudHJlZUNvbnRyb2wsXHJcbiAgICAgIHRoaXMudHJlZUZsYXR0ZW5lclxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBTdWJzY3JpYmUgZGF0YSBjaGFuZ2VcclxuICAgIHRoaXMudHJlZS5kYXRhQ2hhbmdlXHJcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLnVuc3Vic2NyaWJlKSlcclxuICAgICAgLnN1YnNjcmliZShkYXRhID0+ICh0aGlzLnRyZWVEYXRhLmRhdGEgPSBkYXRhKSk7XHJcblxyXG4gICAgLy8gT2JzZXJ2ZSBsYXlvdXQgY2hhbmdlc1xyXG4gICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXJcclxuICAgICAgLm9ic2VydmUoW1xyXG4gICAgICAgIEJyZWFrcG9pbnRzLlhTbWFsbCxcclxuICAgICAgICBCcmVha3BvaW50cy5TbWFsbCxcclxuICAgICAgICBCcmVha3BvaW50cy5NZWRpdW0sXHJcbiAgICAgICAgQnJlYWtwb2ludHMuTGFyZ2UsXHJcbiAgICAgICAgQnJlYWtwb2ludHMuWExhcmdlLFxyXG4gICAgICBdKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy51bnN1YnNjcmliZSkpXHJcbiAgICAgIC5zdWJzY3JpYmUocmVzdWx0ID0+IHtcclxuICAgICAgICBmb3IgKGNvbnN0IHF1ZXJ5IG9mIE9iamVjdC5rZXlzKHJlc3VsdC5icmVha3BvaW50cykpIHtcclxuICAgICAgICAgIGlmIChyZXN1bHQuYnJlYWtwb2ludHNbcXVlcnldKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyUGFuZVZpc2liaWxpdHkoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuZ2V0VG9jKCk7XHJcblxyXG4gICAgdGhpcy5pbmRleElkID0gdGhpcy5kaWFsb2dEYXRhLmlkO1xyXG4gICAgaWYgKHRoaXMuaW5kZXhJZCkge1xyXG4gICAgICB0aGlzLmdldENoYXB0ZXIodGhpcy5pbmRleElkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy51bnN1YnNjcmliZS5uZXh0KCk7XHJcbiAgICB0aGlzLnVuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpO1xyXG4gICAgICB0aGlzLmluZGV4UGFuZUNsb3NlZCA9ICF0aGlzLmluZGV4UGFuZS5vcGVuZWQ7XHJcbiAgICB9LCAwKTtcclxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4qIEhhbmRsZSBmaWx0ZXIgcGFuZSB2aXNpYmlsaXR5XHJcbiovXHJcbiAgcHJpdmF0ZSBoYW5kbGVGaWx0ZXJQYW5lVmlzaWJpbGl0eSgpIHtcclxuICAgIGlmICh0aGlzLmluZGV4UGFuZSkge1xyXG4gICAgICBpZiAodGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLlhTbWFsbCkgfHxcclxuICAgICAgICB0aGlzLmJyZWFrcG9pbnRPYnNlcnZlci5pc01hdGNoZWQoQnJlYWtwb2ludHMuU21hbGwpIHx8XHJcbiAgICAgICAgdGhpcy5icmVha3BvaW50T2JzZXJ2ZXIuaXNNYXRjaGVkKEJyZWFrcG9pbnRzLk1lZGl1bSkpIHtcclxuICAgICAgICBpZiAodGhpcy5pbmRleFBhbmUub3BlbmVkKSB7XHJcbiAgICAgICAgICB0aGlzLmluZGV4UGFuZS5jbG9zZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpZiAoIXRoaXMuaW5kZXhQYW5lLm9wZW5lZCAmJiAhdGhpcy5pbmRleFBhbmVDbG9zZWQpIHtcclxuICAgICAgICAgIHRoaXMuaW5kZXhQYW5lLm9wZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNob3cgaGlkZSBpbmRleCBwYW5lIG1hbnVhbGx5XHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIHRvZ2dsZUluZGV4UGFuZSgpIHtcclxuICAgIHRoaXMuaW5kZXhQYW5lQ2xvc2VkID0gIXRoaXMuaW5kZXhQYW5lQ2xvc2VkO1xyXG4gICAgdGhpcy5pbmRleFBhbmU/LnRvZ2dsZSgpO1xyXG4gIH1cclxuXHJcblxyXG4gIC8qKlxyXG4gICAqIENsb3NlIGRpYWxvZ1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBjbG9zZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuZGlhbG9nUmVmLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIHRvY1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnZXRUb2MoKTogdm9pZCB7XHJcbiAgICB0aGlzLmJ1c3kuc2V0KHRydWUpO1xyXG4gICAgdGhpcy5oZWxwU2VydmljZVxyXG4gICAgICAuZ2V0VG9jKClcclxuICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgbmV4dDogciA9PiB7XHJcbiAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuZXJyb3Ioci5tZXNzYWdlKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZm9sZGVycyA9IHIudmFsdWUuY2hpbGRyZW47XHJcbiAgICAgICAgICAgIHRoaXMudHJlZS5pbml0aWFsaXplKHIudmFsdWUuY2hpbGRyZW4pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgIHRoaXMuYnVzeS5zZXQoZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWFjdCB0byBjbGljayBldmVudCBhbmQgZmluZCBuZXcgaGVscCB0YXJnZXQgdG8gZ28gdG9cclxuICAgKiBAcGFyYW0gZXZlbnQgOiB0aGUgY2xpY2sgZXZlbnRcclxuICAgKiBAcmV0dXJucyA6IGFsd2F5cyBmYWxzZSwgdG8gc3RvcCBuYXZpZ2F0aW9uXHJcbiAgICovXHJcbiAgcHJvdGVjdGVkIGdvdG9DaGFwdGVyKGV2ZW50OiBhbnkpOiBib29sZWFuIHtcclxuICAgIGlmIChldmVudC5zcmNFbGVtZW50Lm5vZGVOYW1lICE9PSAnQScpIHJldHVybiBmYWxzZTtcclxuICAgIGxldCB0YWcgPSBldmVudC5zcmNFbGVtZW50Lm91dGVySFRNTDtcclxuICAgIGxldCBpZCA9ICcnO1xyXG4gICAgbGV0IHAgPSB0YWcuaW5kZXhPZignaGVscC10YXJnZXQ9XCInKTtcclxuICAgIGlmIChwICE9PSAtMSkge1xyXG4gICAgICBwICs9IDEzO1xyXG4gICAgICB3aGlsZSAodGFnW3BdICE9PSAnXCInKSB7XHJcbiAgICAgICAgaWQgKz0gdGFnW3BdO1xyXG4gICAgICAgIHArKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGlkKSB0aGlzLmdldENoYXB0ZXIoaWQpO1xyXG4gICAgcmV0dXJuIGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRmluZCBhIG5vZGUgYnkgaWRcclxuICAgKiBAcGFyYW0gaWQgOiBmb2xkZXIgaWRcclxuICAgKiBAcmV0dXJuczogdGhlIGZvbGRlciBpbmZvXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBmaW5kRm9sZGVyKGlkOiBzdHJpbmcpOiBJbmRleEluZm8ge1xyXG4gICAgbGV0IG5vZGUgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuZm9sZGVycykge1xyXG4gICAgICB0aGlzLmZvbGRlcnMuc29tZShuID0+IHtcclxuICAgICAgICBub2RlID0gdGhpcy50cmVlLmZpbmROb2RlKG4sIGlkKTtcclxuICAgICAgICBpZiAobm9kZSkgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICAgIHJldHVybiBub2RlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRXhwYW5kIGN1cnJlbnQgZm9kbGVyIG5vZGVcclxuICAgKi9cclxuICBwcml2YXRlIGV4cGFuZEN1cnJlbnRGb2xkZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5pbmRleE5vZGUpIHtcclxuICAgICAgdGhpcy50cmVlQ29udHJvbC5leHBhbmQoXHJcbiAgICAgICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMuZmluZChuID0+IG4uaWQgPT09IHRoaXMuaW5kZXhOb2RlLmlkKVxyXG4gICAgICApO1xyXG4gICAgICBpZiAodGhpcy5pbmRleE5vZGUucGFyZW50KSB7XHJcbiAgICAgICAgLy8gQXBwbHkgcHJldmlvdXMgc2VsZWN0aW9uXHJcbiAgICAgICAgbGV0IG4gPSB0aGlzLmluZGV4Tm9kZS5wYXJlbnQ7XHJcbiAgICAgICAgd2hpbGUgKG4pIHtcclxuICAgICAgICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5kKFxyXG4gICAgICAgICAgICB0aGlzLnRyZWVDb250cm9sLmRhdGFOb2Rlcy5maW5kKHggPT4geC5pZCA9PT0gbi5pZClcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBuID0gbi5wYXJlbnQ7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXRyaWV2ZSBhIG5ldyBjaGFwdGVyXHJcbiAgICogQHBhcmFtIGlkIHRoZSBjaGFwdGVyIGlkI2FuY2hvclxyXG4gICAqIEBwYXJhbSBwb3NpdGlvbiA6IHRoZSBwb3NpdGlvbiB0byBzY3JvbGwgdG9cclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0Q2hhcHRlcihpZDogc3RyaW5nLCBwb3NpdGlvbjogbnVtYmVyID0gMCk6IHZvaWQge1xyXG4gICAgLy8gRGV0ZWN0IGFuY2hvciBpZiBleGlzdHNcclxuICAgIGxldCBhbmNob3I6IHN0cmluZyA9IG51bGw7XHJcbiAgICBjb25zdCBwID0gaWQuaW5kZXhPZignIycpO1xyXG4gICAgaWYgKHAgIT09IC0xKSB7XHJcbiAgICAgIGFuY2hvciA9IGlkLnN1YnN0cmluZyhwICsgMSk7XHJcbiAgICAgIGlkID0gaWQuc3Vic3RyaW5nKDAsIHApO1xyXG4gICAgfVxyXG4gICAgaWYgKGlkICE9PSAnLicpIHtcclxuICAgICAgdGhpcy5idXN5LnNldCh0cnVlKTtcclxuICAgICAgdGhpcy5oZWxwU2VydmljZS5nZXRDaGFwdGVyKGlkKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogciA9PiB7XHJcbiAgICAgICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBpZiAoIXIuc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5lcnJvcihcIkNhcGl0b2xvIG5vbiB0cm92YXRvLlwiKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICBpZiAoIXBvc2l0aW9uKVxyXG4gICAgICAgICAgICAgICAgdGhpcy5oaXN0b3J5KCkucHVzaCh7IGlkOiB0aGlzLmluZGV4SWQsIHBvc2l0aW9uOiB0aGlzLmdldFBvc2l0aW9uKCkgfSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pbmRleElkID0gaWQ7XHJcbiAgICAgICAgICAgICAgdGhpcy5wYWdlLnNldChyLnZhbHVlLmRhdGEpO1xyXG4gICAgICAgICAgICAgIGZvdW5kID0gci52YWx1ZS5jaGFwdGVyPy5uYW1lPy5sZW5ndGggPiAwO1xyXG4gICAgICAgICAgICAgIGlmIChmb3VuZCkge1xyXG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIGZvbGRlclxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleE5vZGUgPSB0aGlzLmZpbmRGb2xkZXIoaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHBhbmRDdXJyZW50Rm9sZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcG9zaXRpb25pbmdcclxuICAgICAgICAgICAgICAgIHRoaXMuZ290b1Bvc2l0aW9uKGFuY2hvciwgcG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFmb3VuZCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZ2V0Q2hhcHRlcihcIjFcIik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ1c3kuc2V0KGZhbHNlKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghcG9zaXRpb24pXHJcbiAgICAgICAgdGhpcy5oaXN0b3J5KCkucHVzaCh7IGlkOiB0aGlzLmluZGV4SWQsIHBvc2l0aW9uOiB0aGlzLmdldFBvc2l0aW9uKCkgfSk7XHJcbiAgICAgIC8vIE1vdmUgb24gdGhlIHNhbWUgY2hhcHRlclxyXG4gICAgICB0aGlzLmdvdG9Qb3NpdGlvbihhbmNob3IsIHBvc2l0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvdG8gcG9zaXRpb25cclxuICAgKiBAcGFyYW0gYW5jaG9yIHRoZSBhbmNob3IgdG8gZ28gdG9cclxuICAgKiBAcGFyYW0gcG9zaXRpb24gdGhlIG9mZnNldCB0byBnbyB0b1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBnb3RvUG9zaXRpb24oYW5jaG9yOiBzdHJpbmcsIHBvc2l0aW9uOiBudW1iZXIgPSAwKTogdm9pZCB7XHJcbiAgICAvLyBIYW5kbGUgcG9zaXRpb25pbmdcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAvLyBIYW5kbGUgYW5jaG9yIGZpcnN0XHJcbiAgICAgIGlmIChhbmNob3IpIHtcclxuICAgICAgICBsZXQgZWxtcyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGFuY2hvci50b1VwcGVyQ2FzZSgpKTtcclxuICAgICAgICBpZiAoZWxtcykgcG9zaXRpb24gPSBlbG1zWzBdLm9mZnNldFRvcDtcclxuICAgICAgfVxyXG4gICAgICAvLyBUaGVuIHBvc2l0aW9uXHJcbiAgICAgIGlmIChwb3NpdGlvbiA+IDApIHRoaXMuc2V0UG9zaXRpb24ocG9zaXRpb24gLSAxKTtcclxuICAgICAgZWxzZSB0aGlzLnNldFBvc2l0aW9uKDApO1xyXG4gICAgfSwgNTApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHNjcm9sbCBwb3NpdGlvblxyXG4gICAqIEByZXR1cm5zOiB0aGUgbmV3IHNjcm9sbCB0b3BcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgZ2V0UG9zaXRpb24oKTogbnVtYmVyIHtcclxuICAgIGxldCBlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2hlbHB2aWV3ZXItc2Nyb2xsZXInKTtcclxuICAgIGlmIChlbGVtKSB7XHJcbiAgICAgIHJldHVybiBlbGVtLnNjcm9sbFRvcDtcclxuICAgIH1cclxuICAgIHJldHVybiAwO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0IHNjcm9sbCBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBwb3NpdGlvbiA6IHRoZSBwb3NpdGlvbiB0byBnbyB0b1xyXG4gICAqL1xyXG4gIHByb3RlY3RlZCBzZXRQb3NpdGlvbihwb3NpdGlvbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICBsZXQgZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdoZWxwdmlld2VyLXNjcm9sbGVyJyk7XHJcbiAgICBpZiAoZWxlbSkge1xyXG4gICAgICBlbGVtLnNjcm9sbFRvKDAsIHBvc2l0aW9uKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdvIGJhY2tcclxuICAgKi9cclxuICBwcm90ZWN0ZWQgYmFjaygpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5oaXN0b3J5IHx8IHRoaXMuaGlzdG9yeS5sZW5ndGggPT09IDApIHJldHVybjtcclxuICAgIGxldCBuID0gdGhpcy5oaXN0b3J5KCkucG9wKCk7XHJcbiAgICB0aGlzLmdldENoYXB0ZXIobi5pZCwgbi5wb3NpdGlvbiArIDEpO1xyXG4gIH1cclxuXHJcblxyXG5cclxuXHJcblxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJoZWxwdmlld2VyLWZpeGVkXCI+XHJcbiAgPGRpdiBzdHlsZT1cImhlaWdodDo2cHhcIj5cclxuICAgIEBpZiAoYnVzeSgpKSB7XHJcbiAgICA8bWF0LXByb2dyZXNzLWJhciB6LWluZGV4PVwiMTFcIiBtb2RlPVwiaW5kZXRlcm1pbmF0ZVwiPjwvbWF0LXByb2dyZXNzLWJhcj5cclxuICAgIH1cclxuICA8L2Rpdj5cclxuICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlclwiPlxyXG4gICAgPGRpdiBmeExheW91dD1cInJvd1wiIGZ4TGF5b3V0QWxpZ249XCJzdGFydCBjZW50ZXJcIiBmeExheW91dEdhcD1cIjEwcHhcIiBmeEZpbGw+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctbWVudVwiPlxyXG4gICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiTW9zdHJhIG1lbnVcIiBbYXR0ci5hcmlhLWxhYmVsXT1cIidNb3N0cmEgaW5kaWNlJ1wiXHJcbiAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlSW5kZXhQYW5lKClcIj5cclxuICAgICAgICAgIDxtYXQtaWNvbj5tZW51PC9tYXQtaWNvbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiKlwiPlxyXG4gICAgICAgIDxoMiBtYXQtZGlhbG9nLXRpdGxlPkd1aWRhPC9oMj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgZnhGbGV4PVwiMTAwcHhcIiBmeExheW91dEFsaWduPVwiZW5kXCIgY2xhc3M9XCJkaWFsb2ctY2xvc2VcIj5cclxuICAgICAgICBAaWYgKGNhbkdvQmFjaygpKSB7XHJcbiAgICAgICAgPGJ1dHRvbiBmeEZsZXhBbGlnbj1cInN0YXJ0XCIgdHlwZT1cImJ1dHRvblwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUb29sdGlwPVwiSW5kaWV0cm9cIiAoY2xpY2spPVwiYmFjaygpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+YXJyb3dfYmFjazwvbWF0LWljb24+XHJcbiAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDxidXR0b24gZnhGbGV4QWxpZ249XCJzdGFydFwiIHR5cGU9XCJidXR0b25cIiBtYXQtaWNvbi1idXR0b24gbWF0VG9vbHRpcD1cIkNoaXVkaVwiIChjbGljayk9XCJjbG9zZSgpXCI+XHJcbiAgICAgICAgICA8bWF0LWljb24+Y2xvc2U8L21hdC1pY29uPlxyXG4gICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG4gXHJcbjwvZGl2PlxyXG48bWF0LWRpYWxvZy1jb250ZW50IGlkPVwiaGVscHZpZXdlci1zY3JvbGxhYmxlXCI+XHJcbiAgPG1hdC1kcmF3ZXItY29udGFpbmVyIGNsYXNzPVwiZmlsbFwiPlxyXG4gICAgPG1hdC1kcmF3ZXIgI2luZGV4UGFuZSBtb2RlPVwic2lkZVwiIFthdXRvRm9jdXNdPVwiZmFsc2VcIiBjbGFzcz1cImRyYXdlci1zbWFsbCBkcmF3ZXItdHJhbnNwYXJlbnRcIj5cclxuICAgICAgPGRpdiBmeExheW91dD1cImNvbHVtblwiIGZ4RmlsbD5cclxuICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIj5cclxuICAgICAgICAgIDxtYXQtdHJlZSBbZGF0YVNvdXJjZV09XCJ0cmVlRGF0YVwiIFt0cmVlQ29udHJvbF09XCJ0cmVlQ29udHJvbFwiIGNsYXNzPVwidHJlZSBcIiBzdHlsZT1cIm1heC13aWR0aDozMTBweFwiPlxyXG4gICAgICAgICAgICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZVwiIG1hdFRyZWVOb2RlVG9nZ2xlIG1hdFRyZWVOb2RlUGFkZGluZ1xyXG4gICAgICAgICAgICAgIFttYXRUcmVlTm9kZVBhZGRpbmdJbmRlbnRdPVwiMjBcIiBjbGFzcz1cInRyZWUtbm9kZSB0cmVlLW5vZGUtc2ltcGxlIHRyZWUtbm9kZS1zdHlsZVwiXHJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cImdldENoYXB0ZXIobm9kZS5pZCk7XCIgW25nQ2xhc3NdPVwieyd0cmVlLW5vZGUtYWN0aXZhdGVkJzogaW5kZXhOb2RlICYmIGluZGV4Tm9kZS5pZCA9PT0gbm9kZS5pZH1cIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXN5KClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsIGNsYXNzPVwic21hbGwgdXBwZXJjYXNlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIG1hdC1pY29uLWJ1dHRvbiBkaXNhYmxlZCBjbGFzcz1cInNtYWxsLWljb24tYnV0dG9uXCI+PC9idXR0b24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZ4RmxleD1cIipcIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiPnt7bm9kZS5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9tYXQtdHJlZS1ub2RlPlxyXG4gICAgICAgICAgICA8bWF0LXRyZWUtbm9kZSAqbWF0VHJlZU5vZGVEZWY9XCJsZXQgbm9kZTt3aGVuOiBoYXNDaGlsZFwiIG1hdFRyZWVOb2RlUGFkZGluZyBbbWF0VHJlZU5vZGVQYWRkaW5nSW5kZW50XT1cIjIwXCJcclxuICAgICAgICAgICAgICBjbGFzcz1cInRyZWUtbm9kZSB0cmVlLW5vZGUtc2ltcGxlIHRyZWUtbm9kZS1zdHlsZVwiXHJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyd0cmVlLW5vZGUtYWN0aXZhdGVkJzogaW5kZXhOb2RlICYmIGluZGV4Tm9kZS5pZCA9PT0gbm9kZS5pZCB9XCIgKGNsaWNrKT1cImdldENoYXB0ZXIobm9kZS5pZClcIlxyXG4gICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJidXN5KClcIj5cclxuICAgICAgICAgICAgICA8ZGl2IGZ4TGF5b3V0PVwicm93XCIgZnhMYXlvdXRHYXA9XCIxMHB4XCIgZnhGaWxsIGNsYXNzPVwic21hbGwgdXBwZXJjYXNlXCI+XHJcbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBmeEZsZXhBbGlnbj1cImNlbnRlclwiIG1hdC1pY29uLWJ1dHRvbiBtYXRUcmVlTm9kZVRvZ2dsZVxyXG4gICAgICAgICAgICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cIidBcHJpL2NoaXVkaSAnICsgbm9kZS5uYW1lXCIgY2xhc3M9XCJzbWFsbC1pY29uLWJ1dHRvblwiPlxyXG4gICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbi1ydGwtbWlycm9yXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3t0cmVlQ29udHJvbC5pc0V4cGFuZGVkKG5vZGUpID8gJ2V4cGFuZF9tb3JlJyA6ICdjaGV2cm9uX3JpZ2h0J319XHJcbiAgICAgICAgICAgICAgICAgIDwvbWF0LWljb24+XHJcbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgZnhGbGV4PVwiKlwiIGZ4RmxleEFsaWduPVwiY2VudGVyXCI+e3tub2RlLm5hbWV9fTwvZGl2PlxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L21hdC10cmVlLW5vZGU+XHJcbiAgICAgICAgICA8L21hdC10cmVlPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbWF0LWRyYXdlcj5cclxuICAgIDxkaXYgc3R5bGU9XCJwYWRkaW5nOiAwIDI0cHg7XCI+XHJcbiAgICAgIDxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZpbGw+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImZpbGxcIiBpZD1cImhlbHB2aWV3ZXItc2Nyb2xsZXJcIiAoY2xpY2spPVwiZ290b0NoYXB0ZXIoJGV2ZW50KVwiXHJcbiAgICAgICAgICBbaW5uZXJIdG1sXT1cIihwYWdlKCkgPz8gJycpIHwgc2FmZUh0bWxcIj48L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICA8L21hdC1kcmF3ZXItY29udGFpbmVyPlxyXG48L21hdC1kaWFsb2ctY29udGVudD4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmaW5pdGlvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvaGVscC9kZWZpbml0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRm9sZGVyIH0gZnJvbSAnQGFyc2VkaXppb25pL2Fycy11dGlscy9jb3JlJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQ2hhcHRlclBhcmVudEluZm9cclxue1xyXG4gICAgaWQ6IHN0cmluZztcclxuICAgIG5hbWU6IHN0cmluZztcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGFwdGVyIGV4dGVuZHMgRm9sZGVyIHtcclxuICAgIHBhcmVudHM/OiBDaGFwdGVyUGFyZW50SW5mb1tdIHwgbnVsbDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGFwdGVyQmFnXHJcbntcclxuICAgIGNoYXB0ZXI6IENoYXB0ZXI7XHJcbiAgICBkYXRhOiBzdHJpbmc7XHJcbiAgICBoaXRzOiBudW1iZXJcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDaGFwdGVyVHJlZSBleHRlbmRzIENoYXB0ZXIge1xyXG4gICBzdWJGb2xkZXJzOiBDaGFwdGVyVHJlZVtdO1xyXG4gICBwYXRoOiBzdHJpbmc7XHJcbn0iXX0=
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { NgModule } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export class ArsHelpModule {
|
|
4
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ArsHelpModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
5
|
-
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.10", ngImport: i0, type: ArsHelpModule }); }
|
|
6
|
-
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ArsHelpModule }); }
|
|
7
|
-
}
|
|
8
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.10", ngImport: i0, type: ArsHelpModule, decorators: [{
|
|
9
|
-
type: NgModule
|
|
10
|
-
}] });
|
|
11
|
-
export * from './services/help.service';
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscC5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9hcnMtdXRpbHMvaGVscC9oZWxwLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUd6QyxNQUFNLE9BQU8sYUFBYTsrR0FBYixhQUFhO2dIQUFiLGFBQWE7Z0hBQWIsYUFBYTs7NEZBQWIsYUFBYTtrQkFEekIsUUFBUTs7QUFHVCxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBOZ01vZHVsZSgpXHJcbmV4cG9ydCBjbGFzcyBBcnNIZWxwTW9kdWxlIHsgfVxyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcy9oZWxwLnNlcnZpY2UnO1xyXG4iXX0=
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/*
|
|
2
|
-
* Public API Surface
|
|
3
|
-
*/
|
|
4
|
-
export * from './help.module';
|
|
5
|
-
export * from './definitions';
|
|
6
|
-
export * from './components/help-viewer/help-viewer.component';
|
|
7
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2Fycy11dGlscy9oZWxwL3B1YmxpY19hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFDSCxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGdEQUFnRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLypcclxuICogUHVibGljIEFQSSBTdXJmYWNlIFxyXG4gKi9cclxuZXhwb3J0ICogZnJvbSAnLi9oZWxwLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGVmaW5pdGlvbnMnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NvbXBvbmVudHMvaGVscC12aWV3ZXIvaGVscC12aWV3ZXIuY29tcG9uZW50JztcclxuXHJcbiJdfQ==
|