@theseam/ui-common 0.4.1 → 0.4.3
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/esm2020/datatable/datatable-action-menu/datatable-action-menu.component.mjs +1 -1
- package/esm2020/datatable/datatable-column-preferences-button/datatable-column-preferences-button.component.mjs +1 -1
- package/esm2020/datatable/datatable-export-button/datatable-export-button.component.mjs +1 -1
- package/esm2020/datatable-dynamic/datatable-dynamic-action-menu/datatable-dynamic-action-menu.component.mjs +1 -1
- package/esm2020/framework/schema-form-controls/schema-form-submit-split/schema-form-submit-split.component.mjs +1 -1
- package/esm2020/framework/top-bar/top-bar.component.mjs +1 -1
- package/esm2020/google-maps/google-maps/google-maps.component.mjs +32 -8
- package/esm2020/google-maps/google-maps-feature-helpers.mjs +13 -1
- package/esm2020/google-maps/google-maps.module.mjs +4 -2
- package/esm2020/google-maps/google-maps.service.mjs +96 -25
- package/esm2020/google-maps/public-api.mjs +2 -1
- package/esm2020/menu/menu-item.component.mjs +43 -15
- package/esm2020/menu/menu-toggle.directive.mjs +202 -43
- package/esm2020/menu/menu.component.mjs +37 -14
- package/esm2020/utils/geo-json/close-polygons.mjs +38 -0
- package/esm2020/utils/public-api.mjs +2 -1
- package/esm2020/widget/widget/widget.component.mjs +54 -33
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs +1 -1
- package/fesm2015/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-datatable.mjs +3 -3
- package/fesm2015/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-framework.mjs +2 -2
- package/fesm2015/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-google-maps.mjs +138 -28
- package/fesm2015/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-menu.mjs +442 -228
- package/fesm2015/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-utils.mjs +39 -1
- package/fesm2015/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2015/theseam-ui-common-widget.mjs +53 -32
- package/fesm2015/theseam-ui-common-widget.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs +1 -1
- package/fesm2020/theseam-ui-common-datatable-dynamic.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-datatable.mjs +3 -3
- package/fesm2020/theseam-ui-common-datatable.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-framework.mjs +2 -2
- package/fesm2020/theseam-ui-common-framework.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-google-maps.mjs +141 -32
- package/fesm2020/theseam-ui-common-google-maps.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-menu.mjs +432 -225
- package/fesm2020/theseam-ui-common-menu.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-utils.mjs +39 -1
- package/fesm2020/theseam-ui-common-utils.mjs.map +1 -1
- package/fesm2020/theseam-ui-common-widget.mjs +53 -32
- package/fesm2020/theseam-ui-common-widget.mjs.map +1 -1
- package/google-maps/google-maps/google-maps.component.d.ts +8 -1
- package/google-maps/google-maps-feature-helpers.d.ts +3 -0
- package/google-maps/google-maps.module.d.ts +1 -1
- package/google-maps/google-maps.service.d.ts +7 -0
- package/google-maps/public-api.d.ts +1 -0
- package/menu/menu-item.component.d.ts +20 -9
- package/menu/menu-toggle.directive.d.ts +34 -11
- package/menu/menu.component.d.ts +16 -2
- package/package.json +1 -1
- package/utils/geo-json/close-polygons.d.ts +9 -0
- package/utils/public-api.d.ts +1 -0
- package/widget/widget/widget.component.d.ts +10 -11
- package/widget/widget/widget.component.scss +12 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { transition, trigger, useAnimation } from '@angular/animations';
|
|
2
2
|
import { FocusKeyManager } from '@angular/cdk/a11y';
|
|
3
3
|
import { coerceNumberProperty } from '@angular/cdk/coercion';
|
|
4
|
-
import { DOWN_ARROW, END, ESCAPE, hasModifierKey, HOME, UP_ARROW } from '@angular/cdk/keycodes';
|
|
4
|
+
import { DOWN_ARROW, END, ESCAPE, hasModifierKey, HOME, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';
|
|
5
5
|
import { ChangeDetectionStrategy, Component, EventEmitter, forwardRef, Input, Output, TemplateRef, ViewChild } from '@angular/core';
|
|
6
6
|
import { BehaviorSubject, fromEvent, merge, of, Subject, Subscription } from 'rxjs';
|
|
7
7
|
import { distinctUntilChanged, map, startWith, switchMap, takeUntil } from 'rxjs/operators';
|
|
@@ -9,6 +9,7 @@ import { menuDropdownPanelIn, menuDropdownPanelOut } from './menu-animations';
|
|
|
9
9
|
import { THESEAM_MENU_PANEL } from './menu-panel-token';
|
|
10
10
|
import * as i0 from "@angular/core";
|
|
11
11
|
import * as i1 from "@angular/common";
|
|
12
|
+
let menuPanelUid = 0;
|
|
12
13
|
export const LIB_MENU = {
|
|
13
14
|
provide: THESEAM_MENU_PANEL,
|
|
14
15
|
// tslint:disable-next-line:no-use-before-declare
|
|
@@ -28,6 +29,7 @@ export class MenuComponent {
|
|
|
28
29
|
}
|
|
29
30
|
constructor() {
|
|
30
31
|
this._ngUnsubscribe = new Subject();
|
|
32
|
+
this.panelId = `menu-panel-${menuPanelUid++}`;
|
|
31
33
|
this._footer = new BehaviorSubject(undefined);
|
|
32
34
|
this.hasFooter$ = this._footer.pipe(map(v => v !== null && v !== undefined));
|
|
33
35
|
this._header = new BehaviorSubject(undefined);
|
|
@@ -38,6 +40,10 @@ export class MenuComponent {
|
|
|
38
40
|
this._itemChanges = new Subject();
|
|
39
41
|
/** Subscription to tab events on the menu panel */
|
|
40
42
|
this._tabSubscription = Subscription.EMPTY;
|
|
43
|
+
/** Emits whenever an animation on the menu completes. */
|
|
44
|
+
this._animationDone = new Subject();
|
|
45
|
+
/** Whether the menu is animating. */
|
|
46
|
+
this._isAnimating = false;
|
|
41
47
|
this.closed = new EventEmitter();
|
|
42
48
|
this._baseWidth = new BehaviorSubject(null);
|
|
43
49
|
this.animationType = 'slide';
|
|
@@ -74,16 +80,16 @@ export class MenuComponent {
|
|
|
74
80
|
this.closed.emit('keydown');
|
|
75
81
|
}
|
|
76
82
|
break;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
83
|
+
case LEFT_ARROW:
|
|
84
|
+
if (this.parentMenu && this.direction === 'ltr') {
|
|
85
|
+
this.closed.emit('keydown');
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
case RIGHT_ARROW:
|
|
89
|
+
if (this.parentMenu && this.direction === 'rtl') {
|
|
90
|
+
this.closed.emit('keydown');
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
87
93
|
case HOME:
|
|
88
94
|
case END:
|
|
89
95
|
if (!hasModifierKey(event)) {
|
|
@@ -146,9 +152,26 @@ export class MenuComponent {
|
|
|
146
152
|
// may look for a fix to that eventually.
|
|
147
153
|
this.closed.emit('click');
|
|
148
154
|
}
|
|
155
|
+
/** Callback that is invoked when the panel animation completes. */
|
|
156
|
+
_onAnimationDone(event) {
|
|
157
|
+
this._animationDone.next(event);
|
|
158
|
+
this._isAnimating = false;
|
|
159
|
+
}
|
|
160
|
+
_onAnimationStart(event) {
|
|
161
|
+
this._isAnimating = true;
|
|
162
|
+
// Scroll the content element to the top as soon as the animation starts. This is necessary,
|
|
163
|
+
// because we move focus to the first item while it's still being animated, which can throw
|
|
164
|
+
// the browser off when it determines the scroll position. Alternatively we can move focus
|
|
165
|
+
// when the animation is done, however moving focus asynchronously will interrupt screen
|
|
166
|
+
// readers which are in the process of reading out the menu already. We take the `element`
|
|
167
|
+
// from the `event` since we can't use a `ViewChild` to access the pane.
|
|
168
|
+
if (event.toState === 'enter' && this._keyManager?.activeItemIndex === 0) {
|
|
169
|
+
event.element.scrollTop = 0;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
149
172
|
}
|
|
150
173
|
MenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: MenuComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
151
|
-
MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: MenuComponent, selector: "seam-menu", inputs: { menuClass: "menuClass", baseWidth: "baseWidth", animationType: "animationType" }, outputs: { closed: "closed" }, providers: [LIB_MENU], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], exportAs: ["seamMenu"], ngImport: i0, template: "<ng-template>\n <div class=\"seam-menu-container\"
|
|
174
|
+
MenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: MenuComponent, selector: "seam-menu", inputs: { menuClass: "menuClass", baseWidth: "baseWidth", animationType: "animationType" }, outputs: { closed: "closed" }, providers: [LIB_MENU], viewQueries: [{ propertyName: "templateRef", first: true, predicate: TemplateRef, descendants: true }], exportAs: ["seamMenu"], ngImport: i0, template: "<ng-template>\n <div class=\"seam-menu-container\"\n @slideDown\n (@slideDown.start)=\"_onAnimationStart($event)\"\n (@slideDown.done)=\"_onAnimationDone($event)\"\n [class.seam-menu-anim--slide]=\"animationType==='slide'\"\n [class.seam-menu-anim--fade]=\"animationType==='fade'\"\n [id]=\"panelId\">\n <div class=\"dropdown-menu show position-static{{ menuClass ? ' ' + menuClass : '' }}\"\n [style.width]=\"_menuWidth$ | async\"\n [class.pt-0]=\"hasHeader$ | async\"\n [class.pb-0]=\"hasFooter$ | async\"\n (keydown)=\"_handleKeydown($event)\"\n (click)=\"_dropdownMenuClick($event)\"\n tabindex=\"-1\"\n role=\"menu\"\n >\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: [".seam-menu-container.seam-menu-anim--slide{overflow:hidden}.seam-menu-container.ng-animating,.dropdown-menu.ng-animating{-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}\n"], dependencies: [{ kind: "pipe", type: i1.AsyncPipe, name: "async" }], animations: [
|
|
152
175
|
trigger('slideDown', [
|
|
153
176
|
transition(':enter', useAnimation(menuDropdownPanelIn)),
|
|
154
177
|
transition(':leave', useAnimation(menuDropdownPanelOut)),
|
|
@@ -161,7 +184,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
161
184
|
transition(':enter', useAnimation(menuDropdownPanelIn)),
|
|
162
185
|
transition(':leave', useAnimation(menuDropdownPanelOut)),
|
|
163
186
|
])
|
|
164
|
-
], changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'seamMenu', template: "<ng-template>\n <div class=\"seam-menu-container\"
|
|
187
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, exportAs: 'seamMenu', template: "<ng-template>\n <div class=\"seam-menu-container\"\n @slideDown\n (@slideDown.start)=\"_onAnimationStart($event)\"\n (@slideDown.done)=\"_onAnimationDone($event)\"\n [class.seam-menu-anim--slide]=\"animationType==='slide'\"\n [class.seam-menu-anim--fade]=\"animationType==='fade'\"\n [id]=\"panelId\">\n <div class=\"dropdown-menu show position-static{{ menuClass ? ' ' + menuClass : '' }}\"\n [style.width]=\"_menuWidth$ | async\"\n [class.pt-0]=\"hasHeader$ | async\"\n [class.pb-0]=\"hasFooter$ | async\"\n (keydown)=\"_handleKeydown($event)\"\n (click)=\"_dropdownMenuClick($event)\"\n tabindex=\"-1\"\n role=\"menu\"\n >\n <ng-content></ng-content>\n </div>\n </div>\n</ng-template>\n", styles: [".seam-menu-container.seam-menu-anim--slide{overflow:hidden}.seam-menu-container.ng-animating,.dropdown-menu.ng-animating{-webkit-user-select:none;-moz-user-select:none;user-select:none;pointer-events:none}\n"] }]
|
|
165
188
|
}], ctorParameters: function () { return []; }, propDecorators: { templateRef: [{
|
|
166
189
|
type: ViewChild,
|
|
167
190
|
args: [TemplateRef]
|
|
@@ -174,4 +197,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
174
197
|
}], animationType: [{
|
|
175
198
|
type: Input
|
|
176
199
|
}] } });
|
|
177
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHFCQUFxQixDQUFBO0FBQ3JHLE9BQU8sRUFBRSxlQUFlLEVBQWUsTUFBTSxtQkFBbUIsQ0FBQTtBQUNoRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUM1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLElBQUksRUFBMkIsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDeEgsT0FBTyxFQUVMLHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLFVBQVUsRUFDVixLQUFLLEVBRUwsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUE7QUFDdEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFjLEVBQUUsRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBRS9GLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUMzRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsb0JBQW9CLEVBQXVELE1BQU0sbUJBQW1CLENBQUE7QUFHbEksT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sb0JBQW9CLENBQUE7OztBQUt2RCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQVE7SUFDM0IsT0FBTyxFQUFFLGtCQUFrQjtJ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QUMsb0JBQW9CLENBQUMsQ0FBQzt5QkFDekQsQ0FBQztxQkFDSCxtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTSxZQUNyQyxVQUFVOzBFQTBCSSxXQUFXO3NCQUFsQyxTQUFTO3VCQUFDLFdBQVc7Z0JBRUgsTUFBTTtzQkFBeEIsTUFBTTtnQkFFRSxTQUFTO3NCQUFqQixLQUFLO2dCQU9GLFNBQVM7c0JBRFosS0FBSztnQkFXRyxhQUFhO3NCQUFyQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgZ3JvdXAsIHF1ZXJ5LCBzdHlsZSwgdHJhbnNpdGlvbiwgdHJpZ2dlciwgdXNlQW5pbWF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciwgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSdcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5ELCBFU0NBUEUsIGhhc01vZGlmaWVyS2V5LCBIT01FLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBtZW51RHJvcGRvd25QYW5lbEluLCBtZW51RHJvcGRvd25QYW5lbE91dCwgbWVudURyb3Bkb3duUGFuZWxTbGlkZUluLCBtZW51RHJvcGRvd25QYW5lbFNsaWRlT3V0IH0gZnJvbSAnLi9tZW51LWFuaW1hdGlvbnMnXG5pbXBvcnQgeyBNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS1pdGVtLmNvbXBvbmVudCdcbmltcG9ydCB7IElUaGVTZWFtTWVudVBhbmVsIH0gZnJvbSAnLi9tZW51LXBhbmVsJ1xuaW1wb3J0IHsgVEhFU0VBTV9NRU5VX1BBTkVMIH0gZnJvbSAnLi9tZW51LXBhbmVsLXRva2VuJ1xuXG5pbXBvcnQgeyBNZW51Rm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWZvb3Rlci9tZW51LWZvb3Rlci5jb21wb25lbnQnXG5pbXBvcnQgeyBNZW51SGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWhlYWRlci9tZW51LWhlYWRlci5jb21wb25lbnQnXG5cbmV4cG9ydCBjb25zdCBMSUJfTUVOVTogYW55ID0ge1xuICBwcm92aWRlOiBUSEVTRUFNX01FTlVfUEFORUwsXG4gIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby11c2UtYmVmb3JlLWRlY2xhcmVcbiAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gTWVudUNvbXBvbmVudClcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS1tZW51JyxcbiAgdGVtcGxhdGVVcmw6ICcuL21lbnUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9tZW51LmNvbXBvbmVudC5zY3NzJ10sXG4gIHByb3ZpZGVyczogWyBMSUJfTUVOVSBdLFxuICBhbmltYXRpb25zOiBbXG4gICAgdHJpZ2dlcignc2xpZGVEb3duJywgW1xuICAgICAgdHJhbnNpdGlvbignOmVudGVyJywgdXNlQW5pbWF0aW9uKG1lbnVEcm9wZG93blBhbmVsSW4pKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIHVzZUFuaW1hdGlvbihtZW51RHJvcGRvd25QYW5lbE91dCkpLFxuICAgIF0pXG4gIF0sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBleHBvcnRBczogJ3NlYW1NZW51J1xufSlcbmV4cG9ydCBjbGFzcyBNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95LCBBZnRlckNvbnRlbnRJbml0LCBJVGhlU2VhbU1lbnVQYW5lbCB7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcblxuICBwcml2YXRlIF9mb290ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lbnVGb290ZXJDb21wb25lbnQgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpXG4gIHB1YmxpYyBoYXNGb290ZXIkID0gdGhpcy5fZm9vdGVyLnBpcGUobWFwKHYgPT4gdiAhPT0gbnVsbCAmJiB2ICE9PSB1bmRlZmluZWQpKVxuXG4gIHByaXZhdGUgX2hlYWRlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUhlYWRlckNvbXBvbmVudCB8IHVuZGVmaW5lZCB8IG51bGw+KHVuZGVmaW5lZClcbiAgcHVibGljIGhhc0hlYWRlciQgPSB0aGlzLl9oZWFkZXIucGlwZShtYXAodiA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCkpXG5cbiAgcHJpdmF0ZSBfa2V5TWFuYWdlcj86IEZvY3VzS2V5TWFuYWdlcjxNZW51SXRlbUNvbXBvbmVudD5cblxuICAvKiogTWVudSBpdGVtcyBpbnNpZGUgdGhlIGN1cnJlbnQgbWVudS4gKi9cbiAgcHJpdmF0ZSBfaXRlbXM6IE1lbnVJdGVtQ29tcG9uZW50W10gPSBbXVxuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgYW1vdW50IG9mIG1lbnUgaXRlbXMgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfaXRlbUNoYW5nZXMgPSBuZXcgU3ViamVjdDxNZW51SXRlbUNvbXBvbmVudFtdPigpXG5cbiAgLyoqIFN1YnNjcmlwdGlvbiB0byB0YWIgZXZlbnRzIG9uIHRoZSBtZW51IHBhbmVsICovXG4gIHByaXZhdGUgX3RhYlN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWVxuXG4gIC8qKiBQYXJlbnQgbWVudSBvZiB0aGUgY3VycmVudCBtZW51IHBhbmVsLiAqL1xuICBwYXJlbnRNZW51OiBJVGhlU2VhbU1lbnVQYW5lbCB8IHVuZGVmaW5lZFxuXG4gIEBWaWV3Q2hpbGQoVGVtcGxhdGVSZWYpIHRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQgfCAnY2xpY2snIHwgJ2tleWRvd24nIHwgJ3RhYic+KClcblxuICBASW5wdXQoKSBtZW51Q2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICAvKipcbiAgICogRGVmaW5lcyBhIHdpZHRoIGZvciBhIG1lbnUgdGhhdCB3aWxsIHNjYWxlIGRvd24gaWYgdGhlIHdpbmRvdyBpbm5lcldpZHRoIGlzXG4gICAqIHNtYWxsZXIgdGhhbiB0aGUgdmFsdWUuXG4gICAqL1xuICBASW5wdXQoKVxuICBnZXQgYmFzZVdpZHRoKCkgeyByZXR1cm4gdGhpcy5fYmFzZVdpZHRoLnZhbHVlIH1cbiAgc2V0IGJhc2VXaWR0aCh2YWx1ZTogbnVtYmVyIHwgbnVsbCkge1xuICAgIGNvbnN0IF92YWwgPSBjb2VyY2VOdW1iZXJQcm9wZXJ0eSh2YWx1ZSwgbnVsbClcbiAgICBpZiAoX3ZhbCAhPT0gdGhpcy5fYmFzZVdpZHRoLnZhbHVlKSB7XG4gICAgICB0aGlzLl9iYXNlV2lkdGgubmV4dChfdmFsKVxuICAgIH1cbiAgfVxuICBwcml2YXRlIF9iYXNlV2lkdGggPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlciB8IG51bGw+KG51bGwpXG4gIF9tZW51V2lkdGgkOiBPYnNlcnZhYmxlPHN0cmluZyB8IHVuZGVmaW5lZD5cblxuICBASW5wdXQoKSBhbmltYXRpb25UeXBlOiAnc2xpZGUnIHwgJ2ZhZGUnID0gJ3NsaWRlJ1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX21lbnVXaWR0aCQgPSB0aGlzLl9iYXNlV2lkdGgucGlwZShcbiAgICAgIHN3aXRjaE1hcChiYXNlV2lkdGggPT4ge1xuICAgICAgICBpZiAoYmFzZVdpZHRoKSB7XG4gICAgICAgICAgcmV0dXJuIGZyb21FdmVudCh3aW5kb3csICdyZXNpemUnKS5waXBlKFxuICAgICAgICAgICAgc3RhcnRXaXRoKHVuZGVmaW5lZCksXG4gICAgICAgICAgICBtYXAoKCkgPT4gd2luZG93LmlubmVyV2lkdGggPCBiYXNlV2lkdGggPyBgJHt3aW5kb3cuaW5uZXJXaWR0aH1weGAgOiBgJHtiYXNlV2lkdGh9cHhgKVxuICAgICAgICAgIClcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2YodW5kZWZpbmVkKVxuICAgICAgfSksXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuX25nVW5zdWJzY3JpYmUpXG4gICAgKVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5fdGFiU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKClcbiAgICB0aGlzLmNsb3NlZC5jb21wbGV0ZSgpXG5cbiAgICB0aGlzLl9uZ1Vuc3Vic2NyaWJlLm5leHQodW5kZWZpbmVkKVxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUuY29tcGxldGUoKVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuICAgIHRoaXMuX2tleU1hbmFnZXIgPSBuZXcgRm9jdXNLZXlNYW5hZ2VyPE1lbnVJdGVtQ29tcG9uZW50Pih0aGlzLl9pdGVtcykud2l0aFdyYXAoKS53aXRoVHlwZUFoZWFkKClcbiAgICB0aGlzLl90YWJTdWJzY3JpcHRpb24gPSB0aGlzLl9rZXlNYW5hZ2VyLnRhYk91dC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5jbG9zZWQuZW1pdCgndGFiJykpXG4gIH1cblxuICAvKiogU3RyZWFtIHRoYXQgZW1pdHMgd2hlbmV2ZXIgdGhlIGhvdmVyZWQgbWVudSBpdGVtIGNoYW5nZXMuICovXG4gIF9ob3ZlcmVkKCk6IE9ic2VydmFibGU8TWVudUl0ZW1Db21wb25lbnQ+IHtcbiAgICByZXR1cm4gdGhpcy5faXRlbUNoYW5nZXMucGlwZShcbiAgICAgIHN0YXJ0V2l0aCh0aGlzLl9pdGVtcyksXG4gICAgICBzd2l0Y2hNYXAoaXRlbXMgPT4gbWVyZ2UoLi4uaXRlbXMubWFwKGl0ZW0gPT4gaXRlbS5faG92ZXJlZCkpKVxuICAgIClcbiAgfVxuXG4gIC8qKiBIYW5kbGUgYSBrZXlib2FyZCBldmVudCBmcm9tIHRoZSBtZW51LCBkZWxlZ2F0aW5nIHRvIHRoZSBhcHByb3ByaWF0ZSBhY3Rpb24uICovXG4gIF9oYW5kbGVLZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOmRlcHJlY2F0aW9uXG4gICAgY29uc3Qga2V5Q29kZSA9IGV2ZW50LmtleUNvZGVcbiAgICBjb25zdCBtYW5hZ2VyID0gdGhpcy5fa2V5TWFuYWdlclxuXG4gICAgc3dpdGNoIChrZXlDb2RlKSB7XG4gICAgICBjYXNlIEVTQ0FQRTpcbiAgICAgICAgaWYgKCFoYXNNb2RpZmllcktleShldmVudCkpIHtcbiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgICAgICAgdGhpcy5jbG9zZWQuZW1pdCgna2V5ZG93bicpXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIC8vIGNhc2UgTEVGVF9BUlJPVzpcbiAgICAgIC8vICAgaWYgKHRoaXMucGFyZW50TWVudSAmJiB0aGlzLmRpcmVjdGlvbiA9PT0gJ2x0cicpIHtcbiAgICAgIC8vICAgICB0aGlzLmNsb3NlZC5lbWl0KCdrZXlkb3duJylcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICBicmVha1xuICAgICAgLy8gY2FzZSBSSUdIVF9BUlJPVzpcbiAgICAgIC8vICAgaWYgKHRoaXMucGFyZW50TWVudSAmJiB0aGlzLmRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgIC8vICAgICB0aGlzLmNsb3NlZC5lbWl0KCdrZXlkb3duJylcbiAgICAgIC8vICAgfVxuICAgICAgLy8gICBicmVha1xuICAgICAgY2FzZSBIT01FOlxuICAgICAgY2FzZSBFTkQ6XG4gICAgICAgIGlmICghaGFzTW9kaWZpZXJLZXkoZXZlbnQpKSB7XG4gICAgICAgICAga2V5Q29kZSA9PT0gSE9NRSA/IG1hbmFnZXI/LnNldEZpcnN0SXRlbUFjdGl2ZSgpIDogbWFuYWdlcj8uc2V0TGFzdEl0ZW1BY3RpdmUoKVxuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGtleUNvZGUgPT09IFVQX0FSUk9XIHx8IGtleUNvZGUgPT09IERPV05fQVJST1cpIHtcbiAgICAgICAgICBtYW5hZ2VyPy5zZXRGb2N1c09yaWdpbigna2V5Ym9hcmQnKVxuICAgICAgICB9XG5cbiAgICAgICAgbWFuYWdlcj8ub25LZXlkb3duKGV2ZW50KVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb2N1cyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbWVudS5cbiAgICogQHBhcmFtIG9yaWdpbiBBY3Rpb24gZnJvbSB3aGljaCB0aGUgZm9jdXMgb3JpZ2luYXRlZC4gVXNlZCB0byBzZXQgdGhlIGNvcnJlY3Qgc3R5bGluZy5cbiAgICovXG4gIGZvY3VzRmlyc3RJdGVtKG9yaWdpbjogRm9jdXNPcmlnaW4gPSAncHJvZ3JhbScpOiB2b2lkIHtcbiAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRGb2N1c09yaWdpbihvcmlnaW4pLnNldEZpcnN0SXRlbUFjdGl2ZSgpXG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBhY3RpdmUgaXRlbSBpbiB0aGUgbWVudS4gVGhpcyBpcyB1c2VkIHdoZW4gdGhlIG1lbnUgaXMgb3BlbmVkLCBhbGxvd2luZ1xuICAgKiB0aGUgdXNlciB0byBzdGFydCBmcm9tIHRoZSBmaXJzdCBvcHRpb24gd2hlbiBwcmVzc2luZyB0aGUgZG93biBhcnJvdy5cbiAgICovXG4gIHJlc2V0QWN0aXZlSXRlbSgpIHtcbiAgICB0aGlzLl9rZXlNYW5hZ2VyPy5zZXRBY3RpdmVJdGVtKC0xKVxuICB9XG5cbiAgLyoqIFJlZ2lzdGVycyBhIG1lbnUgaXRlbSB3aXRoIHRoZSBtZW51LiAqL1xuICBhZGRJdGVtKGl0ZW06IE1lbnVJdGVtQ29tcG9uZW50KSB7XG4gICAgLy8gV2UgcmVnaXN0ZXIgdGhlIGl0ZW1zIHRocm91Z2ggdGhpcyBtZXRob2QsIHJhdGhlciB0aGFuIHBpY2tpbmcgdGhlbSB1cCB0aHJvdWdoXG4gICAgLy8gYENvbnRlbnRDaGlsZHJlbmAsIGJlY2F1c2Ugd2UgbmVlZCB0aGUgaXRlbXMgdG8gYmUgcGlja2VkIHVwIGJ5IHRoZWlyIGNsb3Nlc3RcbiAgICAvLyBgc2VhbS1tZW51YCBhbmNlc3Rvci4gSWYgd2UgdXNlZCBgQENvbnRlbnRDaGlsZHJlbihNZW51SXRlbUNvbXBvbmVudCwge2Rlc2NlbmRhbnRzOiB0cnVlfSlgLFxuICAgIC8vIGFsbCBkZXNjZW5kYW50IGl0ZW1zIHdpbGwgYmxlZWQgaW50byB0aGUgdG9wLWxldmVsIG1lbnUgaW4gdGhlIGNhc2Ugd2hlcmUgdGhlIGNvbnN1bWVyXG4gICAgLy8gaGFzIGBzZWFtLW1lbnVgIGluc3RhbmNlcyBuZXN0ZWQgaW5zaWRlIGVhY2ggb3RoZXIuXG4gICAgaWYgKHRoaXMuX2l0ZW1zLmluZGV4T2YoaXRlbSkgPT09IC0xKSB7XG4gICAgICB0aGlzLl9pdGVtcy5wdXNoKGl0ZW0pXG4gICAgICB0aGlzLl9pdGVtQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBSZW1vdmVzIGFuIGl0ZW0gZnJvbSB0aGUgbWVudS4gKi9cbiAgcmVtb3ZlSXRlbShpdGVtOiBNZW51SXRlbUNvbXBvbmVudCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5faXRlbXMuaW5kZXhPZihpdGVtKVxuXG4gICAgaWYgKHRoaXMuX2l0ZW1zLmluZGV4T2YoaXRlbSkgPiAtMSkge1xuICAgICAgdGhpcy5faXRlbXMuc3BsaWNlKGluZGV4LCAxKVxuICAgICAgdGhpcy5faXRlbUNoYW5nZXMubmV4dCh0aGlzLl9pdGVtcylcbiAgICB9XG4gIH1cblxuICAvKiogU2V0cyB0aGUgZm9vdGVyIGNvbXBvbmVudC4gKi9cbiAgc2V0Rm9vdGVyKGZvb3Rlcj86IE1lbnVGb290ZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9mb290ZXIubmV4dChmb290ZXIpXG4gIH1cblxuICAvKiogU2V0cyB0aGUgaGVhZGVyIGNvbXBvbmVudC4gKi9cbiAgc2V0SGVhZGVyKGhlYWRlcj86IE1lbnVIZWFkZXJDb21wb25lbnQpIHtcbiAgICB0aGlzLl9oZWFkZXIubmV4dChoZWFkZXIpXG4gIH1cblxuICBfZHJvcGRvd25NZW51Q2xpY2soZXZlbnQ6IEV2ZW50KSB7XG4gICAgLy8gVGhpcyBpcyBuZWVkZWQsIGJlY2F1c2Ugc29tZSBtZW51J3Mgd2lsbCBnZXQgc3R1Y2sgb3BlbiBpZiB0aGUgY29tcG9uZW50XG4gICAgLy8gbWFuYWdpbmcgdGhlIG1lbnUgaXMgZGVzdHJveWVkIGJlZm9yZSB0aGUgbWVudSBmaW5pc2hlcyBpdHMgY2xlYW51cC4gSVxuICAgIC8vIG1heSBsb29rIGZvciBhIGZpeCB0byB0aGF0IGV2ZW50dWFsbHkuXG4gICAgdGhpcy5jbG9zZWQuZW1pdCgnY2xpY2snKVxuICB9XG5cbn1cbiIsIjxuZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInNlYW0tbWVudS1jb250YWluZXJcIiBAc2xpZGVEb3duXG4gICAgW2NsYXNzLnNlYW0tbWVudS1hbmltLS1zbGlkZV09XCJhbmltYXRpb25UeXBlPT09J3NsaWRlJ1wiXG4gICAgW2NsYXNzLnNlYW0tbWVudS1hbmltLS1mYWRlXT1cImFuaW1hdGlvblR5cGU9PT0nZmFkZSdcIj5cbiAgICA8ZGl2IGNsYXNzPVwiZHJvcGRvd24tbWVudSBzaG93IHBvc2l0aW9uLXN0YXRpY3t7IG1lbnVDbGFzcyA/ICcgJyArIG1lbnVDbGFzcyA6ICcnIH19XCJcbiAgICAgIFtzdHlsZS53aWR0aF09XCJfbWVudVdpZHRoJCB8IGFzeW5jXCJcbiAgICAgIFtjbGFzcy5wdC0wXT1cImhhc0hlYWRlciQgfCBhc3luY1wiXG4gICAgICBbY2xhc3MucGItMF09XCJoYXNGb290ZXIkIHwgYXN5bmNcIlxuICAgICAgKGtleWRvd24pPVwiX2hhbmRsZUtleWRvd24oJGV2ZW50KVwiXG4gICAgICAoY2xpY2spPVwiX2Ryb3Bkb3duTWVudUNsaWNrKCRldmVudClcIlxuICAgICAgdGFiaW5kZXg9XCItMVwiXG4gICAgICByb2xlPVwibWVudVwiXG4gICAgICA+XG4gICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
|
|
200
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vbWVudS9tZW51LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi9tZW51L21lbnUuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQyxVQUFVLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBa0IsTUFBTSxxQkFBcUIsQ0FBQTtBQUNySCxPQUFPLEVBQUUsZUFBZSxFQUFlLE1BQU0sbUJBQW1CLENBQUE7QUFDaEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFDNUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQTtBQUN4SCxPQUFPLEVBRUwsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFFVCxZQUFZLEVBQ1osVUFBVSxFQUNWLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsRUFDVixNQUFNLGVBQWUsQ0FBQTtBQUN0QixPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUE7QUFFL0YsT0FBTyxFQUFFLG9CQUFvQixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFBO0FBQzNGLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxvQkFBb0IsRUFBdUQsTUFBTSxtQkFBbUIsQ0FBQTtBQUdsSSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTs7O0FBTXZELElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQTtBQUtw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O2dCQUVFLFNBQVM7c0JBQWpCLEtBQUs7Z0JBT0YsU0FBUztzQkFEWixLQUFLO2dCQVdHLGFBQWE7c0JBQXJCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBncm91cCwgcXVlcnksIHN0eWxlLCB0cmFuc2l0aW9uLCB0cmlnZ2VyLCB1c2VBbmltYXRpb24sIEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IEZvY3VzS2V5TWFuYWdlciwgRm9jdXNPcmlnaW4gfSBmcm9tICdAYW5ndWxhci9jZGsvYTExeSdcbmltcG9ydCB7IGNvZXJjZU51bWJlclByb3BlcnR5IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgRE9XTl9BUlJPVywgRU5ELCBFU0NBUEUsIGhhc01vZGlmaWVyS2V5LCBIT01FLCBMRUZUX0FSUk9XLCBSSUdIVF9BUlJPVywgVVBfQVJST1cgfSBmcm9tICdAYW5ndWxhci9jZGsva2V5Y29kZXMnXG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEV2ZW50RW1pdHRlcixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIGZyb21FdmVudCwgbWVyZ2UsIE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJ1xuXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWFwLCBzdGFydFdpdGgsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnXG5pbXBvcnQgeyBtZW51RHJvcGRvd25QYW5lbEluLCBtZW51RHJvcGRvd25QYW5lbE91dCwgbWVudURyb3Bkb3duUGFuZWxTbGlkZUluLCBtZW51RHJvcGRvd25QYW5lbFNsaWRlT3V0IH0gZnJvbSAnLi9tZW51LWFuaW1hdGlvbnMnXG5pbXBvcnQgeyBNZW51SXRlbUNvbXBvbmVudCB9IGZyb20gJy4vbWVudS1pdGVtLmNvbXBvbmVudCdcbmltcG9ydCB7IElUaGVTZWFtTWVudVBhbmVsIH0gZnJvbSAnLi9tZW51LXBhbmVsJ1xuaW1wb3J0IHsgVEhFU0VBTV9NRU5VX1BBTkVMIH0gZnJvbSAnLi9tZW51LXBhbmVsLXRva2VuJ1xuXG5pbXBvcnQgeyBNZW51Rm9vdGVyQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWZvb3Rlci9tZW51LWZvb3Rlci5jb21wb25lbnQnXG5pbXBvcnQgeyBNZW51SGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9tZW51LWhlYWRlci9tZW51LWhlYWRlci5jb21wb25lbnQnXG5pbXBvcnQgeyBEaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9jZGsvYmlkaSdcblxubGV0IG1lbnVQYW5lbFVpZCA9IDBcblxuLyoqIFJlYXNvbiB3aHkgdGhlIG1lbnUgd2FzIGNsb3NlZC4gKi9cbmV4cG9ydCB0eXBlIE1lbnVDbG9zZVJlYXNvbiA9IHZvaWQgfCAnY2xpY2snIHwgJ2tleWRvd24nIHwgJ3RhYidcblxuZXhwb3J0IGNvbnN0IExJQl9NRU5VOiBhbnkgPSB7XG4gIHByb3ZpZGU6IFRIRVNFQU1fTUVOVV9QQU5FTCxcbiAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLXVzZS1iZWZvcmUtZGVjbGFyZVxuICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBNZW51Q29tcG9uZW50KVxufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLW1lbnUnLFxuICB0ZW1wbGF0ZVVybDogJy4vbWVudS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21lbnUuY29tcG9uZW50LnNjc3MnXSxcbiAgcHJvdmlkZXJzOiBbIExJQl9NRU5VIF0sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzbGlkZURvd24nLCBbXG4gICAgICB0cmFuc2l0aW9uKCc6ZW50ZXInLCB1c2VBbmltYXRpb24obWVudURyb3Bkb3duUGFuZWxJbikpLFxuICAgICAgdHJhbnNpdGlvbignOmxlYXZlJywgdXNlQW5pbWF0aW9uKG1lbnVEcm9wZG93blBhbmVsT3V0KSksXG4gICAgXSlcbiAgXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIGV4cG9ydEFzOiAnc2VhbU1lbnUnXG59KVxuZXhwb3J0IGNsYXNzIE1lbnVDb21wb25lbnQgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQsIElUaGVTZWFtTWVudVBhbmVsIHtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9uZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKVxuXG4gIHJlYWRvbmx5IHBhbmVsSWQgPSBgbWVudS1wYW5lbC0ke21lbnVQYW5lbFVpZCsrfWBcblxuICBwcml2YXRlIF9mb290ZXIgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1lbnVGb290ZXJDb21wb25lbnQgfCB1bmRlZmluZWQgfCBudWxsPih1bmRlZmluZWQpXG4gIHB1YmxpYyBoYXNGb290ZXIkID0gdGhpcy5fZm9vdGVyLnBpcGUobWFwKHYgPT4gdiAhPT0gbnVsbCAmJiB2ICE9PSB1bmRlZmluZWQpKVxuXG4gIHByaXZhdGUgX2hlYWRlciA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWVudUhlYWRlckNvbXBvbmVudCB8IHVuZGVmaW5lZCB8IG51bGw+KHVuZGVmaW5lZClcbiAgcHVibGljIGhhc0hlYWRlciQgPSB0aGlzLl9oZWFkZXIucGlwZShtYXAodiA9PiB2ICE9PSBudWxsICYmIHYgIT09IHVuZGVmaW5lZCkpXG5cbiAgcHJpdmF0ZSBfa2V5TWFuYWdlcj86IEZvY3VzS2V5TWFuYWdlcjxNZW51SXRlbUNvbXBvbmVudD5cblxuICAvKiogTWVudSBpdGVtcyBpbnNpZGUgdGhlIGN1cnJlbnQgbWVudS4gKi9cbiAgcHJpdmF0ZSBfaXRlbXM6IE1lbnVJdGVtQ29tcG9uZW50W10gPSBbXVxuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciB0aGUgYW1vdW50IG9mIG1lbnUgaXRlbXMgY2hhbmdlcy4gKi9cbiAgcHJpdmF0ZSBfaXRlbUNoYW5nZXMgPSBuZXcgU3ViamVjdDxNZW51SXRlbUNvbXBvbmVudFtdPigpXG5cbiAgLyoqIFN1YnNjcmlwdGlvbiB0byB0YWIgZXZlbnRzIG9uIHRoZSBtZW51IHBhbmVsICovXG4gIHByaXZhdGUgX3RhYlN1YnNjcmlwdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWVxuXG4gIC8qKiBQYXJlbnQgbWVudSBvZiB0aGUgY3VycmVudCBtZW51IHBhbmVsLiAqL1xuICBwYXJlbnRNZW51OiBJVGhlU2VhbU1lbnVQYW5lbCB8IHVuZGVmaW5lZFxuXG4gIC8qKiBMYXlvdXQgZGlyZWN0aW9uIG9mIHRoZSBtZW51LiAqL1xuICBkaXJlY3Rpb246IERpcmVjdGlvbiB8IHVuZGVmaW5lZFxuXG4gIC8qKiBFbWl0cyB3aGVuZXZlciBhbiBhbmltYXRpb24gb24gdGhlIG1lbnUgY29tcGxldGVzLiAqL1xuICByZWFkb25seSBfYW5pbWF0aW9uRG9uZSA9IG5ldyBTdWJqZWN0PEFuaW1hdGlvbkV2ZW50PigpXG5cbiAgLyoqIFdoZXRoZXIgdGhlIG1lbnUgaXMgYW5pbWF0aW5nLiAqL1xuICBfaXNBbmltYXRpbmcgPSBmYWxzZVxuXG4gIEBWaWV3Q2hpbGQoVGVtcGxhdGVSZWYpIHRlbXBsYXRlUmVmPzogVGVtcGxhdGVSZWY8YW55PlxuXG4gIEBPdXRwdXQoKSByZWFkb25seSBjbG9zZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE1lbnVDbG9zZVJlYXNvbj4oKVxuXG4gIEBJbnB1dCgpIG1lbnVDbGFzczogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbFxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgd2lkdGggZm9yIGEgbWVudSB0aGF0IHdpbGwgc2NhbGUgZG93biBpZiB0aGUgd2luZG93IGlubmVyV2lkdGggaXNcbiAgICogc21hbGxlciB0aGFuIHRoZSB2YWx1ZS5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBiYXNlV2lkdGgoKSB7IHJldHVybiB0aGlzLl9iYXNlV2lkdGgudmFsdWUgfVxuICBzZXQgYmFzZVdpZHRoKHZhbHVlOiBudW1iZXIgfCBudWxsKSB7XG4gICAgY29uc3QgX3ZhbCA9IGNvZXJjZU51bWJlclByb3BlcnR5KHZhbHVlLCBudWxsKVxuICAgIGlmIChfdmFsICE9PSB0aGlzLl9iYXNlV2lkdGgudmFsdWUpIHtcbiAgICAgIHRoaXMuX2Jhc2VXaWR0aC5uZXh0KF92YWwpXG4gICAgfVxuICB9XG4gIHByaXZhdGUgX2Jhc2VXaWR0aCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyIHwgbnVsbD4obnVsbClcbiAgX21lbnVXaWR0aCQ6IE9ic2VydmFibGU8c3RyaW5nIHwgdW5kZWZpbmVkPlxuXG4gIEBJbnB1dCgpIGFuaW1hdGlvblR5cGU6ICdzbGlkZScgfCAnZmFkZScgPSAnc2xpZGUnXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fbWVudVdpZHRoJCA9IHRoaXMuX2Jhc2VXaWR0aC5waXBlKFxuICAgICAgc3dpdGNoTWFwKGJhc2VXaWR0aCA9PiB7XG4gICAgICAgIGlmIChiYXNlV2lkdGgpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHdpbmRvdywgJ3Jlc2l6ZScpLnBpcGUoXG4gICAgICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKSxcbiAgICAgICAgICAgIG1hcCgoKSA9PiB3aW5kb3cuaW5uZXJXaWR0aCA8IGJhc2VXaWR0aCA/IGAke3dpbmRvdy5pbm5lcldpZHRofXB4YCA6IGAke2Jhc2VXaWR0aH1weGApXG4gICAgICAgICAgKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvZih1bmRlZmluZWQpXG4gICAgICB9KSxcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICB0YWtlVW50aWwodGhpcy5fbmdVbnN1YnNjcmliZSlcbiAgICApXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl90YWJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKVxuICAgIHRoaXMuY2xvc2VkLmNvbXBsZXRlKClcblxuICAgIHRoaXMuX25nVW5zdWJzY3JpYmUubmV4dCh1bmRlZmluZWQpXG4gICAgdGhpcy5fbmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpXG4gIH1cblxuICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XG4gICAgdGhpcy5fa2V5TWFuYWdlciA9IG5ldyBGb2N1c0tleU1hbmFnZXI8TWVudUl0ZW1Db21wb25lbnQ+KHRoaXMuX2l0ZW1zKS53aXRoV3JhcCgpLndpdGhUeXBlQWhlYWQoKVxuICAgIHRoaXMuX3RhYlN1YnNjcmlwdGlvbiA9IHRoaXMuX2tleU1hbmFnZXIudGFiT3V0LnN1YnNjcmliZSgoKSA9PiB0aGlzLmNsb3NlZC5lbWl0KCd0YWInKSlcbiAgfVxuXG4gIC8qKiBTdHJlYW0gdGhhdCBlbWl0cyB3aGVuZXZlciB0aGUgaG92ZXJlZCBtZW51IGl0ZW0gY2hhbmdlcy4gKi9cbiAgX2hvdmVyZWQoKTogT2JzZXJ2YWJsZTxNZW51SXRlbUNvbXBvbmVudD4ge1xuICAgIHJldHVybiB0aGlzLl9pdGVtQ2hhbmdlcy5waXBlKFxuICAgICAgc3RhcnRXaXRoKHRoaXMuX2l0ZW1zKSxcbiAgICAgIHN3aXRjaE1hcChpdGVtcyA9PiBtZXJnZSguLi5pdGVtcy5tYXAoaXRlbSA9PiBpdGVtLl9ob3ZlcmVkKSkpXG4gICAgKVxuICB9XG5cbiAgLyoqIEhhbmRsZSBhIGtleWJvYXJkIGV2ZW50IGZyb20gdGhlIG1lbnUsIGRlbGVnYXRpbmcgdG8gdGhlIGFwcHJvcHJpYXRlIGFjdGlvbi4gKi9cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpIHtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6ZGVwcmVjYXRpb25cbiAgICBjb25zdCBrZXlDb2RlID0gZXZlbnQua2V5Q29kZVxuICAgIGNvbnN0IG1hbmFnZXIgPSB0aGlzLl9rZXlNYW5hZ2VyXG5cbiAgICBzd2l0Y2ggKGtleUNvZGUpIHtcbiAgICAgIGNhc2UgRVNDQVBFOlxuICAgICAgICBpZiAoIWhhc01vZGlmaWVyS2V5KGV2ZW50KSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICB0aGlzLmNsb3NlZC5lbWl0KCdrZXlkb3duJylcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSBMRUZUX0FSUk9XOlxuICAgICAgICBpZiAodGhpcy5wYXJlbnRNZW51ICYmIHRoaXMuZGlyZWN0aW9uID09PSAnbHRyJykge1xuICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoJ2tleWRvd24nKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIFJJR0hUX0FSUk9XOlxuICAgICAgICBpZiAodGhpcy5wYXJlbnRNZW51ICYmIHRoaXMuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHRoaXMuY2xvc2VkLmVtaXQoJ2tleWRvd24nKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlIEhPTUU6XG4gICAgICBjYXNlIEVORDpcbiAgICAgICAgaWYgKCFoYXNNb2RpZmllcktleShldmVudCkpIHtcbiAgICAgICAgICBrZXlDb2RlID09PSBIT01FID8gbWFuYWdlcj8uc2V0Rmlyc3RJdGVtQWN0aXZlKCkgOiBtYW5hZ2VyPy5zZXRMYXN0SXRlbUFjdGl2ZSgpXG4gICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoa2V5Q29kZSA9PT0gVVBfQVJST1cgfHwga2V5Q29kZSA9PT0gRE9XTl9BUlJPVykge1xuICAgICAgICAgIG1hbmFnZXI/LnNldEZvY3VzT3JpZ2luKCdrZXlib2FyZCcpXG4gICAgICAgIH1cblxuICAgICAgICBtYW5hZ2VyPy5vbktleWRvd24oZXZlbnQpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZvY3VzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBtZW51LlxuICAgKiBAcGFyYW0gb3JpZ2luIEFjdGlvbiBmcm9tIHdoaWNoIHRoZSBmb2N1cyBvcmlnaW5hdGVkLiBVc2VkIHRvIHNldCB0aGUgY29ycmVjdCBzdHlsaW5nLlxuICAgKi9cbiAgZm9jdXNGaXJzdEl0ZW0ob3JpZ2luOiBGb2N1c09yaWdpbiA9ICdwcm9ncmFtJyk6IHZvaWQge1xuICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEZvY3VzT3JpZ2luKG9yaWdpbikuc2V0Rmlyc3RJdGVtQWN0aXZlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXNldHMgdGhlIGFjdGl2ZSBpdGVtIGluIHRoZSBtZW51LiBUaGlzIGlzIHVzZWQgd2hlbiB0aGUgbWVudSBpcyBvcGVuZWQsIGFsbG93aW5nXG4gICAqIHRoZSB1c2VyIHRvIHN0YXJ0IGZyb20gdGhlIGZpcnN0IG9wdGlvbiB3aGVuIHByZXNzaW5nIHRoZSBkb3duIGFycm93LlxuICAgKi9cbiAgcmVzZXRBY3RpdmVJdGVtKCkge1xuICAgIHRoaXMuX2tleU1hbmFnZXI/LnNldEFjdGl2ZUl0ZW0oLTEpXG4gIH1cblxuICAvKiogUmVnaXN0ZXJzIGEgbWVudSBpdGVtIHdpdGggdGhlIG1lbnUuICovXG4gIGFkZEl0ZW0oaXRlbTogTWVudUl0ZW1Db21wb25lbnQpIHtcbiAgICAvLyBXZSByZWdpc3RlciB0aGUgaXRlbXMgdGhyb3VnaCB0aGlzIG1ldGhvZCwgcmF0aGVyIHRoYW4gcGlja2luZyB0aGVtIHVwIHRocm91Z2hcbiAgICAvLyBgQ29udGVudENoaWxkcmVuYCwgYmVjYXVzZSB3ZSBuZWVkIHRoZSBpdGVtcyB0byBiZSBwaWNrZWQgdXAgYnkgdGhlaXIgY2xvc2VzdFxuICAgIC8vIGBzZWFtLW1lbnVgIGFuY2VzdG9yLiBJZiB3ZSB1c2VkIGBAQ29udGVudENoaWxkcmVuKE1lbnVJdGVtQ29tcG9uZW50LCB7ZGVzY2VuZGFudHM6IHRydWV9KWAsXG4gICAgLy8gYWxsIGRlc2NlbmRhbnQgaXRlbXMgd2lsbCBibGVlZCBpbnRvIHRoZSB0b3AtbGV2ZWwgbWVudSBpbiB0aGUgY2FzZSB3aGVyZSB0aGUgY29uc3VtZXJcbiAgICAvLyBoYXMgYHNlYW0tbWVudWAgaW5zdGFuY2VzIG5lc3RlZCBpbnNpZGUgZWFjaCBvdGhlci5cbiAgICBpZiAodGhpcy5faXRlbXMuaW5kZXhPZihpdGVtKSA9PT0gLTEpIHtcbiAgICAgIHRoaXMuX2l0ZW1zLnB1c2goaXRlbSlcbiAgICAgIHRoaXMuX2l0ZW1DaGFuZ2VzLm5leHQodGhpcy5faXRlbXMpXG4gICAgfVxuICB9XG5cbiAgLyoqIFJlbW92ZXMgYW4gaXRlbSBmcm9tIHRoZSBtZW51LiAqL1xuICByZW1vdmVJdGVtKGl0ZW06IE1lbnVJdGVtQ29tcG9uZW50KSB7XG4gICAgY29uc3QgaW5kZXggPSB0aGlzLl9pdGVtcy5pbmRleE9mKGl0ZW0pXG5cbiAgICBpZiAodGhpcy5faXRlbXMuaW5kZXhPZihpdGVtKSA+IC0xKSB7XG4gICAgICB0aGlzLl9pdGVtcy5zcGxpY2UoaW5kZXgsIDEpXG4gICAgICB0aGlzLl9pdGVtQ2hhbmdlcy5uZXh0KHRoaXMuX2l0ZW1zKVxuICAgIH1cbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBmb290ZXIgY29tcG9uZW50LiAqL1xuICBzZXRGb290ZXIoZm9vdGVyPzogTWVudUZvb3RlckNvbXBvbmVudCkge1xuICAgIHRoaXMuX2Zvb3Rlci5uZXh0KGZvb3RlcilcbiAgfVxuXG4gIC8qKiBTZXRzIHRoZSBoZWFkZXIgY29tcG9uZW50LiAqL1xuICBzZXRIZWFkZXIoaGVhZGVyPzogTWVudUhlYWRlckNvbXBvbmVudCkge1xuICAgIHRoaXMuX2hlYWRlci5uZXh0KGhlYWRlcilcbiAgfVxuXG4gIF9kcm9wZG93bk1lbnVDbGljayhldmVudDogRXZlbnQpIHtcbiAgICAvLyBUaGlzIGlzIG5lZWRlZCwgYmVjYXVzZSBzb21lIG1lbnUncyB3aWxsIGdldCBzdHVjayBvcGVuIGlmIHRoZSBjb21wb25lbnRcbiAgICAvLyBtYW5hZ2luZyB0aGUgbWVudSBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZSBtZW51IGZpbmlzaGVzIGl0cyBjbGVhbnVwLiBJXG4gICAgLy8gbWF5IGxvb2sgZm9yIGEgZml4IHRvIHRoYXQgZXZlbnR1YWxseS5cbiAgICB0aGlzLmNsb3NlZC5lbWl0KCdjbGljaycpXG4gIH1cblxuICAvKiogQ2FsbGJhY2sgdGhhdCBpcyBpbnZva2VkIHdoZW4gdGhlIHBhbmVsIGFuaW1hdGlvbiBjb21wbGV0ZXMuICovXG4gIF9vbkFuaW1hdGlvbkRvbmUoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgdGhpcy5fYW5pbWF0aW9uRG9uZS5uZXh0KGV2ZW50KVxuICAgIHRoaXMuX2lzQW5pbWF0aW5nID0gZmFsc2VcbiAgfVxuXG4gIF9vbkFuaW1hdGlvblN0YXJ0KGV2ZW50OiBBbmltYXRpb25FdmVudCkge1xuICAgIHRoaXMuX2lzQW5pbWF0aW5nID0gdHJ1ZVxuXG4gICAgLy8gU2Nyb2xsIHRoZSBjb250ZW50IGVsZW1lbnQgdG8gdGhlIHRvcCBhcyBzb29uIGFzIHRoZSBhbmltYXRpb24gc3RhcnRzLiBUaGlzIGlzIG5lY2Vzc2FyeSxcbiAgICAvLyBiZWNhdXNlIHdlIG1vdmUgZm9jdXMgdG8gdGhlIGZpcnN0IGl0ZW0gd2hpbGUgaXQncyBzdGlsbCBiZWluZyBhbmltYXRlZCwgd2hpY2ggY2FuIHRocm93XG4gICAgLy8gdGhlIGJyb3dzZXIgb2ZmIHdoZW4gaXQgZGV0ZXJtaW5lcyB0aGUgc2Nyb2xsIHBvc2l0aW9uLiBBbHRlcm5hdGl2ZWx5IHdlIGNhbiBtb3ZlIGZvY3VzXG4gICAgLy8gd2hlbiB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGhvd2V2ZXIgbW92aW5nIGZvY3VzIGFzeW5jaHJvbm91c2x5IHdpbGwgaW50ZXJydXB0IHNjcmVlblxuICAgIC8vIHJlYWRlcnMgd2hpY2ggYXJlIGluIHRoZSBwcm9jZXNzIG9mIHJlYWRpbmcgb3V0IHRoZSBtZW51IGFscmVhZHkuIFdlIHRha2UgdGhlIGBlbGVtZW50YFxuICAgIC8vIGZyb20gdGhlIGBldmVudGAgc2luY2Ugd2UgY2FuJ3QgdXNlIGEgYFZpZXdDaGlsZGAgdG8gYWNjZXNzIHRoZSBwYW5lLlxuICAgIGlmIChldmVudC50b1N0YXRlID09PSAnZW50ZXInICYmIHRoaXMuX2tleU1hbmFnZXI/LmFjdGl2ZUl0ZW1JbmRleCA9PT0gMCkge1xuICAgICAgZXZlbnQuZWxlbWVudC5zY3JvbGxUb3AgPSAwXG4gICAgfVxuICB9XG5cbn1cbiIsIjxuZy10ZW1wbGF0ZT5cbiAgPGRpdiBjbGFzcz1cInNlYW0tbWVudS1jb250YWluZXJcIlxuICAgIEBzbGlkZURvd25cbiAgICAoQHNsaWRlRG93bi5zdGFydCk9XCJfb25BbmltYXRpb25TdGFydCgkZXZlbnQpXCJcbiAgICAoQHNsaWRlRG93bi5kb25lKT1cIl9vbkFuaW1hdGlvbkRvbmUoJGV2ZW50KVwiXG4gICAgW2NsYXNzLnNlYW0tbWVudS1hbmltLS1zbGlkZV09XCJhbmltYXRpb25UeXBlPT09J3NsaWRlJ1wiXG4gICAgW2NsYXNzLnNlYW0tbWVudS1hbmltLS1mYWRlXT1cImFuaW1hdGlvblR5cGU9PT0nZmFkZSdcIlxuICAgIFtpZF09XCJwYW5lbElkXCI+XG4gICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duLW1lbnUgc2hvdyBwb3NpdGlvbi1zdGF0aWN7eyBtZW51Q2xhc3MgPyAnICcgKyBtZW51Q2xhc3MgOiAnJyB9fVwiXG4gICAgICBbc3R5bGUud2lkdGhdPVwiX21lbnVXaWR0aCQgfCBhc3luY1wiXG4gICAgICBbY2xhc3MucHQtMF09XCJoYXNIZWFkZXIkIHwgYXN5bmNcIlxuICAgICAgW2NsYXNzLnBiLTBdPVwiaGFzRm9vdGVyJCB8IGFzeW5jXCJcbiAgICAgIChrZXlkb3duKT1cIl9oYW5kbGVLZXlkb3duKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cIl9kcm9wZG93bk1lbnVDbGljaygkZXZlbnQpXCJcbiAgICAgIHRhYmluZGV4PVwiLTFcIlxuICAgICAgcm9sZT1cIm1lbnVcIlxuICAgICAgPlxuICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Close all polygons in the GeoJSON.
|
|
3
|
+
*
|
|
4
|
+
* Google Maps requires that polygons be closed, but not all libraries have that
|
|
5
|
+
* requirement. This may add redundent points to the GeoJSON, but it will ensure
|
|
6
|
+
* that the GeoJSON is valid for Google Maps.
|
|
7
|
+
*/
|
|
8
|
+
export function closePolygons(geoJson) {
|
|
9
|
+
if (geoJson.type === 'FeatureCollection') {
|
|
10
|
+
for (const f of geoJson.features) {
|
|
11
|
+
closePolygonsFeature(f);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
else if (geoJson.type === 'Feature') {
|
|
15
|
+
closePolygonsFeature(geoJson);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
function closePolygonsFeature(feature) {
|
|
19
|
+
if (feature.geometry.type === 'Polygon') {
|
|
20
|
+
closePolygon(feature.geometry);
|
|
21
|
+
}
|
|
22
|
+
else if (feature.geometry.type === 'MultiPolygon') {
|
|
23
|
+
closeMultiPolygon(feature.geometry);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function closePolygon(polygon) {
|
|
27
|
+
for (const c of polygon.coordinates) {
|
|
28
|
+
c.push(c[0]);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function closeMultiPolygon(multiPolygon) {
|
|
32
|
+
for (const p of multiPolygon.coordinates) {
|
|
33
|
+
for (const c of p) {
|
|
34
|
+
c.push(c[0]);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xvc2UtcG9seWdvbnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vdXRpbHMvZ2VvLWpzb24vY2xvc2UtcG9seWdvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxPQUE2RDtJQUN6RixJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssbUJBQW1CLEVBQUU7UUFDeEMsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ2hDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ3hCO0tBQ0Y7U0FBTSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1FBQ3JDLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzlCO0FBQ0gsQ0FBQztBQUVELFNBQVMsb0JBQW9CLENBQUMsT0FBZ0I7SUFDNUMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksS0FBSyxTQUFTLEVBQUU7UUFDdkMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtLQUMvQjtTQUFNLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEtBQUssY0FBYyxFQUFFO1FBQ25ELGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtLQUNwQztBQUNILENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxPQUFnQjtJQUNwQyxLQUFLLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEVBQUU7UUFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNiO0FBQ0gsQ0FBQztBQUVELFNBQVMsaUJBQWlCLENBQUMsWUFBMEI7SUFDbkQsS0FBSyxNQUFNLENBQUMsSUFBSSxZQUFZLENBQUMsV0FBVyxFQUFFO1FBQ3hDLEtBQUssTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ2pCLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDYjtLQUNGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZlYXR1cmUsIEZlYXR1cmVDb2xsZWN0aW9uLCBNdWx0aVBvbHlnb24sIFBvbHlnb24gfSBmcm9tICdnZW9qc29uJ1xuXG4vKipcbiAqIENsb3NlIGFsbCBwb2x5Z29ucyBpbiB0aGUgR2VvSlNPTi5cbiAqXG4gKiBHb29nbGUgTWFwcyByZXF1aXJlcyB0aGF0IHBvbHlnb25zIGJlIGNsb3NlZCwgYnV0IG5vdCBhbGwgbGlicmFyaWVzIGhhdmUgdGhhdFxuICogcmVxdWlyZW1lbnQuIFRoaXMgbWF5IGFkZCByZWR1bmRlbnQgcG9pbnRzIHRvIHRoZSBHZW9KU09OLCBidXQgaXQgd2lsbCBlbnN1cmVcbiAqIHRoYXQgdGhlIEdlb0pTT04gaXMgdmFsaWQgZm9yIEdvb2dsZSBNYXBzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvc2VQb2x5Z29ucyhnZW9Kc29uOiBGZWF0dXJlQ29sbGVjdGlvbiB8IEZlYXR1cmUgfCBQb2x5Z29uIHwgTXVsdGlQb2x5Z29uKSB7XG4gIGlmIChnZW9Kc29uLnR5cGUgPT09ICdGZWF0dXJlQ29sbGVjdGlvbicpIHtcbiAgICBmb3IgKGNvbnN0IGYgb2YgZ2VvSnNvbi5mZWF0dXJlcykge1xuICAgICAgY2xvc2VQb2x5Z29uc0ZlYXR1cmUoZilcbiAgICB9XG4gIH0gZWxzZSBpZiAoZ2VvSnNvbi50eXBlID09PSAnRmVhdHVyZScpIHtcbiAgICBjbG9zZVBvbHlnb25zRmVhdHVyZShnZW9Kc29uKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNsb3NlUG9seWdvbnNGZWF0dXJlKGZlYXR1cmU6IEZlYXR1cmUpOiB2b2lkIHtcbiAgaWYgKGZlYXR1cmUuZ2VvbWV0cnkudHlwZSA9PT0gJ1BvbHlnb24nKSB7XG4gICAgY2xvc2VQb2x5Z29uKGZlYXR1cmUuZ2VvbWV0cnkpXG4gIH0gZWxzZSBpZiAoZmVhdHVyZS5nZW9tZXRyeS50eXBlID09PSAnTXVsdGlQb2x5Z29uJykge1xuICAgIGNsb3NlTXVsdGlQb2x5Z29uKGZlYXR1cmUuZ2VvbWV0cnkpXG4gIH1cbn1cblxuZnVuY3Rpb24gY2xvc2VQb2x5Z29uKHBvbHlnb246IFBvbHlnb24pOiB2b2lkIHtcbiAgZm9yIChjb25zdCBjIG9mIHBvbHlnb24uY29vcmRpbmF0ZXMpIHtcbiAgICBjLnB1c2goY1swXSlcbiAgfVxufVxuXG5mdW5jdGlvbiBjbG9zZU11bHRpUG9seWdvbihtdWx0aVBvbHlnb246IE11bHRpUG9seWdvbik6IHZvaWQge1xuICBmb3IgKGNvbnN0IHAgb2YgbXVsdGlQb2x5Z29uLmNvb3JkaW5hdGVzKSB7XG4gICAgZm9yIChjb25zdCBjIG9mIHApIHtcbiAgICAgIGMucHVzaChjWzBdKVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -22,6 +22,7 @@ export * from './geo-json/no-inner-rings.validator';
|
|
|
22
22
|
export * from './geo-json/no-kinks.validator';
|
|
23
23
|
export * from './geo-json/read-geo-file';
|
|
24
24
|
export * from './geo-json/split-multi-polygons';
|
|
25
|
+
export * from './geo-json/close-polygons';
|
|
25
26
|
export * from './array-move';
|
|
26
27
|
export * from './calc-percentage';
|
|
27
28
|
export * from './toggle-attribute';
|
|
@@ -47,4 +48,4 @@ export * from './pad-start';
|
|
|
47
48
|
export * from './create-padding';
|
|
48
49
|
export * from './is-numeric';
|
|
49
50
|
export * from './fractional-digits-count';
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi91dGlscy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsbUNBQW1DLENBQUE7QUFFakQsY0FBYyx5QkFBeUIsQ0FBQTtBQUN2QyxjQUFjLHlCQUF5QixDQUFBO0FBQ3ZDLGNBQWMscUNBQXFDLENBQUE7QUFDbkQsY0FBYywrQkFBK0IsQ0FBQTtBQUM3QyxjQUFjLDhCQUE4QixDQUFBO0FBQzVDLGNBQWMscUNBQXFDLENBQUE7QUFDbkQsY0FBYyw4QkFBOEIsQ0FBQTtBQUM1QyxjQUFjLG1DQUFtQyxDQUFBO0FBQ2pELGNBQWMsNkJBQTZCLENBQUE7QUFDM0MsY0FBYyw2QkFBNkIsQ0FBQTtBQUUzQyxjQUFjLG1CQUFtQixDQUFBO0FBRWpDLGNBQWMsZ0JBQWdCLENBQUE7QUFFOUIsY0FBYyxzQ0FBc0MsQ0FBQTtBQUNwRCxjQUFjLDZCQUE2QixDQUFBO0FBQzNDLGNBQWMsNENBQTRDLENBQUE7QUFDMUQsY0FBYyxtQ0FBbUMsQ0FBQTtBQUNqRCxjQUFjLDZDQUE2QyxDQUFBO0FBQzNELGNBQWMsMkJBQTJCLENBQUE7QUFDekMsY0FBYyxxQ0FBcUMsQ0FBQTtBQUNuRCxjQUFjLHFDQUFxQyxDQUFBO0FBQ25ELGNBQWMsK0JBQStCLENBQUE7QUFDN0MsY0FBYywwQkFBMEIsQ0FBQTtBQUN4QyxjQUFjLGlDQUFpQyxDQUFBO0FBQy9DLGNBQWMsMkJBQTJCLENBQUE7QUFFekMsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMsaUJBQWlCLENBQUE7QUFDL0IsY0FBYyxlQUFlLENBQUE7QUFDN0IsY0FBYyx3QkFBd0IsQ0FBQTtBQUN0QyxjQUFjLGNBQWMsQ0FBQTtBQUM1QixjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMsYUFBYSxDQUFBO0FBQzNCLGNBQWMsY0FBYyxDQUFBO0FBQzVCLGNBQWMseUJBQXlCLENBQUE7QUFDdkMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLGtCQUFrQixDQUFBO0FBQ2hDLGNBQWMsZUFBZSxDQUFBO0FBQzdCLGNBQWMsd0JBQXdCLENBQUE7QUFDdEMsY0FBYyxtQkFBbUIsQ0FBQTtBQUNqQyxjQUFjLG9CQUFvQixDQUFBO0FBQ2xDLGNBQWMsZ0JBQWdCLENBQUE7QUFDOUIsY0FBYyxpQkFBaUIsQ0FBQTtBQUMvQixjQUFjLHNCQUFzQixDQUFBO0FBQ3BDLGNBQWMsV0FBVyxDQUFBO0FBQ3pCLGNBQWMsYUFBYSxDQUFBO0FBQzNCLGNBQWMsa0JBQWtCLENBQUE7QUFDaEMsY0FBYyxjQUFjLENBQUE7QUFDNUIsY0FBYywyQkFBMkIsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY2RrL2dldC1jbG9zZXN0LXdpZGdldC1jZGstZHJhZydcblxuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2dldC1jb250cm9sLW5hbWUnXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0vZ2V0LWNvbnRyb2wtcGF0aCdcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS9vYnNlcnZlLWNvbnRyb2wtaXMtZGlmZmVyZW50J1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL29ic2VydmUtY29udHJvbC1zdGF0dXMnXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0vb2JzZXJ2ZS1jb250cm9sLXZhbGlkJ1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL29ic2VydmUtY29udHJvbC12YWx1ZS1jaGFuZ2UnXG5leHBvcnQgKiBmcm9tICcuL2Zvcm0vb2JzZXJ2ZS1jb250cm9sLXZhbHVlJ1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL3dhaXQtb24tbm9uLXBlbmRpbmctc3RhdHVzJ1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2hhcy1yZXF1aXJlZC1jb250cm9sJ1xuZXhwb3J0ICogZnJvbSAnLi9mb3JtL2lzLWVtcHR5LWlucHV0LXZhbHVlJ1xuXG5leHBvcnQgKiBmcm9tICcuL29wZXJhdG9ycy9pbmRleCdcblxuZXhwb3J0ICogZnJvbSAnLi9yb3V0ZXIvaW5kZXgnXG5cbmV4cG9ydCAqIGZyb20gJy4vZ2VvLWpzb24vY29lcmNlLWZlYXR1cmUtY29sbGVjdGlvbidcbmV4cG9ydCAqIGZyb20gJy4vZ2VvLWpzb24vZ2VvLWpzb24tdG8tYXJlYSdcbmV4cG9ydCAqIGZyb20gJy4vZ2VvLWpzb24vaXMtZmVhdHVyZS1jb2xsZWN0aW9uLnZhbGlkYXRvcidcbmV4cG9ydCAqIGZyb20gJy4vZ2VvLWpzb24vaXMtb25seS1nZW9tZXRyeS10eXBlcydcbmV4cG9ydCAqIGZyb20gJy4vZ2VvLWpzb24vaXMtb25seS1nZW9tZXRyeS10eXBlcy52YWxpZGF0b3InXG5leHBvcnQgKiBmcm9tICcuL2dlby1qc29uL21lcmdlLXBvbHlnb25zJ1xuZXhwb3J0ICogZnJvbSAnLi9nZW8tanNvbi9taW4tbWF4LXBvaW50cy52YWxpZGF0b3InXG5leHBvcnQgKiBmcm9tICcuL2dlby1qc29uL25vLWlubmVyLXJpbmdzLnZhbGlkYXRvcidcbmV4cG9ydCAqIGZyb20gJy4vZ2VvLWpzb24vbm8ta2lua3MudmFsaWRhdG9yJ1xuZXhwb3J0ICogZnJvbSAnLi9nZW8tanNvbi9yZWFkLWdlby1maWxlJ1xuZXhwb3J0ICogZnJvbSAnLi9nZW8tanNvbi9zcGxpdC1tdWx0aS1wb2x5Z29ucydcbmV4cG9ydCAqIGZyb20gJy4vZ2VvLWpzb24vY2xvc2UtcG9seWdvbnMnXG5cbmV4cG9ydCAqIGZyb20gJy4vYXJyYXktbW92ZSdcbmV4cG9ydCAqIGZyb20gJy4vY2FsYy1wZXJjZW50YWdlJ1xuZXhwb3J0ICogZnJvbSAnLi90b2dnbGUtYXR0cmlidXRlJ1xuZXhwb3J0ICogZnJvbSAnLi9nZXQtYXR0cmlidXRlJ1xuZXhwb3J0ICogZnJvbSAnLi9pbnB1dC1tYXNrcydcbmV4cG9ydCAqIGZyb20gJy4vaXMtbnVsbC1vci11bmRlZmluZWQnXG5leHBvcnQgKiBmcm9tICcuL2xvYWQtc3R5bGUnXG5leHBvcnQgKiBmcm9tICcuL2xvYWQtc3R5bGUtc2hlZXQnXG5leHBvcnQgKiBmcm9tICcuL29iai11dGlscydcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS11dGlscydcbmV4cG9ydCAqIGZyb20gJy4vbm90LW51bGwtb3ItdW5kZWZpbmVkJ1xuZXhwb3J0ICogZnJvbSAnLi93YWl0LW9uLWNvbmRpdGlvbi1hc3luYydcbmV4cG9ydCAqIGZyb20gJy4vcG9sbGluZy10aWNrZXInXG5leHBvcnQgKiBmcm9tICcuL3JlZnJlc2hhYmxlJ1xuZXhwb3J0ICogZnJvbSAnLi93cmFwLWludG8tb2JzZXJ2YWJsZSdcbmV4cG9ydCAqIGZyb20gJy4vaXMtYWJzb2x1dGUtdXJsJ1xuZXhwb3J0ICogZnJvbSAnLi9zdWJzY3JpYmVyLWNvdW50J1xuZXhwb3J0ICogZnJvbSAnLi9oYXMtcHJvcGVydHknXG5leHBvcnQgKiBmcm9tICcuL2hhcy1hdHRyaWJ1dGUnXG5leHBvcnQgKiBmcm9tICcuL29ic2VydmUtcXVlcnktbGlzdCdcbmV4cG9ydCAqIGZyb20gJy4vcGFkLWVuZCdcbmV4cG9ydCAqIGZyb20gJy4vcGFkLXN0YXJ0J1xuZXhwb3J0ICogZnJvbSAnLi9jcmVhdGUtcGFkZGluZydcbmV4cG9ydCAqIGZyb20gJy4vaXMtbnVtZXJpYydcbmV4cG9ydCAqIGZyb20gJy4vZnJhY3Rpb25hbC1kaWdpdHMtY291bnQnXG4iXX0=
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { __decorate } from "tslib";
|
|
2
|
-
import { animate, style, transition, trigger } from '@angular/animations';
|
|
3
|
-
import { Component, ContentChild, Input, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { animate, state, style, transition, trigger } from '@angular/animations';
|
|
3
|
+
import { Component, ContentChild, Input, isDevMode, ViewEncapsulation } from '@angular/core';
|
|
4
4
|
import { faAngleDown, faCog } from '@fortawesome/free-solid-svg-icons';
|
|
5
5
|
import { InputBoolean } from '@theseam/ui-common/core';
|
|
6
6
|
import { WidgetIconTplDirective } from '../directives/widget-icon-tpl.directive';
|
|
@@ -12,6 +12,35 @@ import * as i3 from "@theseam/ui-common/icon";
|
|
|
12
12
|
import * as i4 from "@theseam/ui-common/loading";
|
|
13
13
|
import * as i5 from "@theseam/ui-common/buttons";
|
|
14
14
|
import * as i6 from "../directives/widget-drag-handle.directive";
|
|
15
|
+
const EXPANDED_STATE = 'expanded';
|
|
16
|
+
const COLLAPSED_STATE = 'collapsed';
|
|
17
|
+
const EXPAND_TRANSITION = `${EXPANDED_STATE} <=> ${COLLAPSED_STATE}`;
|
|
18
|
+
const loadingAnimation = trigger('loadingAnim', [
|
|
19
|
+
transition(':enter', [
|
|
20
|
+
style({ opacity: 0 }),
|
|
21
|
+
animate('250ms ease-in-out', style({ opacity: 1 })),
|
|
22
|
+
]),
|
|
23
|
+
transition(':leave', [
|
|
24
|
+
style({ opacity: 1 }),
|
|
25
|
+
animate('250ms ease-in-out', style({ opacity: 0 })),
|
|
26
|
+
]),
|
|
27
|
+
]);
|
|
28
|
+
/**
|
|
29
|
+
* I was having an issue getting the content to not be removed from the DOM,
|
|
30
|
+
* before the animation was complete. This animation is a hack to keep the
|
|
31
|
+
* content in the DOM until the animation is complete.
|
|
32
|
+
*/
|
|
33
|
+
const keepContentAnimation = trigger('keepContentAnim', [
|
|
34
|
+
transition(':leave', [
|
|
35
|
+
style({ opacity: 1 }),
|
|
36
|
+
animate('0ms', style({ opacity: 0 })),
|
|
37
|
+
]),
|
|
38
|
+
]);
|
|
39
|
+
const collapseAnimation = trigger('collapseAnim', [
|
|
40
|
+
state(EXPANDED_STATE, style({ height: '*' })),
|
|
41
|
+
state(COLLAPSED_STATE, style({ height: '0' })),
|
|
42
|
+
transition(EXPAND_TRANSITION, animate('0.3s ease-in-out')),
|
|
43
|
+
]);
|
|
15
44
|
/**
|
|
16
45
|
* Widget
|
|
17
46
|
*
|
|
@@ -25,10 +54,11 @@ import * as i6 from "../directives/widget-drag-handle.directive";
|
|
|
25
54
|
*/
|
|
26
55
|
export class WidgetComponent {
|
|
27
56
|
constructor() {
|
|
28
|
-
/** @ignore */
|
|
29
57
|
this.configIcon = faCog;
|
|
30
|
-
/** @ignore */
|
|
31
58
|
this.collapseIcon = faAngleDown;
|
|
59
|
+
/**
|
|
60
|
+
* Toggles the collapsed state of a widget.
|
|
61
|
+
*/
|
|
32
62
|
this.collapsed = false;
|
|
33
63
|
/**
|
|
34
64
|
* Toggles the top header bar of a widget. This should be true for most
|
|
@@ -40,8 +70,10 @@ export class WidgetComponent {
|
|
|
40
70
|
/** @ignore */
|
|
41
71
|
// NOTE: Config is still being worked on.
|
|
42
72
|
this.hasConfig = false;
|
|
43
|
-
/**
|
|
44
|
-
|
|
73
|
+
/**
|
|
74
|
+
* Toggles the ability to collapse a widget. An icon will be displayed in the
|
|
75
|
+
* header to toggle the collapsed state.
|
|
76
|
+
*/
|
|
45
77
|
this.canCollapse = false;
|
|
46
78
|
}
|
|
47
79
|
/**
|
|
@@ -65,27 +97,23 @@ export class WidgetComponent {
|
|
|
65
97
|
}
|
|
66
98
|
/**
|
|
67
99
|
* Toggles a widget's collapsed state.
|
|
68
|
-
*
|
|
69
|
-
* NOTE: Collapse is still being worked on.
|
|
70
|
-
* @depracated
|
|
71
|
-
* @ignore
|
|
72
100
|
*/
|
|
73
101
|
collapse() {
|
|
102
|
+
if (!this.canCollapse) {
|
|
103
|
+
if (isDevMode()) {
|
|
104
|
+
console.warn('WidgetComponent: collapse() called when canCollapse is false.');
|
|
105
|
+
}
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
74
108
|
this.collapsed = !this.collapsed;
|
|
75
109
|
}
|
|
110
|
+
get collapseState() { return this.collapsed ? COLLAPSED_STATE : EXPANDED_STATE; }
|
|
76
111
|
}
|
|
77
112
|
WidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: WidgetComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
78
|
-
WidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: WidgetComponent, selector: "seam-widget", inputs: { collapsed: "collapsed", hasHeader: "hasHeader", titleText: "titleText", icon: "icon", iconClass: "iconClass", loading: "loading", hasConfig: "hasConfig", canCollapse: "canCollapse" }, queries: [{ propertyName: "iconTpl", first: true, predicate: WidgetIconTplDirective, descendants: true, static: true }, { propertyName: "titleTpl", first: true, predicate: WidgetTitleTplDirective, descendants: true, static: true }], ngImport: i0, template: "<div class=\"seam-widget border rounded overflow-hidden\">\n <div class=\"widget-header\" seamWidgetDragHandle *ngIf=\"hasHeader\">\n <div class=\"widget-header-content p-2 text-nowrap\">\n <span class=\"mr-1 widget-header-icon\">\n <ng-container *ngIf=\"iconTpl; else noIconTpl\">\n <ng-template\n [ngTemplateOutlet]=\"iconTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: icon, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noIconTpl>\n <fa-icon *ngIf=\"_iconObj\"\n class=\"widget-header-icon--fa {{ iconClass }}\"\n [icon]=\"_iconObj\"></fa-icon>\n <img *ngIf=\"_iconUrl\"\n class=\"widget-header-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\" [alt]=\"titleText\">\n </ng-template>\n </span>\n <span class=\"widget-header-title text-truncate\">\n <ng-container *ngIf=\"titleTpl; else noTitleTpl\">\n <ng-template\n [ngTemplateOutlet]=\"titleTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: titleText, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noTitleTpl>{{ titleText }}</ng-template>\n </span>\n </div>\n <div class=\"widget-header-btns-container\" *ngIf=\"hasConfig || canCollapse\">\n <div *ngIf=\"hasConfig\">\n
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
animate('250ms ease-in-out', style({ opacity: 1 })),
|
|
83
|
-
]),
|
|
84
|
-
transition(':leave', [
|
|
85
|
-
style({ opacity: 1 }),
|
|
86
|
-
animate('250ms ease-in-out', style({ opacity: 0 })),
|
|
87
|
-
]),
|
|
88
|
-
]),
|
|
113
|
+
WidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: WidgetComponent, selector: "seam-widget", inputs: { collapsed: "collapsed", hasHeader: "hasHeader", titleText: "titleText", icon: "icon", iconClass: "iconClass", loading: "loading", hasConfig: "hasConfig", canCollapse: "canCollapse" }, queries: [{ propertyName: "iconTpl", first: true, predicate: WidgetIconTplDirective, descendants: true, static: true }, { propertyName: "titleTpl", first: true, predicate: WidgetTitleTplDirective, descendants: true, static: true }], ngImport: i0, template: "<div class=\"seam-widget border rounded overflow-hidden\">\n <div class=\"widget-header\" seamWidgetDragHandle *ngIf=\"hasHeader\">\n <div class=\"widget-header-content p-2 text-nowrap\">\n <span class=\"mr-1 widget-header-icon\">\n <ng-container *ngIf=\"iconTpl; else noIconTpl\">\n <ng-template\n [ngTemplateOutlet]=\"iconTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: icon, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noIconTpl>\n <fa-icon *ngIf=\"_iconObj\"\n class=\"widget-header-icon--fa {{ iconClass }}\"\n [icon]=\"_iconObj\"></fa-icon>\n <img *ngIf=\"_iconUrl\"\n class=\"widget-header-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\" [alt]=\"titleText\">\n </ng-template>\n </span>\n <span class=\"widget-header-title text-truncate\">\n <ng-container *ngIf=\"titleTpl; else noTitleTpl\">\n <ng-template\n [ngTemplateOutlet]=\"titleTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: titleText, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noTitleTpl>{{ titleText }}</ng-template>\n </span>\n </div>\n <div class=\"widget-header-btns-container\" *ngIf=\"hasConfig || canCollapse\">\n <!-- <div *ngIf=\"hasConfig\">\n <button seamIconBtn [icon]=\"configIcon\"\n class=\"widget-header-btn-config\"\n [iconType]=\"null\">\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n <button seamButton class=\"widget-header-btn-config p-0\">\n <seam-icon class=\"d-block\" [icon]=\"configIcon\" iconClass=\"text-secondary\"></seam-icon>\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n </div> -->\n\n <div *ngIf=\"canCollapse\" class=\"px-0\">\n\n <button seamButton class=\"widget-header-btn-collapse p-0 mr-1 h-100\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\">\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\">\n </seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button>\n <!-- iconType=\"borderless-styled-square\" -->\n <!-- style=\"margin-left: -10px; margin-right: -5px;\" -->\n\n <!-- <button seamIconBtn class=\"widget-header-btn-collapse\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\"\n btnTheme=\"secondary\"\n [icon]=\"collapseIcon\"\n iconType=\"borderless-styled-square\"\n size=\"xs\"\n btnSize=\"sm\"\n >\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\"\n style=\"margin-left: -10px; margin-right: -5px;\"\n iconType=\"borderless-styled-square\"></seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button> -->\n </div>\n </div>\n </div>\n <div class=\"position-relative overflow-hidden\" [style.height.px]=\"loading ? 150 : undefined\" [@collapseAnim]=\"collapseState\">\n <ng-container *ngIf=\"!collapsed\">\n <div class=\"p-2\" *ngIf=\"!loading else loadingTpl\" @keepContentAnim>\n <ng-content></ng-content>\n </div>\n <ng-content select=\"seam-widget-footer\"></ng-content>\n <ng-template #loadingTpl>\n <div class=\"position-absolute\" @loadingAnim style=\"top:0;right:0;bottom:0;left:0\">\n <seam-loading [theme]=\"'primary'\"></seam-loading>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: ["seam-widget{display:block;font-size:15px}seam-widget .seam-widget{background:#FFFFFF;box-shadow:none}seam-widget .widget-header{display:flex;flex-direction:row;border-bottom:1px solid #dee2e6;background:#F4F4F4;font-size:17px}seam-widget .widget-header .widget-header-content{flex:1 1 100%}seam-widget .widget-header .widget-header-btns-container{display:flex;flex-direction:row}seam-widget .widget-header .widget-header-btns-container>div{display:flex;flex-direction:column;justify-content:center;padding:4px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .svg-inline--fa{transform:rotate(0);transition:.3s ease-in-out transform}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse.widget-header-btn-collapse--active .svg-inline--fa{transform:rotate(90deg)}seam-widget .widget-header .widget-header-title{font-size:17px}seam-widget .widget-header-icon{display:inline-block;vertical-align:top;max-height:20px;max-width:20px;height:20px;width:20px;color:currentColor}seam-widget .widget-header-icon .widget-header-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;max-height:20px;max-width:20px;height:20px;width:20px}seam-widget .widget-header-icon .widget-header-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header-icon .widget-header-icon--img{height:100%;max-height:20px;max-width:20px}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i2.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { kind: "component", type: i3.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i4.LoadingComponent, selector: "seam-loading", inputs: ["theme"] }, { kind: "component", type: i5.ButtonComponent, selector: "button[seamButton]", inputs: ["disabled", "theme", "size", "type"], exportAs: ["seamButton"] }, { kind: "directive", type: i6.WidgetDragHandleDirective, selector: "[seamWidgetDragHandle]", inputs: ["cdkDragHandleDisabled"] }], animations: [
|
|
114
|
+
loadingAnimation,
|
|
115
|
+
collapseAnimation,
|
|
116
|
+
keepContentAnimation,
|
|
89
117
|
], encapsulation: i0.ViewEncapsulation.None });
|
|
90
118
|
__decorate([
|
|
91
119
|
InputBoolean()
|
|
@@ -105,17 +133,10 @@ __decorate([
|
|
|
105
133
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: WidgetComponent, decorators: [{
|
|
106
134
|
type: Component,
|
|
107
135
|
args: [{ selector: 'seam-widget', encapsulation: ViewEncapsulation.None, animations: [
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
]),
|
|
113
|
-
transition(':leave', [
|
|
114
|
-
style({ opacity: 1 }),
|
|
115
|
-
animate('250ms ease-in-out', style({ opacity: 0 })),
|
|
116
|
-
]),
|
|
117
|
-
]),
|
|
118
|
-
], template: "<div class=\"seam-widget border rounded overflow-hidden\">\n <div class=\"widget-header\" seamWidgetDragHandle *ngIf=\"hasHeader\">\n <div class=\"widget-header-content p-2 text-nowrap\">\n <span class=\"mr-1 widget-header-icon\">\n <ng-container *ngIf=\"iconTpl; else noIconTpl\">\n <ng-template\n [ngTemplateOutlet]=\"iconTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: icon, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noIconTpl>\n <fa-icon *ngIf=\"_iconObj\"\n class=\"widget-header-icon--fa {{ iconClass }}\"\n [icon]=\"_iconObj\"></fa-icon>\n <img *ngIf=\"_iconUrl\"\n class=\"widget-header-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\" [alt]=\"titleText\">\n </ng-template>\n </span>\n <span class=\"widget-header-title text-truncate\">\n <ng-container *ngIf=\"titleTpl; else noTitleTpl\">\n <ng-template\n [ngTemplateOutlet]=\"titleTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: titleText, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noTitleTpl>{{ titleText }}</ng-template>\n </span>\n </div>\n <div class=\"widget-header-btns-container\" *ngIf=\"hasConfig || canCollapse\">\n <div *ngIf=\"hasConfig\">\n <!-- <button seamIconBtn [icon]=\"configIcon\"\n class=\"widget-header-btn-config\"\n iconType=\"\">\n <span class=\"sr-only\">Widget configuration menu</span>\n </button> -->\n <button seamButton class=\"widget-header-btn-config p-0\">\n <seam-icon class=\"d-block\" [icon]=\"configIcon\" iconClass=\"text-secondary\"></seam-icon>\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n </div>\n\n <div *ngIf=\"canCollapse\" class=\"px-0\">\n <button seamButton class=\"widget-header-btn-collapse p-0\" (click)=\"collapse()\">\n <seam-icon class=\"d-block\" [icon]=\"collapseIcon\" iconClass=\"text-secondary\" style=\"margin-left: -10px; margin-right: -5px;\"></seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button>\n </div>\n </div>\n </div>\n <div class=\"position-relative\" [style.height.px]=\"loading ? 150 : undefined\">\n <ng-container *ngIf=\"!collapsed\">\n <div class=\"p-2\" *ngIf=\"!loading else loadingTpl\">\n <ng-content></ng-content>\n </div>\n <ng-content select=\"seam-widget-footer\"></ng-content>\n <ng-template #loadingTpl>\n <div class=\"position-absolute\" @loadingAnim style=\"top:0;right:0;bottom:0;left:0\">\n <seam-loading [theme]=\"'primary'\"></seam-loading>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: ["seam-widget{display:block;font-size:15px}seam-widget .seam-widget{background:#FFFFFF;box-shadow:none}seam-widget .widget-header{display:flex;flex-direction:row;border-bottom:1px solid #dee2e6;background:#F4F4F4;font-size:17px}seam-widget .widget-header .widget-header-content{flex:1 1 100%}seam-widget .widget-header .widget-header-btns-container{display:flex;flex-direction:row}seam-widget .widget-header .widget-header-btns-container>div{display:flex;flex-direction:column;justify-content:center;padding:4px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:15px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-title{font-size:17px}seam-widget .widget-header-icon{display:inline-block;vertical-align:top;max-height:20px;max-width:20px;height:20px;width:20px;color:currentColor}seam-widget .widget-header-icon .widget-header-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;max-height:20px;max-width:20px;height:20px;width:20px}seam-widget .widget-header-icon .widget-header-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header-icon .widget-header-icon--img{height:100%;max-height:20px;max-width:20px}\n"] }]
|
|
136
|
+
loadingAnimation,
|
|
137
|
+
collapseAnimation,
|
|
138
|
+
keepContentAnimation,
|
|
139
|
+
], template: "<div class=\"seam-widget border rounded overflow-hidden\">\n <div class=\"widget-header\" seamWidgetDragHandle *ngIf=\"hasHeader\">\n <div class=\"widget-header-content p-2 text-nowrap\">\n <span class=\"mr-1 widget-header-icon\">\n <ng-container *ngIf=\"iconTpl; else noIconTpl\">\n <ng-template\n [ngTemplateOutlet]=\"iconTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: icon, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noIconTpl>\n <fa-icon *ngIf=\"_iconObj\"\n class=\"widget-header-icon--fa {{ iconClass }}\"\n [icon]=\"_iconObj\"></fa-icon>\n <img *ngIf=\"_iconUrl\"\n class=\"widget-header-icon--img {{ iconClass }}\"\n [src]=\"_iconUrl\" [alt]=\"titleText\">\n </ng-template>\n </span>\n <span class=\"widget-header-title text-truncate\">\n <ng-container *ngIf=\"titleTpl; else noTitleTpl\">\n <ng-template\n [ngTemplateOutlet]=\"titleTpl.template\"\n [ngTemplateOutletContext]=\"{ $implicit: titleText, icon: icon, title: titleText }\">\n </ng-template>\n </ng-container>\n <ng-template #noTitleTpl>{{ titleText }}</ng-template>\n </span>\n </div>\n <div class=\"widget-header-btns-container\" *ngIf=\"hasConfig || canCollapse\">\n <!-- <div *ngIf=\"hasConfig\">\n <button seamIconBtn [icon]=\"configIcon\"\n class=\"widget-header-btn-config\"\n [iconType]=\"null\">\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n <button seamButton class=\"widget-header-btn-config p-0\">\n <seam-icon class=\"d-block\" [icon]=\"configIcon\" iconClass=\"text-secondary\"></seam-icon>\n <span class=\"sr-only\">Widget configuration menu</span>\n </button>\n </div> -->\n\n <div *ngIf=\"canCollapse\" class=\"px-0\">\n\n <button seamButton class=\"widget-header-btn-collapse p-0 mr-1 h-100\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\">\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\">\n </seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button>\n <!-- iconType=\"borderless-styled-square\" -->\n <!-- style=\"margin-left: -10px; margin-right: -5px;\" -->\n\n <!-- <button seamIconBtn class=\"widget-header-btn-collapse\" (click)=\"collapse()\" [class.widget-header-btn-collapse--active]=\"collapsed\"\n btnTheme=\"secondary\"\n [icon]=\"collapseIcon\"\n iconType=\"borderless-styled-square\"\n size=\"xs\"\n btnSize=\"sm\"\n >\n <seam-icon class=\"d-block\"\n [icon]=\"collapseIcon\"\n iconClass=\"text-secondary\"\n style=\"margin-left: -10px; margin-right: -5px;\"\n iconType=\"borderless-styled-square\"></seam-icon>\n <span class=\"sr-only\">Widget collapse</span>\n </button> -->\n </div>\n </div>\n </div>\n <div class=\"position-relative overflow-hidden\" [style.height.px]=\"loading ? 150 : undefined\" [@collapseAnim]=\"collapseState\">\n <ng-container *ngIf=\"!collapsed\">\n <div class=\"p-2\" *ngIf=\"!loading else loadingTpl\" @keepContentAnim>\n <ng-content></ng-content>\n </div>\n <ng-content select=\"seam-widget-footer\"></ng-content>\n <ng-template #loadingTpl>\n <div class=\"position-absolute\" @loadingAnim style=\"top:0;right:0;bottom:0;left:0\">\n <seam-loading [theme]=\"'primary'\"></seam-loading>\n </div>\n </ng-template>\n </ng-container>\n </div>\n</div>\n", styles: ["seam-widget{display:block;font-size:15px}seam-widget .seam-widget{background:#FFFFFF;box-shadow:none}seam-widget .widget-header{display:flex;flex-direction:row;border-bottom:1px solid #dee2e6;background:#F4F4F4;font-size:17px}seam-widget .widget-header .widget-header-content{flex:1 1 100%}seam-widget .widget-header .widget-header-btns-container{display:flex;flex-direction:row}seam-widget .widget-header .widget-header-btns-container>div{display:flex;flex-direction:column;justify-content:center;padding:4px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-config .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;height:25px;width:30px}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .seam-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse .svg-inline--fa{transform:rotate(0);transition:.3s ease-in-out transform}seam-widget .widget-header .widget-header-btns-container .widget-header-btn-collapse.widget-header-btn-collapse--active .svg-inline--fa{transform:rotate(90deg)}seam-widget .widget-header .widget-header-title{font-size:17px}seam-widget .widget-header-icon{display:inline-block;vertical-align:top;max-height:20px;max-width:20px;height:20px;width:20px;color:currentColor}seam-widget .widget-header-icon .widget-header-icon--fa{display:flex;flex-direction:row;justify-content:center;text-align:center;max-height:20px;max-width:20px;height:20px;width:20px}seam-widget .widget-header-icon .widget-header-icon--fa .svg-inline--fa{max-width:100%;height:100%;width:100%}seam-widget .widget-header-icon .widget-header-icon--img{height:100%;max-height:20px;max-width:20px}\n"] }]
|
|
119
140
|
}], propDecorators: { collapsed: [{
|
|
120
141
|
type: Input
|
|
121
142
|
}], hasHeader: [{
|
|
@@ -139,4 +160,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImpor
|
|
|
139
160
|
type: ContentChild,
|
|
140
161
|
args: [WidgetTitleTplDirective, { static: true }]
|
|
141
162
|
}] } });
|
|
142
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi93aWRnZXQvd2lkZ2V0L3dpZGdldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vd2lkZ2V0L3dpZGdldC93aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUV6RSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFHakYsT0FBTyxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQTtBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0seUJBQXlCLENBQUE7QUFHdEQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDaEYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMENBQTBDLENBQUE7Ozs7Ozs7O0FBRWxGOzs7Ozs7Ozs7O0dBVUc7QUFtQkgsTUFBTSxPQUFPLGVBQWU7SUFsQjVCO1FBeUJFLGNBQWM7UUFDZCxlQUFVLEdBQUcsS0FBSyxDQUFBO1FBQ2xCLGNBQWM7UUFDZCxpQkFBWSxHQUFHLFdBQVcsQ0FBQTtRQUVELGNBQVMsR0FBRyxLQUFLLENBQUE7UUFFMUM7OztXQUdHO1FBQ3NCLGNBQVMsR0FBRyxJQUFJLENBQUE7UUF3Q3pDLCtDQUErQztRQUN0QixZQUFPLEdBQUcsS0FBSyxDQUFBO1FBRXhDLGNBQWM7UUFDZCx5Q0FBeUM7UUFDaEIsY0FBUyxHQUFHLEtBQUssQ0FBQTtRQUMxQyxjQUFjO1FBQ2QsMkNBQTJDO1FBQ2xCLGdCQUFXLEdBQUcsS0FBSyxDQUFBO0tB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Z2VyIH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucydcbmltcG9ydCB7IEJvb2xlYW5JbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2VyY2lvbidcbmltcG9ydCB7IENvbXBvbmVudCwgQ29udGVudENoaWxkLCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuXG5pbXBvcnQgeyBJY29uUHJvcCB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZSdcbmltcG9ydCB7IGZhQW5nbGVEb3duLCBmYUNvZyB9IGZyb20gJ0Bmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucydcbmltcG9ydCB7IElucHV0Qm9vbGVhbiB9IGZyb20gJ0B0aGVzZWFtL3VpLWNvbW1vbi9jb3JlJ1xuaW1wb3J0IHsgU2VhbUljb24gfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vaWNvbidcblxuaW1wb3J0IHsgV2lkZ2V0SWNvblRwbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvd2lkZ2V0LWljb24tdHBsLmRpcmVjdGl2ZSdcbmltcG9ydCB7IFdpZGdldFRpdGxlVHBsRGlyZWN0aXZlIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy93aWRnZXQtdGl0bGUtdHBsLmRpcmVjdGl2ZSdcblxuLyoqXG4gKiBXaWRnZXRcbiAqXG4gKiBXaWRnZXRzIGFyZSBkZXNpZ25lZCB3aXRoIHRoZSBpbnRlbnRpb24gb2YgYmVpbmcgb24gYSBkYXNoYm9hcmQuIE90aGVyIHVzZXNcbiAqIG1heSBiZSBzdXBwb3J0ZWQgYXMgdGhlIG5lZWQgYXJpc2VzLlxuICpcbiAqIFRoZSBvbmx5IEhUTUwvQ1NTIHVzZSBzaG91bGQgYmUgYSB3aWRnZXQgY29udGVudCBjb21wb25lbnQsIHVubGVzcyB0aGVyZSBpcyBhXG4gKiBjYXNlIHJlcXVpcmluZyBtb3JlIGFkdmFuY2VkIGRlc2lnbi4gVGhpcyBpcyBzbyB0aGF0IHdlIGNhbiBtYW5hZ2UgYSBjb21tb25cbiAqIHN0eWxlIGZvciBvdXIgd2lkZ2V0cy4gSWYgYSBjYXNlIHJlcXVpcmluZyBub24gd2lkZ2V0IGNvbnRlbnQgY29tcG9uZW50cyBpc1xuICogdXNlZCB0aGVuIHRoZSBzaXR1YXRpb24gc2hvdWxkIGJlIGNvbnNpZGVyZWQgZm9yIGJlY29taW5nIGEgd2lkZ2V0IGNvbXBvbmVudC5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2VhbS13aWRnZXQnLFxuICB0ZW1wbGF0ZVVybDogJy4vd2lkZ2V0LmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vd2lkZ2V0LmNvbXBvbmVudC5zY3NzJ10sXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdsb2FkaW5nQW5pbScsIFtcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAwIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLWluLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogMSB9KSksXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICAgICAgc3R5bGUoeyBvcGFjaXR5OiAxIH0pLFxuICAgICAgICBhbmltYXRlKCcyNTBtcyBlYXNlLWluLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogMCB9KSksXG4gICAgICBdKSxcbiAgICBdKSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgV2lkZ2V0Q29tcG9uZW50IHtcblxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGFzSGVhZGVyOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2xvYWRpbmc6IEJvb2xlYW5JbnB1dFxuICBzdGF0aWMgbmdBY2NlcHRJbnB1dFR5cGVfaGFzQ29uZmlnOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2NhbkNvbGxhcHNlOiBCb29sZWFuSW5wdXRcblxuICAvKiogQGlnbm9yZSAqL1xuICBjb25maWdJY29uID0gZmFDb2dcbiAgLyoqIEBpZ25vcmUgKi9cbiAgY29sbGFwc2VJY29uID0gZmFBbmdsZURvd25cblxuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgY29sbGFwc2VkID0gZmFsc2VcblxuICAvKipcbiAgICogVG9nZ2xlcyB0aGUgdG9wIGhlYWRlciBiYXIgb2YgYSB3aWRnZXQuIFRoaXMgc2hvdWxkIGJlIHRydWUgZm9yIG1vc3RcbiAgICogd2lkZ2V0cy5cbiAgICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBoYXNIZWFkZXIgPSB0cnVlXG5cbiAgLyoqXG4gICAqIFRpdGxlIGRpc3BsYXllZCBpbiB0aGUgdG9wIGhlYWRlci5cbiAgICpcbiAgICogSWYgYSBtb3JlIGFkdmFuY2VkIHRpdGxlIGlzIG5lZWRlZCB5b3UgY2FuIHVzZSBgc2VhbVdpZGdldFRpdGxlVHBsYFxuICAgKiB0ZW1wbGF0ZSBkaXJlY3RpdmUsIGJ1dCB0ZXh0IGlzIHJlY29tbWVuZGVkLCBiZWNhdXNlIGFsbG93aW5nIGN1c3RvbSBzdHlsZXNcbiAgICogY2FuIGxlYWQgdG8gaW5jb25zaXRlbmN5IHF1aWNrbHkgYXMgZGlmZmVyZW50IGRldmVsb3BlcnMga2VlcCBtYWtpbmdcbiAgICogdHdlYWtzLlxuICAgKi9cbiAgQElucHV0KCkgdGl0bGVUZXh0OiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbiAgLyoqXG4gICAqIEljb24gZGlzcGxheWVkIGluIHRoZSB0b3AgaGVhZGVyLlxuICAgKlxuICAgKiBJZiBhIG1vcmUgYWR2YW5jZWQgaWNvbiBpcyBuZWVkZWQgeW91IGNhbiB1c2UgYHNlYW1XaWRnZXRJY29uVHBsYCB0ZW1wbGF0ZVxuICAgKiBkaXJlY3RpdmUsIGJ1dCBhIGBTZWFtSWNvbmAgaW5wdXQgaXMgcmVjb21tZW5kZWQsIGJlY2F1c2UgYWxsb3dpbmcgY3VzdG9tXG4gICAqIGljb25zIHRoYXQgZG8gbm90IGZvbGxvdyB0aGUgdGVzdGVkIHR5cGVzIGNhbiBsZWFkIHRvIGluY29uc2l0ZW5jeSBxdWlja2x5XG4gICAqIGFzIGRpZmZlcmVudCBkZXZlbG9wZXJzIGtlZXAgbWFraW5nIHR3ZWFrcy5cbiAgICovXG4gIEBJbnB1dCgpXG4gIGdldCBpY29uKCk6IFNlYW1JY29uIHwgdW5kZWZpbmVkIHsgcmV0dXJuIHRoaXMuX2ljb25VcmwgfHwgdGhpcy5faWNvbk9iaiB9XG4gIHNldCBpY29uKHZhbHVlOiBTZWFtSWNvbiB8IHVuZGVmaW5lZCkge1xuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9pY29uVXJsID0gdmFsdWVcbiAgICAgIHRoaXMuX2ljb25PYmogPSB1bmRlZmluZWRcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faWNvblVybCA9IHVuZGVmaW5lZFxuICAgICAgdGhpcy5faWNvbk9iaiA9IHZhbHVlXG4gICAgfVxuICB9XG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIF9pY29uVXJsOiBzdHJpbmcgfCB1bmRlZmluZWRcbiAgLyoqIEBpZ25vcmUgKi9cbiAgcHVibGljIF9pY29uT2JqOiBJY29uUHJvcCB8IHVuZGVmaW5lZFxuXG4gIC8qKiBBZGQgYSBjc3MgY2xhc3MgdG8gdGhlIGhlYWRlciBpY29uLiAqL1xuICBASW5wdXQoKSBpY29uQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICAvKiogU2hvd3Mgd2lkZ2V0IGxvYWRpbmcgaW5zdGVhZCBvZiBjb250ZW50LiAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbG9hZGluZyA9IGZhbHNlXG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgLy8gTk9URTogQ29uZmlnIGlzIHN0aWxsIGJlaW5nIHdvcmtlZCBvbi5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGhhc0NvbmZpZyA9IGZhbHNlXG4gIC8qKiBAaWdub3JlICovXG4gIC8vIE5PVEU6IENvbGxhcHNlIGlzIHN0aWxsIGJlaW5nIHdvcmtlZCBvbi5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGNhbkNvbGxhcHNlID0gZmFsc2VcblxuICBAQ29udGVudENoaWxkKFdpZGdldEljb25UcGxEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGljb25UcGw/OiBXaWRnZXRJY29uVHBsRGlyZWN0aXZlXG4gIEBDb250ZW50Q2hpbGQoV2lkZ2V0VGl0bGVUcGxEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIHRpdGxlVHBsPzogV2lkZ2V0VGl0bGVUcGxEaXJlY3RpdmVcblxuICAvKipcbiAgICogVG9nZ2xlcyBhIHdpZGdldCdzIGNvbGxhcHNlZCBzdGF0ZS5cbiAgICpcbiAgICogTk9URTogQ29sbGFwc2UgaXMgc3RpbGwgYmVpbmcgd29ya2VkIG9uLlxuICAgKiBAZGVwcmFjYXRlZFxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjb2xsYXBzZSgpIHtcbiAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZFxuICB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZWFtLXdpZGdldCBib3JkZXIgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPGRpdiBjbGFzcz1cIndpZGdldC1oZWFkZXJcIiBzZWFtV2lkZ2V0RHJhZ0hhbmRsZSAqbmdJZj1cImhhc0hlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWNvbnRlbnQgcC0yIHRleHQtbm93cmFwXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1yLTEgd2lkZ2V0LWhlYWRlci1pY29uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uVHBsOyBlbHNlIG5vSWNvblRwbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaWNvblRwbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGljb24sIGljb246IGljb24sIHRpdGxlOiB0aXRsZVRleHQgfVwiPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvblRwbD5cbiAgICAgICAgICA8ZmEtaWNvbiAqbmdJZj1cIl9pY29uT2JqXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1pY29uLS1mYSB7eyBpY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgW2ljb25dPVwiX2ljb25PYmpcIj48L2ZhLWljb24+XG4gICAgICAgICAgPGltZyAqbmdJZj1cIl9pY29uVXJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1pY29uLS1pbWcge3sgaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgIFtzcmNdPVwiX2ljb25VcmxcIiBbYWx0XT1cInRpdGxlVGV4dFwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLXRpdGxlIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRpdGxlVHBsOyBlbHNlIG5vVGl0bGVUcGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRpdGxlVHBsLnRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGl0bGVUZXh0LCBpY29uOiBpY29uLCB0aXRsZTogdGl0bGVUZXh0IH1cIj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub1RpdGxlVHBsPnt7IHRpdGxlVGV4dCB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIndpZGdldC1oZWFkZXItYnRucy1jb250YWluZXJcIiAqbmdJZj1cImhhc0NvbmZpZyB8fCBjYW5Db2xsYXBzZVwiPlxuICAgICAgPGRpdiAqbmdJZj1cImhhc0NvbmZpZ1wiPlxuICAgICAgICA8IS0tIDxidXR0b24gc2VhbUljb25CdG4gW2ljb25dPVwiY29uZmlnSWNvblwiXG4gICAgICAgICAgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWJ0bi1jb25maWdcIlxuICAgICAgICAgIGljb25UeXBlPVwiXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbmZpZ3VyYXRpb24gbWVudTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+IC0tPlxuICAgICAgICA8YnV0dG9uIHNlYW1CdXR0b24gY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWJ0bi1jb25maWcgcC0wXCI+XG4gICAgICAgICAgPHNlYW0taWNvbiBjbGFzcz1cImQtYmxvY2tcIiBbaWNvbl09XCJjb25maWdJY29uXCIgaWNvbkNsYXNzPVwidGV4dC1zZWNvbmRhcnlcIj48L3NlYW0taWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5XaWRnZXQgY29uZmlndXJhdGlvbiBtZW51PC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgIDwvZGl2PlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiY2FuQ29sbGFwc2VcIiBjbGFzcz1cInB4LTBcIj5cbiAgICAgICAgPGJ1dHRvbiBzZWFtQnV0dG9uIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1idG4tY29sbGFwc2UgcC0wXCIgKGNsaWNrKT1cImNvbGxhcHNlKClcIj5cbiAgICAgICAgICA8c2VhbS1pY29uIGNsYXNzPVwiZC1ibG9ja1wiIFtpY29uXT1cImNvbGxhcHNlSWNvblwiIGljb25DbGFzcz1cInRleHQtc2Vjb25kYXJ5XCIgc3R5bGU9XCJtYXJnaW4tbGVmdDogLTEwcHg7IG1hcmdpbi1yaWdodDogLTVweDtcIj48L3NlYW0taWNvbj5cbiAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5XaWRnZXQgY29sbGFwc2U8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tcmVsYXRpdmVcIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImxvYWRpbmcgPyAxNTAgOiB1bmRlZmluZWRcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWNvbGxhcHNlZFwiPlxuICAgICAgPGRpdiBjbGFzcz1cInAtMlwiICpuZ0lmPVwiIWxvYWRpbmcgZWxzZSBsb2FkaW5nVHBsXCI+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VhbS13aWRnZXQtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nVHBsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIiBAbG9hZGluZ0FuaW0gc3R5bGU9XCJ0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MFwiPlxuICAgICAgICAgIDxzZWFtLWxvYWRpbmcgW3RoZW1lXT1cIidwcmltYXJ5J1wiPjwvc2VhbS1sb2FkaW5nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
163
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lkZ2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpLWNvbW1vbi93aWRnZXQvd2lkZ2V0L3dpZGdldC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy91aS1jb21tb24vd2lkZ2V0L3dpZGdldC93aWRnZXQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUE7QUFFaEYsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUc1RixPQUFPLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLG1DQUFtQyxDQUFBO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQTtBQUd0RCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQTtBQUNoRixPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQTs7Ozs7Ozs7QUFFbEYsTUFBTSxjQUFjLEdBQUcsVUFBVSxDQUFBO0FBQ2pDLE1BQU0sZUFBZSxHQUFHLFdBQVcsQ0FBQTtBQUVuQyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsY0FBYyxRQUFRLGVBQWUsRUFBRSxDQUFBO0FBRXBFLE1BQU0sZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGFBQWEsRUFBRTtJQUM5QyxVQUFVLENBQUMsUUFBUSxFQUFFO1FBQ25CLEtBQUssQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyQixPQUFPLENBQUMsbUJBQW1CLEVBQUUsS0FBSyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7S0FD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QUFnQjtBQUlmO0lBQWYsWUFBWSxFQUFFO2tEQUFrQjtBQU1qQjtJQUFmLFlBQVksRUFBRTtvREFBb0I7MkZBcEVqQyxlQUFlO2tCQVgzQixTQUFTOytCQUNFLGFBQWEsaUJBR1IsaUJBQWlCLENBQUMsSUFBSSxjQUN6Qjt3QkFDVixnQkFBZ0I7d0JBQ2hCLGlCQUFpQjt3QkFDakIsb0JBQW9CO3FCQUNyQjs4QkFld0IsU0FBUztzQkFBakMsS0FBSztnQkFNbUIsU0FBUztzQkFBakMsS0FBSztnQkFVRyxTQUFTO3NCQUFqQixLQUFLO2dCQVdGLElBQUk7c0JBRFAsS0FBSztnQkFnQkcsU0FBUztzQkFBakIsS0FBSztnQkFHbUIsT0FBTztzQkFBL0IsS0FBSztnQkFJbUIsU0FBUztzQkFBakMsS0FBSztnQkFNbUIsV0FBVztzQkFBbkMsS0FBSztnQkFFa0QsT0FBTztzQkFBOUQsWUFBWTt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBQ0csUUFBUTtzQkFBaEUsWUFBWTt1QkFBQyx1QkFBdUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJ1xuaW1wb3J0IHsgQm9vbGVhbklucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvZXJjaW9uJ1xuaW1wb3J0IHsgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIElucHV0LCBpc0Rldk1vZGUsIFZpZXdFbmNhcHN1bGF0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcblxuaW1wb3J0IHsgSWNvblByb3AgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUnXG5pbXBvcnQgeyBmYUFuZ2xlRG93biwgZmFDb2cgfSBmcm9tICdAZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMnXG5pbXBvcnQgeyBJbnB1dEJvb2xlYW4gfSBmcm9tICdAdGhlc2VhbS91aS1jb21tb24vY29yZSdcbmltcG9ydCB7IFNlYW1JY29uIH0gZnJvbSAnQHRoZXNlYW0vdWktY29tbW9uL2ljb24nXG5cbmltcG9ydCB7IFdpZGdldEljb25UcGxEaXJlY3RpdmUgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3dpZGdldC1pY29uLXRwbC5kaXJlY3RpdmUnXG5pbXBvcnQgeyBXaWRnZXRUaXRsZVRwbERpcmVjdGl2ZSB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvd2lkZ2V0LXRpdGxlLXRwbC5kaXJlY3RpdmUnXG5cbmNvbnN0IEVYUEFOREVEX1NUQVRFID0gJ2V4cGFuZGVkJ1xuY29uc3QgQ09MTEFQU0VEX1NUQVRFID0gJ2NvbGxhcHNlZCdcblxuY29uc3QgRVhQQU5EX1RSQU5TSVRJT04gPSBgJHtFWFBBTkRFRF9TVEFURX0gPD0+ICR7Q09MTEFQU0VEX1NUQVRFfWBcblxuY29uc3QgbG9hZGluZ0FuaW1hdGlvbiA9IHRyaWdnZXIoJ2xvYWRpbmdBbmltJywgW1xuICB0cmFuc2l0aW9uKCc6ZW50ZXInLCBbXG4gICAgc3R5bGUoeyBvcGFjaXR5OiAwIH0pLFxuICAgIGFuaW1hdGUoJzI1MG1zIGVhc2UtaW4tb3V0Jywgc3R5bGUoeyBvcGFjaXR5OiAxIH0pKSxcbiAgXSksXG4gIHRyYW5zaXRpb24oJzpsZWF2ZScsIFtcbiAgICBzdHlsZSh7IG9wYWNpdHk6IDEgfSksXG4gICAgYW5pbWF0ZSgnMjUwbXMgZWFzZS1pbi1vdXQnLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpLFxuICBdKSxcbl0pXG5cbi8qKlxuICogSSB3YXMgaGF2aW5nIGFuIGlzc3VlIGdldHRpbmcgdGhlIGNvbnRlbnQgdG8gbm90IGJlIHJlbW92ZWQgZnJvbSB0aGUgRE9NLFxuICogYmVmb3JlIHRoZSBhbmltYXRpb24gd2FzIGNvbXBsZXRlLiBUaGlzIGFuaW1hdGlvbiBpcyBhIGhhY2sgdG8ga2VlcCB0aGVcbiAqIGNvbnRlbnQgaW4gdGhlIERPTSB1bnRpbCB0aGUgYW5pbWF0aW9uIGlzIGNvbXBsZXRlLlxuICovXG5jb25zdCBrZWVwQ29udGVudEFuaW1hdGlvbiA9IHRyaWdnZXIoJ2tlZXBDb250ZW50QW5pbScsIFtcbiAgdHJhbnNpdGlvbignOmxlYXZlJywgW1xuICAgIHN0eWxlKHsgb3BhY2l0eTogMSB9KSxcbiAgICBhbmltYXRlKCcwbXMnLCBzdHlsZSh7IG9wYWNpdHk6IDAgfSkpLFxuICBdKSxcbl0pXG5cbmNvbnN0IGNvbGxhcHNlQW5pbWF0aW9uID0gdHJpZ2dlcignY29sbGFwc2VBbmltJywgW1xuICBzdGF0ZShFWFBBTkRFRF9TVEFURSwgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gIHN0YXRlKENPTExBUFNFRF9TVEFURSwgc3R5bGUoeyBoZWlnaHQ6ICcwJyB9KSksXG4gIHRyYW5zaXRpb24oRVhQQU5EX1RSQU5TSVRJT04sIGFuaW1hdGUoJzAuM3MgZWFzZS1pbi1vdXQnKSksXG5dKVxuXG4vKipcbiAqIFdpZGdldFxuICpcbiAqIFdpZGdldHMgYXJlIGRlc2lnbmVkIHdpdGggdGhlIGludGVudGlvbiBvZiBiZWluZyBvbiBhIGRhc2hib2FyZC4gT3RoZXIgdXNlc1xuICogbWF5IGJlIHN1cHBvcnRlZCBhcyB0aGUgbmVlZCBhcmlzZXMuXG4gKlxuICogVGhlIG9ubHkgSFRNTC9DU1MgdXNlIHNob3VsZCBiZSBhIHdpZGdldCBjb250ZW50IGNvbXBvbmVudCwgdW5sZXNzIHRoZXJlIGlzIGFcbiAqIGNhc2UgcmVxdWlyaW5nIG1vcmUgYWR2YW5jZWQgZGVzaWduLiBUaGlzIGlzIHNvIHRoYXQgd2UgY2FuIG1hbmFnZSBhIGNvbW1vblxuICogc3R5bGUgZm9yIG91ciB3aWRnZXRzLiBJZiBhIGNhc2UgcmVxdWlyaW5nIG5vbiB3aWRnZXQgY29udGVudCBjb21wb25lbnRzIGlzXG4gKiB1c2VkIHRoZW4gdGhlIHNpdHVhdGlvbiBzaG91bGQgYmUgY29uc2lkZXJlZCBmb3IgYmVjb21pbmcgYSB3aWRnZXQgY29tcG9uZW50LlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdzZWFtLXdpZGdldCcsXG4gIHRlbXBsYXRlVXJsOiAnLi93aWRnZXQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi93aWRnZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgYW5pbWF0aW9uczogW1xuICAgIGxvYWRpbmdBbmltYXRpb24sXG4gICAgY29sbGFwc2VBbmltYXRpb24sXG4gICAga2VlcENvbnRlbnRBbmltYXRpb24sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIFdpZGdldENvbXBvbmVudCB7XG5cbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hhc0hlYWRlcjogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9sb2FkaW5nOiBCb29sZWFuSW5wdXRcbiAgc3RhdGljIG5nQWNjZXB0SW5wdXRUeXBlX2hhc0NvbmZpZzogQm9vbGVhbklucHV0XG4gIHN0YXRpYyBuZ0FjY2VwdElucHV0VHlwZV9jYW5Db2xsYXBzZTogQm9vbGVhbklucHV0XG5cbiAgcmVhZG9ubHkgY29uZmlnSWNvbiA9IGZhQ29nXG4gIHJlYWRvbmx5IGNvbGxhcHNlSWNvbiA9IGZhQW5nbGVEb3duXG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGNvbGxhcHNlZCBzdGF0ZSBvZiBhIHdpZGdldC5cbiAgICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBjb2xsYXBzZWQgPSBmYWxzZVxuXG4gIC8qKlxuICAgKiBUb2dnbGVzIHRoZSB0b3AgaGVhZGVyIGJhciBvZiBhIHdpZGdldC4gVGhpcyBzaG91bGQgYmUgdHJ1ZSBmb3IgbW9zdFxuICAgKiB3aWRnZXRzLlxuICAgKi9cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGhhc0hlYWRlciA9IHRydWVcblxuICAvKipcbiAgICogVGl0bGUgZGlzcGxheWVkIGluIHRoZSB0b3AgaGVhZGVyLlxuICAgKlxuICAgKiBJZiBhIG1vcmUgYWR2YW5jZWQgdGl0bGUgaXMgbmVlZGVkIHlvdSBjYW4gdXNlIGBzZWFtV2lkZ2V0VGl0bGVUcGxgXG4gICAqIHRlbXBsYXRlIGRpcmVjdGl2ZSwgYnV0IHRleHQgaXMgcmVjb21tZW5kZWQsIGJlY2F1c2UgYWxsb3dpbmcgY3VzdG9tIHN0eWxlc1xuICAgKiBjYW4gbGVhZCB0byBpbmNvbnNpdGVuY3kgcXVpY2tseSBhcyBkaWZmZXJlbnQgZGV2ZWxvcGVycyBrZWVwIG1ha2luZ1xuICAgKiB0d2Vha3MuXG4gICAqL1xuICBASW5wdXQoKSB0aXRsZVRleHQ6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICAvKipcbiAgICogSWNvbiBkaXNwbGF5ZWQgaW4gdGhlIHRvcCBoZWFkZXIuXG4gICAqXG4gICAqIElmIGEgbW9yZSBhZHZhbmNlZCBpY29uIGlzIG5lZWRlZCB5b3UgY2FuIHVzZSBgc2VhbVdpZGdldEljb25UcGxgIHRlbXBsYXRlXG4gICAqIGRpcmVjdGl2ZSwgYnV0IGEgYFNlYW1JY29uYCBpbnB1dCBpcyByZWNvbW1lbmRlZCwgYmVjYXVzZSBhbGxvd2luZyBjdXN0b21cbiAgICogaWNvbnMgdGhhdCBkbyBub3QgZm9sbG93IHRoZSB0ZXN0ZWQgdHlwZXMgY2FuIGxlYWQgdG8gaW5jb25zaXRlbmN5IHF1aWNrbHlcbiAgICogYXMgZGlmZmVyZW50IGRldmVsb3BlcnMga2VlcCBtYWtpbmcgdHdlYWtzLlxuICAgKi9cbiAgQElucHV0KClcbiAgZ2V0IGljb24oKTogU2VhbUljb24gfCB1bmRlZmluZWQgeyByZXR1cm4gdGhpcy5faWNvblVybCB8fCB0aGlzLl9pY29uT2JqIH1cbiAgc2V0IGljb24odmFsdWU6IFNlYW1JY29uIHwgdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2ljb25VcmwgPSB2YWx1ZVxuICAgICAgdGhpcy5faWNvbk9iaiA9IHVuZGVmaW5lZFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9pY29uVXJsID0gdW5kZWZpbmVkXG4gICAgICB0aGlzLl9pY29uT2JqID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICBfaWNvblVybDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gIF9pY29uT2JqOiBJY29uUHJvcCB8IHVuZGVmaW5lZFxuXG4gIC8qKiBBZGQgYSBjc3MgY2xhc3MgdG8gdGhlIGhlYWRlciBpY29uLiAqL1xuICBASW5wdXQoKSBpY29uQ2xhc3M6IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGxcblxuICAvKiogU2hvd3Mgd2lkZ2V0IGxvYWRpbmcgaW5zdGVhZCBvZiBjb250ZW50LiAqL1xuICBASW5wdXQoKSBASW5wdXRCb29sZWFuKCkgbG9hZGluZyA9IGZhbHNlXG5cbiAgLyoqIEBpZ25vcmUgKi9cbiAgLy8gTk9URTogQ29uZmlnIGlzIHN0aWxsIGJlaW5nIHdvcmtlZCBvbi5cbiAgQElucHV0KCkgQElucHV0Qm9vbGVhbigpIGhhc0NvbmZpZyA9IGZhbHNlXG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgdGhlIGFiaWxpdHkgdG8gY29sbGFwc2UgYSB3aWRnZXQuIEFuIGljb24gd2lsbCBiZSBkaXNwbGF5ZWQgaW4gdGhlXG4gICAqIGhlYWRlciB0byB0b2dnbGUgdGhlIGNvbGxhcHNlZCBzdGF0ZS5cbiAgICovXG4gIEBJbnB1dCgpIEBJbnB1dEJvb2xlYW4oKSBjYW5Db2xsYXBzZSA9IGZhbHNlXG5cbiAgQENvbnRlbnRDaGlsZChXaWRnZXRJY29uVHBsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSBpY29uVHBsPzogV2lkZ2V0SWNvblRwbERpcmVjdGl2ZVxuICBAQ29udGVudENoaWxkKFdpZGdldFRpdGxlVHBsRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KSB0aXRsZVRwbD86IFdpZGdldFRpdGxlVHBsRGlyZWN0aXZlXG5cbiAgLyoqXG4gICAqIFRvZ2dsZXMgYSB3aWRnZXQncyBjb2xsYXBzZWQgc3RhdGUuXG4gICAqL1xuICBwdWJsaWMgY29sbGFwc2UoKSB7XG4gICAgaWYgKCF0aGlzLmNhbkNvbGxhcHNlKSB7XG4gICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcbiAgICAgICAgY29uc29sZS53YXJuKCdXaWRnZXRDb21wb25lbnQ6IGNvbGxhcHNlKCkgY2FsbGVkIHdoZW4gY2FuQ29sbGFwc2UgaXMgZmFsc2UuJylcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkXG4gIH1cblxuICBnZXQgY29sbGFwc2VTdGF0ZSgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb2xsYXBzZWQgPyBDT0xMQVBTRURfU1RBVEUgOiBFWFBBTkRFRF9TVEFURSB9XG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJzZWFtLXdpZGdldCBib3JkZXIgcm91bmRlZCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgPGRpdiBjbGFzcz1cIndpZGdldC1oZWFkZXJcIiBzZWFtV2lkZ2V0RHJhZ0hhbmRsZSAqbmdJZj1cImhhc0hlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWNvbnRlbnQgcC0yIHRleHQtbm93cmFwXCI+XG4gICAgICA8c3BhbiBjbGFzcz1cIm1yLTEgd2lkZ2V0LWhlYWRlci1pY29uXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpY29uVHBsOyBlbHNlIG5vSWNvblRwbFwiPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZVxuICAgICAgICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwiaWNvblRwbC50ZW1wbGF0ZVwiXG4gICAgICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyAkaW1wbGljaXQ6IGljb24sIGljb246IGljb24sIHRpdGxlOiB0aXRsZVRleHQgfVwiPlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8bmctdGVtcGxhdGUgI25vSWNvblRwbD5cbiAgICAgICAgICA8ZmEtaWNvbiAqbmdJZj1cIl9pY29uT2JqXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1pY29uLS1mYSB7eyBpY29uQ2xhc3MgfX1cIlxuICAgICAgICAgICAgW2ljb25dPVwiX2ljb25PYmpcIj48L2ZhLWljb24+XG4gICAgICAgICAgPGltZyAqbmdJZj1cIl9pY29uVXJsXCJcbiAgICAgICAgICAgIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1pY29uLS1pbWcge3sgaWNvbkNsYXNzIH19XCJcbiAgICAgICAgICAgIFtzcmNdPVwiX2ljb25VcmxcIiBbYWx0XT1cInRpdGxlVGV4dFwiPlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLXRpdGxlIHRleHQtdHJ1bmNhdGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRpdGxlVHBsOyBlbHNlIG5vVGl0bGVUcGxcIj5cbiAgICAgICAgICA8bmctdGVtcGxhdGVcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRpdGxlVHBsLnRlbXBsYXRlXCJcbiAgICAgICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7ICRpbXBsaWNpdDogdGl0bGVUZXh0LCBpY29uOiBpY29uLCB0aXRsZTogdGl0bGVUZXh0IH1cIj5cbiAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPG5nLXRlbXBsYXRlICNub1RpdGxlVHBsPnt7IHRpdGxlVGV4dCB9fTwvbmctdGVtcGxhdGU+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIndpZGdldC1oZWFkZXItYnRucy1jb250YWluZXJcIiAqbmdJZj1cImhhc0NvbmZpZyB8fCBjYW5Db2xsYXBzZVwiPlxuICAgICAgPCEtLSA8ZGl2ICpuZ0lmPVwiaGFzQ29uZmlnXCI+XG4gICAgICAgIDxidXR0b24gc2VhbUljb25CdG4gW2ljb25dPVwiY29uZmlnSWNvblwiXG4gICAgICAgICAgY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWJ0bi1jb25maWdcIlxuICAgICAgICAgIFtpY29uVHlwZV09XCJudWxsXCI+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbmZpZ3VyYXRpb24gbWVudTwvc3Bhbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDxidXR0b24gc2VhbUJ1dHRvbiBjbGFzcz1cIndpZGdldC1oZWFkZXItYnRuLWNvbmZpZyBwLTBcIj5cbiAgICAgICAgICA8c2VhbS1pY29uIGNsYXNzPVwiZC1ibG9ja1wiIFtpY29uXT1cImNvbmZpZ0ljb25cIiBpY29uQ2xhc3M9XCJ0ZXh0LXNlY29uZGFyeVwiPjwvc2VhbS1pY29uPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPldpZGdldCBjb25maWd1cmF0aW9uIG1lbnU8L3NwYW4+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgPC9kaXY+IC0tPlxuXG4gICAgICA8ZGl2ICpuZ0lmPVwiY2FuQ29sbGFwc2VcIiBjbGFzcz1cInB4LTBcIj5cblxuICAgICAgICA8YnV0dG9uIHNlYW1CdXR0b24gY2xhc3M9XCJ3aWRnZXQtaGVhZGVyLWJ0bi1jb2xsYXBzZSBwLTAgbXItMSBoLTEwMFwiIChjbGljayk9XCJjb2xsYXBzZSgpXCIgW2NsYXNzLndpZGdldC1oZWFkZXItYnRuLWNvbGxhcHNlLS1hY3RpdmVdPVwiY29sbGFwc2VkXCI+XG4gICAgICAgICAgPHNlYW0taWNvbiBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgW2ljb25dPVwiY29sbGFwc2VJY29uXCJcbiAgICAgICAgICAgIGljb25DbGFzcz1cInRleHQtc2Vjb25kYXJ5XCI+XG4gICAgICAgICAgPC9zZWFtLWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbGxhcHNlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPCEtLSBpY29uVHlwZT1cImJvcmRlcmxlc3Mtc3R5bGVkLXNxdWFyZVwiIC0tPlxuICAgICAgICA8IS0tIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4OyBtYXJnaW4tcmlnaHQ6IC01cHg7XCIgLS0+XG5cbiAgICAgICAgPCEtLSA8YnV0dG9uIHNlYW1JY29uQnRuIGNsYXNzPVwid2lkZ2V0LWhlYWRlci1idG4tY29sbGFwc2VcIiAoY2xpY2spPVwiY29sbGFwc2UoKVwiIFtjbGFzcy53aWRnZXQtaGVhZGVyLWJ0bi1jb2xsYXBzZS0tYWN0aXZlXT1cImNvbGxhcHNlZFwiXG4gICAgICAgICAgYnRuVGhlbWU9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgIFtpY29uXT1cImNvbGxhcHNlSWNvblwiXG4gICAgICAgICAgaWNvblR5cGU9XCJib3JkZXJsZXNzLXN0eWxlZC1zcXVhcmVcIlxuICAgICAgICAgIHNpemU9XCJ4c1wiXG4gICAgICAgICAgYnRuU2l6ZT1cInNtXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgPHNlYW0taWNvbiBjbGFzcz1cImQtYmxvY2tcIlxuICAgICAgICAgICAgW2ljb25dPVwiY29sbGFwc2VJY29uXCJcbiAgICAgICAgICAgIGljb25DbGFzcz1cInRleHQtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgIHN0eWxlPVwibWFyZ2luLWxlZnQ6IC0xMHB4OyBtYXJnaW4tcmlnaHQ6IC01cHg7XCJcbiAgICAgICAgICAgIGljb25UeXBlPVwiYm9yZGVybGVzcy1zdHlsZWQtc3F1YXJlXCI+PC9zZWFtLWljb24+XG4gICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+V2lkZ2V0IGNvbGxhcHNlPC9zcGFuPlxuICAgICAgICA8L2J1dHRvbj4gLS0+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJwb3NpdGlvbi1yZWxhdGl2ZSBvdmVyZmxvdy1oaWRkZW5cIiBbc3R5bGUuaGVpZ2h0LnB4XT1cImxvYWRpbmcgPyAxNTAgOiB1bmRlZmluZWRcIiBbQGNvbGxhcHNlQW5pbV09XCJjb2xsYXBzZVN0YXRlXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFjb2xsYXBzZWRcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJwLTJcIiAqbmdJZj1cIiFsb2FkaW5nIGVsc2UgbG9hZGluZ1RwbFwiIEBrZWVwQ29udGVudEFuaW0+XG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbiAgICAgIDwvZGl2PlxuICAgICAgPG5nLWNvbnRlbnQgc2VsZWN0PVwic2VhbS13aWRnZXQtZm9vdGVyXCI+PC9uZy1jb250ZW50PlxuICAgICAgPG5nLXRlbXBsYXRlICNsb2FkaW5nVHBsPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicG9zaXRpb24tYWJzb2x1dGVcIiBAbG9hZGluZ0FuaW0gc3R5bGU9XCJ0b3A6MDtyaWdodDowO2JvdHRvbTowO2xlZnQ6MFwiPlxuICAgICAgICAgIDxzZWFtLWxvYWRpbmcgW3RoZW1lXT1cIidwcmltYXJ5J1wiPjwvc2VhbS1sb2FkaW5nPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
|
@@ -658,7 +658,7 @@ class DatatableDynamicActionMenuComponent {
|
|
|
658
658
|
}
|
|
659
659
|
}
|
|
660
660
|
DatatableDynamicActionMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableDynamicActionMenuComponent, deps: [{ token: i1.DynamicValueHelperService }, { token: DynamicDatatableRowActionsService }], target: i0.ɵɵFactoryTarget.Component });
|
|
661
|
-
DatatableDynamicActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableDynamicActionMenuComponent, selector: "seam-datatable-dynamic-action-menu", inputs: { row: "row", actionDefs: "actionDefs" }, ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let record of _menuRecords$ | async\">\n\n <a *ngIf=\"record.elementType === 'a'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</a>\n\n <button *ngIf=\"record.elementType === 'button'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</button>\n\n </ng-container>\n\n <!-- <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [routerLink]=\"item.routerLink\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container> -->\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"$any(_actionMenuPositions)\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "directive", type: DatatableDynamicActionMenuItemDirective, selector: "[seamDatatableDynamicActionMenuItem]", inputs: ["seamDatatableDynamicActionMenuItem"], exportAs: ["seamDatatableDynamicActionMenuItem"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
661
|
+
DatatableDynamicActionMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DatatableDynamicActionMenuComponent, selector: "seam-datatable-dynamic-action-menu", inputs: { row: "row", actionDefs: "actionDefs" }, ngImport: i0, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let record of _menuRecords$ | async\">\n\n <a *ngIf=\"record.elementType === 'a'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</a>\n\n <button *ngIf=\"record.elementType === 'button'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</button>\n\n </ng-container>\n\n <!-- <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [routerLink]=\"item.routerLink\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container> -->\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"$any(_actionMenuPositions)\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"], dependencies: [{ kind: "directive", type: i3$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4.IconComponent, selector: "seam-icon", inputs: ["grayscaleOnDisable", "disabled", "iconClass", "icon", "size", "showDefaultOnError", "defaultIcon", "iconType"] }, { kind: "component", type: i5.MenuComponent, selector: "seam-menu", inputs: ["menuClass", "baseWidth", "animationType"], outputs: ["closed"], exportAs: ["seamMenu"] }, { kind: "directive", type: i5.MenuToggleDirective, selector: "[seamMenuToggle]", inputs: ["seamMenuToggle", "positions"], outputs: ["menuOpened", "menuClosed"], exportAs: ["seamMenuToggle"] }, { kind: "component", type: i5.MenuItemComponent, selector: "[seamMenuItem]", inputs: ["disabled", "role", "icon", "iconClass", "sublevelIcon", "subLevelIconClass", "badgeText", "badgeTheme"], exportAs: ["seamMenuItem"] }, { kind: "directive", type: DatatableDynamicActionMenuItemDirective, selector: "[seamDatatableDynamicActionMenuItem]", inputs: ["seamDatatableDynamicActionMenuItem"], exportAs: ["seamDatatableDynamicActionMenuItem"] }, { kind: "pipe", type: i3$1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
662
662
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DatatableDynamicActionMenuComponent, decorators: [{
|
|
663
663
|
type: Component,
|
|
664
664
|
args: [{ selector: 'seam-datatable-dynamic-action-menu', changeDetection: ChangeDetectionStrategy.OnPush, template: "<seam-menu #menu\n menuClass=\"list-group py-0 border-0 seam-datatable-action-menu\"\n animationType=\"fade\">\n\n <ng-container *ngFor=\"let record of _menuRecords$ | async\">\n\n <a *ngIf=\"record.elementType === 'a'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</a>\n\n <button *ngIf=\"record.elementType === 'button'\"\n seamMenuItem\n [seamDatatableDynamicActionMenuItem]=\"record\"\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\">{{ record.rowAction.label }}</button>\n\n </ng-container>\n\n <!-- <ng-container *ngIf=\"(item.routerLink || item.href) && !item.confirmDialog; else noRouterLink\">\n <a *ngIf=\"item.href; else noHref\"\n seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [attr.href]=\"item.href\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n <ng-template #noHref>\n <a seamMenuItem\n class=\"list-group-item list-group-item-action py-1\"\n [queryParams]=\"item.queryParams\"\n [fragment]=\"item.fragment\"\n [queryParamsHandling]=\"item.queryParamsHandling\"\n [preserveFragment]=\"item.preserveFragment\"\n [skipLocationChange]=\"item.skipLocationChange\"\n [replaceUrl]=\"item.replaceUrl\"\n [state]=\"item.state\"\n [routerLink]=\"item.routerLink\"\n [target]=\"item.target\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </a>\n </ng-template>\n </ng-container>\n <ng-template #noRouterLink>\n <button seamMenuItem\n type=\"button\"\n class=\"list-group-item list-group-item-action py-1\"\n (click)=\"activateItem($event, item)\">\n {{ item.label }}\n </button>\n </ng-template>\n </ng-container> -->\n</seam-menu>\n\n<button type=\"button\" class=\"datatable-action-button btn\"\n [seamMenuToggle]=\"menu\"\n [positions]=\"$any(_actionMenuPositions)\"\n title=\"Row Actions\">\n <seam-icon [icon]=\"faEllipsisH\"></seam-icon>\n</button>\n", styles: [":host{display:block;position:relative}.datatable-action-button{font-size:20px;line-height:20px;width:30px;height:30px;padding:0;border-radius:15px;text-align:center}.datatable-action-button::ng-deep .svg-inline--fa{vertical-align:middle}\n"] }]
|