@esfaenza/es-diagrams 11.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +1 -0
  2. package/bundles/esfaenza-es-diagrams.umd.js +1748 -0
  3. package/bundles/esfaenza-es-diagrams.umd.js.map +1 -0
  4. package/esfaenza-es-diagrams.d.ts +9 -0
  5. package/esfaenza-es-diagrams.metadata.json +1 -0
  6. package/esm2015/esfaenza-es-diagrams.js +10 -0
  7. package/esm2015/lib/components/es-diagram.component.js +396 -0
  8. package/esm2015/lib/esdiagram.module.js +28 -0
  9. package/esm2015/lib/extensions/ReactiveExtensions.js +34 -0
  10. package/esm2015/lib/extensions/ResizeSensor.js +71 -0
  11. package/esm2015/lib/models/EsDiagramModuleConfig.js +6 -0
  12. package/esm2015/lib/models/component/contextmenu/ContextMenuCommand.js +6 -0
  13. package/esm2015/lib/models/component/contextmenu/ContextMenuOptions.js +7 -0
  14. package/esm2015/lib/models/component/grouping/ExpandCollapseOptions.js +6 -0
  15. package/esm2015/lib/models/component/nodes/NodeHTMLTemplate.js +6 -0
  16. package/esm2015/lib/models/component/nodes/NodeTemplate.js +6 -0
  17. package/esm2015/lib/models/component/nodes/ZoomLevelBasedTemplate.js +6 -0
  18. package/esm2015/lib/models/layouts/BreadthFirstLayoutOptionsImpl.js +35 -0
  19. package/esm2015/lib/models/layouts/CircleLayoutOptionsImpl.js +27 -0
  20. package/esm2015/lib/models/layouts/ConcentricLayoutOptionsImpl.js +64 -0
  21. package/esm2015/lib/models/layouts/CoseLayoutOptionsImpl.js +83 -0
  22. package/esm2015/lib/models/layouts/DagreLayoutOptionsImpl.js +52 -0
  23. package/esm2015/lib/models/layouts/GridLayoutOptionsImpl.js +38 -0
  24. package/esm2015/lib/models/layouts/NullLayoutOptionsImpl.js +15 -0
  25. package/esm2015/lib/models/layouts/PresetLayoutOptionsImpl.js +24 -0
  26. package/esm2015/lib/models/layouts/RandomLayoutOptionsImpl.js +36 -0
  27. package/esm2015/lib/models/layouts/base/AnimateLayoutOptionsImpl.js +42 -0
  28. package/esm2015/lib/models/layouts/base/BaseLayoutOptionsImpl.js +18 -0
  29. package/esm2015/lib/models/layouts/base/ShapedLayoutOptionsImpl.js +48 -0
  30. package/esm2015/lib/services/es-diagram.dispatcher.js +86 -0
  31. package/esm2015/lib/services/es-diagram.loc.js +17 -0
  32. package/esm2015/lib/services/es-diagram.service.js +106 -0
  33. package/esm2015/lib/tokens.js +10 -0
  34. package/esm2015/public-api.js +24 -0
  35. package/fesm2015/esfaenza-es-diagrams.js +1254 -0
  36. package/fesm2015/esfaenza-es-diagrams.js.map +1 -0
  37. package/lib/components/es-diagram.component.d.ts +243 -0
  38. package/lib/esdiagram.module.d.ts +5 -0
  39. package/lib/extensions/ReactiveExtensions.d.ts +17 -0
  40. package/lib/extensions/ResizeSensor.d.ts +43 -0
  41. package/lib/models/EsDiagramModuleConfig.d.ts +13 -0
  42. package/lib/models/component/contextmenu/ContextMenuCommand.d.ts +27 -0
  43. package/lib/models/component/contextmenu/ContextMenuOptions.d.ts +71 -0
  44. package/lib/models/component/grouping/ExpandCollapseOptions.d.ts +22 -0
  45. package/lib/models/component/nodes/NodeHTMLTemplate.d.ts +14 -0
  46. package/lib/models/component/nodes/NodeTemplate.d.ts +13 -0
  47. package/lib/models/component/nodes/ZoomLevelBasedTemplate.d.ts +14 -0
  48. package/lib/models/layouts/BreadthFirstLayoutOptionsImpl.d.ts +40 -0
  49. package/lib/models/layouts/CircleLayoutOptionsImpl.d.ts +28 -0
  50. package/lib/models/layouts/ConcentricLayoutOptionsImpl.d.ts +74 -0
  51. package/lib/models/layouts/CoseLayoutOptionsImpl.d.ts +80 -0
  52. package/lib/models/layouts/DagreLayoutOptionsImpl.d.ts +48 -0
  53. package/lib/models/layouts/GridLayoutOptionsImpl.d.ts +39 -0
  54. package/lib/models/layouts/NullLayoutOptionsImpl.d.ts +12 -0
  55. package/lib/models/layouts/PresetLayoutOptionsImpl.d.ts +37 -0
  56. package/lib/models/layouts/RandomLayoutOptionsImpl.d.ts +33 -0
  57. package/lib/models/layouts/base/AnimateLayoutOptionsImpl.d.ts +40 -0
  58. package/lib/models/layouts/base/BaseLayoutOptionsImpl.d.ts +15 -0
  59. package/lib/models/layouts/base/ShapedLayoutOptionsImpl.d.ts +46 -0
  60. package/lib/services/es-diagram.dispatcher.d.ts +41 -0
  61. package/lib/services/es-diagram.loc.d.ts +49 -0
  62. package/lib/services/es-diagram.service.d.ts +49 -0
  63. package/lib/tokens.d.ts +9 -0
  64. package/package.json +25 -0
  65. package/public-api.d.ts +20 -0
@@ -0,0 +1,396 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, EventEmitter, Input, Optional, Output, ViewChild } from '@angular/core';
3
+ import { EsDiagramService } from '../services/es-diagram.service';
4
+ import { EsDiagramDispatcher } from '../services/es-diagram.dispatcher';
5
+ import { ResizeSensor } from "../extensions/ResizeSensor";
6
+ import { ReactiveExtensions } from '../extensions/ReactiveExtensions';
7
+ import * as cy_ from 'cytoscape';
8
+ /** @ignore */ const cytoscape = cy_;
9
+ /**
10
+ * Componente che si occupa di graficare un diagramma e di gestirne il ciclo di vita
11
+ */
12
+ export class EsDiagramComponent {
13
+ /**
14
+ * Costruttore
15
+ *
16
+ * @ignore
17
+ */
18
+ constructor(service, dispatcher, exts) {
19
+ this.service = service;
20
+ this.dispatcher = dispatcher;
21
+ this.exts = exts;
22
+ /**
23
+ * Nome del diagramma, fondamentale assegnarlo per permettere alla libreria di schedularne la creazione
24
+ */
25
+ this.name = "";
26
+ /**
27
+ * Indica se utilizzare il menù contestuale a ruota attorno ad ogni nodo
28
+ */
29
+ this.UseContextMenu = false;
30
+ /**
31
+ * Dice al componente se il diagramma deve utilizzare il sistema di estensione per l'expand e collapse dei gruppi
32
+ */
33
+ this.UseExpandCollapse = false;
34
+ /**
35
+ * Blocco completo delle opzioni, alternativo all'assegnazione di **Elements**, **NodeStyles**, **EdgeStyles**, e **Layout**.
36
+ *
37
+ * Qualora entrambe venissero specificate verrà effettuata un'unione fra queste opzioni e quelle specificate, dando priorità alle specificate
38
+ */
39
+ this.NativeOptions = {};
40
+ /**
41
+ * Aggiorna automaticamente le dimensioni del diagramma quando cambiano le dimensioni della finestra
42
+ */
43
+ this.AutoupdateSize = true;
44
+ /**
45
+ * Indica di mantenere la posizione dei nodi qualora venissero cambiati dall'Input **Elements**.
46
+ *
47
+ * Se l'ID di un nodo è uguale all'ID di un nodo presente in precedenza, il nuovo nodo ne erediterà la posizione
48
+ */
49
+ this.PreserveElementsPosition = true;
50
+ /**
51
+ * Qualora venisse modificato l'Input **Elements**, piuttosto che mettere semplicemente il nuovo Elemento in base al Layout precedente, applica anche un'animazione
52
+ *
53
+ * Funziona solamente se il **Layout** corrente del diagramma supporta le animazioni
54
+ */
55
+ this.AnimateLayoutChanges = true;
56
+ /**
57
+ * Periodo di throttle da quando viene effettuato un resize a quando ricalcolare le dimensioni del diagramma.
58
+ *
59
+ * Può essere tenuto a 0 (redraw istantaneo) finché non ci sono problemi di prestazioni con eventualmente tanti resize a poca distanza l'uno dall'altro.
60
+ */
61
+ this.ResizeThrottleTime = 0;
62
+ /**
63
+ * Fornisce il global della libreria (namespace **cytoscape**) e si aspetta che dopo operazioni di importazione
64
+ * lasciate all'utente vengano aggiunti tutti i moduli desiderati.
65
+ *
66
+ * È **fondamentale** che il primo parametro (il nome del modulo) sia uguale a ciò di cui viene fatto il require in modo che la libreria
67
+ * possa controllare che il modulo importato non sia già stato importato in precedenza
68
+ *
69
+ * ## Esempio:
70
+ *
71
+ * ```typescript
72
+ * (global) => {
73
+ * return import("cytoscape-extension-library").then(module => global.use("cytoscape-extension-library", module.default));
74
+ *
75
+ * ...
76
+ * }
77
+ * ```
78
+ */
79
+ this.ExtensionModulesImporter = null;
80
+ /**
81
+ * Fornisce l'istanza attuale di Cytoscape da cui è possibile prendere le librerie di estensione caricate in **ExtensionModulesImporter**
82
+ * e configurarle in base ai comportamenti specifici
83
+ *
84
+ * ## Esempio:
85
+ *
86
+ * ```typescript
87
+ * (cytoscapeCore) => {
88
+ * // Fare questo lavoro per ogni estensione caricata
89
+ * let extensionConfiguration = { ... };
90
+ * let extensionInstance = cytoscapeCore.extensionLibrary(extensionConfiguration);
91
+ * extensionInstance.doSomethingSpecificToThisExtension();
92
+ *
93
+ * ...
94
+ * }
95
+ * ```
96
+ */
97
+ this.ExtensionModulesApplyer = null;
98
+ /**
99
+ * Evento lanciato al click di un nodo, contiene l'oggetto **data** del nodo in questione
100
+ */
101
+ this.onNodeClick = new EventEmitter();
102
+ /**
103
+ * Indica se il rendering del diagramma è terminato
104
+ */
105
+ this.Rendered = false;
106
+ /**
107
+ * Api dell'estensione expand-collapse per permettere di effettuare operazioni dall'esterno del diagramma. Vengono valorizzate se **UseExpandCollapse** è **true**
108
+ */
109
+ this.ExpandCollapseApi = null;
110
+ }
111
+ /**
112
+ * @ignore
113
+ *
114
+ * Angular Pipeline
115
+ */
116
+ ngAfterViewInit() {
117
+ if (!this.service || !this.dispatcher)
118
+ throw "Il modulo @esfaenza/diagrams non è stato importato con il forRoot();";
119
+ this.dispatchLoadChart();
120
+ }
121
+ /**
122
+ * All'onDestroy ripulisco la memoria dal diagramma
123
+ */
124
+ ngOnDestroy() {
125
+ this.resizeObserver.dispose();
126
+ this.resizeObserver = null;
127
+ if (this.cy) {
128
+ this.service.log("I", "Diagram" + " " + this.name + ": Unloading destroyed diagram", false);
129
+ this.cy.destroy();
130
+ this.dispatcher.deregister(this.name);
131
+ }
132
+ else
133
+ this.service.log("I", "Chart " + this.name + ": Unloading uncreated chart component. It probably was a duplicated", false);
134
+ }
135
+ /**
136
+ * Registra il diagramma attuale nel Dispatcher in modo che venga caricato appena possibile
137
+ */
138
+ dispatchLoadChart() {
139
+ this.dispatcher.register(this.name, () => { return this.render(); });
140
+ }
141
+ /**
142
+ * @ignore
143
+ *
144
+ * Angular Pipeline: Gestione ri-graficazione del diagramma, se possibile
145
+ */
146
+ ngOnChanges(changes) {
147
+ let toCheck = ["Templates", "UseContextMenu", "ContextMenuOptions", "UseExpandCollapse", "ExpandCollapseOptions", "NodeStyles", "EdgeStyles", "NativeOptions"];
148
+ if (this.Rendered && toCheck.some(t => changes[t]))
149
+ this.service.log("W", "Redraw based on dynamic Input change is supported only for 'Elements' and 'Layout' inputs, please destroy the component and recreate it with the new settings");
150
+ let elementChanges = changes["Elements"];
151
+ let layoutChanges = changes["Layout"];
152
+ if (elementChanges && !elementChanges.firstChange) {
153
+ this.service.log("I", "Elements have been changed after diagram initialization");
154
+ // Cambiamento agli Elementi: ripulisco gli elementi vecchi, prendo i nuovi, li sistemo e li riassegno.
155
+ // Se il nuovo Input Elements è roba strana mi limito a ripulire il diagramma
156
+ // Se cytoscape aveva già degli elementi precedentemente ne prendo le posizioni in modo da ridisegnarli partendo dallo stesso punto (carino per le animazioni)
157
+ let elements = elementChanges === null || elementChanges === void 0 ? void 0 : elementChanges.currentValue;
158
+ let previous_elements = this.PreserveElementsPosition ? this.cy.nodes() : null;
159
+ this.cy.elements().remove();
160
+ if (elements && elements.length && elements.length > 0) {
161
+ this.reviewCytoscapeElements(elements, previous_elements);
162
+ this.cy.add(elements);
163
+ // Se solo gli elementi cambiano, riapplico il Layout precedente
164
+ if (!layoutChanges && this.LastLayout) {
165
+ // Se devo animare le modifche al layout forzo il parametro relativo
166
+ if (this.AnimateLayoutChanges)
167
+ this.LastLayout.animate = true;
168
+ this.cy.layout(this.LastLayout).run();
169
+ }
170
+ }
171
+ }
172
+ // Se il layout cambia lo applico e me lo salvo come layout precedente per il futuro
173
+ if (layoutChanges && !layoutChanges.firstChange) {
174
+ this.service.log("I", "Layout have been changed after diagram initialization");
175
+ this.LastLayout = JSON.parse(JSON.stringify(layoutChanges.currentValue));
176
+ this.cy.layout(this.LastLayout).run();
177
+ }
178
+ }
179
+ /**
180
+ * Effettua il rendering del diagramma
181
+ */
182
+ render() {
183
+ return __awaiter(this, void 0, void 0, function* () {
184
+ // Tiro fuori le opzioni con cui generare il diagramma
185
+ let cyOptions = this.getCompletedOptions();
186
+ this.NodesHierarchy = cyOptions.elements && cyOptions.elements.some(t => t.data.parent);
187
+ // Carico eventuali classi di estensione che servono
188
+ yield this.performModulesLoading();
189
+ // Genero il diagramma
190
+ this.cy = cytoscape(cyOptions);
191
+ // Collego gli eventi al componente
192
+ this.bindCytoscapeEvents();
193
+ // Utilizzo le classi di estensione caricate precedentemente per fare il resto delle mie operazioni
194
+ this.performOperationsWithLoadedModules();
195
+ // Imposto la variabile Rendered a true in modo che se da adesso vengono fatte modifiche che dovrebbero causare un redraw posso accorgermene
196
+ // e mandare a cagare lo stronzo di turno
197
+ this.Rendered = true;
198
+ // Se devo aggiornare in automatico in base alla dimensione del contenitore collego il ResizeObserver
199
+ if (this.AutoupdateSize)
200
+ this.listenOnChanges();
201
+ });
202
+ }
203
+ /**
204
+ * Registra l'ascolto al contenitore del grafico e in caso di modifiche alla dimensione, al massimo una volta ogni 500 millisecondi, lo ridisegna
205
+ */
206
+ listenOnChanges() {
207
+ this.resizeObserver = new ResizeSensor(this.cyGraph.nativeElement, () => {
208
+ this.exts.throttle(this.name, this.onContainerSizeChanged.bind(this), this.ResizeThrottleTime);
209
+ });
210
+ }
211
+ /**
212
+ * Funzione che si occupa di gestire il repaint del diagramma
213
+ */
214
+ onContainerSizeChanged() {
215
+ this.service.log("I", "Diagram container size has changed, redrawing");
216
+ this.cy.resize();
217
+ this.cy.fit();
218
+ }
219
+ /**
220
+ * Collega tutti gli eventi che mi possono servire e li espone in output
221
+ */
222
+ bindCytoscapeEvents() {
223
+ this.cy.bind('click', 'node', (event) => {
224
+ this.onNodeClick.emit({ data: event.target.data() });
225
+ });
226
+ // Altri eventi...
227
+ }
228
+ /**
229
+ * Metodo che serve per caricare tutte le estensioni della libreria in base a ciò che viene utilizzato
230
+ */
231
+ performModulesLoading() {
232
+ return __awaiter(this, void 0, void 0, function* () {
233
+ if (this.Layout.name == 'dagre')
234
+ yield this.loadInternal("cytoscape-dagre");
235
+ if (this.NodeHTMLTemplates && this.NodeHTMLTemplates.length > 0)
236
+ yield this.loadInternal("cytoscape-html-node");
237
+ if (this.UseContextMenu)
238
+ yield this.loadInternal("cytoscape-cxtmenu");
239
+ if (this.NodesHierarchy && this.UseExpandCollapse)
240
+ yield this.loadInternal("cytoscape-expand-collapse");
241
+ if (this.ExtensionModulesImporter) {
242
+ // Wrappo il namespace in modo che possa dire la mia sul fatto che l'utente aggiunga un modulo o meno :D
243
+ var wrappedCytoscape = {
244
+ use: (moduleName, module) => {
245
+ if (!module)
246
+ this.service.log("E", this.service.loc("Received an undefined module. Make sure you are correctly loading it") + ": " + moduleName, false);
247
+ if (["cytoscape-dagre", "cytoscape-html-node", "cytoscape-cxtmenu", "cytoscape-expand-collapse"].includes(moduleName))
248
+ this.service.log("W", this.service.loc("Module") + " " + moduleName + " " + this.service.loc("is loaded and managed directly by this library. You don't need to import it or use it directly, just be sure to set the relative options"), false);
249
+ else
250
+ cytoscape.use(module);
251
+ }
252
+ };
253
+ yield this.ExtensionModulesImporter(wrappedCytoscape);
254
+ }
255
+ });
256
+ }
257
+ /**
258
+ * Metodo che serve per caricare tutte le estensioni della libreria in base a ciò che viene utilizzato con le opzioni definite dagli Input
259
+ */
260
+ performOperationsWithLoadedModules() {
261
+ let anyCy = this.cy;
262
+ // Utilizzo del layout, lo salvo per poterlo riutilizzare in futuro
263
+ if (this.Layout) {
264
+ this.LastLayout = JSON.parse(JSON.stringify(this.Layout));
265
+ this.cy.layout(this.LastLayout).run();
266
+ }
267
+ // Utilizzo dell'HTML node
268
+ if (this.NodeHTMLTemplates && this.NodeHTMLTemplates.length > 0) {
269
+ let htmlnode = anyCy.htmlnode();
270
+ htmlnode.createHtmlNode(cytoscape, this.cy, this.NodeHTMLTemplates);
271
+ }
272
+ // Utilizzo del Context Menu
273
+ if (this.UseContextMenu)
274
+ anyCy.cxtmenu(this.ContextMenuOptions);
275
+ // Utilizzo dell'expand collapse solo quando c'è una gerarchia di nodi
276
+ if (this.NodesHierarchy && this.UseExpandCollapse)
277
+ this.ExpandCollapseApi = anyCy.expandCollapse(this.ExpandCollapseOptions);
278
+ // Utilizzo di estensioni extra, implementazione affidata al programmatore
279
+ if (this.ExtensionModulesApplyer)
280
+ this.ExtensionModulesApplyer(this.cy);
281
+ }
282
+ /**
283
+ * Metodo interno per il caricamento dei moduli di estensione
284
+ *
285
+ * @param {'cytoscape-expand-collapse' | 'cytoscape-cxtmenu' | 'cytoscape-html-node' | 'cytoscape-dagre'} moduleId Modulo da caricare
286
+ */
287
+ loadInternal(moduleId) {
288
+ return __awaiter(this, void 0, void 0, function* () {
289
+ let toLoad = yield this.service.importIfNeeded(moduleId);
290
+ if (toLoad)
291
+ cytoscape.use(toLoad);
292
+ });
293
+ }
294
+ /**
295
+ * Metodo che basandosi sulle opzioni native eventualmente assegnate le completa con gli Input addizionali
296
+ *
297
+ * @returns {cy_.CytoscapeOptions} Opzioni finali unite da Input ed opzioni native
298
+ */
299
+ getCompletedOptions() {
300
+ var opts = this.NativeOptions || {};
301
+ opts.container = this.cyGraph.nativeElement;
302
+ opts.style = opts.style || [];
303
+ // Per tutte le cose per cui gli Input hanno priorità sovrascrivo gli originali delle opzioni
304
+ if (this.NodeStyles || this.EdgeStyles) {
305
+ opts.style = [];
306
+ if (this.NodeStyles)
307
+ opts.style.push({ selector: 'node', css: this.NodeStyles });
308
+ if (this.EdgeStyles)
309
+ opts.style.push({ selector: 'edge', css: this.EdgeStyles });
310
+ }
311
+ if (this.Elements)
312
+ opts.elements = this.Elements;
313
+ this.reviewCytoscapeElements(opts.elements);
314
+ if (this.Layout)
315
+ opts.layout = this.Layout;
316
+ if (this.Readonly) {
317
+ // Questo coso fa effetti strani....
318
+ //opts.autolock = true;
319
+ opts.autoungrabify = true;
320
+ opts.autounselectify = true;
321
+ opts.boxSelectionEnabled = false;
322
+ opts.userZoomingEnabled = false;
323
+ opts.userPanningEnabled = false;
324
+ }
325
+ return opts;
326
+ }
327
+ /**
328
+ * Aggiustamenti degli elementi di Cytoscape.
329
+ *
330
+ * I nodi non vengono toccati.
331
+ *
332
+ * Per ogni edge viene controllato se è specificata una sorgente ed una destinazione, in caso contrario si cerca di dedurli dall'ID
333
+ *
334
+ * @param {cytoscape.ElementDefinition[]} elements Elementi da sistemare
335
+ */
336
+ reviewCytoscapeElements(elements, prevPositions) {
337
+ let hasPreviousPositions = prevPositions && prevPositions.length > 0;
338
+ let positionCache = {};
339
+ if (hasPreviousPositions) {
340
+ for (let i = 0; i < prevPositions.length; i++) {
341
+ let item = prevPositions[i];
342
+ if (!positionCache[item.data().id])
343
+ positionCache[item.data().id] = item.position();
344
+ }
345
+ }
346
+ for (let i = 0; i < elements.length; i++) {
347
+ let el = elements[i];
348
+ if (el.group == "edges" && (!el.data.source && !el.data.target)) {
349
+ if (!el.data.id.includes("-"))
350
+ this.service.log("E", "If you don't specify a source and a target for an edge you have to write its id in the format {source}-{target}");
351
+ else {
352
+ var sourceTarget = el.data.id.split('-');
353
+ el.data.source = sourceTarget[0].trim();
354
+ el.data.target = sourceTarget[1].trim();
355
+ }
356
+ }
357
+ if (hasPreviousPositions && el.group == "nodes")
358
+ el.position = positionCache[el.data.id];
359
+ }
360
+ }
361
+ }
362
+ EsDiagramComponent.decorators = [
363
+ { type: Component, args: [{
364
+ selector: 'es-diagram',
365
+ template: "<div #graph class=\"graph-wrapper {{name}}\"></div>",
366
+ styles: [".graph-wrapper{height:100%;width:100%}.html-node-notransition{transition:none!important;transform:none!important}\n"]
367
+ },] }
368
+ ];
369
+ EsDiagramComponent.ctorParameters = () => [
370
+ { type: EsDiagramService, decorators: [{ type: Optional }] },
371
+ { type: EsDiagramDispatcher, decorators: [{ type: Optional }] },
372
+ { type: ReactiveExtensions }
373
+ ];
374
+ EsDiagramComponent.propDecorators = {
375
+ cyGraph: [{ type: ViewChild, args: ['graph',] }],
376
+ name: [{ type: Input }],
377
+ UseContextMenu: [{ type: Input }],
378
+ ContextMenuOptions: [{ type: Input }],
379
+ UseExpandCollapse: [{ type: Input }],
380
+ ExpandCollapseOptions: [{ type: Input }],
381
+ NativeOptions: [{ type: Input }],
382
+ Elements: [{ type: Input }],
383
+ NodeStyles: [{ type: Input }],
384
+ EdgeStyles: [{ type: Input }],
385
+ Readonly: [{ type: Input }],
386
+ AutoupdateSize: [{ type: Input }],
387
+ PreserveElementsPosition: [{ type: Input }],
388
+ AnimateLayoutChanges: [{ type: Input }],
389
+ ResizeThrottleTime: [{ type: Input }],
390
+ Layout: [{ type: Input }],
391
+ NodeHTMLTemplates: [{ type: Input }],
392
+ ExtensionModulesImporter: [{ type: Input }],
393
+ ExtensionModulesApplyer: [{ type: Input }],
394
+ onNodeClick: [{ type: Output }]
395
+ };
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXMtZGlhZ3JhbS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9lcy1kaWFncmFtcy9zcmMvbGliL2NvbXBvbmVudHMvZXMtZGlhZ3JhbS5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLEtBQUssRUFBYSxRQUFRLEVBQUUsTUFBTSxFQUFpQixTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFnQmpJLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ3hFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUV0RSxPQUFPLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQztBQUNqQyxjQUFjLENBQUEsTUFBTSxTQUFTLEdBQUcsR0FBRyxDQUFDO0FBRXBDOztHQUVHO0FBTUgsTUFBTSxPQUFPLGtCQUFrQjtJQTZLN0I7Ozs7T0FJRztJQUNILFlBQWdDLE9BQXlCLEVBQXNCLFVBQStCLEVBQVUsSUFBd0I7UUFBaEgsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFBc0IsZUFBVSxHQUFWLFVBQVUsQ0FBcUI7UUFBVSxTQUFJLEdBQUosSUFBSSxDQUFvQjtRQTNLaEo7O1dBRUc7UUFDTSxTQUFJLEdBQVcsRUFBRSxDQUFDO1FBRTNCOztXQUVHO1FBQ00sbUJBQWMsR0FBWSxLQUFLLENBQUM7UUFPekM7O1dBRUc7UUFDTSxzQkFBaUIsR0FBWSxLQUFLLENBQUM7UUFPNUM7Ozs7V0FJRztRQUNNLGtCQUFhLEdBQStCLEVBQUUsQ0FBQztRQXNCeEQ7O1dBRUc7UUFDTSxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUV4Qzs7OztX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RjtZQUVELElBQUksb0JBQW9CLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxPQUFPO2dCQUM3QyxFQUFFLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO1NBQzFDO0lBQ0gsQ0FBQzs7O1lBOWRGLFNBQVMsU0FBQztnQkFDVCxRQUFRLEVBQUUsWUFBWTtnQkFDdEIsK0RBQTBDOzthQUUzQzs7O1lBaEJRLGdCQUFnQix1QkFtTVYsUUFBUTtZQWxNZCxtQkFBbUIsdUJBa01rQyxRQUFRO1lBL0w3RCxrQkFBa0I7OztzQkFrQnhCLFNBQVMsU0FBQyxPQUFPO21CQUtqQixLQUFLOzZCQUtMLEtBQUs7aUNBS0wsS0FBSztnQ0FLTCxLQUFLO29DQUtMLEtBQUs7NEJBT0wsS0FBSzt1QkFLTCxLQUFLO3lCQUtMLEtBQUs7eUJBS0wsS0FBSzt1QkFLTCxLQUFLOzZCQUtMLEtBQUs7dUNBT0wsS0FBSzttQ0FPTCxLQUFLO2lDQU9MLEtBQUs7cUJBS0wsS0FBSztnQ0FPTCxLQUFLO3VDQW1CTCxLQUFLO3NDQW1CTCxLQUFLOzBCQUtMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uQ2hhbmdlcywgT3B0aW9uYWwsIE91dHB1dCwgU2ltcGxlQ2hhbmdlcywgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuaW1wb3J0IHsgQ29udGV4dE1lbnVPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBvbmVudC9jb250ZXh0bWVudS9Db250ZXh0TWVudU9wdGlvbnMnO1xuaW1wb3J0IHsgRXhwYW5kQ29sbGFwc2VPcHRpb25zIH0gZnJvbSAnLi4vbW9kZWxzL2NvbXBvbmVudC9ncm91cGluZy9FeHBhbmRDb2xsYXBzZU9wdGlvbnMnO1xuaW1wb3J0IHsgTm9kZUhUTUxUZW1wbGF0ZSB9IGZyb20gJy4uL21vZGVscy9jb21wb25lbnQvbm9kZXMvTm9kZUhUTUxUZW1wbGF0ZSc7XG5cbmltcG9ydCB7IEJyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvQnJlYWR0aEZpcnN0TGF5b3V0T3B0aW9uc0ltcGwnO1xuaW1wb3J0IHsgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9DaXJjbGVMYXlvdXRPcHRpb25zSW1wbCc7XG5pbXBvcnQgeyBDb25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9Db25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwnO1xuaW1wb3J0IHsgQ29zZUxheW91dE9wdGlvbnNJbXBsIH0gZnJvbSAnLi4vbW9kZWxzL2xheW91dHMvQ29zZUxheW91dE9wdGlvbnNJbXBsJztcbmltcG9ydCB7IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9EYWdyZUxheW91dE9wdGlvbnNJbXBsJztcbmltcG9ydCB7IEdyaWRMYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL0dyaWRMYXlvdXRPcHRpb25zSW1wbCc7XG5pbXBvcnQgeyBOdWxsTGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9OdWxsTGF5b3V0T3B0aW9uc0ltcGwnO1xuaW1wb3J0IHsgUHJlc2V0TGF5b3V0T3B0aW9uc0ltcGwgfSBmcm9tICcuLi9tb2RlbHMvbGF5b3V0cy9QcmVzZXRMYXlvdXRPcHRpb25zSW1wbCc7XG5pbXBvcnQgeyBSYW5kb21MYXlvdXRPcHRpb25zSW1wbCB9IGZyb20gJy4uL21vZGVscy9sYXlvdXRzL1JhbmRvbUxheW91dE9wdGlvbnNJbXBsJztcblxuaW1wb3J0IHsgRXNEaWFncmFtU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2VzLWRpYWdyYW0uc2VydmljZSc7XG5pbXBvcnQgeyBFc0RpYWdyYW1EaXNwYXRjaGVyIH0gZnJvbSAnLi4vc2VydmljZXMvZXMtZGlhZ3JhbS5kaXNwYXRjaGVyJztcbmltcG9ydCB7IFJlc2l6ZVNlbnNvciB9IGZyb20gXCIuLi9leHRlbnNpb25zL1Jlc2l6ZVNlbnNvclwiO1xuXG5pbXBvcnQgeyBSZWFjdGl2ZUV4dGVuc2lvbnMgfSBmcm9tICcuLi9leHRlbnNpb25zL1JlYWN0aXZlRXh0ZW5zaW9ucyc7XG5cbmltcG9ydCAqIGFzIGN5XyBmcm9tICdjeXRvc2NhcGUnO1xuLyoqIEBpZ25vcmUgKi9jb25zdCBjeXRvc2NhcGUgPSBjeV87XG5cbi8qKlxuICogQ29tcG9uZW50ZSBjaGUgc2kgb2NjdXBhIGRpIGdyYWZpY2FyZSB1biBkaWFncmFtbWEgZSBkaSBnZXN0aXJuZSBpbCBjaWNsbyBkaSB2aXRhXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2VzLWRpYWdyYW0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZXMtZGlhZ3JhbS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2VzLWRpYWdyYW0uY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBFc0RpYWdyYW1Db21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuXG4gIC8qKlxuICAgKiBSaWZlcmltZW50byBhbGwnb2dnZXR0byBIVE1MIHN1IGN1aSBjcmVhcmUgaWwgZGlhZ3JhbW1hXG4gICAqL1xuICBAVmlld0NoaWxkKCdncmFwaCcpIGN5R3JhcGg6IEVsZW1lbnRSZWY7XG5cbiAgLyoqXG4gICAqIE5vbWUgZGVsIGRpYWdyYW1tYSwgZm9uZGFtZW50YWxlIGFzc2VnbmFybG8gcGVyIHBlcm1ldHRlcmUgYWxsYSBsaWJyZXJpYSBkaSBzY2hlZHVsYXJuZSBsYSBjcmVhemlvbmVcbiAgICovXG4gIEBJbnB1dCgpIG5hbWU6IHN0cmluZyA9IFwiXCI7XG5cbiAgLyoqXG4gICAqIEluZGljYSBzZSB1dGlsaXp6YXJlIGlsIG1lbsO5IGNvbnRlc3R1YWxlIGEgcnVvdGEgYXR0b3JubyBhZCBvZ25pIG5vZG9cbiAgICovXG4gIEBJbnB1dCgpIFVzZUNvbnRleHRNZW51OiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIEluZGljYSBsZSBvcHppb25pIGRlbCBtZW7DuSBjb250ZXN0dWFsZSBxdWFsb3JhICoqVXNlQ29udGV4dE1lbnUqKiBmb3NzZSAqKnRydWUqKlxuICAgKi9cbiAgQElucHV0KCkgQ29udGV4dE1lbnVPcHRpb25zOiBDb250ZXh0TWVudU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERpY2UgYWwgY29tcG9uZW50ZSBzZSBpbCBkaWFncmFtbWEgZGV2ZSB1dGlsaXp6YXJlIGlsIHNpc3RlbWEgZGkgZXN0ZW5zaW9uZSBwZXIgbCdleHBhbmQgZSBjb2xsYXBzZSBkZWkgZ3J1cHBpXG4gICAqL1xuICBASW5wdXQoKSBVc2VFeHBhbmRDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBPcHppb25pIG5hdGl2ZSBkZWxsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlLCB2ZW5nb25vIG92dmlhbWVudGUgdXRpbGl6emF0ZSBzb2xvIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxuICAgKi9cbiAgQElucHV0KCkgRXhwYW5kQ29sbGFwc2VPcHRpb25zOiBFeHBhbmRDb2xsYXBzZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEJsb2NjbyBjb21wbGV0byBkZWxsZSBvcHppb25pLCBhbHRlcm5hdGl2byBhbGwnYXNzZWduYXppb25lIGRpICoqRWxlbWVudHMqKiwgKipOb2RlU3R5bGVzKiosICoqRWRnZVN0eWxlcyoqLCBlICoqTGF5b3V0KiouXG4gICAqIFxuICAgKiBRdWFsb3JhIGVudHJhbWJlIHZlbmlzc2VybyBzcGVjaWZpY2F0ZSB2ZXJyw6AgZWZmZXR0dWF0YSB1bid1bmlvbmUgZnJhIHF1ZXN0ZSBvcHppb25pIGUgcXVlbGxlIHNwZWNpZmljYXRlLCBkYW5kbyBwcmlvcml0w6AgYWxsZSBzcGVjaWZpY2F0ZVxuICAgKi9cbiAgQElucHV0KCkgTmF0aXZlT3B0aW9uczogY3l0b3NjYXBlLkN5dG9zY2FwZU9wdGlvbnMgPSB7fTtcblxuICAvKipcbiAgICogRGVmaW5pemlvbmUgZGVnbGkgZWxlbWVudGkgZGEgbW9zdHJhcmUgbmVsIGRpYWdyYW1tYVxuICAgKi9cbiAgQElucHV0KCkgRWxlbWVudHM6IGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdO1xuXG4gIC8qKlxuICAgKiBEZWZpbml6aW9uZSBkZWdsaSBzdGlsaSBkZWkgbm9kaVxuICAgKi9cbiAgQElucHV0KCkgTm9kZVN0eWxlczogY3l0b3NjYXBlLkNzcy5Ob2RlO1xuXG4gIC8qKlxuICAgKiBEZWZpbml6aW9uZSBkZWdsaSBzdGlsaSBkZWkgY29sbGVnYW1lbnRpIGZyYSBpIG5vZGlcbiAgICovXG4gIEBJbnB1dCgpIEVkZ2VTdHlsZXM6IGN5dG9zY2FwZS5Dc3MuRWRnZTtcblxuICAvKipcbiAgICogSW4gdW4gZGlhZ3JhbW1hIGluIHNvbGEgbGV0dHVyYSB0dXR0ZSBsZSBpbnRlcmF6aW9uaSB1dGVudGUgc29ubyBhbm51bGxhdGVcbiAgICovXG4gIEBJbnB1dCgpIFJlYWRvbmx5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZ2dpb3JuYSBhdXRvbWF0aWNhbWVudGUgbGUgZGltZW5zaW9uaSBkZWwgZGlhZ3JhbW1hIHF1YW5kbyBjYW1iaWFubyBsZSBkaW1lbnNpb25pIGRlbGxhIGZpbmVzdHJhXG4gICAqL1xuICBASW5wdXQoKSBBdXRvdXBkYXRlU2l6ZTogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIEluZGljYSBkaSBtYW50ZW5lcmUgbGEgcG9zaXppb25lIGRlaSBub2RpIHF1YWxvcmEgdmVuaXNzZXJvIGNhbWJpYXRpIGRhbGwnSW5wdXQgKipFbGVtZW50cyoqLlxuICAgKiBcbiAgICogU2UgbCdJRCBkaSB1biBub2RvIMOoIHVndWFsZSBhbGwnSUQgZGkgdW4gbm9kbyBwcmVzZW50ZSBpbiBwcmVjZWRlbnphLCBpbCBudW92byBub2RvIG5lIGVyZWRpdGVyw6AgbGEgcG9zaXppb25lXG4gICAqL1xuICBASW5wdXQoKSBQcmVzZXJ2ZUVsZW1lbnRzUG9zaXRpb246IGJvb2xlYW4gPSB0cnVlO1xuXG4gIC8qKlxuICAgKiBRdWFsb3JhIHZlbmlzc2UgbW9kaWZpY2F0byBsJ0lucHV0ICoqRWxlbWVudHMqKiwgcGl1dHRvc3RvIGNoZSBtZXR0ZXJlIHNlbXBsaWNlbWVudGUgaWwgbnVvdm8gRWxlbWVudG8gaW4gYmFzZSBhbCBMYXlvdXQgcHJlY2VkZW50ZSwgYXBwbGljYSBhbmNoZSB1bidhbmltYXppb25lIFxuICAgKiBcbiAgICogRnVuemlvbmEgc29sYW1lbnRlIHNlIGlsICoqTGF5b3V0KiogY29ycmVudGUgZGVsIGRpYWdyYW1tYSBzdXBwb3J0YSBsZSBhbmltYXppb25pXG4gICAqL1xuICBASW5wdXQoKSBBbmltYXRlTGF5b3V0Q2hhbmdlczogYm9vbGVhbiA9IHRydWU7XG5cbiAgLyoqXG4gICAqIFBlcmlvZG8gZGkgdGhyb3R0bGUgZGEgcXVhbmRvIHZpZW5lIGVmZmV0dHVhdG8gdW4gcmVzaXplIGEgcXVhbmRvIHJpY2FsY29sYXJlIGxlIGRpbWVuc2lvbmkgZGVsIGRpYWdyYW1tYS5cbiAgICogXG4gICAqIFB1w7IgZXNzZXJlIHRlbnV0byBhIDAgKHJlZHJhdyBpc3RhbnRhbmVvKSBmaW5jaMOpIG5vbiBjaSBzb25vIHByb2JsZW1pIGRpIHByZXN0YXppb25pIGNvbiBldmVudHVhbG1lbnRlIHRhbnRpIHJlc2l6ZSBhIHBvY2EgZGlzdGFuemEgbCd1bm8gZGFsbCdhbHRyby5cbiAgICovXG4gIEBJbnB1dCgpIFJlc2l6ZVRocm90dGxlVGltZTogbnVtYmVyID0gMDtcblxuICAvKipcbiAgICogTGF5b3V0IGRpIG9yZGluYW1lbnRvIGRlaSBub2RpXG4gICAqL1xuICBASW5wdXQoKSBMYXlvdXQ6IEJyZWFkdGhGaXJzdExheW91dE9wdGlvbnNJbXBsIHwgQ2lyY2xlTGF5b3V0T3B0aW9uc0ltcGwgfCBDb25jZW50cmljTGF5b3V0T3B0aW9uc0ltcGwgfFxuICAgIENvc2VMYXlvdXRPcHRpb25zSW1wbCB8IERhZ3JlTGF5b3V0T3B0aW9uc0ltcGwgfCBHcmlkTGF5b3V0T3B0aW9uc0ltcGwgfCBOdWxsTGF5b3V0T3B0aW9uc0ltcGwgfCBQcmVzZXRMYXlvdXRPcHRpb25zSW1wbCB8XG4gICAgUmFuZG9tTGF5b3V0T3B0aW9uc0ltcGw7XG5cbiAgLyoqXG4gICAqIFRlbXBsYXRlIEhUTUwgZGEgYXBwbGljYXJlIGFpIG5vZGkgcGVyIGRhcmdsaSBzdGlsaSBwYXJ0aWNvbGFyaSwgZGl2ZXJzaSBkYWxsZSBzaGFwZSBkaSBkZWZhdWx0XG4gICAqL1xuICBASW5wdXQoKSBOb2RlSFRNTFRlbXBsYXRlczogTm9kZUhUTUxUZW1wbGF0ZVtdO1xuXG4gIC8qKlxuICAgKiBGb3JuaXNjZSBpbCBnbG9iYWwgZGVsbGEgbGlicmVyaWEgKG5hbWVzcGFjZSAqKmN5dG9zY2FwZSoqKSBlIHNpIGFzcGV0dGEgY2hlIGRvcG8gb3BlcmF6aW9uaSBkaSBpbXBvcnRhemlvbmUgXG4gICAqIGxhc2NpYXRlIGFsbCd1dGVudGUgdmVuZ2FubyBhZ2dpdW50aSB0dXR0aSBpIG1vZHVsaSBkZXNpZGVyYXRpLiBcbiAgICogXG4gICAqIMOIICoqZm9uZGFtZW50YWxlKiogY2hlIGlsIHByaW1vIHBhcmFtZXRybyAoaWwgbm9tZSBkZWwgbW9kdWxvKSBzaWEgdWd1YWxlIGEgY2nDsiBkaSBjdWkgdmllbmUgZmF0dG8gaWwgcmVxdWlyZSBpbiBtb2RvIGNoZSBsYSBsaWJyZXJpYVxuICAgKiBwb3NzYSBjb250cm9sbGFyZSBjaGUgaWwgbW9kdWxvIGltcG9ydGF0byBub24gc2lhIGdpw6Agc3RhdG8gaW1wb3J0YXRvIGluIHByZWNlZGVuemFcbiAgICogXG4gICAqICMjIEVzZW1waW86XG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIChnbG9iYWwpID0+IHtcbiAgICogICAgcmV0dXJuIGltcG9ydChcImN5dG9zY2FwZS1leHRlbnNpb24tbGlicmFyeVwiKS50aGVuKG1vZHVsZSA9PiBnbG9iYWwudXNlKFwiY3l0b3NjYXBlLWV4dGVuc2lvbi1saWJyYXJ5XCIsIG1vZHVsZS5kZWZhdWx0KSk7XG4gICAqIFxuICAgKiAgICAuLi5cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcjogKGdsb2JhbDogeyB1c2U6IChtb2R1bGVOYW1lOiBzdHJpbmcsIG1vZHVsZTogdm9pZCB8IGN5dG9zY2FwZS5FeHQpID0+IHZvaWQgfSkgPT4gUHJvbWlzZTxhbnk+ID0gbnVsbDtcblxuICAvKipcbiAgICogRm9ybmlzY2UgbCdpc3RhbnphIGF0dHVhbGUgZGkgQ3l0b3NjYXBlIGRhIGN1aSDDqCBwb3NzaWJpbGUgcHJlbmRlcmUgbGUgbGlicmVyaWUgZGkgZXN0ZW5zaW9uZSBjYXJpY2F0ZSBpbiAqKkV4dGVuc2lvbk1vZHVsZXNJbXBvcnRlcioqXG4gICAqIGUgY29uZmlndXJhcmxlIGluIGJhc2UgYWkgY29tcG9ydGFtZW50aSBzcGVjaWZpY2lcbiAgICogXG4gICAqICMjIEVzZW1waW86XG4gICAqIFxuICAgKiBgYGB0eXBlc2NyaXB0XG4gICAqIChjeXRvc2NhcGVDb3JlKSA9PiB7XG4gICAqICAgIC8vIEZhcmUgcXVlc3RvIGxhdm9ybyBwZXIgb2duaSBlc3RlbnNpb25lIGNhcmljYXRhXG4gICAqICAgIGxldCBleHRlbnNpb25Db25maWd1cmF0aW9uID0geyAuLi4gfTtcbiAgICogICAgbGV0IGV4dGVuc2lvbkluc3RhbmNlID0gY3l0b3NjYXBlQ29yZS5leHRlbnNpb25MaWJyYXJ5KGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24pO1xuICAgKiAgICBleHRlbnNpb25JbnN0YW5jZS5kb1NvbWV0aGluZ1NwZWNpZmljVG9UaGlzRXh0ZW5zaW9uKCk7XG4gICAqIFxuICAgKiAgICAuLi5cbiAgICogfVxuICAgKiBgYGBcbiAgICovXG4gIEBJbnB1dCgpIEV4dGVuc2lvbk1vZHVsZXNBcHBseWVyOiAoY3l0b3NjYXBlQ29yZTogY3l0b3NjYXBlLkNvcmUpID0+IHZvaWQgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBFdmVudG8gbGFuY2lhdG8gYWwgY2xpY2sgZGkgdW4gbm9kbywgY29udGllbmUgbCdvZ2dldHRvICoqZGF0YSoqIGRlbCBub2RvIGluIHF1ZXN0aW9uZVxuICAgKi9cbiAgQE91dHB1dCgpIG9uTm9kZUNsaWNrOiBFdmVudEVtaXR0ZXI8eyBkYXRhOiBhbnkgfT4gPSBuZXcgRXZlbnRFbWl0dGVyPHsgZGF0YTogYW55IH0+KCk7XG5cbiAgLyoqXG4gICAqIFZhcmlhYmlsZSBzdSBjdWkgc2FsdmFyc2kgc2UgaSBub2RpIGhhbm5vIHVuYSBnZXJhcmNoaWEgYSBncnVwcGkgbyBuby4gU2VydmUgcGVyIHBvaSBjYXJpY2FyZSBsJ2VzdGVuc2lvbmUgZXhwYW5kLWNvbGxhcHNlIHF1YWxvcmEgZm9zc2UgcmljaGllc3RhXG4gICAqL1xuICBwcml2YXRlIE5vZGVzSGllcmFyY2h5OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2Egc2UgaWwgcmVuZGVyaW5nIGRlbCBkaWFncmFtbWEgw6ggdGVybWluYXRvXG4gICAqL1xuICBwcml2YXRlIFJlbmRlcmVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLyoqXG4gICAqIElzdGFuemEgZGVsIGRpYWdyYW1tYSBhdHR1YWxtZW50ZSBpbiB1c29cbiAgICovXG4gIHB1YmxpYyBjeTogY3l0b3NjYXBlLkNvcmVcblxuICAvKipcbiAgICogQXBpIGRlbGwnZXN0ZW5zaW9uZSBleHBhbmQtY29sbGFwc2UgcGVyIHBlcm1ldHRlcmUgZGkgZWZmZXR0dWFyZSBvcGVyYXppb25pIGRhbGwnZXN0ZXJubyBkZWwgZGlhZ3JhbW1hLiBWZW5nb25vIHZhbG9yaXp6YXRlIHNlICoqVXNlRXhwYW5kQ29sbGFwc2UqKiDDqCAqKnRydWUqKlxuICAgKi9cbiAgcHVibGljIEV4cGFuZENvbGxhcHNlQXBpOiBhbnkgPSBudWxsO1xuXG4gIC8qKlxuICAgKiBPc3NlcnZhdG9yZSBkZWxsZSBtb2RpZmljaGUgYWwgY29udGVuaXRvcmUgZGVsIGRpYWdyYW1tYVxuICAgKi9cbiAgcHJpdmF0ZSByZXNpemVPYnNlcnZlcjogUmVzaXplU2Vuc29yO1xuXG4gIC8qKlxuICAgKiBSaWZlcmltZW50byBhbGwndWx0aW1vIGxheW91dCB1dGlsaXp6YXRvLiBWaWVuZSByaWFwcGxpY2F0byBxdWFsb3JhIHZlbmlzc2UgY2FtYmlhdG8gbCdJbnB1dCAqKkVsZW1lbnRzKiouXG4gICAqIFxuICAgKiBOb24gdXRpbGl6em8gaWwgbWFrZUxheW91dHMgcGVyY2jDqSBhbHRyaW1lbnRpIHJpc2NoaWVyZWkgZGkgY3JlYXJlIHVuIGxheW91dCByaWZlcml0byBhIFggZWxlbWVudGksIG5lIGFnZ2l1bmdvIDEsIHJpYXBwbGljbyBpbCBMYXlvdXQgXG4gICAqIG1hIG1pIHZpZW5lIHJpYXBwbGljYXRvIGEgWCBlbGVtZW50aSBpbnZlY2UgY2hlIFggKyAxXG4gICAqL1xuICBwcml2YXRlIExhc3RMYXlvdXQ6IGN5dG9zY2FwZS5MYXlvdXRPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBDb3N0cnV0dG9yZVxuICAgKiBcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY29uc3RydWN0b3IoQE9wdGlvbmFsKCkgcHJpdmF0ZSBzZXJ2aWNlOiBFc0RpYWdyYW1TZXJ2aWNlLCBAT3B0aW9uYWwoKSBwcml2YXRlIGRpc3BhdGNoZXI6IEVzRGlhZ3JhbURpc3BhdGNoZXIsIHByaXZhdGUgZXh0czogUmVhY3RpdmVFeHRlbnNpb25zKSB7IH1cblxuICAvKipcbiAgICogQGlnbm9yZSBcbiAgICogXG4gICAqIEFuZ3VsYXIgUGlwZWxpbmVcbiAgICovXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKSB7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2UgfHwgIXRoaXMuZGlzcGF0Y2hlcilcbiAgICAgIHRocm93IFwiSWwgbW9kdWxvIEBlc2ZhZW56YS9kaWFncmFtcyBub24gw6ggc3RhdG8gaW1wb3J0YXRvIGNvbiBpbCBmb3JSb290KCk7XCI7XG5cbiAgICB0aGlzLmRpc3BhdGNoTG9hZENoYXJ0KCk7XG4gIH1cblxuICAvKipcbiAgICogQWxsJ29uRGVzdHJveSByaXB1bGlzY28gbGEgbWVtb3JpYSBkYWwgZGlhZ3JhbW1hXG4gICAqL1xuICBwdWJsaWMgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNwb3NlKCk7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7XG5cbiAgICBpZiAodGhpcy5jeSkge1xuICAgICAgdGhpcy5zZXJ2aWNlLmxvZyhcIklcIiwgXCJEaWFncmFtXCIgKyBcIiBcIiArIHRoaXMubmFtZSArIFwiOiBVbmxvYWRpbmcgZGVzdHJveWVkIGRpYWdyYW1cIiwgZmFsc2UpO1xuICAgICAgdGhpcy5jeS5kZXN0cm95KCk7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIuZGVyZWdpc3Rlcih0aGlzLm5hbWUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkNoYXJ0IFwiICsgdGhpcy5uYW1lICsgXCI6IFVubG9hZGluZyB1bmNyZWF0ZWQgY2hhcnQgY29tcG9uZW50LiBJdCBwcm9iYWJseSB3YXMgYSBkdXBsaWNhdGVkXCIsIGZhbHNlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RyYSBpbCBkaWFncmFtbWEgYXR0dWFsZSBuZWwgRGlzcGF0Y2hlciBpbiBtb2RvIGNoZSB2ZW5nYSBjYXJpY2F0byBhcHBlbmEgcG9zc2liaWxlXG4gICAqL1xuICBwcml2YXRlIGRpc3BhdGNoTG9hZENoYXJ0KCk6IHZvaWQge1xuICAgIHRoaXMuZGlzcGF0Y2hlci5yZWdpc3Rlcih0aGlzLm5hbWUsICgpID0+IHsgcmV0dXJuIHRoaXMucmVuZGVyKCk7IH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmUgXG4gICAqIFxuICAgKiBBbmd1bGFyIFBpcGVsaW5lOiBHZXN0aW9uZSByaS1ncmFmaWNhemlvbmUgZGVsIGRpYWdyYW1tYSwgc2UgcG9zc2liaWxlXG4gICAqL1xuICBwdWJsaWMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IGFueSB7XG4gICAgbGV0IHRvQ2hlY2sgPSBbXCJUZW1wbGF0ZXNcIiwgXCJVc2VDb250ZXh0TWVudVwiLCBcIkNvbnRleHRNZW51T3B0aW9uc1wiLCBcIlVzZUV4cGFuZENvbGxhcHNlXCIsIFwiRXhwYW5kQ29sbGFwc2VPcHRpb25zXCIsIFwiTm9kZVN0eWxlc1wiLCBcIkVkZ2VTdHlsZXNcIiwgXCJOYXRpdmVPcHRpb25zXCJdO1xuXG4gICAgaWYgKHRoaXMuUmVuZGVyZWQgJiYgdG9DaGVjay5zb21lKHQgPT4gY2hhbmdlc1t0XSkpXG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiV1wiLCBcIlJlZHJhdyBiYXNlZCBvbiBkeW5hbWljIElucHV0IGNoYW5nZSBpcyBzdXBwb3J0ZWQgb25seSBmb3IgJ0VsZW1lbnRzJyBhbmQgJ0xheW91dCcgaW5wdXRzLCBwbGVhc2UgZGVzdHJveSB0aGUgY29tcG9uZW50IGFuZCByZWNyZWF0ZSBpdCB3aXRoIHRoZSBuZXcgc2V0dGluZ3NcIik7XG5cbiAgICBsZXQgZWxlbWVudENoYW5nZXMgPSBjaGFuZ2VzW1wiRWxlbWVudHNcIl07XG4gICAgbGV0IGxheW91dENoYW5nZXMgPSBjaGFuZ2VzW1wiTGF5b3V0XCJdO1xuICAgIGlmIChlbGVtZW50Q2hhbmdlcyAmJiAhZWxlbWVudENoYW5nZXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRWxlbWVudHMgaGF2ZSBiZWVuIGNoYW5nZWQgYWZ0ZXIgZGlhZ3JhbSBpbml0aWFsaXphdGlvblwiKTtcblxuICAgICAgLy8gQ2FtYmlhbWVudG8gYWdsaSBFbGVtZW50aTogcmlwdWxpc2NvIGdsaSBlbGVtZW50aSB2ZWNjaGksIHByZW5kbyBpIG51b3ZpLCBsaSBzaXN0ZW1vIGUgbGkgcmlhc3NlZ25vLiBcbiAgICAgIC8vIFNlIGlsIG51b3ZvIElucHV0IEVsZW1lbnRzIMOoIHJvYmEgc3RyYW5hIG1pIGxpbWl0byBhIHJpcHVsaXJlIGlsIGRpYWdyYW1tYVxuICAgICAgLy8gU2UgY3l0b3NjYXBlIGF2ZXZhIGdpw6AgZGVnbGkgZWxlbWVudGkgcHJlY2VkZW50ZW1lbnRlIG5lIHByZW5kbyBsZSBwb3NpemlvbmkgaW4gbW9kbyBkYSByaWRpc2VnbmFybGkgcGFydGVuZG8gZGFsbG8gc3Rlc3NvIHB1bnRvIChjYXJpbm8gcGVyIGxlIGFuaW1hemlvbmkpXG4gICAgICBsZXQgZWxlbWVudHMgPSBlbGVtZW50Q2hhbmdlcz8uY3VycmVudFZhbHVlO1xuICAgICAgbGV0IHByZXZpb3VzX2VsZW1lbnRzID0gdGhpcy5QcmVzZXJ2ZUVsZW1lbnRzUG9zaXRpb24gPyA8YW55PnRoaXMuY3kubm9kZXMoKSA6IG51bGw7XG5cbiAgICAgIHRoaXMuY3kuZWxlbWVudHMoKS5yZW1vdmUoKTtcbiAgICAgIGlmIChlbGVtZW50cyAmJiBlbGVtZW50cy5sZW5ndGggJiYgZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLnJldmlld0N5dG9zY2FwZUVsZW1lbnRzKGVsZW1lbnRzLCBwcmV2aW91c19lbGVtZW50cyk7XG4gICAgICAgIHRoaXMuY3kuYWRkKGVsZW1lbnRzKTtcblxuICAgICAgICAvLyBTZSBzb2xvIGdsaSBlbGVtZW50aSBjYW1iaWFubywgcmlhcHBsaWNvIGlsIExheW91dCBwcmVjZWRlbnRlXG4gICAgICAgIGlmICghbGF5b3V0Q2hhbmdlcyAmJiB0aGlzLkxhc3RMYXlvdXQpIHtcblxuICAgICAgICAgIC8vIFNlIGRldm8gYW5pbWFyZSBsZSBtb2RpZmNoZSBhbCBsYXlvdXQgZm9yem8gaWwgcGFyYW1ldHJvIHJlbGF0aXZvXG4gICAgICAgICAgaWYgKHRoaXMuQW5pbWF0ZUxheW91dENoYW5nZXMpXG4gICAgICAgICAgICAoPGFueT50aGlzLkxhc3RMYXlvdXQpLmFuaW1hdGUgPSB0cnVlO1xuXG4gICAgICAgICAgdGhpcy5jeS5sYXlvdXQodGhpcy5MYXN0TGF5b3V0KS5ydW4oKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNlIGlsIGxheW91dCBjYW1iaWEgbG8gYXBwbGljbyBlIG1lIGxvIHNhbHZvIGNvbWUgbGF5b3V0IHByZWNlZGVudGUgcGVyIGlsIGZ1dHVyb1xuICAgIGlmIChsYXlvdXRDaGFuZ2VzICYmICFsYXlvdXRDaGFuZ2VzLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLnNlcnZpY2UubG9nKFwiSVwiLCBcIkxheW91dCBoYXZlIGJlZW4gY2hhbmdlZCBhZnRlciBkaWFncmFtIGluaXRpYWxpemF0aW9uXCIpO1xuICAgICAgdGhpcy5MYXN0TGF5b3V0ID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShsYXlvdXRDaGFuZ2VzLmN1cnJlbnRWYWx1ZSkpO1xuICAgICAgdGhpcy5jeS5sYXlvdXQodGhpcy5MYXN0TGF5b3V0KS5ydW4oKVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFZmZldHR1YSBpbCByZW5kZXJpbmcgZGVsIGRpYWdyYW1tYVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZW5kZXIoKSB7XG5cbiAgICAvLyBUaXJvIGZ1b3JpIGxlIG9wemlvbmkgY29uIGN1aSBnZW5lcmFyZSBpbCBkaWFncmFtbWFcbiAgICBsZXQgY3lPcHRpb25zID0gdGhpcy5nZXRDb21wbGV0ZWRPcHRpb25zKCk7XG4gICAgdGhpcy5Ob2Rlc0hpZXJhcmNoeSA9IGN5T3B0aW9ucy5lbGVtZW50cyAmJiAoPGN5Xy5FbGVtZW50RGVmaW5pdGlvbltdPmN5T3B0aW9ucy5lbGVtZW50cykuc29tZSh0ID0+IHQuZGF0YS5wYXJlbnQpO1xuXG4gICAgLy8gQ2FyaWNvIGV2ZW50dWFsaSBjbGFzc2kgZGkgZXN0ZW5zaW9uZSBjaGUgc2Vydm9ub1xuICAgIGF3YWl0IHRoaXMucGVyZm9ybU1vZHVsZXNMb2FkaW5nKCk7XG5cbiAgICAvLyBHZW5lcm8gaWwgZGlhZ3JhbW1hXG4gICAgdGhpcy5jeSA9IGN5dG9zY2FwZShjeU9wdGlvbnMpO1xuXG4gICAgLy8gQ29sbGVnbyBnbGkgZXZlbnRpIGFsIGNvbXBvbmVudGVcbiAgICB0aGlzLmJpbmRDeXRvc2NhcGVFdmVudHMoKTtcblxuICAgIC8vIFV0aWxpenpvIGxlIGNsYXNzaSBkaSBlc3RlbnNpb25lIGNhcmljYXRlIHByZWNlZGVudGVtZW50ZSBwZXIgZmFyZSBpbCByZXN0byBkZWxsZSBtaWUgb3BlcmF6aW9uaVxuICAgIHRoaXMucGVyZm9ybU9wZXJhdGlvbnNXaXRoTG9hZGVkTW9kdWxlcygpO1xuXG4gICAgLy8gSW1wb3N0byBsYSB2YXJpYWJpbGUgUmVuZGVyZWQgYSB0cnVlIGluIG1vZG8gY2hlIHNlIGRhIGFkZXNzbyB2ZW5nb25vIGZhdHRlIG1vZGlmaWNoZSBjaGUgZG92cmViYmVybyBjYXVzYXJlIHVuIHJlZHJhdyBwb3NzbyBhY2Nvcmdlcm1lbmVcbiAgICAvLyBlIG1hbmRhcmUgYSBjYWdhcmUgbG8gc3Ryb256byBkaSB0dXJub1xuICAgIHRoaXMuUmVuZGVyZWQgPSB0cnVlO1xuXG4gICAgLy8gU2UgZGV2byBhZ2dpb3JuYXJlIGluIGF1dG9tYXRpY28gaW4gYmFzZSBhbGxhIGRpbWVuc2lvbmUgZGVsIGNvbnRlbml0b3JlIGNvbGxlZ28gaWwgUmVzaXplT2JzZXJ2ZXJcbiAgICBpZiAodGhpcy5BdXRvdXBkYXRlU2l6ZSlcbiAgICAgIHRoaXMubGlzdGVuT25DaGFuZ2VzKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0cmEgbCdhc2NvbHRvIGFsIGNvbnRlbml0b3JlIGRlbCBncmFmaWNvIGUgaW4gY2FzbyBkaSBtb2RpZmljaGUgYWxsYSBkaW1lbnNpb25lLCBhbCBtYXNzaW1vIHVuYSB2b2x0YSBvZ25pIDUwMCBtaWxsaXNlY29uZGksIGxvIHJpZGlzZWduYVxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5PbkNoYW5nZXMoKSB7XG4gICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVTZW5zb3IodGhpcy5jeUdyYXBoLm5hdGl2ZUVsZW1lbnQsICgpID0+IHtcbiAgICAgIHRoaXMuZXh0cy50aHJvdHRsZSh0aGlzLm5hbWUsIHRoaXMub25Db250YWluZXJTaXplQ2hhbmdlZC5iaW5kKHRoaXMpLCB0aGlzLlJlc2l6ZVRocm90dGxlVGltZSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuemlvbmUgY2hlIHNpIG9jY3VwYSBkaSBnZXN0aXJlIGlsIHJlcGFpbnQgZGVsIGRpYWdyYW1tYVxuICAgKi9cbiAgcHJpdmF0ZSBvbkNvbnRhaW5lclNpemVDaGFuZ2VkKCkge1xuICAgIHRoaXMuc2VydmljZS5sb2coXCJJXCIsIFwiRGlhZ3JhbSBjb250YWluZXIgc2l6ZSBoYXMgY2hhbmdlZCwgcmVkcmF3aW5nXCIpO1xuICAgIHRoaXMuY3kucmVzaXplKCk7XG4gICAgdGhpcy5jeS5maXQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb2xsZWdhIHR1dHRpIGdsaSBldmVudGkgY2hlIG1pIHBvc3Nvbm8gc2VydmlyZSBlIGxpIGVzcG9uZSBpbiBvdXRwdXRcbiAgICovXG4gIHByaXZhdGUgYmluZEN5dG9zY2FwZUV2ZW50cygpIHtcbiAgICB0aGlzLmN5LmJpbmQoJ2NsaWNrJywgJ25vZGUnLCAoZXZlbnQpID0+IHtcbiAgICAgIHRoaXMub25Ob2RlQ2xpY2suZW1pdCh7IGRhdGE6IGV2ZW50LnRhcmdldC5kYXRhKCkgfSk7XG4gICAgfSk7XG5cbiAgICAvLyBBbHRyaSBldmVudGkuLi5cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRvZG8gY2hlIHNlcnZlIHBlciBjYXJpY2FyZSB0dXR0ZSBsZSBlc3RlbnNpb25pIGRlbGxhIGxpYnJlcmlhIGluIGJhc2UgYSBjacOyIGNoZSB2aWVuZSB1dGlsaXp6YXRvXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHBlcmZvcm1Nb2R1bGVzTG9hZGluZygpIHtcbiAgICBpZiAodGhpcy5MYXlvdXQubmFtZSA9PSAnZGFncmUnKVxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtZGFncmVcIik7XG5cbiAgICBpZiAodGhpcy5Ob2RlSFRNTFRlbXBsYXRlcyAmJiB0aGlzLk5vZGVIVE1MVGVtcGxhdGVzLmxlbmd0aCA+IDApXG4gICAgICBhd2FpdCB0aGlzLmxvYWRJbnRlcm5hbChcImN5dG9zY2FwZS1odG1sLW5vZGVcIik7XG5cbiAgICBpZiAodGhpcy5Vc2VDb250ZXh0TWVudSlcbiAgICAgIGF3YWl0IHRoaXMubG9hZEludGVybmFsKFwiY3l0b3NjYXBlLWN4dG1lbnVcIik7XG5cbiAgICBpZiAodGhpcy5Ob2Rlc0hpZXJhcmNoeSAmJiB0aGlzLlVzZUV4cGFuZENvbGxhcHNlKVxuICAgICAgYXdhaXQgdGhpcy5sb2FkSW50ZXJuYWwoXCJjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlXCIpO1xuXG4gICAgaWYgKHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKSB7XG4gICAgICAvLyBXcmFwcG8gaWwgbmFtZXNwYWNlIGluIG1vZG8gY2hlIHBvc3NhIGRpcmUgbGEgbWlhIHN1bCBmYXR0byBjaGUgbCd1dGVudGUgYWdnaXVuZ2EgdW4gbW9kdWxvIG8gbWVubyA6RFxuICAgICAgdmFyIHdyYXBwZWRDeXRvc2NhcGUgPSB7XG4gICAgICAgIHVzZTogKG1vZHVsZU5hbWU6IHN0cmluZywgbW9kdWxlOiBjeXRvc2NhcGUuRXh0KSA9PiB7XG4gICAgICAgICAgaWYgKCFtb2R1bGUpXG4gICAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCB0aGlzLnNlcnZpY2UubG9jKFwiUmVjZWl2ZWQgYW4gdW5kZWZpbmVkIG1vZHVsZS4gTWFrZSBzdXJlIHlvdSBhcmUgY29ycmVjdGx5IGxvYWRpbmcgaXRcIikgKyBcIjogXCIgKyBtb2R1bGVOYW1lLCBmYWxzZSk7XG5cbiAgICAgICAgICBpZiAoW1wiY3l0b3NjYXBlLWRhZ3JlXCIsIFwiY3l0b3NjYXBlLWh0bWwtbm9kZVwiLCBcImN5dG9zY2FwZS1jeHRtZW51XCIsIFwiY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZVwiXS5pbmNsdWRlcyhtb2R1bGVOYW1lKSlcbiAgICAgICAgICAgIHRoaXMuc2VydmljZS5sb2coXCJXXCIsIHRoaXMuc2VydmljZS5sb2MoXCJNb2R1bGVcIikgKyBcIiBcIiArIG1vZHVsZU5hbWUgKyBcIiBcIiArIHRoaXMuc2VydmljZS5sb2MoXCJpcyBsb2FkZWQgYW5kIG1hbmFnZWQgZGlyZWN0bHkgYnkgdGhpcyBsaWJyYXJ5LiBZb3UgZG9uJ3QgbmVlZCB0byBpbXBvcnQgaXQgb3IgdXNlIGl0IGRpcmVjdGx5LCBqdXN0IGJlIHN1cmUgdG8gc2V0IHRoZSByZWxhdGl2ZSBvcHRpb25zXCIpLCBmYWxzZSk7XG4gICAgICAgICAgZWxzZVxuICAgICAgICAgICAgY3l0b3NjYXBlLnVzZShtb2R1bGUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGF3YWl0IHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0ltcG9ydGVyKHdyYXBwZWRDeXRvc2NhcGUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRvZG8gY2hlIHNlcnZlIHBlciBjYXJpY2FyZSB0dXR0ZSBsZSBlc3RlbnNpb25pIGRlbGxhIGxpYnJlcmlhIGluIGJhc2UgYSBjacOyIGNoZSB2aWVuZSB1dGlsaXp6YXRvIGNvbiBsZSBvcHppb25pIGRlZmluaXRlIGRhZ2xpIElucHV0XG4gICAqL1xuICBwcml2YXRlIHBlcmZvcm1PcGVyYXRpb25zV2l0aExvYWRlZE1vZHVsZXMoKSB7XG5cbiAgICBsZXQgYW55Q3kgPSAoPGFueT50aGlzLmN5KTtcblxuICAgIC8vIFV0aWxpenpvIGRlbCBsYXlvdXQsIGxvIHNhbHZvIHBlciBwb3RlcmxvIHJpdXRpbGl6emFyZSBpbiBmdXR1cm9cbiAgICBpZiAodGhpcy5MYXlvdXQpIHtcbiAgICAgIHRoaXMuTGFzdExheW91dCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5MYXlvdXQpKTtcbiAgICAgIHRoaXMuY3kubGF5b3V0KHRoaXMuTGFzdExheW91dCkucnVuKClcbiAgICB9XG5cbiAgICAvLyBVdGlsaXp6byBkZWxsJ0hUTUwgbm9kZVxuICAgIGlmICh0aGlzLk5vZGVIVE1MVGVtcGxhdGVzICYmIHRoaXMuTm9kZUhUTUxUZW1wbGF0ZXMubGVuZ3RoID4gMCkge1xuICAgICAgbGV0IGh0bWxub2RlID0gYW55Q3kuaHRtbG5vZGUoKTtcbiAgICAgIGh0bWxub2RlLmNyZWF0ZUh0bWxOb2RlKGN5dG9zY2FwZSwgdGhpcy5jeSwgdGhpcy5Ob2RlSFRNTFRlbXBsYXRlcyk7XG4gICAgfVxuXG4gICAgLy8gVXRpbGl6em8gZGVsIENvbnRleHQgTWVudVxuICAgIGlmICh0aGlzLlVzZUNvbnRleHRNZW51KVxuICAgICAgYW55Q3kuY3h0bWVudSh0aGlzLkNvbnRleHRNZW51T3B0aW9ucyk7XG5cbiAgICAvLyBVdGlsaXp6byBkZWxsJ2V4cGFuZCBjb2xsYXBzZSBzb2xvIHF1YW5kbyBjJ8OoIHVuYSBnZXJhcmNoaWEgZGkgbm9kaVxuICAgIGlmICh0aGlzLk5vZGVzSGllcmFyY2h5ICYmIHRoaXMuVXNlRXhwYW5kQ29sbGFwc2UpXG4gICAgICB0aGlzLkV4cGFuZENvbGxhcHNlQXBpID0gYW55Q3kuZXhwYW5kQ29sbGFwc2UodGhpcy5FeHBhbmRDb2xsYXBzZU9wdGlvbnMpO1xuXG4gICAgLy8gVXRpbGl6em8gZGkgZXN0ZW5zaW9uaSBleHRyYSwgaW1wbGVtZW50YXppb25lIGFmZmlkYXRhIGFsIHByb2dyYW1tYXRvcmVcbiAgICBpZiAodGhpcy5FeHRlbnNpb25Nb2R1bGVzQXBwbHllcilcbiAgICAgIHRoaXMuRXh0ZW5zaW9uTW9kdWxlc0FwcGx5ZXIodGhpcy5jeSk7XG4gIH1cblxuICAvKipcbiAgICogTWV0b2RvIGludGVybm8gcGVyIGlsIGNhcmljYW1lbnRvIGRlaSBtb2R1bGkgZGkgZXN0ZW5zaW9uZVxuICAgKiBcbiAgICogQHBhcmFtIHsnY3l0b3NjYXBlLWV4cGFuZC1jb2xsYXBzZScgfCAnY3l0b3NjYXBlLWN4dG1lbnUnIHwgJ2N5dG9zY2FwZS1odG1sLW5vZGUnIHwgJ2N5dG9zY2FwZS1kYWdyZSd9IG1vZHVsZUlkIE1vZHVsbyBkYSBjYXJpY2FyZVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBsb2FkSW50ZXJuYWwobW9kdWxlSWQ6ICdjeXRvc2NhcGUtZXhwYW5kLWNvbGxhcHNlJyB8ICdjeXRvc2NhcGUtY3h0bWVudScgfCAnY3l0b3NjYXBlLWh0bWwtbm9kZScgfCAnY3l0b3NjYXBlLWRhZ3JlJykge1xuICAgIGxldCB0b0xvYWQgPSBhd2FpdCB0aGlzLnNlcnZpY2UuaW1wb3J0SWZOZWVkZWQobW9kdWxlSWQpO1xuICAgIGlmICh0b0xvYWQpIGN5dG9zY2FwZS51c2UodG9Mb2FkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNZXRvZG8gY2hlIGJhc2FuZG9zaSBzdWxsZSBvcHppb25pIG5hdGl2ZSBldmVudHVhbG1lbnRlIGFzc2VnbmF0ZSBsZSBjb21wbGV0YSBjb24gZ2xpIElucHV0IGFkZGl6aW9uYWxpXG4gICAqIFxuICAgKiBAcmV0dXJucyB7Y3lfLkN5dG9zY2FwZU9wdGlvbnN9IE9wemlvbmkgZmluYWxpIHVuaXRlIGRhIElucHV0IGVkIG9wemlvbmkgbmF0aXZlXG4gICAqL1xuICBwcml2YXRlIGdldENvbXBsZXRlZE9wdGlvbnMoKTogY3lfLkN5dG9zY2FwZU9wdGlvbnMge1xuICAgIHZhciBvcHRzOiBjeV8uQ3l0b3NjYXBlT3B0aW9ucyA9IHRoaXMuTmF0aXZlT3B0aW9ucyB8fCB7fTtcbiAgICBvcHRzLmNvbnRhaW5lciA9IHRoaXMuY3lHcmFwaC5uYXRpdmVFbGVtZW50O1xuICAgIG9wdHMuc3R5bGUgPSBvcHRzLnN0eWxlIHx8IFtdO1xuXG4gICAgLy8gUGVyIHR1dHRlIGxlIGNvc2UgcGVyIGN1aSBnbGkgSW5wdXQgaGFubm8gcHJpb3JpdMOgIHNvdnJhc2NyaXZvIGdsaSBvcmlnaW5hbGkgZGVsbGUgb3B6aW9uaVxuXG4gICAgaWYgKHRoaXMuTm9kZVN0eWxlcyB8fCB0aGlzLkVkZ2VTdHlsZXMpIHtcbiAgICAgIG9wdHMuc3R5bGUgPSBbXTtcbiAgICAgIGlmICh0aGlzLk5vZGVTdHlsZXMpIG9wdHMuc3R5bGUucHVzaCh7IHNlbGVjdG9yOiAnbm9kZScsIGNzczogdGhpcy5Ob2RlU3R5bGVzIH0pO1xuICAgICAgaWYgKHRoaXMuRWRnZVN0eWxlcykgb3B0cy5zdHlsZS5wdXNoKHsgc2VsZWN0b3I6ICdlZGdlJywgY3NzOiB0aGlzLkVkZ2VTdHlsZXMgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuRWxlbWVudHMpXG4gICAgICBvcHRzLmVsZW1lbnRzID0gdGhpcy5FbGVtZW50cztcblxuICAgIHRoaXMucmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoPGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdPm9wdHMuZWxlbWVudHMpO1xuXG4gICAgaWYgKHRoaXMuTGF5b3V0KVxuICAgICAgb3B0cy5sYXlvdXQgPSB0aGlzLkxheW91dDtcblxuICAgIGlmICh0aGlzLlJlYWRvbmx5KSB7XG4gICAgICAvLyBRdWVzdG8gY29zbyBmYSBlZmZldHRpIHN0cmFuaS4uLi5cbiAgICAgIC8vb3B0cy5hdXRvbG9jayA9IHRydWU7XG5cbiAgICAgIG9wdHMuYXV0b3VuZ3JhYmlmeSA9IHRydWU7XG4gICAgICBvcHRzLmF1dG91bnNlbGVjdGlmeSA9IHRydWU7XG4gICAgICBvcHRzLmJveFNlbGVjdGlvbkVuYWJsZWQgPSBmYWxzZTtcbiAgICAgIG9wdHMudXNlclpvb21pbmdFbmFibGVkID0gZmFsc2U7XG4gICAgICBvcHRzLnVzZXJQYW5uaW5nRW5hYmxlZCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFnZ2l1c3RhbWVudGkgZGVnbGkgZWxlbWVudGkgZGkgQ3l0b3NjYXBlLiBcbiAgICogXG4gICAqIEkgbm9kaSBub24gdmVuZ29ubyB0b2NjYXRpLlxuICAgKiBcbiAgICogUGVyIG9nbmkgZWRnZSB2aWVuZSBjb250cm9sbGF0byBzZSDDqCBzcGVjaWZpY2F0YSB1bmEgc29yZ2VudGUgZWQgdW5hIGRlc3RpbmF6aW9uZSwgaW4gY2FzbyBjb250cmFyaW8gc2kgY2VyY2EgZGkgZGVkdXJsaSBkYWxsJ0lEXG4gICAqIFxuICAgKiBAcGFyYW0ge2N5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdfSBlbGVtZW50cyBFbGVtZW50aSBkYSBzaXN0ZW1hcmVcbiAgICovXG4gIHByaXZhdGUgcmV2aWV3Q3l0b3NjYXBlRWxlbWVudHMoZWxlbWVudHM6IGN5dG9zY2FwZS5FbGVtZW50RGVmaW5pdGlvbltdLCBwcmV2UG9zaXRpb25zPzogYW55KSB7XG4gICAgbGV0IGhhc1ByZXZpb3VzUG9zaXRpb25zID0gcHJldlBvc2l0aW9ucyAmJiBwcmV2UG9zaXRpb25zLmxlbmd0aCA+IDA7XG4gICAgbGV0IHBvc2l0aW9uQ2FjaGU6IHsgW2luZGV4OiBzdHJpbmddOiBjeXRvc2NhcGUuUG9zaXRpb24gfSA9IHt9O1xuXG4gICAgaWYgKGhhc1ByZXZpb3VzUG9zaXRpb25zKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByZXZQb3NpdGlvbnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgbGV0IGl0ZW0gPSBwcmV2UG9zaXRpb25zW2ldO1xuICAgICAgICBpZiAoIXBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdKVxuICAgICAgICAgIHBvc2l0aW9uQ2FjaGVbaXRlbS5kYXRhKCkuaWRdID0gaXRlbS5wb3NpdGlvbigpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZWxlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGxldCBlbCA9IGVsZW1lbnRzW2ldO1xuICAgICAgaWYgKGVsLmdyb3VwID09IFwiZWRnZXNcIiAmJiAoIWVsLmRhdGEuc291cmNlICYmICFlbC5kYXRhLnRhcmdldCkpIHtcbiAgICAgICAgaWYgKCFlbC5kYXRhLmlkLmluY2x1ZGVzKFwiLVwiKSlcbiAgICAgICAgICB0aGlzLnNlcnZpY2UubG9nKFwiRVwiLCBcIklmIHlvdSBkb24ndCBzcGVjaWZ5IGEgc291cmNlIGFuZCBhIHRhcmdldCBmb3IgYW4gZWRnZSB5b3UgaGF2ZSB0byB3cml0ZSBpdHMgaWQgaW4gdGhlIGZvcm1hdCB7c291cmNlfS17dGFyZ2V0fVwiKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgdmFyIHNvdXJjZVRhcmdldCA9IGVsLmRhdGEuaWQuc3BsaXQoJy0nKTtcbiAgICAgICAgICBlbC5kYXRhLnNvdXJjZSA9IHNvdXJjZVRhcmdldFswXS50cmltKCk7XG4gICAgICAgICAgZWwuZGF0YS50YXJnZXQgPSBzb3VyY2VUYXJnZXRbMV0udHJpbSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChoYXNQcmV2aW91c1Bvc2l0aW9ucyAmJiBlbC5ncm91cCA9PSBcIm5vZGVzXCIpXG4gICAgICAgIGVsLnBvc2l0aW9uID0gcG9zaXRpb25DYWNoZVtlbC5kYXRhLmlkXVxuICAgIH1cbiAgfVxufSJdfQ==
@@ -0,0 +1,28 @@
1
+ import { NgModule } from '@angular/core';
2
+ import { EsDiagramComponent } from './components/es-diagram.component';
3
+ import { FormsModule, ReactiveFormsModule } from '@angular/forms';
4
+ import { CommonModule } from '@angular/common';
5
+ import { EsDiagramService } from './services/es-diagram.service';
6
+ import { EsDiagramDispatcher } from './services/es-diagram.dispatcher';
7
+ import { DIA_LOCALE, DIA_DEBUG_MODE } from './tokens';
8
+ export class EsDiagramModule {
9
+ static forRoot(config) {
10
+ return {
11
+ ngModule: EsDiagramModule,
12
+ providers: [
13
+ EsDiagramService,
14
+ EsDiagramDispatcher,
15
+ { provide: DIA_LOCALE, useValue: (config === null || config === void 0 ? void 0 : config.locale) || 'it-IT' },
16
+ { provide: DIA_DEBUG_MODE, useValue: (config === null || config === void 0 ? void 0 : config.debugMode) || false },
17
+ ]
18
+ };
19
+ }
20
+ }
21
+ EsDiagramModule.decorators = [
22
+ { type: NgModule, args: [{
23
+ declarations: [EsDiagramComponent],
24
+ imports: [CommonModule, FormsModule, ReactiveFormsModule, CommonModule],
25
+ exports: [EsDiagramComponent]
26
+ },] }
27
+ ];
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNkaWFncmFtLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2VzLWRpYWdyYW1zL3NyYy9saWIvZXNkaWFncmFtLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXVCLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUV0RSxPQUFPLEVBQUUsV0FBVyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFDakUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzlDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBR3ZFLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBT3RELE1BQU0sT0FBTyxlQUFlO0lBQzFCLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBOEI7UUFDM0MsT0FBTztZQUNMLFFBQVEsRUFBRSxlQUFlO1lBQ3pCLFNBQVMsRUFBRTtnQkFDVCxnQkFBZ0I7Z0JBQ2hCLG1CQUFtQjtnQkFDbkIsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFBLE1BQU0sYUFBTixNQUFNLHVCQUFOLE1BQU0sQ0FBRSxNQUFNLEtBQUksT0FBTyxFQUFFO2dCQUM1RCxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLENBQUEsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLFNBQVMsS0FBSSxLQUFLLEVBQUU7YUFDbEU7U0FDRixDQUFDO0lBQ0osQ0FBQzs7O1lBaEJGLFFBQVEsU0FBQztnQkFDUixZQUFZLEVBQUUsQ0FBRSxrQkFBa0IsQ0FBRTtnQkFDcEMsT0FBTyxFQUFFLENBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxZQUFZLENBQUU7Z0JBQ3pFLE9BQU8sRUFBRSxDQUFFLGtCQUFrQixDQUFFO2FBQ2hDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTW9kdWxlV2l0aFByb3ZpZGVycywgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRXNEaWFncmFtQ29tcG9uZW50IH0gZnJvbSAnLi9jb21wb25lbnRzL2VzLWRpYWdyYW0uY29tcG9uZW50J1xuXG5pbXBvcnQgeyBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgRXNEaWFncmFtU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXMtZGlhZ3JhbS5zZXJ2aWNlJztcbmltcG9ydCB7IEVzRGlhZ3JhbURpc3BhdGNoZXIgfSBmcm9tICcuL3NlcnZpY2VzL2VzLWRpYWdyYW0uZGlzcGF0Y2hlcic7XG5pbXBvcnQgeyBFc0RpYWdyYW1Nb2R1bGVDb25maWcgfSBmcm9tICcuL21vZGVscy9Fc0RpYWdyYW1Nb2R1bGVDb25maWcnO1xuXG5pbXBvcnQgeyBESUFfTE9DQUxFLCBESUFfREVCVUdfTU9ERSB9IGZyb20gJy4vdG9rZW5zJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbIEVzRGlhZ3JhbUNvbXBvbmVudCBdLFxuICBpbXBvcnRzOiBbIENvbW1vbk1vZHVsZSwgRm9ybXNNb2R1bGUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIENvbW1vbk1vZHVsZSBdLFxuICBleHBvcnRzOiBbIEVzRGlhZ3JhbUNvbXBvbmVudCBdXG59KVxuZXhwb3J0IGNsYXNzIEVzRGlhZ3JhbU1vZHVsZSB7XG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZz86IEVzRGlhZ3JhbU1vZHVsZUNvbmZpZyk6IE1vZHVsZVdpdGhQcm92aWRlcnM8RXNEaWFncmFtTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBFc0RpYWdyYW1Nb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAgRXNEaWFncmFtU2VydmljZSxcbiAgICAgICAgRXNEaWFncmFtRGlzcGF0Y2hlcixcbiAgICAgICAgeyBwcm92aWRlOiBESUFfTE9DQUxFLCB1c2VWYWx1ZTogY29uZmlnPy5sb2NhbGUgfHwgJ2l0LUlUJyB9LFxuICAgICAgICB7IHByb3ZpZGU6IERJQV9ERUJVR19NT0RFLCB1c2VWYWx1ZTogY29uZmlnPy5kZWJ1Z01vZGUgfHwgZmFsc2UgfSxcbiAgICAgIF1cbiAgICB9O1xuICB9XG59Il19
@@ -0,0 +1,34 @@
1
+ import { Injectable } from "@angular/core";
2
+ import * as i0 from "@angular/core";
3
+ /**
4
+ * Classe che fornisce metodi reattivi di estensione. Per ora implementato solo uno pseudo-throttle
5
+ */
6
+ export class ReactiveExtensions {
7
+ constructor() {
8
+ /**
9
+ * Cache di tutti i timer in esecuzione
10
+ */
11
+ this.executionTimers = {};
12
+ }
13
+ /**
14
+ * Esecuzione deleyata di una funzione. Se viene richiamata nuovamente prima di venire eseguita dopo il delay, il delay viene resettato
15
+ *
16
+ * @param {string} id Id per aiutare il servizio a distinguere funzioni con nome uguale chiamate da componenti diversi
17
+ * @param {Function} func Funzione da chiamare al termine del throttle
18
+ * @param {number} throttleTime Tempo di throttling in millisecondi
19
+ */
20
+ throttle(id, func, throttleTime = 0) {
21
+ let key = func.name + "_" + id;
22
+ //Se ho la funzione che vuole eseguire ripulisco quel timeout
23
+ if (this.executionTimers[key])
24
+ clearTimeout(this.executionTimers[key]);
25
+ //Ricreo il timeout per eseguire quella funzione dopo throttleTime millisecondi
26
+ var executionTimer = setTimeout(() => { func(); this.executionTimers[key] = null; }, throttleTime);
27
+ this.executionTimers[key] = executionTimer;
28
+ }
29
+ }
30
+ ReactiveExtensions.ɵprov = i0.ɵɵdefineInjectable({ factory: function ReactiveExtensions_Factory() { return new ReactiveExtensions(); }, token: ReactiveExtensions, providedIn: "root" });
31
+ ReactiveExtensions.decorators = [
32
+ { type: Injectable, args: [{ providedIn: "root" },] }
33
+ ];
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVhY3RpdmVFeHRlbnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9leHRlbnNpb25zL1JlYWN0aXZlRXh0ZW5zaW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUUzQzs7R0FFRztBQUVILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFHSTs7V0FFRztRQUNLLG9CQUFlLEdBQTZCLEVBQUUsQ0FBQztLQW9CMUQ7SUFsQkc7Ozs7OztPQU1HO0lBQ0ksUUFBUSxDQUFDLEVBQVUsRUFBRSxJQUFjLEVBQUUsZUFBdUIsQ0FBQztRQUNoRSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFFL0IsNkRBQTZEO1FBQzdELElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUM7WUFDekIsWUFBWSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUU1QywrRUFBK0U7UUFDL0UsSUFBSSxjQUFjLEdBQUcsVUFBVSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDbkcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxjQUFjLENBQUM7SUFDL0MsQ0FBQzs7OztZQXpCSixVQUFVLFNBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG4vKipcclxuICogQ2xhc3NlIGNoZSBmb3JuaXNjZSBtZXRvZGkgcmVhdHRpdmkgZGkgZXN0ZW5zaW9uZS4gUGVyIG9yYSBpbXBsZW1lbnRhdG8gc29sbyB1bm8gcHNldWRvLXRocm90dGxlXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46IFwicm9vdFwiIH0pXHJcbmV4cG9ydCBjbGFzcyBSZWFjdGl2ZUV4dGVuc2lvbnMge1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2FjaGUgZGkgdHV0dGkgaSB0aW1lciBpbiBlc2VjdXppb25lXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgZXhlY3V0aW9uVGltZXJzOiB7IFtpbmRleDogc3RyaW5nXTogYW55IH0gPSB7fTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIEVzZWN1emlvbmUgZGVsZXlhdGEgZGkgdW5hIGZ1bnppb25lLiBTZSB2aWVuZSByaWNoaWFtYXRhIG51b3ZhbWVudGUgcHJpbWEgZGkgdmVuaXJlIGVzZWd1aXRhIGRvcG8gaWwgZGVsYXksIGlsIGRlbGF5IHZpZW5lIHJlc2V0dGF0b1xyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gaWQgSWQgcGVyIGFpdXRhcmUgaWwgc2Vydml6aW8gYSBkaXN0aW5ndWVyZSBmdW56aW9uaSBjb24gbm9tZSB1Z3VhbGUgY2hpYW1hdGUgZGEgY29tcG9uZW50aSBkaXZlcnNpXHJcbiAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmdW5jIEZ1bnppb25lIGRhIGNoaWFtYXJlIGFsIHRlcm1pbmUgZGVsIHRocm90dGxlXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gdGhyb3R0bGVUaW1lIFRlbXBvIGRpIHRocm90dGxpbmcgaW4gbWlsbGlzZWNvbmRpXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyB0aHJvdHRsZShpZDogc3RyaW5nLCBmdW5jOiBGdW5jdGlvbiwgdGhyb3R0bGVUaW1lOiBudW1iZXIgPSAwKSB7XHJcbiAgICAgICAgbGV0IGtleSA9IGZ1bmMubmFtZSArIFwiX1wiICsgaWQ7XHJcblxyXG4gICAgICAgIC8vU2UgaG8gbGEgZnVuemlvbmUgY2hlIHZ1b2xlIGVzZWd1aXJlIHJpcHVsaXNjbyBxdWVsIHRpbWVvdXRcclxuICAgICAgICBpZiAodGhpcy5leGVjdXRpb25UaW1lcnNba2V5XSlcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuZXhlY3V0aW9uVGltZXJzW2tleV0pO1xyXG5cclxuICAgICAgICAvL1JpY3JlbyBpbCB0aW1lb3V0IHBlciBlc2VndWlyZSBxdWVsbGEgZnVuemlvbmUgZG9wbyB0aHJvdHRsZVRpbWUgbWlsbGlzZWNvbmRpXHJcbiAgICAgICAgdmFyIGV4ZWN1dGlvblRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7IGZ1bmMoKTsgdGhpcy5leGVjdXRpb25UaW1lcnNba2V5XSA9IG51bGw7IH0sIHRocm90dGxlVGltZSk7XHJcbiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lcnNba2V5XSA9IGV4ZWN1dGlvblRpbWVyO1xyXG4gICAgfVxyXG59Il19
@@ -0,0 +1,71 @@
1
+ // Grabbata felicemente da amcharts, rimuovendo helper interni, cose strane e instupidendola un po':
2
+ // https://github.com/amcharts/amcharts4/blob/7fbb61e90363a2373e6130800dee06b8a62f3aab/src/.internal/core/utils/ResizeSensor.ts
3
+ /**
4
+ * Classe di utilità che tiene d'occhio i cambiamenti di dimensione di un elemento. Un **ResizeSensor** può controllare al massimo un elemento
5
+ */
6
+ export class ResizeSensor {
7
+ /**
8
+ * Costruttore
9
+ *
10
+ * @param {HTMLElement} element Elemento HTML da controllare
11
+ * @param {Function} callback Callback da chiamare quando le dimensioni di **element** cambiano
12
+ */
13
+ constructor(element, callback) {
14
+ /**
15
+ * Riferimento all'observer nativo
16
+ */
17
+ this.observer = null;
18
+ /**
19
+ * Indica se questo oggetto è stato distrutto o no
20
+ */
21
+ this.Disposed = false;
22
+ /**
23
+ * Elemento da controllare e callback da chiamare quando le dimensioni dell'elemento cambiano
24
+ */
25
+ this.target = null;
26
+ this.makeSensor();
27
+ this.addTarget(element, callback);
28
+ }
29
+ /**
30
+ * Distruttore
31
+ */
32
+ dispose() {
33
+ if (!this.Disposed) {
34
+ this.Disposed = true;
35
+ this.removeTarget();
36
+ }
37
+ }
38
+ /**
39
+ * Creazione del sensore che sarà collegato all'elemento da osservare dal metodo **addTarget**
40
+ */
41
+ makeSensor() {
42
+ if (typeof ResizeObserver == "undefined")
43
+ throw "Resize Observer non è definito. Si prega di utilizzare un browser vero";
44
+ this.observer = new ResizeObserver((entries) => {
45
+ for (let i = 0; i < entries.length; ++i) {
46
+ if (this.target && this.target.targetEl === entries[i].target)
47
+ this.target.callback();
48
+ }
49
+ });
50
+ }
51
+ /**
52
+ * Dice al sensore di osservare l'elemento **targetEl**, richiamando **callback** qualora le dimensioni cambino
53
+ *
54
+ * @param {HTMLElement} targetEl Elemento HTML da controllare
55
+ * @param {Function} callback Callback da chiamare quando le dimensioni di **element** cambiano
56
+ */
57
+ addTarget(targetEl, callback) {
58
+ this.observer.observe(targetEl, { box: "content-box" });
59
+ this.target = { targetEl, callback };
60
+ }
61
+ /**
62
+ * Rimuove l'elemento HTML attuale dall'osservazione del **ResizeObserver**
63
+ */
64
+ removeTarget() {
65
+ if (!this.target)
66
+ return;
67
+ this.observer.unobserve(this.target.targetEl);
68
+ this.target = null;
69
+ }
70
+ }
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVzaXplU2Vuc29yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9leHRlbnNpb25zL1Jlc2l6ZVNlbnNvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxvR0FBb0c7QUFDcEcsK0hBQStIO0FBTy9IOztHQUVHO0FBQ0gsTUFBTSxPQUFPLFlBQVk7SUFpQnJCOzs7OztPQUtHO0lBQ0gsWUFBWSxPQUFvQixFQUFFLFFBQW9CO1FBckJ0RDs7V0FFRztRQUNLLGFBQVEsR0FBUSxJQUFJLENBQUM7UUFFN0I7O1dBRUc7UUFDSSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRWpDOztXQUVHO1FBQ0ssV0FBTSxHQUFnRCxJQUFJLENBQUM7UUFTL0QsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLE9BQU87UUFDVixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNoQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyxVQUFVO1FBQ2QsSUFBSSxPQUFPLGNBQWMsSUFBSSxXQUFXO1lBQ3BDLE1BQU0sd0VBQXdFLENBQUM7UUFFbkYsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQyxDQUFDLE9BQW1CLEVBQUUsRUFBRTtZQUN2RCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsRUFBRTtnQkFDckMsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNO29CQUN6RCxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO2FBQzlCO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsUUFBcUIsRUFBRSxRQUFvQjtRQUN4RCxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsRUFBRSxHQUFHLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7T0FFRztJQUNJLFlBQVk7UUFDZixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFDWixPQUFPO1FBRVgsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztJQUN2QixDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBHcmFiYmF0YSBmZWxpY2VtZW50ZSBkYSBhbWNoYXJ0cywgcmltdW92ZW5kbyBoZWxwZXIgaW50ZXJuaSwgY29zZSBzdHJhbmUgZSBpbnN0dXBpZGVuZG9sYSB1biBwbyc6XHJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbWNoYXJ0cy9hbWNoYXJ0czQvYmxvYi83ZmJiNjFlOTAzNjNhMjM3M2U2MTMwODAwZGVlMDZiOGE2MmYzYWFiL3NyYy8uaW50ZXJuYWwvY29yZS91dGlscy9SZXNpemVTZW5zb3IudHNcclxuXHJcbi8qKlxyXG4gKiBPZ2dldHRvIG5hdGl2byAqKlJlc2l6ZU9ic2VydmVyKipcclxuICovXHJcbmRlY2xhcmUgY29uc3QgUmVzaXplT2JzZXJ2ZXI6IGFueTtcclxuXHJcbi8qKlxyXG4gKiBDbGFzc2UgZGkgdXRpbGl0w6AgY2hlIHRpZW5lIGQnb2NjaGlvIGkgY2FtYmlhbWVudGkgZGkgZGltZW5zaW9uZSBkaSB1biBlbGVtZW50by4gVW4gKipSZXNpemVTZW5zb3IqKiBwdcOyIGNvbnRyb2xsYXJlIGFsIG1hc3NpbW8gdW4gZWxlbWVudG9cclxuICovXHJcbmV4cG9ydCBjbGFzcyBSZXNpemVTZW5zb3Ige1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUmlmZXJpbWVudG8gYWxsJ29ic2VydmVyIG5hdGl2b1xyXG4gICAgICovXHJcbiAgICBwcml2YXRlIG9ic2VydmVyOiBhbnkgPSBudWxsO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogSW5kaWNhIHNlIHF1ZXN0byBvZ2dldHRvIMOoIHN0YXRvIGRpc3RydXR0byBvIG5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBEaXNwb3NlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogRWxlbWVudG8gZGEgY29udHJvbGxhcmUgZSBjYWxsYmFjayBkYSBjaGlhbWFyZSBxdWFuZG8gbGUgZGltZW5zaW9uaSBkZWxsJ2VsZW1lbnRvIGNhbWJpYW5vXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdGFyZ2V0OiB7IHRhcmdldEVsOiBFbGVtZW50LCBjYWxsYmFjazogKCkgPT4gdm9pZCB9ID0gbnVsbDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvc3RydXR0b3JlXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IGVsZW1lbnQgRWxlbWVudG8gSFRNTCBkYSBjb250cm9sbGFyZVxyXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQ2FsbGJhY2sgZGEgY2hpYW1hcmUgcXVhbmRvIGxlIGRpbWVuc2lvbmkgZGkgKiplbGVtZW50KiogY2FtYmlhbm9cclxuICAgICAqL1xyXG4gICAgY29uc3RydWN0b3IoZWxlbWVudDogSFRNTEVsZW1lbnQsIGNhbGxiYWNrOiAoKSA9PiB2b2lkKSB7XHJcbiAgICAgICAgdGhpcy5tYWtlU2Vuc29yKCk7XHJcbiAgICAgICAgdGhpcy5hZGRUYXJnZXQoZWxlbWVudCwgY2FsbGJhY2spO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGlzdHJ1dHRvcmVcclxuICAgICAqL1xyXG4gICAgcHVibGljIGRpc3Bvc2UoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLkRpc3Bvc2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuRGlzcG9zZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICB0aGlzLnJlbW92ZVRhcmdldCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENyZWF6aW9uZSBkZWwgc2Vuc29yZSBjaGUgc2Fyw6AgY29sbGVnYXRvIGFsbCdlbGVtZW50byBkYSBvc3NlcnZhcmUgZGFsIG1ldG9kbyAqKmFkZFRhcmdldCoqXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgbWFrZVNlbnNvcigpIHtcclxuICAgICAgICBpZiAodHlwZW9mIFJlc2l6ZU9ic2VydmVyID09IFwidW5kZWZpbmVkXCIpXHJcbiAgICAgICAgICAgIHRocm93IFwiUmVzaXplIE9ic2VydmVyIG5vbiDDqCBkZWZpbml0by4gU2kgcHJlZ2EgZGkgdXRpbGl6emFyZSB1biBicm93c2VyIHZlcm9cIjtcclxuXHJcbiAgICAgICAgdGhpcy5vYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllczogQXJyYXk8YW55PikgPT4ge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVudHJpZXMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnRhcmdldCAmJiB0aGlzLnRhcmdldC50YXJnZXRFbCA9PT0gZW50cmllc1tpXS50YXJnZXQpXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50YXJnZXQuY2FsbGJhY2soKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRGljZSBhbCBzZW5zb3JlIGRpIG9zc2VydmFyZSBsJ2VsZW1lbnRvICoqdGFyZ2V0RWwqKiwgcmljaGlhbWFuZG8gKipjYWxsYmFjayoqIHF1YWxvcmEgbGUgZGltZW5zaW9uaSBjYW1iaW5vXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7SFRNTEVsZW1lbnR9IHRhcmdldEVsIEVsZW1lbnRvIEhUTUwgZGEgY29udHJvbGxhcmVcclxuICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIENhbGxiYWNrIGRhIGNoaWFtYXJlIHF1YW5kbyBsZSBkaW1lbnNpb25pIGRpICoqZWxlbWVudCoqIGNhbWJpYW5vXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBhZGRUYXJnZXQodGFyZ2V0RWw6IEhUTUxFbGVtZW50LCBjYWxsYmFjazogKCkgPT4gdm9pZCkge1xyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIub2JzZXJ2ZSh0YXJnZXRFbCwgeyBib3g6IFwiY29udGVudC1ib3hcIiB9KTtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IHsgdGFyZ2V0RWwsIGNhbGxiYWNrIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSaW11b3ZlIGwnZWxlbWVudG8gSFRNTCBhdHR1YWxlIGRhbGwnb3NzZXJ2YXppb25lIGRlbCAqKlJlc2l6ZU9ic2VydmVyKipcclxuICAgICAqL1xyXG4gICAgcHVibGljIHJlbW92ZVRhcmdldCgpIHtcclxuICAgICAgICBpZiAoIXRoaXMudGFyZ2V0KVxyXG4gICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIudW5vYnNlcnZlKHRoaXMudGFyZ2V0LnRhcmdldEVsKTtcclxuICAgICAgICB0aGlzLnRhcmdldCA9IG51bGw7XHJcbiAgICB9XHJcbn0iXX0=
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Classe di configurazione per il Modulo
3
+ */
4
+ export class EsDiagramModuleConfig {
5
+ }
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRXNEaWFncmFtTW9kdWxlQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZXMtZGlhZ3JhbXMvc3JjL2xpYi9tb2RlbHMvRXNEaWFncmFtTW9kdWxlQ29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxPQUFPLHFCQUFxQjtDQVdqQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxyXG4gKiBDbGFzc2UgZGkgY29uZmlndXJhemlvbmUgcGVyIGlsIE1vZHVsb1xyXG4gKi9cclxuZXhwb3J0IGNsYXNzIEVzRGlhZ3JhbU1vZHVsZUNvbmZpZ3tcclxuXHJcbiAgICAvKipcclxuICAgICAqIExvY2FsZSBkZWwgbW9kdWxvLiBQZXIgb3JhIHNvbm8gc3VwcG9ydGF0aSBzb2xvICdpdC1JVCcgZWQgJ2VuLVVTJ1xyXG4gICAgICovXHJcbiAgICBsb2NhbGU/OiBzdHJpbmc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBdHRpdmEgbyBkaXNhdHRpdmEgbGEgbW9kYWxpdMOgIGRpIGRlYnVnIHBlciBzY3JpdmVyZSBpIG1lc3NhZ2dpIGEgY29uc29sZVxyXG4gICAgICovXHJcbiAgICBkZWJ1Z01vZGU/OiBib29sZWFuO1xyXG59Il19