@lenne.tech/ng-base 14.0.3 → 14.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/base-components/base-components.module.d.ts +20 -17
- package/base-components/components/model-form/model-form.component.d.ts +9 -4
- package/base-components/components/model-form-sub/model-form-sub.component.d.ts +7 -3
- package/base-components/components/model-table/model-table.component.d.ts +14 -5
- package/base-components/components/refence-input/refence-input.component.d.ts +10 -4
- package/{shared → base-components}/directives/back-button.directive.d.ts +1 -1
- package/{src → base-components}/directives/context-menu.directive.d.ts +0 -0
- package/{shared → base-components}/directives/sort.directive.d.ts +2 -2
- package/base-components/public-api.d.ts +3 -0
- package/esm2020/base-components/base-components.module.mjs +16 -1
- package/esm2020/base-components/components/model-form/model-form.component.mjs +87 -58
- package/esm2020/base-components/components/model-form-sub/model-form-sub.component.mjs +9 -3
- package/esm2020/base-components/components/model-table/model-table.component.mjs +30 -13
- package/esm2020/base-components/components/refence-input/refence-input.component.mjs +28 -22
- package/esm2020/base-components/components/tags/tags.component.mjs +2 -2
- package/esm2020/base-components/components/upload-image/upload-image.component.mjs +3 -5
- package/esm2020/{shared → base-components}/directives/back-button.directive.mjs +2 -2
- package/esm2020/base-components/directives/context-menu.directive.mjs +108 -0
- package/esm2020/base-components/directives/sort.directive.mjs +54 -0
- package/esm2020/base-components/public-api.mjs +5 -1
- package/esm2020/public-api.mjs +1 -2
- package/esm2020/shared/classes/graphql-meta.class.mjs +52 -28
- package/esm2020/shared/classes/graphql-type.class.mjs +2 -1
- package/esm2020/shared/classes/sort.class.mjs +1 -8
- package/esm2020/shared/public-api.mjs +2 -4
- package/esm2020/shared/services/cms.service.mjs +75 -0
- package/esm2020/shared/services/graphql.service.mjs +30 -36
- package/esm2020/src/base.module.mjs +1 -5
- package/fesm2015/lenne.tech-ng-base-base-components.mjs +361 -114
- package/fesm2015/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base-shared.mjs +203 -190
- package/fesm2015/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2015/lenne.tech-ng-base.mjs +2 -113
- package/fesm2015/lenne.tech-ng-base.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-base-components.mjs +340 -99
- package/fesm2020/lenne.tech-ng-base-base-components.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base-shared.mjs +201 -188
- package/fesm2020/lenne.tech-ng-base-shared.mjs.map +1 -1
- package/fesm2020/lenne.tech-ng-base.mjs +2 -112
- package/fesm2020/lenne.tech-ng-base.mjs.map +1 -1
- package/package.json +1 -1
- package/public-api.d.ts +0 -1
- package/shared/classes/graphql-meta.class.d.ts +7 -4
- package/shared/classes/graphql-type.class.d.ts +1 -0
- package/shared/classes/sort.class.d.ts +0 -7
- package/shared/public-api.d.ts +1 -2
- package/shared/services/cms.service.d.ts +23 -0
- package/shared/services/graphql.service.d.ts +4 -4
- package/src/base.module.d.ts +9 -10
- package/esm2020/shared/directives/sort.directive.mjs +0 -54
- package/esm2020/src/directives/context-menu.directive.mjs +0 -109
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
import { Directive, HostListener, Inject, Input } from '@angular/core';
|
|
2
|
-
import { DOCUMENT } from '@angular/common';
|
|
3
|
-
import { Sort } from '../classes/sort.class';
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
export class SortDirective {
|
|
6
|
-
constructor(renderer, targetElem, document) {
|
|
7
|
-
this.renderer = renderer;
|
|
8
|
-
this.targetElem = targetElem;
|
|
9
|
-
}
|
|
10
|
-
/**
|
|
11
|
-
* Sorts columns on click
|
|
12
|
-
*/
|
|
13
|
-
sortColumn() {
|
|
14
|
-
const items = document.getElementsByTagName('th');
|
|
15
|
-
for (let i = 0; i < items.length; i++) {
|
|
16
|
-
items[i].classList.remove('asc');
|
|
17
|
-
items[i].classList.remove('desc');
|
|
18
|
-
}
|
|
19
|
-
const sort = new Sort();
|
|
20
|
-
const elem = this.targetElem.nativeElement;
|
|
21
|
-
const order = elem.getAttribute('data-order');
|
|
22
|
-
const type = elem.getAttribute('data-type');
|
|
23
|
-
const property = elem.getAttribute('data-name');
|
|
24
|
-
if (order === 'desc') {
|
|
25
|
-
this.lcSort.sort(sort.startSort(property, order, type));
|
|
26
|
-
elem.setAttribute('data-order', 'asc');
|
|
27
|
-
elem.classList.remove('desc');
|
|
28
|
-
elem.classList.add('asc');
|
|
29
|
-
}
|
|
30
|
-
else {
|
|
31
|
-
this.lcSort.sort(sort.startSort(property, order, type));
|
|
32
|
-
elem.setAttribute('data-order', 'desc');
|
|
33
|
-
elem.classList.remove('asc');
|
|
34
|
-
elem.classList.add('desc');
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
SortDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: SortDirective, deps: [{ token: i0.Renderer2 }, { token: i0.ElementRef }, { token: DOCUMENT }], target: i0.ɵɵFactoryTarget.Directive });
|
|
39
|
-
SortDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: SortDirective, selector: "[baseSort]", inputs: { lcSort: "lcSort" }, host: { listeners: { "click": "sortColumn()" } }, ngImport: i0 });
|
|
40
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: SortDirective, decorators: [{
|
|
41
|
-
type: Directive,
|
|
42
|
-
args: [{
|
|
43
|
-
selector: '[baseSort]',
|
|
44
|
-
}]
|
|
45
|
-
}], ctorParameters: function () { return [{ type: i0.Renderer2 }, { type: i0.ElementRef }, { type: Document, decorators: [{
|
|
46
|
-
type: Inject,
|
|
47
|
-
args: [DOCUMENT]
|
|
48
|
-
}] }]; }, propDecorators: { lcSort: [{
|
|
49
|
-
type: Input
|
|
50
|
-
}], sortColumn: [{
|
|
51
|
-
type: HostListener,
|
|
52
|
-
args: ['click']
|
|
53
|
-
}] } });
|
|
54
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29ydC5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1iYXNlL3NoYXJlZC9kaXJlY3RpdmVzL3NvcnQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFLN0MsTUFBTSxPQUFPLGFBQWE7SUFFeEIsWUFBb0IsUUFBbUIsRUFBVSxVQUFzQixFQUFvQixRQUFrQjtRQUF6RixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUF5QyxDQUFDO0lBRWpIOztPQUVHO0lBRUgsVUFBVTtRQUNSLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUNuQztRQUVELE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7UUFFeEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFFM0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUU5QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFaEQsSUFBSSxLQUFLLEtBQUssTUFBTSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQzNCO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUN4RCxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM3QixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztTQUM1QjtJQUNILENBQUM7OzBHQXBDVSxhQUFhLHFFQUV5RCxRQUFROzhGQUY5RSxhQUFhOzJGQUFiLGFBQWE7a0JBSHpCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLFlBQVk7aUJBQ3ZCOzJHQUdzRyxRQUFROzBCQUFuQyxNQUFNOzJCQUFDLFFBQVE7NENBRGhGLE1BQU07c0JBQWQsS0FBSztnQkFPTixVQUFVO3NCQURULFlBQVk7dUJBQUMsT0FBTyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyLCBJbmplY3QsIElucHV0LCBSZW5kZXJlcjIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFNvcnQgfSBmcm9tICcuLi9jbGFzc2VzL3NvcnQuY2xhc3MnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbYmFzZVNvcnRdJyxcbn0pXG5leHBvcnQgY2xhc3MgU29ydERpcmVjdGl2ZSB7XG4gIEBJbnB1dCgpIGxjU29ydDogQXJyYXk8YW55PjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIHRhcmdldEVsZW06IEVsZW1lbnRSZWYsIEBJbmplY3QoRE9DVU1FTlQpIGRvY3VtZW50OiBEb2N1bWVudCkge31cblxuICAvKipcbiAgICogU29ydHMgY29sdW1ucyBvbiBjbGlja1xuICAgKi9cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBzb3J0Q29sdW1uKCk6IHZvaWQge1xuICAgIGNvbnN0IGl0ZW1zID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RoJyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbXNbaV0uY2xhc3NMaXN0LnJlbW92ZSgnYXNjJyk7XG4gICAgICBpdGVtc1tpXS5jbGFzc0xpc3QucmVtb3ZlKCdkZXNjJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydCA9IG5ldyBTb3J0KCk7XG5cbiAgICBjb25zdCBlbGVtID0gdGhpcy50YXJnZXRFbGVtLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBjb25zdCBvcmRlciA9IGVsZW0uZ2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJyk7XG5cbiAgICBjb25zdCB0eXBlID0gZWxlbS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdHlwZScpO1xuXG4gICAgY29uc3QgcHJvcGVydHkgPSBlbGVtLmdldEF0dHJpYnV0ZSgnZGF0YS1uYW1lJyk7XG5cbiAgICBpZiAob3JkZXIgPT09ICdkZXNjJykge1xuICAgICAgdGhpcy5sY1NvcnQuc29ydChzb3J0LnN0YXJ0U29ydChwcm9wZXJ0eSwgb3JkZXIsIHR5cGUpKTtcbiAgICAgIGVsZW0uc2V0QXR0cmlidXRlKCdkYXRhLW9yZGVyJywgJ2FzYycpO1xuICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKCdkZXNjJyk7XG4gICAgICBlbGVtLmNsYXNzTGlzdC5hZGQoJ2FzYycpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmxjU29ydC5zb3J0KHNvcnQuc3RhcnRTb3J0KHByb3BlcnR5LCBvcmRlciwgdHlwZSkpO1xuICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2RhdGEtb3JkZXInLCAnZGVzYycpO1xuICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKCdhc2MnKTtcbiAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZCgnZGVzYycpO1xuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
import { Directive, Input, Output } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
/**
|
|
4
|
-
* Directive vor context menu
|
|
5
|
-
* See https://stackblitz.com/edit/angular-custom-context-menu
|
|
6
|
-
*/
|
|
7
|
-
export class ContextMenuDirective {
|
|
8
|
-
constructor(el) {
|
|
9
|
-
this.el = el;
|
|
10
|
-
this.xGap = 0;
|
|
11
|
-
this.yGap = 0;
|
|
12
|
-
this.overflowSpace = 10;
|
|
13
|
-
this.selectors = '*';
|
|
14
|
-
this.clickedElement = null;
|
|
15
|
-
this.previousDisplayStatus = null;
|
|
16
|
-
}
|
|
17
|
-
ngOnInit() {
|
|
18
|
-
if (this.ltContextMenu) {
|
|
19
|
-
this.previousDisplayStatus = this.ltContextMenu.style.display;
|
|
20
|
-
}
|
|
21
|
-
// Add a click listener to the window,
|
|
22
|
-
// so that we can close the context menu on left click
|
|
23
|
-
window.addEventListener('click', () => {
|
|
24
|
-
this.showContextMenu(null, false);
|
|
25
|
-
});
|
|
26
|
-
// Close context menu when escape is pressed
|
|
27
|
-
window.addEventListener('keydown', (e) => {
|
|
28
|
-
if (e.code === 'Escape') {
|
|
29
|
-
this.showContextMenu(null, false);
|
|
30
|
-
}
|
|
31
|
-
});
|
|
32
|
-
// Add an event listener to listen to the 'contextmenu' event
|
|
33
|
-
this.el.nativeElement.addEventListener('contextmenu', (e) => {
|
|
34
|
-
// Prevent the default context menu to popup
|
|
35
|
-
if (e.preventDefault) {
|
|
36
|
-
e.preventDefault();
|
|
37
|
-
}
|
|
38
|
-
// Shows our own context menu
|
|
39
|
-
this.showContextMenu(e, true);
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
// Shows or hides our custom context menu, which is specified as a input
|
|
43
|
-
showContextMenu(event, show) {
|
|
44
|
-
const cm = this.ltContextMenu;
|
|
45
|
-
if (cm) {
|
|
46
|
-
// Try to open context menu
|
|
47
|
-
if (show && event && event instanceof MouseEvent) {
|
|
48
|
-
// Get valid clicked structureElement
|
|
49
|
-
const clickedElement = event?.target?.closest(this.selectors);
|
|
50
|
-
if (clickedElement) {
|
|
51
|
-
// Set clicked structureElement
|
|
52
|
-
this.clickedElement = clickedElement;
|
|
53
|
-
setTimeout(() => {
|
|
54
|
-
// Set display status
|
|
55
|
-
cm.style.display = 'block';
|
|
56
|
-
// Calculate top position
|
|
57
|
-
let top = event.y + this.yGap;
|
|
58
|
-
if (top + cm.offsetHeight + 10 > document.documentElement.clientHeight) {
|
|
59
|
-
top = document.documentElement.clientHeight - cm.offsetHeight - this.overflowSpace;
|
|
60
|
-
}
|
|
61
|
-
// Calculate left position
|
|
62
|
-
let left = event.x + this.xGap;
|
|
63
|
-
if (left + cm.offsetWidth + 10 > document.documentElement.clientWidth) {
|
|
64
|
-
left = document.documentElement.clientWidth - cm.offsetWidth - this.overflowSpace;
|
|
65
|
-
}
|
|
66
|
-
// Set position
|
|
67
|
-
cm.style.top = top + 'px';
|
|
68
|
-
cm.style.left = left + 'px';
|
|
69
|
-
// Show
|
|
70
|
-
cm.style.opacity = '1.0';
|
|
71
|
-
cm.style['pointer-events'] = 'auto';
|
|
72
|
-
}, 1);
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
// Close context menu
|
|
77
|
-
this.clickedElement = null;
|
|
78
|
-
if (this.previousDisplayStatus) {
|
|
79
|
-
cm.style.display = this.previousDisplayStatus;
|
|
80
|
-
}
|
|
81
|
-
cm.style.opacity = '0.01';
|
|
82
|
-
cm.style['pointer-events'] = 'none';
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
ContextMenuDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ContextMenuDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
87
|
-
ContextMenuDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.1.0", type: ContextMenuDirective, selector: "[ltContextMenu]", inputs: { contextMenuData: "contextMenuData", ltContextMenu: "ltContextMenu", xGap: "xGap", yGap: "yGap", overflowSpace: "overflowSpace", selectors: "selectors" }, outputs: { clickedElement: "clickedElement" }, exportAs: ["contextMenuData"], ngImport: i0 });
|
|
88
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.1.0", ngImport: i0, type: ContextMenuDirective, decorators: [{
|
|
89
|
-
type: Directive,
|
|
90
|
-
args: [{
|
|
91
|
-
selector: '[ltContextMenu]',
|
|
92
|
-
exportAs: 'contextMenuData',
|
|
93
|
-
}]
|
|
94
|
-
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { contextMenuData: [{
|
|
95
|
-
type: Input
|
|
96
|
-
}], ltContextMenu: [{
|
|
97
|
-
type: Input
|
|
98
|
-
}], xGap: [{
|
|
99
|
-
type: Input
|
|
100
|
-
}], yGap: [{
|
|
101
|
-
type: Input
|
|
102
|
-
}], overflowSpace: [{
|
|
103
|
-
type: Input
|
|
104
|
-
}], selectors: [{
|
|
105
|
-
type: Input
|
|
106
|
-
}], clickedElement: [{
|
|
107
|
-
type: Output
|
|
108
|
-
}] } });
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWJhc2Uvc3JjL2RpcmVjdGl2ZXMvY29udGV4dC1tZW51LmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBRTdFOzs7R0FHRztBQUtILE1BQU0sT0FBTyxvQkFBb0I7SUFVL0IsWUFBb0IsRUFBYztRQUFkLE9BQUUsR0FBRixFQUFFLENBQVk7UUFQekIsU0FBSSxHQUFHLENBQUMsQ0FBQztRQUNULFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxrQkFBYSxHQUFHLEVBQUUsQ0FBQztRQUNuQixjQUFTLEdBQUcsR0FBRyxDQUFDO1FBQ2YsbUJBQWMsR0FBWSxJQUFJLENBQUM7UUFDekMsMEJBQXFCLEdBQVcsSUFBSSxDQUFDO0lBRUEsQ0FBQztJQUV0QyxRQUFRO1FBQ04sSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7U0FDL0Q7UUFFRCxzQ0FBc0M7UUFDdEMsc0RBQXNEO1FBQ3RELE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BDLENBQUMsQ0FBQyxDQUFDO1FBRUgsNENBQTRDO1FBQzVDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUN2QyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFO2dCQUN2QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FB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cEIsb0JBQW9CO2tCQUpoQyxTQUFTO21CQUFDO29CQUNULFFBQVEsRUFBRSxpQkFBaUI7b0JBQzNCLFFBQVEsRUFBRSxpQkFBaUI7aUJBQzVCO2lHQUVVLGVBQWU7c0JBQXZCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLGFBQWE7c0JBQXJCLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxjQUFjO3NCQUF2QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBEaXJlY3RpdmUgdm9yIGNvbnRleHQgbWVudVxuICogU2VlIGh0dHBzOi8vc3RhY2tibGl0ei5jb20vZWRpdC9hbmd1bGFyLWN1c3RvbS1jb250ZXh0LW1lbnVcbiAqL1xuQERpcmVjdGl2ZSh7XG4gIHNlbGVjdG9yOiAnW2x0Q29udGV4dE1lbnVdJyxcbiAgZXhwb3J0QXM6ICdjb250ZXh0TWVudURhdGEnLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZXh0TWVudURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIEBJbnB1dCgpIGNvbnRleHRNZW51RGF0YT86IGFueTtcbiAgQElucHV0KCkgbHRDb250ZXh0TWVudTogSFRNTEVsZW1lbnQ7XG4gIEBJbnB1dCgpIHhHYXAgPSAwO1xuICBASW5wdXQoKSB5R2FwID0gMDtcbiAgQElucHV0KCkgb3ZlcmZsb3dTcGFjZSA9IDEwO1xuICBASW5wdXQoKSBzZWxlY3RvcnMgPSAnKic7XG4gIEBPdXRwdXQoKSBjbGlja2VkRWxlbWVudDogRWxlbWVudCA9IG51bGw7XG4gIHByZXZpb3VzRGlzcGxheVN0YXR1czogc3RyaW5nID0gbnVsbDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGVsOiBFbGVtZW50UmVmKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLmx0Q29udGV4dE1lbnUpIHtcbiAgICAgIHRoaXMucHJldmlvdXNEaXNwbGF5U3RhdHVzID0gdGhpcy5sdENvbnRleHRNZW51LnN0eWxlLmRpc3BsYXk7XG4gICAgfVxuXG4gICAgLy8gQWRkIGEgY2xpY2sgbGlzdGVuZXIgdG8gdGhlIHdpbmRvdyxcbiAgICAvLyBzbyB0aGF0IHdlIGNhbiBjbG9zZSB0aGUgY29udGV4dCBtZW51IG9uIGxlZnQgY2xpY2tcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCAoKSA9PiB7XG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudShudWxsLCBmYWxzZSk7XG4gICAgfSk7XG5cbiAgICAvLyBDbG9zZSBjb250ZXh0IG1lbnUgd2hlbiBlc2NhcGUgaXMgcHJlc3NlZFxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywgKGUpID0+IHtcbiAgICAgIGlmIChlLmNvZGUgPT09ICdFc2NhcGUnKSB7XG4gICAgICAgIHRoaXMuc2hvd0NvbnRleHRNZW51KG51bGwsIGZhbHNlKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIEFkZCBhbiBldmVudCBsaXN0ZW5lciB0byBsaXN0ZW4gdG8gdGhlICdjb250ZXh0bWVudScgZXZlbnRcbiAgICB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY29udGV4dG1lbnUnLCAoZSkgPT4ge1xuICAgICAgLy8gUHJldmVudCB0aGUgZGVmYXVsdCBjb250ZXh0IG1lbnUgdG8gcG9wdXBcbiAgICAgIGlmIChlLnByZXZlbnREZWZhdWx0KSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgIH1cbiAgICAgIC8vIFNob3dzIG91ciBvd24gY29udGV4dCBtZW51XG4gICAgICB0aGlzLnNob3dDb250ZXh0TWVudShlLCB0cnVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8vIFNob3dzIG9yIGhpZGVzIG91ciBjdXN0b20gY29udGV4dCBtZW51LCB3aGljaCBpcyBzcGVjaWZpZWQgYXMgYSBpbnB1dFxuICBzaG93Q29udGV4dE1lbnUoZXZlbnQsIHNob3c6IGJvb2xlYW4pIHtcbiAgICBjb25zdCBjbSA9IHRoaXMubHRDb250ZXh0TWVudTtcbiAgICBpZiAoY20pIHtcbiAgICAgIC8vIFRyeSB0byBvcGVuIGNvbnRleHQgbWVudVxuICAgICAgaWYgKHNob3cgJiYgZXZlbnQgJiYgZXZlbnQgaW5zdGFuY2VvZiBNb3VzZUV2ZW50KSB7XG4gICAgICAgIC8vIEdldCB2YWxpZCBjbGlja2VkIHN0cnVjdHVyZUVsZW1lbnRcbiAgICAgICAgY29uc3QgY2xpY2tlZEVsZW1lbnQgPSAoZXZlbnQ/LnRhcmdldCBhcyBIVE1MRWxlbWVudCk/LmNsb3Nlc3QodGhpcy5zZWxlY3RvcnMpO1xuICAgICAgICBpZiAoY2xpY2tlZEVsZW1lbnQpIHtcbiAgICAgICAgICAvLyBTZXQgY2xpY2tlZCBzdHJ1Y3R1cmVFbGVtZW50XG4gICAgICAgICAgdGhpcy5jbGlja2VkRWxlbWVudCA9IGNsaWNrZWRFbGVtZW50O1xuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAvLyBTZXQgZGlzcGxheSBzdGF0dXNcbiAgICAgICAgICAgIGNtLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xuXG4gICAgICAgICAgICAvLyBDYWxjdWxhdGUgdG9wIHBvc2l0aW9uXG4gICAgICAgICAgICBsZXQgdG9wID0gZXZlbnQueSArIHRoaXMueUdhcDtcbiAgICAgICAgICAgIGlmICh0b3AgKyBjbS5vZmZzZXRIZWlnaHQgKyAxMCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpIHtcbiAgICAgICAgICAgICAgdG9wID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAtIGNtLm9mZnNldEhlaWdodCAtIHRoaXMub3ZlcmZsb3dTcGFjZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ2FsY3VsYXRlIGxlZnQgcG9zaXRpb25cbiAgICAgICAgICAgIGxldCBsZWZ0ID0gZXZlbnQueCArIHRoaXMueEdhcDtcbiAgICAgICAgICAgIGlmIChsZWZ0ICsgY20ub2Zmc2V0V2lkdGggKyAxMCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkge1xuICAgICAgICAgICAgICBsZWZ0ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoIC0gY20ub2Zmc2V0V2lkdGggLSB0aGlzLm92ZXJmbG93U3BhY2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIFNldCBwb3NpdGlvblxuICAgICAgICAgICAgY20uc3R5bGUudG9wID0gdG9wICsgJ3B4JztcbiAgICAgICAgICAgIGNtLnN0eWxlLmxlZnQgPSBsZWZ0ICsgJ3B4JztcblxuICAgICAgICAgICAgLy8gU2hvd1xuICAgICAgICAgICAgY20uc3R5bGUub3BhY2l0eSA9ICcxLjAnO1xuICAgICAgICAgICAgY20uc3R5bGVbJ3BvaW50ZXItZXZlbnRzJ10gPSAnYXV0byc7XG4gICAgICAgICAgfSwgMSk7XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQ2xvc2UgY29udGV4dCBtZW51XG4gICAgICB0aGlzLmNsaWNrZWRFbGVtZW50ID0gbnVsbDtcbiAgICAgIGlmICh0aGlzLnByZXZpb3VzRGlzcGxheVN0YXR1cykge1xuICAgICAgICBjbS5zdHlsZS5kaXNwbGF5ID0gdGhpcy5wcmV2aW91c0Rpc3BsYXlTdGF0dXM7XG4gICAgICB9XG4gICAgICBjbS5zdHlsZS5vcGFjaXR5ID0gJzAuMDEnO1xuICAgICAgY20uc3R5bGVbJ3BvaW50ZXItZXZlbnRzJ10gPSAnbm9uZSc7XG4gICAgfVxuICB9XG59XG4iXX0=
|