@loxia/imx-viewer 7.2.1 → 8.0.0-220301120153041

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.
Files changed (47) hide show
  1. package/README.md +8 -0
  2. package/components/imx-viewer.component.d.ts +3 -0
  3. package/esm2020/components/imx-viewer.component.mjs +300 -0
  4. package/esm2020/imx-viewer.module.mjs +36 -0
  5. package/esm2020/loxia-imx-viewer.mjs +5 -0
  6. package/esm2020/model/point.mjs +7 -0
  7. package/esm2020/model/popover-info.mjs +7 -0
  8. package/esm2020/model/selectie-event.mjs +7 -0
  9. package/esm2020/model/selectie-info.mjs +7 -0
  10. package/esm2020/model/svg-info.mjs +7 -0
  11. package/esm2020/public_api.mjs +8 -0
  12. package/esm2020/services/clickarea.service.mjs +44 -0
  13. package/esm2020/services/puic-helper.service.mjs +17 -0
  14. package/esm2020/utils/classes-util.mjs +35 -0
  15. package/esm2020/utils/document-token.mjs +4 -0
  16. package/esm2020/utils/focus-util.mjs +63 -0
  17. package/esm2020/utils/svg-rect-util.mjs +48 -0
  18. package/fesm2015/loxia-imx-viewer.mjs +573 -0
  19. package/fesm2015/loxia-imx-viewer.mjs.map +1 -0
  20. package/{fesm2015/loxia-imx-viewer.js → fesm2020/loxia-imx-viewer.mjs} +124 -105
  21. package/fesm2020/loxia-imx-viewer.mjs.map +1 -0
  22. package/imx-viewer.module.d.ts +7 -0
  23. package/loxia-imx-viewer.d.ts +1 -3
  24. package/package.json +21 -9
  25. package/services/clickarea.service.d.ts +3 -0
  26. package/services/puic-helper.service.d.ts +3 -0
  27. package/bundles/loxia-imx-viewer.umd.js +0 -929
  28. package/bundles/loxia-imx-viewer.umd.js.map +0 -1
  29. package/bundles/loxia-imx-viewer.umd.min.js +0 -16
  30. package/bundles/loxia-imx-viewer.umd.min.js.map +0 -1
  31. package/esm2015/components/imx-viewer.component.js +0 -292
  32. package/esm2015/imx-viewer.module.js +0 -27
  33. package/esm2015/loxia-imx-viewer.js +0 -8
  34. package/esm2015/model/point.js +0 -7
  35. package/esm2015/model/popover-info.js +0 -7
  36. package/esm2015/model/selectie-event.js +0 -7
  37. package/esm2015/model/selectie-info.js +0 -7
  38. package/esm2015/model/svg-info.js +0 -7
  39. package/esm2015/public_api.js +0 -8
  40. package/esm2015/services/clickarea.service.js +0 -46
  41. package/esm2015/services/puic-helper.service.js +0 -15
  42. package/esm2015/utils/classes-util.js +0 -35
  43. package/esm2015/utils/document-token.js +0 -4
  44. package/esm2015/utils/focus-util.js +0 -63
  45. package/esm2015/utils/svg-rect-util.js +0 -48
  46. package/fesm2015/loxia-imx-viewer.js.map +0 -1
  47. package/loxia-imx-viewer.metadata.json +0 -1
package/README.md CHANGED
@@ -106,6 +106,14 @@ Met de onderstaande css kan de default breedte van een clickarea aangepast worde
106
106
 
107
107
  ## Release Notes
108
108
 
109
+ ### 9.0.0 xx-xx-2022
110
+ BREAKING CHANGES
111
+ * Upgraded de SVG-IMX-Viewer naar Angular 13
112
+
113
+ ### 8.0.0 15-02-2022
114
+ BREAKING CHANGES
115
+ * Upgraded de SVG-IMX-Viewer naar Angular 12
116
+
109
117
  ### 7.2.1 08-02-2022
110
118
  * PW-7164 Bugfix voor de verdwijnende mousepointer
111
119
 
@@ -7,6 +7,7 @@ import { PopoverInfo } from '../model/popover-info';
7
7
  import { SelectieEvent } from '../model/selectie-event';
8
8
  import { SelectieInfo } from '../model/selectie-info';
9
9
  import { SvgInfo } from '../model/svg-info';
10
+ import * as i0 from "@angular/core";
10
11
  export declare class ImxViewerComponent implements OnChanges, OnInit {
11
12
  private document;
12
13
  private http;
@@ -59,4 +60,6 @@ export declare class ImxViewerComponent implements OnChanges, OnInit {
59
60
  private updateDom;
60
61
  private delayedClickAreaCreation;
61
62
  private getSvgParent;
63
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImxViewerComponent, never>;
64
+ static ɵcmp: i0.ɵɵComponentDeclaration<ImxViewerComponent, "imx-viewer", never, { "useClickArea": "useClickArea"; "inlineDgnCssImport": "inlineDgnCssImport"; "svgInfo": "svgInfo"; "selectieInfos": "selectieInfos"; "clickableIds": "clickableIds"; "rightClickableIds": "rightClickableIds"; "popoverInfos": "popoverInfos"; }, { "clickHandler": "clickHandler"; "rightClickHandler": "rightClickHandler"; "svgLoaded": "svgLoaded"; }, never, never>;
62
65
  }
@@ -0,0 +1,300 @@
1
+ import { Component, EventEmitter, Inject, Input, Output, ViewChild } from '@angular/core';
2
+ import * as dataUrl from 'dataurl';
3
+ import { combineLatest, of as observableOf, throwError as observableThrowError } from 'rxjs';
4
+ import { take } from 'rxjs/operators';
5
+ import * as SvgPanZoom from 'svg-pan-zoom';
6
+ import { ClassesUtil } from '../utils/classes-util';
7
+ import { DocumentToken } from '../utils/document-token';
8
+ import { FocusUtil } from '../utils/focus-util';
9
+ import { Point } from '../model/point';
10
+ import { SelectieEvent } from '../model/selectie-event';
11
+ import * as i0 from "@angular/core";
12
+ import * as i1 from "@angular/common/http";
13
+ import * as i2 from "../services/clickarea.service";
14
+ import * as i3 from "../services/puic-helper.service";
15
+ import * as i4 from "@angular/common";
16
+ const _svgPanZoom = SvgPanZoom; // via andere variabele zodat ng-packgr/rollup geen error geeft bij de aannroep
17
+ export class ImxViewerComponent {
18
+ constructor(document, http, clickAreaService, puicHelper) {
19
+ this.document = document;
20
+ this.http = http;
21
+ this.clickAreaService = clickAreaService;
22
+ this.puicHelper = puicHelper;
23
+ this.useClickArea = false;
24
+ this.inlineDgnCssImport = true;
25
+ this.selectieInfos = [];
26
+ // Onderstaande inputs worden meegenomen voor clickarea:
27
+ this.clickableIds = [];
28
+ this.rightClickableIds = [];
29
+ this.popoverInfos = [];
30
+ this.errors = false;
31
+ this.popoverStyle = { display: 'inline' };
32
+ this.popoverHtmlContent = '';
33
+ this.clickHandler = new EventEmitter();
34
+ this.rightClickHandler = new EventEmitter();
35
+ this.svgLoaded = new EventEmitter();
36
+ this.svgGeladen = false;
37
+ this.eventListeners = new Map();
38
+ this.getSvgPanZoomInstance = () => this.svgPanZoomRef;
39
+ this.hidePopOver = () => this.popoverStyle.visibility = 'hidden';
40
+ this.getSvgParent = () => this.svgParentRef.nativeElement;
41
+ }
42
+ ngOnInit() {
43
+ this.createSvgPanZoomRefIfNotExists();
44
+ this.puicHelper.setRootSvg(this.getSvgParent());
45
+ }
46
+ ngOnChanges(changes) {
47
+ // If Imx-viewer is initialized with svgInfo, ngOnChanges is called before ngOnInit.
48
+ // In that case we need to create svgPanZoomRef here.
49
+ this.createSvgPanZoomRefIfNotExists();
50
+ const { useClickArea, clickableIds, rightClickableIds, popoverInfos, selectieInfos, svgInfo } = changes;
51
+ if (useClickArea || clickableIds || rightClickableIds || popoverInfos) {
52
+ this.delayedClickAreaCreation();
53
+ }
54
+ if (this.svgInfo && svgInfo) {
55
+ this.loadSvgs();
56
+ }
57
+ if (this.clickableIds && clickableIds && this.svgGeladen) {
58
+ this.addClickEventHandlersToElements(this.clickableIds, 'click');
59
+ }
60
+ if (this.rightClickableIds && rightClickableIds && this.svgGeladen) {
61
+ this.addClickEventHandlersToElements(this.rightClickableIds, 'contextmenu');
62
+ }
63
+ if (this.selectieInfos && selectieInfos && this.svgGeladen) {
64
+ this.selectElements();
65
+ }
66
+ if (this.popoverInfos && popoverInfos && this.svgGeladen) {
67
+ this.addMouseoverEventHandlerToElements();
68
+ }
69
+ }
70
+ focusOnIds(focusIds) {
71
+ FocusUtil.focusOnIds(focusIds, this.svgPanZoomRef, this.puicHelper);
72
+ }
73
+ // Here only used in test, but also used by applications. Do not remove.
74
+ static getXCoordinate(decodedSvgDataUrl) {
75
+ let div = document.createElement('div');
76
+ div.innerHTML = decodedSvgDataUrl;
77
+ // De SVG-width wordt in de svg tag gespecificeerd.
78
+ const x = div.firstElementChild.getAttribute('width');
79
+ const result = parseFloat(x);
80
+ div = null;
81
+ return result;
82
+ }
83
+ createSvgPanZoomRefIfNotExists() {
84
+ if (!this.svgPanZoomRef) {
85
+ this.svgPanZoomRef = _svgPanZoom(this.getSvgParent(), {
86
+ fit: false,
87
+ center: true,
88
+ dblClickZoomEnabled: false,
89
+ onZoom: () => this.hidePopOver(),
90
+ onPan: () => this.hidePopOver()
91
+ });
92
+ this.addStyleToRootSvg();
93
+ }
94
+ }
95
+ /**
96
+ * Style wordt vanuit javascript toegevoegd na de create van SvgZoomPanRef deze maakt een viewport aan.
97
+ * - Clickarea CSS wordt dynamisch aan de SVG toegevoegd, dit voorkomt dat dat er ngcontent property op geplaatst wordt.
98
+ * De SVG's worden niet voorzien van ngcontent attribuut.
99
+ * - DGN.css import wordt (optioneel) in de root SVG opgenomen, deze is eerst verwijderd uit de SVG's. Om meerdere imports te voorkomen.
100
+ * */
101
+ addStyleToRootSvg() {
102
+ const defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');
103
+ let style = this.inlineDgnCssImport ? '@import url("dgn.css");\n' : '';
104
+ style +=
105
+ `.imxview-selected > polyline.imxview-clickarea, polyline.imxview-clickarea {
106
+ stroke: var(--imxview-clickarea-stroke, transparent);
107
+ stroke-width: var(--imxview-clickarea-stroke-width, 10px);
108
+ stroke-dasharray: none;
109
+ }`;
110
+ defs.innerHTML =
111
+ `<style type="text/css">
112
+ ${style}
113
+ </style>`;
114
+ const firstElementChild = this.getSvgParent().firstElementChild;
115
+ this.getSvgParent().insertBefore(defs, firstElementChild);
116
+ }
117
+ loadSvgs() {
118
+ combineLatest(this.svgInfo.map(svgInfo => this.loadSvg(svgInfo.svg)))
119
+ .pipe(take(1))
120
+ .subscribe(svgs => {
121
+ const svg = this.concatenateSvgs(svgs);
122
+ this.updateDom(svg);
123
+ this.svgGeladen = true;
124
+ this.svgLoaded.emit();
125
+ this.delayedClickAreaCreation();
126
+ this.addClickEventHandlersToElements(this.clickableIds, 'click');
127
+ this.addClickEventHandlersToElements(this.rightClickableIds, 'contextmenu');
128
+ this.selectElements();
129
+ this.addMouseoverEventHandlerToElements();
130
+ }, error => this.flagErrors(error));
131
+ }
132
+ loadSvg(svgSrc) {
133
+ if (svgSrc.startsWith('data:')) {
134
+ const parsed = dataUrl.parse(svgSrc);
135
+ if (parsed) {
136
+ return observableOf(parsed.data.toString());
137
+ }
138
+ return observableThrowError('Data-url parse error');
139
+ }
140
+ return this.http.get(svgSrc, { responseType: 'text' });
141
+ }
142
+ addClickEventHandlersToElement(listeners, elem, eventType, puic) {
143
+ const elemAlreadyHasListener = listeners.get(elem);
144
+ if (!elemAlreadyHasListener) {
145
+ const fn = eventType === 'click' ?
146
+ (e) => this.clickHandler.emit(new SelectieEvent(puic, e)) :
147
+ (e) => {
148
+ e.preventDefault();
149
+ this.rightClickHandler.emit(new SelectieEvent(puic, e));
150
+ return false;
151
+ };
152
+ listeners.set(elem, fn);
153
+ elem.addEventListener(eventType, fn);
154
+ if (eventType === 'click') {
155
+ elem.style.cursor = 'pointer';
156
+ }
157
+ }
158
+ }
159
+ addClickEventHandlersToElements(clickableIds, eventtype) {
160
+ const listeners = this.removeOldState(eventtype);
161
+ if (clickableIds) {
162
+ clickableIds.forEach(puic => {
163
+ const elements = this.puicHelper.getAllElementsForPuic(puic);
164
+ elements.forEach((element) => this.addClickEventHandlersToElement(listeners, element, eventtype, puic));
165
+ });
166
+ }
167
+ }
168
+ addMouseoverEventHandlerToElements() {
169
+ const listeners = this.removeOldState('mouseover');
170
+ if (this.popoverInfos) {
171
+ this.popoverInfos.forEach(popoverInfo => {
172
+ popoverInfo.puicArray.forEach(puic => {
173
+ const elems = this.puicHelper.getAllElementsForPuic(puic);
174
+ for (let i = 0; i < elems.length; i++) {
175
+ const fn = (e) => {
176
+ this.popoverHtmlContent = popoverInfo.popoverHtmlContent;
177
+ this.popoverTitleContent = popoverInfo.popoverTitleContent;
178
+ // use timeout to have content rendered before getting size
179
+ setTimeout(() => this.showPopup(e), 0);
180
+ };
181
+ const elem = elems.item(i);
182
+ listeners.set(elem, fn);
183
+ elem.addEventListener('mouseover', fn);
184
+ }
185
+ });
186
+ });
187
+ }
188
+ }
189
+ concatenateSvgs(svgs) {
190
+ let svgContent = '';
191
+ for (let i = 0, len = this.svgInfo.length; i < len; i++) {
192
+ const sourceCoordinates = this.svgInfo[i].coordinates || new Point(0, 0);
193
+ const div = document.createElement('div');
194
+ /** Verwijder dgn.css import uit geleverde SVG's.
195
+ * De import wordt optioneel (standaard aan) in de root SVG geplaats om te voorkomen dat de import meermaals gebeurd.
196
+ * zie addStyleToRootSvg()
197
+ */
198
+ div.innerHTML = svgs[i].replace('@import url("dgn.css");', '');
199
+ div.firstElementChild.setAttribute('x', sourceCoordinates.x.toString());
200
+ div.firstElementChild.setAttribute('y', sourceCoordinates.y.toString());
201
+ svgContent += div.innerHTML;
202
+ }
203
+ return svgContent;
204
+ }
205
+ flagErrors(error) {
206
+ console.log(error);
207
+ this.errors = true;
208
+ }
209
+ removeOldState(eventType) {
210
+ let listeners = this.eventListeners.get(eventType);
211
+ if (listeners) {
212
+ listeners.forEach((fn, el) => {
213
+ el.removeEventListener(eventType, fn);
214
+ if (eventType === 'click') {
215
+ el.setAttribute('style', ImxViewerComponent.setDefaultCursor(el));
216
+ }
217
+ });
218
+ }
219
+ listeners = new Map();
220
+ this.eventListeners.set(eventType, listeners);
221
+ return listeners;
222
+ }
223
+ selectElements() {
224
+ const allElems = this.getSvgParent().querySelectorAll('[class*=imxview-selected]');
225
+ for (let j = 0; j < allElems.length; j++) {
226
+ ClassesUtil.removeClassesStartingWith(allElems[j], 'imxview-selected');
227
+ }
228
+ if (this.selectieInfos) {
229
+ this.selectieInfos.forEach(selectieInfo => {
230
+ selectieInfo.ids.forEach(id => {
231
+ this.puicHelper.getAllElementsForPuic(id).forEach(elem => {
232
+ ClassesUtil.addClass(elem, 'imxview-selected');
233
+ if ('' !== selectieInfo.clazz) {
234
+ ClassesUtil.addClass(elem, 'imxview-selected-' + selectieInfo.clazz);
235
+ }
236
+ });
237
+ });
238
+ });
239
+ }
240
+ }
241
+ static setDefaultCursor(el) {
242
+ const oudeStyle = el.getAttribute('style');
243
+ return oudeStyle ? oudeStyle.replace('pointer', 'default') : 'cursor: default';
244
+ }
245
+ showPopup(e) {
246
+ const popoverElem = document.getElementById('popover').getBoundingClientRect();
247
+ const left = e.layerX - (popoverElem.width / 2) + 'px';
248
+ const top = e.layerY - (popoverElem.height + 8) + 'px';
249
+ this.popoverStyle = {
250
+ left: left, top: top, position: 'absolute',
251
+ display: 'inline', visibility: 'visible'
252
+ };
253
+ }
254
+ updateDom(svg) {
255
+ const svgGroup = this.getSvgParent().getElementsByClassName('svg-pan-zoom_viewport')[0];
256
+ svgGroup.innerHTML = svg.substring(svg.indexOf('<svg'));
257
+ this.svgPanZoomRef.updateBBox();
258
+ this.svgPanZoomRef.center();
259
+ }
260
+ delayedClickAreaCreation() {
261
+ if (this.svgGeladen && this.useClickArea) {
262
+ const clickareaIds = new Set([...this.clickableIds, ...this.rightClickableIds,
263
+ ...this.popoverInfos.flatMap(pi => pi.puicArray)]);
264
+ this.clickAreaService.delayedClickAreaCreation(clickareaIds);
265
+ }
266
+ }
267
+ }
268
+ ImxViewerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ImxViewerComponent, deps: [{ token: DocumentToken }, { token: i1.HttpClient }, { token: i2.ClickareaService }, { token: i3.PuicHelperService }], target: i0.ɵɵFactoryTarget.Component });
269
+ ImxViewerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.2.4", type: ImxViewerComponent, selector: "imx-viewer", inputs: { useClickArea: "useClickArea", inlineDgnCssImport: "inlineDgnCssImport", svgInfo: "svgInfo", selectieInfos: "selectieInfos", clickableIds: "clickableIds", rightClickableIds: "rightClickableIds", popoverInfos: "popoverInfos" }, outputs: { clickHandler: "clickHandler", rightClickHandler: "rightClickHandler", svgLoaded: "svgLoaded" }, viewQueries: [{ propertyName: "svgParentRef", first: true, predicate: ["svgParent"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<div id=\"imxviewer\">\n <div id=\"svgContainer\" class=\"col-md-12 top10\" [hidden]=\"errors\" (click)=\"hidePopOver()\">\n <svg #svgParent xmlns=\"http://www.w3.org/2000/svg\"></svg>\n </div>\n <div id=\"popover\" class=\"popover top bs-popover-top\" [ngStyle]=\"popoverStyle\" (mouseleave)=\"hidePopOver()\">\n <div class=\"arrow\"></div>\n <h3 class=\"popover-header\" *ngIf=\"popoverTitleContent !== undefined\">{{popoverTitleContent}}</h3>\n <div class=\"popover-body\" [innerHTML]=\"popoverHtmlContent\"></div>\n </div>\n</div>\n", styles: [".popover{top:0;left:0;z-index:1060;max-width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;visibility:hidden}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem;left:40%}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:#00000040}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:#00000040}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:#00000040}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:#00000040}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}\n"], directives: [{ type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
270
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ImxViewerComponent, decorators: [{
271
+ type: Component,
272
+ args: [{ selector: 'imx-viewer', template: "<div id=\"imxviewer\">\n <div id=\"svgContainer\" class=\"col-md-12 top10\" [hidden]=\"errors\" (click)=\"hidePopOver()\">\n <svg #svgParent xmlns=\"http://www.w3.org/2000/svg\"></svg>\n </div>\n <div id=\"popover\" class=\"popover top bs-popover-top\" [ngStyle]=\"popoverStyle\" (mouseleave)=\"hidePopOver()\">\n <div class=\"arrow\"></div>\n <h3 class=\"popover-header\" *ngIf=\"popoverTitleContent !== undefined\">{{popoverTitleContent}}</h3>\n <div class=\"popover-body\" [innerHTML]=\"popoverHtmlContent\"></div>\n </div>\n</div>\n", styles: [".popover{top:0;left:0;z-index:1060;max-width:100%;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;visibility:hidden}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:1rem;height:.5rem;margin:0 .3rem;left:40%}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:#00000040}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:#00000040}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem - 1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:#00000040}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem - 1px);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:#00000040}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}\n"] }]
273
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
274
+ type: Inject,
275
+ args: [DocumentToken]
276
+ }] }, { type: i1.HttpClient }, { type: i2.ClickareaService }, { type: i3.PuicHelperService }]; }, propDecorators: { useClickArea: [{
277
+ type: Input
278
+ }], inlineDgnCssImport: [{
279
+ type: Input
280
+ }], svgInfo: [{
281
+ type: Input
282
+ }], selectieInfos: [{
283
+ type: Input
284
+ }], clickableIds: [{
285
+ type: Input
286
+ }], rightClickableIds: [{
287
+ type: Input
288
+ }], popoverInfos: [{
289
+ type: Input
290
+ }], svgParentRef: [{
291
+ type: ViewChild,
292
+ args: ['svgParent', { static: true }]
293
+ }], clickHandler: [{
294
+ type: Output
295
+ }], rightClickHandler: [{
296
+ type: Output
297
+ }], svgLoaded: [{
298
+ type: Output
299
+ }] } });
300
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW14LXZpZXdlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvY29tcG9uZW50cy9pbXgtdmlld2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL2lteC12aWV3ZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUNILFNBQVMsRUFFVCxZQUFZLEVBQ1osTUFBTSxFQUNOLEtBQUssRUFHTCxNQUFNLEVBRU4sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sS0FBSyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxhQUFhLEVBQWMsRUFBRSxJQUFJLFlBQVksRUFBRSxVQUFVLElBQUksb0JBQW9CLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDekcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RDLE9BQU8sS0FBSyxVQUFVLE1BQU0sY0FBYyxDQUFDO0FBRzNDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDeEQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7Ozs7OztBQUl4RCxNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsQ0FBQywrRUFBK0U7QUFPL0csTUFBTSxPQUFPLGtCQUFrQjtJQTBCM0IsWUFBMkMsUUFBYSxFQUFVLElBQWdCLEVBQzlELGdCQUFrQyxFQUFVLFVBQTZCO1FBRGxELGFBQVEsR0FBUixRQUFRLENBQUs7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFZO1FBQzlELHFCQUFnQixHQUFoQixnQkFB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LGtCQUFrQjtrQkFMOUIsU0FBUzsrQkFDSSxZQUFZOzswQkE4QlQsTUFBTTsyQkFBQyxhQUFhO29JQXpCeEIsWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csT0FBTztzQkFBZixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFFb0MsWUFBWTtzQkFBckQsU0FBUzt1QkFBQyxXQUFXLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO2dCQU85QixZQUFZO3NCQUFyQixNQUFNO2dCQUNHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxTQUFTO3NCQUFsQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcclxuaW1wb3J0IHtcclxuICAgIENvbXBvbmVudCxcclxuICAgIEVsZW1lbnRSZWYsXHJcbiAgICBFdmVudEVtaXR0ZXIsXHJcbiAgICBJbmplY3QsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uQ2hhbmdlcyxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFNpbXBsZUNoYW5nZXMsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0ICogYXMgZGF0YVVybCBmcm9tICdkYXRhdXJsJztcclxuaW1wb3J0IHsgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgYXMgb2JzZXJ2YWJsZU9mLCB0aHJvd0Vycm9yIGFzIG9ic2VydmFibGVUaHJvd0Vycm9yIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IHRha2UgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbmltcG9ydCAqIGFzIFN2Z1Bhblpvb20gZnJvbSAnc3ZnLXBhbi16b29tJztcclxuaW1wb3J0IHsgQ2xpY2thcmVhU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NsaWNrYXJlYS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUHVpY0hlbHBlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9wdWljLWhlbHBlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ2xhc3Nlc1V0aWwgfSBmcm9tICcuLi91dGlscy9jbGFzc2VzLXV0aWwnO1xyXG5pbXBvcnQgeyBEb2N1bWVudFRva2VuIH0gZnJvbSAnLi4vdXRpbHMvZG9jdW1lbnQtdG9rZW4nO1xyXG5pbXBvcnQgeyBGb2N1c1V0aWwgfSBmcm9tICcuLi91dGlscy9mb2N1cy11dGlsJztcclxuaW1wb3J0IHsgUG9pbnQgfSBmcm9tICcuLi9tb2RlbC9wb2ludCc7XHJcbmltcG9ydCB7IFBvcG92ZXJJbmZvIH0gZnJvbSAnLi4vbW9kZWwvcG9wb3Zlci1pbmZvJztcclxuaW1wb3J0IHsgU2VsZWN0aWVFdmVudCB9IGZyb20gJy4uL21vZGVsL3NlbGVjdGllLWV2ZW50JztcclxuaW1wb3J0IHsgU2VsZWN0aWVJbmZvIH0gZnJvbSAnLi4vbW9kZWwvc2VsZWN0aWUtaW5mbyc7XHJcbmltcG9ydCB7IFN2Z0luZm8gfSBmcm9tICcuLi9tb2RlbC9zdmctaW5mbyc7XHJcblxyXG5jb25zdCBfc3ZnUGFuWm9vbSA9IFN2Z1Bhblpvb207IC8vIHZpYSBhbmRlcmUgdmFyaWFiZWxlIHpvZGF0IG5nLXBhY2tnci9yb2xsdXAgZ2VlbiBlcnJvciBnZWVmdCBiaWogZGUgYWFubnJvZXBcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdpbXgtdmlld2VyJyxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9pbXgtdmlld2VyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2lteC12aWV3ZXIuY29tcG9uZW50LmNzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBJbXhWaWV3ZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIE9uSW5pdCB7XHJcbiAgICBASW5wdXQoKSB1c2VDbGlja0FyZWEgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGlubGluZURnbkNzc0ltcG9ydCA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBzdmdJbmZvOiBTdmdJbmZvW107XHJcbiAgICBASW5wdXQoKSBzZWxlY3RpZUluZm9zOiBTZWxlY3RpZUluZm9bXSA9IFtdO1xyXG5cclxuICAgIC8vIE9uZGVyc3RhYW5kZSBpbnB1dHMgd29yZGVuIG1lZWdlbm9tZW4gdm9vciBjbGlja2FyZWE6XHJcbiAgICBASW5wdXQoKSBjbGlja2FibGVJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgICBASW5wdXQoKSByaWdodENsaWNrYWJsZUlkczogc3RyaW5nW10gPSBbXTtcclxuICAgIEBJbnB1dCgpIHBvcG92ZXJJbmZvczogUG9wb3ZlckluZm9bXSA9IFtdO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ3N2Z1BhcmVudCcsIHsgc3RhdGljOiB0cnVlIH0pIHN2Z1BhcmVudFJlZjogRWxlbWVudFJlZjtcclxuXHJcbiAgICBlcnJvcnMgPSBmYWxzZTtcclxuICAgIHBvcG92ZXJTdHlsZTogYW55ID0geyBkaXNwbGF5OiAnaW5saW5lJyB9O1xyXG4gICAgcG9wb3Zlckh0bWxDb250ZW50ID0gJyc7XHJcbiAgICBwb3BvdmVyVGl0bGVDb250ZW50OiBzdHJpbmc7XHJcblxyXG4gICAgQE91dHB1dCgpIGNsaWNrSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aWVFdmVudD4oKTtcclxuICAgIEBPdXRwdXQoKSByaWdodENsaWNrSGFuZGxlciA9IG5ldyBFdmVudEVtaXR0ZXI8U2VsZWN0aWVFdmVudD4oKTtcclxuICAgIEBPdXRwdXQoKSBzdmdMb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgcHJpdmF0ZSBzdmdHZWxhZGVuID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIGV2ZW50TGlzdGVuZXJzOiBNYXA8c3RyaW5nLCBNYXA8RWxlbWVudCwgYW55Pj4gPSBuZXcgTWFwKCk7XHJcbiAgICBwcml2YXRlIHN2Z1Bhblpvb21SZWY6IFN2Z1Bhblpvb20uSW5zdGFuY2U7XHJcblxyXG4gICAgY29uc3RydWN0b3IoQEluamVjdChEb2N1bWVudFRva2VuKSBwcml2YXRlIGRvY3VtZW50OiBhbnksIHByaXZhdGUgaHR0cDogSHR0cENsaWVudCxcclxuICAgICAgICAgICAgICAgIHByaXZhdGUgY2xpY2tBcmVhU2VydmljZTogQ2xpY2thcmVhU2VydmljZSwgcHJpdmF0ZSBwdWljSGVscGVyOiBQdWljSGVscGVyU2VydmljZSkge1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25Jbml0KCkge1xyXG4gICAgICAgIHRoaXMuY3JlYXRlU3ZnUGFuWm9vbVJlZklmTm90RXhpc3RzKCk7XHJcbiAgICAgICAgdGhpcy5wdWljSGVscGVyLnNldFJvb3RTdmcodGhpcy5nZXRTdmdQYXJlbnQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgICAgIC8vIElmIElteC12aWV3ZXIgaXMgaW5pdGlhbGl6ZWQgd2l0aCBzdmdJbmZvLCBuZ09uQ2hhbmdlcyBpcyBjYWxsZWQgYmVmb3JlIG5nT25Jbml0LlxyXG4gICAgICAgIC8vIEluIHRoYXQgY2FzZSB3ZSBuZWVkIHRvIGNyZWF0ZSBzdmdQYW5ab29tUmVmIGhlcmUuXHJcbiAgICAgICAgdGhpcy5jcmVhdGVTdmdQYW5ab29tUmVmSWZOb3RFeGlzdHMoKTtcclxuXHJcbiAgICAgICAgY29uc3QgeyB1c2VDbGlja0FyZWEsIGNsaWNrYWJsZUlkcywgcmlnaHRDbGlja2FibGVJZHMsIHBvcG92ZXJJbmZvcywgc2VsZWN0aWVJbmZvcywgc3ZnSW5mbyB9ID0gY2hhbmdlcztcclxuXHJcbiAgICAgICAgaWYgKHVzZUNsaWNrQXJlYSB8fCBjbGlja2FibGVJZHMgfHwgcmlnaHRDbGlja2FibGVJZHMgfHwgcG9wb3ZlckluZm9zKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGVsYXllZENsaWNrQXJlYUNyZWF0aW9uKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zdmdJbmZvICYmIHN2Z0luZm8pIHtcclxuICAgICAgICAgICAgdGhpcy5sb2FkU3ZncygpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuY2xpY2thYmxlSWRzICYmIGNsaWNrYWJsZUlkcyAmJiB0aGlzLnN2Z0dlbGFkZW4pIHtcclxuICAgICAgICAgICAgdGhpcy5hZGRDbGlja0V2ZW50SGFuZGxlcnNUb0VsZW1lbnRzKHRoaXMuY2xpY2thYmxlSWRzLCAnY2xpY2snKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnJpZ2h0Q2xpY2thYmxlSWRzICYmIHJpZ2h0Q2xpY2thYmxlSWRzICYmIHRoaXMuc3ZnR2VsYWRlbikge1xyXG4gICAgICAgICAgICB0aGlzLmFkZENsaWNrRXZlbnRIYW5kbGVyc1RvRWxlbWVudHModGhpcy5yaWdodENsaWNrYWJsZUlkcywgJ2NvbnRleHRtZW51Jyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RpZUluZm9zICYmIHNlbGVjdGllSW5mb3MgJiYgdGhpcy5zdmdHZWxhZGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0RWxlbWVudHMoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXJJbmZvcyAmJiBwb3BvdmVySW5mb3MgJiYgdGhpcy5zdmdHZWxhZGVuKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWRkTW91c2VvdmVyRXZlbnRIYW5kbGVyVG9FbGVtZW50cygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9jdXNPbklkcyhmb2N1c0lkczogc3RyaW5nW10pIHtcclxuICAgICAgICBGb2N1c1V0aWwuZm9jdXNPbklkcyhmb2N1c0lkcywgdGhpcy5zdmdQYW5ab29tUmVmLCB0aGlzLnB1aWNIZWxwZXIpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRTdmdQYW5ab29tSW5zdGFuY2U6ICgpID0+IFN2Z1Bhblpvb20uSW5zdGFuY2UgPSAoKSA9PiB0aGlzLnN2Z1Bhblpvb21SZWY7XHJcblxyXG4gICAgLy8gSGVyZSBvbmx5IHVzZWQgaW4gdGVzdCwgYnV0IGFsc28gdXNlZCBieSBhcHBsaWNhdGlvbnMuIERvIG5vdCByZW1vdmUuXHJcbiAgICBwdWJsaWMgc3RhdGljIGdldFhDb29yZGluYXRlKGRlY29kZWRTdmdEYXRhVXJsOiBzdHJpbmcpIHtcclxuICAgICAgICBsZXQgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XHJcbiAgICAgICAgZGl2LmlubmVySFRNTCA9IGRlY29kZWRTdmdEYXRhVXJsO1xyXG4gICAgICAgIC8vIERlIFNWRy13aWR0aCB3b3JkdCBpbiBkZSBzdmcgdGFnIGdlc3BlY2lmaWNlZXJkLlxyXG4gICAgICAgIGNvbnN0IHggPSBkaXYuZmlyc3RFbGVtZW50Q2hpbGQuZ2V0QXR0cmlidXRlKCd3aWR0aCcpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlRmxvYXQoeCk7XHJcbiAgICAgICAgZGl2ID0gbnVsbDtcclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIGhpZGVQb3BPdmVyID0gKCkgPT4gdGhpcy5wb3BvdmVyU3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xyXG5cclxuICAgIHByaXZhdGUgY3JlYXRlU3ZnUGFuWm9vbVJlZklmTm90RXhpc3RzKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdmdQYW5ab29tUmVmKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3ZnUGFuWm9vbVJlZiA9IF9zdmdQYW5ab29tKHRoaXMuZ2V0U3ZnUGFyZW50KCksIHtcclxuICAgICAgICAgICAgICAgIGZpdDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjZW50ZXI6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBkYmxDbGlja1pvb21FbmFibGVkOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgIG9uWm9vbTogKCkgPT4gdGhpcy5oaWRlUG9wT3ZlcigpLFxyXG4gICAgICAgICAgICAgICAgb25QYW46ICgpID0+IHRoaXMuaGlkZVBvcE92ZXIoKVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuYWRkU3R5bGVUb1Jvb3RTdmcoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTdHlsZSB3b3JkdCB2YW51aXQgamF2YXNjcmlwdCB0b2VnZXZvZWdkIG5hIGRlIGNyZWF0ZSB2YW4gU3ZnWm9vbVBhblJlZiBkZXplIG1hYWt0IGVlbiB2aWV3cG9ydCBhYW4uXHJcbiAgICAgKiAtIENsaWNrYXJlYSBDU1Mgd29yZHQgZHluYW1pc2NoIGFhbiBkZSBTVkcgdG9lZ2V2b2VnZCwgZGl0IHZvb3Jrb210IGRhdCBkYXQgZXIgbmdjb250ZW50IHByb3BlcnR5IG9wIGdlcGxhYXRzdCB3b3JkdC5cclxuICAgICAqICAgRGUgU1ZHJ3Mgd29yZGVuIG5pZXQgdm9vcnppZW4gdmFuIG5nY29udGVudCBhdHRyaWJ1dXQuXHJcbiAgICAgKiAtIERHTi5jc3MgaW1wb3J0IHdvcmR0IChvcHRpb25lZWwpIGluIGRlIHJvb3QgU1ZHIG9wZ2Vub21lbiwgZGV6ZSBpcyBlZXJzdCB2ZXJ3aWpkZXJkIHVpdCBkZSBTVkcncy4gT20gbWVlcmRlcmUgaW1wb3J0cyB0ZSB2b29ya29tZW4uXHJcbiAgICAgKiAqL1xyXG4gICAgcHJpdmF0ZSBhZGRTdHlsZVRvUm9vdFN2ZygpIHtcclxuICAgICAgICBjb25zdCBkZWZzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsICdkZWZzJyk7XHJcblxyXG4gICAgICAgIGxldCBzdHlsZSA9IHRoaXMuaW5saW5lRGduQ3NzSW1wb3J0ID8gJ0BpbXBvcnQgdXJsKFwiZGduLmNzc1wiKTtcXG4nIDogJyc7XHJcbiAgICAgICAgc3R5bGUgKz1cclxuICAgICAgICAgICAgYC5pbXh2aWV3LXNlbGVjdGVkID4gcG9seWxpbmUuaW14dmlldy1jbGlja2FyZWEsIHBvbHlsaW5lLmlteHZpZXctY2xpY2thcmVhIHtcclxuICAgICAgICAgICAgICAgIHN0cm9rZTogdmFyKC0taW14dmlldy1jbGlja2FyZWEtc3Ryb2tlLCB0cmFuc3BhcmVudCk7XHJcbiAgICAgICAgICAgICAgICBzdHJva2Utd2lkdGg6IHZhcigtLWlteHZpZXctY2xpY2thcmVhLXN0cm9rZS13aWR0aCwgMTBweCk7XHJcbiAgICAgICAgICAgICAgICBzdHJva2UtZGFzaGFycmF5OiBub25lO1xyXG4gICAgICAgICAgICB9YDtcclxuICAgICAgICBkZWZzLmlubmVySFRNTCA9XHJcbiAgICAgICAgICAgIGA8c3R5bGUgdHlwZT1cInRleHQvY3NzXCI+XHJcbiAgICAgICAgICAgICAgICAkeyBzdHlsZSB9XHJcbiAgICAgICAgICAgIDwvc3R5bGU+YDtcclxuICAgICAgICBjb25zdCBmaXJzdEVsZW1lbnRDaGlsZCA9IHRoaXMuZ2V0U3ZnUGFyZW50KCkuZmlyc3RFbGVtZW50Q2hpbGQ7XHJcbiAgICAgICAgdGhpcy5nZXRTdmdQYXJlbnQoKS5pbnNlcnRCZWZvcmUoZGVmcywgZmlyc3RFbGVtZW50Q2hpbGQpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFN2Z3MoKTogdm9pZCB7XHJcbiAgICAgICAgY29tYmluZUxhdGVzdCh0aGlzLnN2Z0luZm8ubWFwKHN2Z0luZm8gPT4gdGhpcy5sb2FkU3ZnKHN2Z0luZm8uc3ZnKSkpXHJcbiAgICAgICAgLnBpcGUodGFrZSgxKSlcclxuICAgICAgICAuc3Vic2NyaWJlKHN2Z3MgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ZnID0gdGhpcy5jb25jYXRlbmF0ZVN2Z3Moc3Zncyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURvbShzdmcpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zdmdHZWxhZGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3ZnTG9hZGVkLmVtaXQoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGVsYXllZENsaWNrQXJlYUNyZWF0aW9uKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZENsaWNrRXZlbnRIYW5kbGVyc1RvRWxlbWVudHModGhpcy5jbGlja2FibGVJZHMsICdjbGljaycpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRDbGlja0V2ZW50SGFuZGxlcnNUb0VsZW1lbnRzKHRoaXMucmlnaHRDbGlja2FibGVJZHMsICdjb250ZXh0bWVudScpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RFbGVtZW50cygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRNb3VzZW92ZXJFdmVudEhhbmRsZXJUb0VsZW1lbnRzKCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGVycm9yID0+IHRoaXMuZmxhZ0Vycm9ycyhlcnJvcilcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgbG9hZFN2ZyhzdmdTcmM6IHN0cmluZyk6IE9ic2VydmFibGU8c3RyaW5nPiB7XHJcbiAgICAgICAgaWYgKHN2Z1NyYy5zdGFydHNXaXRoKCdkYXRhOicpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZCA9IGRhdGFVcmwucGFyc2Uoc3ZnU3JjKTtcclxuICAgICAgICAgICAgaWYgKHBhcnNlZCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG9ic2VydmFibGVPZihwYXJzZWQuZGF0YS50b1N0cmluZygpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gb2JzZXJ2YWJsZVRocm93RXJyb3IoJ0RhdGEtdXJsIHBhcnNlIGVycm9yJyk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5odHRwLmdldChzdmdTcmMsIHsgcmVzcG9uc2VUeXBlOiAndGV4dCcgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRDbGlja0V2ZW50SGFuZGxlcnNUb0VsZW1lbnQobGlzdGVuZXJzOiBNYXA8RWxlbWVudCwgYW55PiwgZWxlbSwgZXZlbnRUeXBlOiBzdHJpbmcsIHB1aWM6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IGVsZW1BbHJlYWR5SGFzTGlzdGVuZXIgPSBsaXN0ZW5lcnMuZ2V0KGVsZW0pO1xyXG4gICAgICAgIGlmICghZWxlbUFscmVhZHlIYXNMaXN0ZW5lcikge1xyXG4gICAgICAgICAgICBjb25zdCBmbiA9IGV2ZW50VHlwZSA9PT0gJ2NsaWNrJyA/XHJcbiAgICAgICAgICAgICAgICAoZSkgPT4gdGhpcy5jbGlja0hhbmRsZXIuZW1pdChuZXcgU2VsZWN0aWVFdmVudChwdWljLCBlKSkgOlxyXG4gICAgICAgICAgICAgICAgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodENsaWNrSGFuZGxlci5lbWl0KG5ldyBTZWxlY3RpZUV2ZW50KHB1aWMsIGUpKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBsaXN0ZW5lcnMuc2V0KGVsZW0sIGZuKTtcclxuICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKGV2ZW50VHlwZSwgZm4pO1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09PSAnY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFkZENsaWNrRXZlbnRIYW5kbGVyc1RvRWxlbWVudHMoY2xpY2thYmxlSWRzOiBzdHJpbmdbXSwgZXZlbnR0eXBlOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLnJlbW92ZU9sZFN0YXRlKGV2ZW50dHlwZSk7XHJcblxyXG4gICAgICAgIGlmIChjbGlja2FibGVJZHMpIHtcclxuICAgICAgICAgICAgY2xpY2thYmxlSWRzLmZvckVhY2gocHVpYyA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50cyA9IHRoaXMucHVpY0hlbHBlci5nZXRBbGxFbGVtZW50c0ZvclB1aWMocHVpYyk7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50cy5mb3JFYWNoKChlbGVtZW50KSA9PiB0aGlzLmFkZENsaWNrRXZlbnRIYW5kbGVyc1RvRWxlbWVudChsaXN0ZW5lcnMsIGVsZW1lbnQsIGV2ZW50dHlwZSwgcHVpYykpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhZGRNb3VzZW92ZXJFdmVudEhhbmRsZXJUb0VsZW1lbnRzKCkge1xyXG4gICAgICAgIGNvbnN0IGxpc3RlbmVycyA9IHRoaXMucmVtb3ZlT2xkU3RhdGUoJ21vdXNlb3ZlcicpO1xyXG4gICAgICAgIGlmICh0aGlzLnBvcG92ZXJJbmZvcykge1xyXG4gICAgICAgICAgICB0aGlzLnBvcG92ZXJJbmZvcy5mb3JFYWNoKHBvcG92ZXJJbmZvID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBwb3BvdmVySW5mby5wdWljQXJyYXkuZm9yRWFjaChwdWljID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1zID0gdGhpcy5wdWljSGVscGVyLmdldEFsbEVsZW1lbnRzRm9yUHVpYyhwdWljKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBmbiA9IChlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucG9wb3Zlckh0bWxDb250ZW50ID0gcG9wb3ZlckluZm8ucG9wb3Zlckh0bWxDb250ZW50O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXJUaXRsZUNvbnRlbnQgPSBwb3BvdmVySW5mby5wb3BvdmVyVGl0bGVDb250ZW50O1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdXNlIHRpbWVvdXQgdG8gaGF2ZSBjb250ZW50IHJlbmRlcmVkIGJlZm9yZSBnZXR0aW5nIHNpemVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnNob3dQb3B1cChlKSwgMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWxlbSA9IGVsZW1zLml0ZW0oaSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdGVuZXJzLnNldChlbGVtLCBmbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW92ZXInLCBmbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNvbmNhdGVuYXRlU3ZncyhzdmdzOiBzdHJpbmdbXSk6IHN0cmluZyB7XHJcbiAgICAgICAgbGV0IHN2Z0NvbnRlbnQgPSAnJztcclxuXHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuc3ZnSW5mby5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBzb3VyY2VDb29yZGluYXRlcyA9IHRoaXMuc3ZnSW5mb1tpXS5jb29yZGluYXRlcyB8fCBuZXcgUG9pbnQoMCwgMCk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcclxuXHJcbiAgICAgICAgICAgIC8qKiBWZXJ3aWpkZXIgZGduLmNzcyBpbXBvcnQgdWl0IGdlbGV2ZXJkZSBTVkcncy5cclxuICAgICAgICAgICAgICogIERlIGltcG9ydCB3b3JkdCBvcHRpb25lZWwgKHN0YW5kYWFyZCBhYW4pIGluIGRlIHJvb3QgU1ZHIGdlcGxhYXRzIG9tIHRlIHZvb3Jrb21lbiBkYXQgZGUgaW1wb3J0IG1lZXJtYWFscyBnZWJldXJkLlxyXG4gICAgICAgICAgICAgKiAgemllIGFkZFN0eWxlVG9Sb290U3ZnKClcclxuICAgICAgICAgICAgICovXHJcbiAgICAgICAgICAgIGRpdi5pbm5lckhUTUwgPSBzdmdzW2ldLnJlcGxhY2UoJ0BpbXBvcnQgdXJsKFwiZGduLmNzc1wiKTsnLCAnJyk7XHJcbiAgICAgICAgICAgIGRpdi5maXJzdEVsZW1lbnRDaGlsZC5zZXRBdHRyaWJ1dGUoJ3gnLCBzb3VyY2VDb29yZGluYXRlcy54LnRvU3RyaW5nKCkpO1xyXG4gICAgICAgICAgICBkaXYuZmlyc3RFbGVtZW50Q2hpbGQuc2V0QXR0cmlidXRlKCd5Jywgc291cmNlQ29vcmRpbmF0ZXMueS50b1N0cmluZygpKTtcclxuXHJcbiAgICAgICAgICAgIHN2Z0NvbnRlbnQgKz0gZGl2LmlubmVySFRNTDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdmdDb250ZW50O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZmxhZ0Vycm9ycyhlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB0aGlzLmVycm9ycyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSByZW1vdmVPbGRTdGF0ZShldmVudFR5cGU6IHN0cmluZyk6IE1hcDxFbGVtZW50LCBhbnk+IHtcclxuICAgICAgICBsZXQgbGlzdGVuZXJzID0gdGhpcy5ldmVudExpc3RlbmVycy5nZXQoZXZlbnRUeXBlKTtcclxuICAgICAgICBpZiAobGlzdGVuZXJzKSB7XHJcbiAgICAgICAgICAgIGxpc3RlbmVycy5mb3JFYWNoKChmbiwgZWwpID0+IHtcclxuICAgICAgICAgICAgICAgIGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnRUeXBlLCBmbik7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09PSAnY2xpY2snKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdzdHlsZScsIElteFZpZXdlckNvbXBvbmVudC5zZXREZWZhdWx0Q3Vyc29yKGVsKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBsaXN0ZW5lcnMgPSBuZXcgTWFwKCk7XHJcbiAgICAgICAgdGhpcy5ldmVudExpc3RlbmVycy5zZXQoZXZlbnRUeXBlLCBsaXN0ZW5lcnMpO1xyXG4gICAgICAgIHJldHVybiBsaXN0ZW5lcnM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZWxlY3RFbGVtZW50cygpIHtcclxuICAgICAgICBjb25zdCBhbGxFbGVtcyA9IHRoaXMuZ2V0U3ZnUGFyZW50KCkucXVlcnlTZWxlY3RvckFsbCgnW2NsYXNzKj1pbXh2aWV3LXNlbGVjdGVkXScpO1xyXG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYWxsRWxlbXMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgQ2xhc3Nlc1V0aWwucmVtb3ZlQ2xhc3Nlc1N0YXJ0aW5nV2l0aChhbGxFbGVtc1tqXSwgJ2lteHZpZXctc2VsZWN0ZWQnKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGllSW5mb3MpIHtcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RpZUluZm9zLmZvckVhY2goc2VsZWN0aWVJbmZvID0+IHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdGllSW5mby5pZHMuZm9yRWFjaChpZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wdWljSGVscGVyLmdldEFsbEVsZW1lbnRzRm9yUHVpYyhpZCkuZm9yRWFjaChlbGVtID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3Nlc1V0aWwuYWRkQ2xhc3MoZWxlbSwgJ2lteHZpZXctc2VsZWN0ZWQnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCcnICE9PSBzZWxlY3RpZUluZm8uY2xhenopIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzZXNVdGlsLmFkZENsYXNzKGVsZW0sICdpbXh2aWV3LXNlbGVjdGVkLScgKyBzZWxlY3RpZUluZm8uY2xhenopO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc3RhdGljIHNldERlZmF1bHRDdXJzb3IoZWwpOiBzdHJpbmcge1xyXG4gICAgICAgIGNvbnN0IG91ZGVTdHlsZSA9IGVsLmdldEF0dHJpYnV0ZSgnc3R5bGUnKTtcclxuICAgICAgICByZXR1cm4gb3VkZVN0eWxlID8gb3VkZVN0eWxlLnJlcGxhY2UoJ3BvaW50ZXInLCAnZGVmYXVsdCcpIDogJ2N1cnNvcjogZGVmYXVsdCc7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzaG93UG9wdXAoZSkge1xyXG4gICAgICAgIGNvbnN0IHBvcG92ZXJFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BvcG92ZXInKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcclxuICAgICAgICBjb25zdCBsZWZ0ID0gZS5sYXllclggLSAocG9wb3ZlckVsZW0ud2lkdGggLyAyKSArICdweCc7XHJcbiAgICAgICAgY29uc3QgdG9wID0gZS5sYXllclkgLSAocG9wb3ZlckVsZW0uaGVpZ2h0ICsgOCkgKyAncHgnO1xyXG4gICAgICAgIHRoaXMucG9wb3ZlclN0eWxlID0ge1xyXG4gICAgICAgICAgICBsZWZ0OiBsZWZ0LCB0b3A6IHRvcCwgcG9zaXRpb246ICdhYnNvbHV0ZScsXHJcbiAgICAgICAgICAgIGRpc3BsYXk6ICdpbmxpbmUnLCB2aXNpYmlsaXR5OiAndmlzaWJsZSdcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlRG9tKHN2ZzogU3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3Qgc3ZnR3JvdXAgPSB0aGlzLmdldFN2Z1BhcmVudCgpLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ3N2Zy1wYW4tem9vbV92aWV3cG9ydCcpWzBdO1xyXG4gICAgICAgIHN2Z0dyb3VwLmlubmVySFRNTCA9IHN2Zy5zdWJzdHJpbmcoc3ZnLmluZGV4T2YoJzxzdmcnKSk7XHJcbiAgICAgICAgdGhpcy5zdmdQYW5ab29tUmVmLnVwZGF0ZUJCb3goKTtcclxuICAgICAgICB0aGlzLnN2Z1Bhblpvb21SZWYuY2VudGVyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWxheWVkQ2xpY2tBcmVhQ3JlYXRpb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3ZnR2VsYWRlbiAmJiB0aGlzLnVzZUNsaWNrQXJlYSkge1xyXG4gICAgICAgICAgICBjb25zdCBjbGlja2FyZWFJZHMgPSBuZXcgU2V0KFsuLi50aGlzLmNsaWNrYWJsZUlkcywgLi4udGhpcy5yaWdodENsaWNrYWJsZUlkcyxcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucG9wb3ZlckluZm9zLmZsYXRNYXAocGkgPT4gcGkucHVpY0FycmF5KV0pO1xyXG4gICAgICAgICAgICB0aGlzLmNsaWNrQXJlYVNlcnZpY2UuZGVsYXllZENsaWNrQXJlYUNyZWF0aW9uKGNsaWNrYXJlYUlkcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0U3ZnUGFyZW50ID0gKCkgPT4gdGhpcy5zdmdQYXJlbnRSZWYubmF0aXZlRWxlbWVudDtcclxufVxyXG4iLCI8ZGl2IGlkPVwiaW14dmlld2VyXCI+XG4gICAgPGRpdiBpZD1cInN2Z0NvbnRhaW5lclwiIGNsYXNzPVwiY29sLW1kLTEyIHRvcDEwXCIgW2hpZGRlbl09XCJlcnJvcnNcIiAoY2xpY2spPVwiaGlkZVBvcE92ZXIoKVwiPlxuICAgICAgICA8c3ZnICNzdmdQYXJlbnQgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjwvc3ZnPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJwb3BvdmVyXCIgY2xhc3M9XCJwb3BvdmVyIHRvcCBicy1wb3BvdmVyLXRvcFwiIFtuZ1N0eWxlXT1cInBvcG92ZXJTdHlsZVwiIChtb3VzZWxlYXZlKT1cImhpZGVQb3BPdmVyKClcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+XG4gICAgICAgIDxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCIgKm5nSWY9XCJwb3BvdmVyVGl0bGVDb250ZW50ICE9PSB1bmRlZmluZWRcIj57e3BvcG92ZXJUaXRsZUNvbnRlbnR9fTwvaDM+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIiBbaW5uZXJIVE1MXT1cInBvcG92ZXJIdG1sQ29udGVudFwiPjwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
@@ -0,0 +1,36 @@
1
+ import { CommonModule } from '@angular/common';
2
+ import { NgModule } from '@angular/core';
3
+ import { ImxViewerComponent } from './components/imx-viewer.component';
4
+ import { HttpClientModule } from '@angular/common/http';
5
+ import { documentProvider, DocumentToken } from './utils/document-token';
6
+ import * as i0 from "@angular/core";
7
+ export class ImxViewerModule {
8
+ }
9
+ ImxViewerModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ImxViewerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
10
+ ImxViewerModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ImxViewerModule, declarations: [ImxViewerComponent], imports: [CommonModule,
11
+ HttpClientModule], exports: [ImxViewerComponent] });
12
+ ImxViewerModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ImxViewerModule, providers: [
13
+ { provide: DocumentToken, useFactory: documentProvider }
14
+ ], imports: [[
15
+ CommonModule,
16
+ HttpClientModule
17
+ ]] });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ImxViewerModule, decorators: [{
19
+ type: NgModule,
20
+ args: [{
21
+ imports: [
22
+ CommonModule,
23
+ HttpClientModule
24
+ ],
25
+ declarations: [
26
+ ImxViewerComponent
27
+ ],
28
+ exports: [
29
+ ImxViewerComponent
30
+ ],
31
+ providers: [
32
+ { provide: DocumentToken, useFactory: documentProvider }
33
+ ]
34
+ }]
35
+ }] });
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW14LXZpZXdlci5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW14LXZpZXdlci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDOztBQWlCekUsTUFBTSxPQUFPLGVBQWU7OzRHQUFmLGVBQWU7NkdBQWYsZUFBZSxpQkFUeEIsa0JBQWtCLGFBSmxCLFlBQVk7UUFDWixnQkFBZ0IsYUFNaEIsa0JBQWtCOzZHQU1ULGVBQWUsYUFKZjtRQUNQLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUU7S0FDM0QsWUFaUTtZQUNQLFlBQVk7WUFDWixnQkFBZ0I7U0FDakI7MkZBV1UsZUFBZTtrQkFmM0IsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUU7d0JBQ1AsWUFBWTt3QkFDWixnQkFBZ0I7cUJBQ2pCO29CQUNELFlBQVksRUFBRTt3QkFDWixrQkFBa0I7cUJBQ25CO29CQUNELE9BQU8sRUFBRTt3QkFDUCxrQkFBa0I7cUJBQ25CO29CQUNELFNBQVMsRUFBRTt3QkFDUCxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFO3FCQUMzRDtpQkFDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IElteFZpZXdlckNvbXBvbmVudCB9IGZyb20gJy4vY29tcG9uZW50cy9pbXgtdmlld2VyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnRNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IGRvY3VtZW50UHJvdmlkZXIsIERvY3VtZW50VG9rZW4gfSBmcm9tICcuL3V0aWxzL2RvY3VtZW50LXRva2VuJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgSHR0cENsaWVudE1vZHVsZVxyXG4gIF0sXHJcbiAgZGVjbGFyYXRpb25zOiBbXHJcbiAgICBJbXhWaWV3ZXJDb21wb25lbnRcclxuICBdLFxyXG4gIGV4cG9ydHM6IFtcclxuICAgIElteFZpZXdlckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgcHJvdmlkZXJzOiBbXHJcbiAgICAgIHsgcHJvdmlkZTogRG9jdW1lbnRUb2tlbiwgdXNlRmFjdG9yeTogZG9jdW1lbnRQcm92aWRlciB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgSW14Vmlld2VyTW9kdWxlIHtcclxufVxyXG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './public_api';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG94aWEtaW14LXZpZXdlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb3hpYS1pbXgtdmlld2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
@@ -0,0 +1,7 @@
1
+ export class Point {
2
+ constructor(x, y) {
3
+ this.x = x;
4
+ this.y = y;
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvcG9pbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLEtBQUs7SUFDaEIsWUFBbUIsQ0FBUyxFQUFTLENBQVM7UUFBM0IsTUFBQyxHQUFELENBQUMsQ0FBUTtRQUFTLE1BQUMsR0FBRCxDQUFDLENBQVE7SUFDOUMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFBvaW50IHtcclxuICBjb25zdHJ1Y3RvcihwdWJsaWMgeDogbnVtYmVyLCBwdWJsaWMgeTogbnVtYmVyKSB7XHJcbiAgfVxyXG59XHJcbiJdfQ==
@@ -0,0 +1,7 @@
1
+ export class PopoverInfo {
2
+ constructor(puicArray, popoverHtmlContent) {
3
+ this.puicArray = puicArray;
4
+ this.popoverHtmlContent = popoverHtmlContent;
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1pbmZvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21vZGVsL3BvcG92ZXItaW5mby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sV0FBVztJQUVwQixZQUFvQixTQUFtQixFQUFTLGtCQUEwQjtRQUF0RCxjQUFTLEdBQVQsU0FBUyxDQUFVO1FBQVMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFRO0lBQzFFLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBQb3BvdmVySW5mbyB7XHJcbiAgICBwdWJsaWMgcG9wb3ZlclRpdGxlQ29udGVudDogc3RyaW5nO1xyXG4gICAgY29uc3RydWN0b3IgKHB1YmxpYyBwdWljQXJyYXk6IHN0cmluZ1tdLCBwdWJsaWMgcG9wb3Zlckh0bWxDb250ZW50OiBzdHJpbmcpIHtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,7 @@
1
+ export class SelectieEvent {
2
+ constructor(id, event) {
3
+ this.id = id;
4
+ this.event = event;
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aWUtZXZlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvc2VsZWN0aWUtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLGFBQWE7SUFDdEIsWUFBbUIsRUFBVSxFQUFTLEtBQWlCO1FBQXBDLE9BQUUsR0FBRixFQUFFLENBQVE7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFZO0lBQ3ZELENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBTZWxlY3RpZUV2ZW50IHtcclxuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBpZDogc3RyaW5nLCBwdWJsaWMgZXZlbnQ6IE1vdXNlRXZlbnQpIHtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,7 @@
1
+ export class SelectieInfo {
2
+ constructor(ids, clazz) {
3
+ this.ids = ids;
4
+ this.clazz = clazz;
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aWUtaW5mby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbC9zZWxlY3RpZS1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxZQUFZO0lBQ3ZCLFlBQW1CLEdBQWEsRUFBUyxLQUFhO1FBQW5DLFFBQUcsR0FBSCxHQUFHLENBQVU7UUFBUyxVQUFLLEdBQUwsS0FBSyxDQUFRO0lBQ3RELENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBTZWxlY3RpZUluZm8ge1xuICBjb25zdHJ1Y3RvcihwdWJsaWMgaWRzOiBzdHJpbmdbXSwgcHVibGljIGNsYXp6OiBzdHJpbmcpIHtcbiAgfVxufVxuIl19
@@ -0,0 +1,7 @@
1
+ export class SvgInfo {
2
+ constructor(svg, coordinates) {
3
+ this.svg = svg;
4
+ this.coordinates = coordinates;
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ZnLWluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbW9kZWwvc3ZnLWluZm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxPQUFPLE9BQU87SUFDbEIsWUFBbUIsR0FBVyxFQUFTLFdBQW1CO1FBQXZDLFFBQUcsR0FBSCxHQUFHLENBQVE7UUFBUyxnQkFBVyxHQUFYLFdBQVcsQ0FBUTtJQUMxRCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQb2ludCB9IGZyb20gJy4vcG9pbnQnO1xyXG5cclxuZXhwb3J0IGNsYXNzIFN2Z0luZm8ge1xyXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBzdmc6IHN0cmluZywgcHVibGljIGNvb3JkaW5hdGVzPzogUG9pbnQpIHtcclxuICB9XHJcbn1cclxuIl19
@@ -0,0 +1,8 @@
1
+ export * from './imx-viewer.module';
2
+ export * from './components/imx-viewer.component';
3
+ export * from './model/point';
4
+ export * from './model/popover-info';
5
+ export * from './model/svg-info';
6
+ export * from './model/selectie-info';
7
+ export * from './model/selectie-event';
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyx1QkFBdUIsQ0FBQztBQUN0QyxjQUFjLHdCQUF3QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbXgtdmlld2VyLm1vZHVsZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vY29tcG9uZW50cy9pbXgtdmlld2VyLmNvbXBvbmVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvcG9pbnQnO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL3BvcG92ZXItaW5mbyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWwvc3ZnLWluZm8nO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL3NlbGVjdGllLWluZm8nO1xyXG5leHBvcnQgKiBmcm9tICcuL21vZGVsL3NlbGVjdGllLWV2ZW50JztcclxuIl19
@@ -0,0 +1,44 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "./puic-helper.service";
4
+ export class ClickareaService {
5
+ constructor(puicHelper) {
6
+ this.puicHelper = puicHelper;
7
+ this.timeout = 250;
8
+ }
9
+ delayedClickAreaCreation(ids) {
10
+ if (ids.size === 0) {
11
+ return;
12
+ }
13
+ window.clearTimeout(this.timer);
14
+ this.timer = window.setTimeout(() => this.createClickareas(ids), this.timeout);
15
+ }
16
+ /**
17
+ * Mogelijke optimalisatie is om de delta te bepalen van de te verwerken ids
18
+ */
19
+ createClickareas(ids) {
20
+ Array.from(document.getElementsByClassName('imxview-clickarea')).forEach(x => x.remove());
21
+ ids.forEach(id => {
22
+ this.puicHelper.getAllElementsForPuic(id).forEach(element => {
23
+ if (element) {
24
+ const polylines = Array.from(element.getElementsByTagName('polyline'));
25
+ polylines.forEach(p => {
26
+ const clone = p.cloneNode(true);
27
+ clone.setAttribute('class', 'imxview-clickarea');
28
+ clone.removeAttribute('id');
29
+ element.insertBefore(clone, p);
30
+ });
31
+ }
32
+ });
33
+ });
34
+ }
35
+ }
36
+ ClickareaService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ClickareaService, deps: [{ token: i1.PuicHelperService }], target: i0.ɵɵFactoryTarget.Injectable });
37
+ ClickareaService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ClickareaService, providedIn: 'root' });
38
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: ClickareaService, decorators: [{
39
+ type: Injectable,
40
+ args: [{
41
+ providedIn: 'root'
42
+ }]
43
+ }], ctorParameters: function () { return [{ type: i1.PuicHelperService }]; } });
44
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpY2thcmVhLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvY2xpY2thcmVhLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7O0FBTTNDLE1BQU0sT0FBTyxnQkFBZ0I7SUFJekIsWUFBb0IsVUFBNkI7UUFBN0IsZUFBVSxHQUFWLFVBQVUsQ0FBbUI7UUFGakQsWUFBTyxHQUFHLEdBQUcsQ0FBQztJQUdkLENBQUM7SUFFRCx3QkFBd0IsQ0FBQyxHQUFnQjtRQUNyQyxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFO1lBQ2hCLE9BQU87U0FDVjtRQUVELE1BQU0sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ25GLENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQixDQUFDLEdBQWdCO1FBQ3JDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUUxRixHQUFHLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQ2IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUU7Z0JBQ3hELElBQUksT0FBTyxFQUFFO29CQUNULE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7b0JBQ3ZFLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7d0JBQ2xCLE1BQU0sS0FBSyxHQUFHLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFZLENBQUM7d0JBQzNDLEtBQUssQ0FBQyxZQUFZLENBQUMsT0FBTyxFQUFFLG1CQUFtQixDQUFDLENBQUM7d0JBQ2pELEtBQUssQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7d0JBQzVCLE9BQU8sQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUNuQyxDQUFDLENBQUMsQ0FBQztpQkFDTjtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDOzs2R0FuQ1EsZ0JBQWdCO2lIQUFoQixnQkFBZ0IsY0FGYixNQUFNOzJGQUVULGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBQdWljSGVscGVyU2VydmljZSB9IGZyb20gJy4vcHVpYy1oZWxwZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgQ2xpY2thcmVhU2VydmljZSB7XG4gICAgcHJpdmF0ZSB0aW1lcjogbnVtYmVyO1xuICAgIHRpbWVvdXQgPSAyNTA7XG5cbiAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIHB1aWNIZWxwZXI6IFB1aWNIZWxwZXJTZXJ2aWNlKSB7XG4gICAgfVxuXG4gICAgZGVsYXllZENsaWNrQXJlYUNyZWF0aW9uKGlkczogU2V0PHN0cmluZz4pIHtcbiAgICAgICAgaWYgKGlkcy5zaXplID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHRoaXMudGltZXIpO1xuICAgICAgICB0aGlzLnRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gdGhpcy5jcmVhdGVDbGlja2FyZWFzKGlkcyksIHRoaXMudGltZW91dCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTW9nZWxpamtlIG9wdGltYWxpc2F0aWUgaXMgb20gZGUgZGVsdGEgdGUgYmVwYWxlbiB2YW4gZGUgdGUgdmVyd2Vya2VuIGlkc1xuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2xpY2thcmVhcyhpZHM6IFNldDxzdHJpbmc+KSB7XG4gICAgICAgIEFycmF5LmZyb20oZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaW14dmlldy1jbGlja2FyZWEnKSkuZm9yRWFjaCh4ID0+IHgucmVtb3ZlKCkpO1xuXG4gICAgICAgIGlkcy5mb3JFYWNoKGlkID0+IHtcbiAgICAgICAgICAgIHRoaXMucHVpY0hlbHBlci5nZXRBbGxFbGVtZW50c0ZvclB1aWMoaWQpLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9seWxpbmVzID0gQXJyYXkuZnJvbShlbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdwb2x5bGluZScpKTtcbiAgICAgICAgICAgICAgICAgICAgcG9seWxpbmVzLmZvckVhY2gocCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjbG9uZSA9IHAuY2xvbmVOb2RlKHRydWUpIGFzIEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZS5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgJ2lteHZpZXctY2xpY2thcmVhJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjbG9uZS5yZW1vdmVBdHRyaWJ1dGUoJ2lkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50Lmluc2VydEJlZm9yZShjbG9uZSwgcCk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class PuicHelperService {
4
+ constructor() {
5
+ this.setRootSvg = (svgParent) => this.rootSvg = svgParent;
6
+ this.getAllElementsForPuic = (puic) => this.rootSvg.querySelectorAll(`.p${puic}, #p${puic}`);
7
+ }
8
+ }
9
+ PuicHelperService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: PuicHelperService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
10
+ PuicHelperService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: PuicHelperService, providedIn: 'root' });
11
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.4", ngImport: i0, type: PuicHelperService, decorators: [{
12
+ type: Injectable,
13
+ args: [{
14
+ providedIn: 'root'
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVpYy1oZWxwZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9wdWljLWhlbHBlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxpQkFBaUI7SUFIOUI7UUFNVyxlQUFVLEdBQUcsQ0FBQyxTQUF3QixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztRQUNwRSwwQkFBcUIsR0FBRyxDQUFDLElBQVksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFNLElBQUssT0FBUSxJQUFLLEVBQUUsQ0FBNEIsQ0FBQztLQUN6STs7OEdBTFksaUJBQWlCO2tIQUFqQixpQkFBaUIsY0FGZCxNQUFNOzJGQUVULGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgUHVpY0hlbHBlclNlcnZpY2Uge1xuICAgIHByaXZhdGUgcm9vdFN2ZzogYW55O1xuXG4gICAgcHVibGljIHNldFJvb3RTdmcgPSAoc3ZnUGFyZW50OiBTVkdTVkdFbGVtZW50KSA9PiB0aGlzLnJvb3RTdmcgPSBzdmdQYXJlbnQ7XG4gICAgcHVibGljIGdldEFsbEVsZW1lbnRzRm9yUHVpYyA9IChwdWljOiBzdHJpbmcpID0+IHRoaXMucm9vdFN2Zy5xdWVyeVNlbGVjdG9yQWxsKGAucCR7IHB1aWMgfSwgI3AkeyBwdWljIH1gKSBhcyBOb2RlTGlzdE9mPEhUTUxFbGVtZW50Pjtcbn1cbiJdfQ==