design-angular-kit 0.12.0 → 1.0.0-0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +61 -31
- package/esm2020/design-angular-kit.mjs +5 -0
- package/esm2020/lib/badge/badge.directive.mjs +83 -0
- package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +66 -0
- package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +89 -0
- package/esm2020/lib/button/button.directive.mjs +185 -0
- package/esm2020/lib/button/button.module.mjs +18 -0
- package/esm2020/lib/checkbox/checkbox.component.mjs +138 -0
- package/esm2020/lib/collapse/collapse-group.component.mjs +57 -0
- package/esm2020/lib/collapse/collapse-item.component.mjs +79 -0
- package/esm2020/lib/collapse/collapse.config.mjs +12 -0
- package/esm2020/lib/collapse/collapse.directive.mjs +55 -0
- package/esm2020/lib/collapse/collapse.module.mjs +22 -0
- package/esm2020/lib/design-angular-kit.module.mjs +142 -0
- package/esm2020/lib/dropdown/dropdown-divider.component.mjs +11 -0
- package/esm2020/lib/dropdown/dropdown-item.component.mjs +97 -0
- package/esm2020/lib/dropdown/dropdown.component.mjs +143 -0
- package/esm2020/lib/dropdown/dropdown.config.mjs +12 -0
- package/esm2020/lib/dropdown/dropdown.directive.mjs +156 -0
- package/esm2020/lib/dropdown/dropdown.module.mjs +25 -0
- package/esm2020/lib/enums/icons.enum.mjs +27 -0
- package/esm2020/lib/form-input/form-input-password.utils.mjs +154 -0
- package/esm2020/lib/form-input/form-input.component.mjs +495 -0
- package/esm2020/lib/form-input/it-prefix.directive.mjs +13 -0
- package/esm2020/lib/form-input/it-suffix.directive.mjs +13 -0
- package/esm2020/lib/form-input/it-text-prefix.directive.mjs +13 -0
- package/esm2020/lib/form-input/it-text-suffix.directive.mjs +13 -0
- package/esm2020/lib/form-input/mark-matching-text.pipe.mjs +36 -0
- package/esm2020/lib/icon/icon.component.mjs +87 -0
- package/esm2020/lib/icon/icon.module.mjs +18 -0
- package/esm2020/lib/models/Alignment.mjs +15 -0
- package/esm2020/lib/models/ButtonSize.mjs +15 -0
- package/esm2020/lib/models/InputType.mjs +44 -0
- package/esm2020/lib/models/ThemeColor.mjs +30 -0
- package/esm2020/lib/popover/popover.config.mjs +17 -0
- package/esm2020/lib/popover/popover.directive.mjs +33 -0
- package/esm2020/lib/popover/popover.module.mjs +19 -0
- package/esm2020/lib/progress-bar/progress-bar.component.mjs +98 -0
- package/esm2020/lib/radio/radio.component.mjs +287 -0
- package/esm2020/lib/radio/unique-selection-dispatcher.mjs +55 -0
- package/esm2020/lib/tabs/tab-group.component.mjs +177 -0
- package/esm2020/lib/tabs/tab.component.mjs +73 -0
- package/esm2020/lib/tabs/tabs.module.mjs +20 -0
- package/esm2020/lib/toggle/toggle.component.mjs +86 -0
- package/esm2020/lib/tooltip/tooltip.config.mjs +17 -0
- package/esm2020/lib/tooltip/tooltip.directive.mjs +43 -0
- package/esm2020/lib/tooltip/tooltip.module.mjs +19 -0
- package/esm2020/lib/util/focus-mouse.directive.mjs +32 -0
- package/esm2020/lib/util/util.mjs +12 -0
- package/esm2020/lib/util/utils.module.mjs +16 -0
- package/esm2020/public_api.mjs +40 -0
- package/fesm2015/design-angular-kit.mjs +3181 -0
- package/fesm2015/design-angular-kit.mjs.map +1 -0
- package/fesm2020/design-angular-kit.mjs +3160 -0
- package/fesm2020/design-angular-kit.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/badge/badge.directive.d.ts +11 -5
- package/lib/breadcrumb/breadcrumb-item.component.d.ts +16 -5
- package/lib/breadcrumb/breadcrumb.component.d.ts +12 -5
- package/lib/button/button.directive.d.ts +72 -0
- package/lib/button/button.module.d.ts +8 -0
- package/lib/checkbox/checkbox.component.d.ts +25 -5
- package/lib/collapse/collapse-group.component.d.ts +16 -0
- package/lib/collapse/collapse-item.component.d.ts +46 -0
- package/lib/collapse/collapse.config.d.ts +6 -0
- package/lib/collapse/collapse.directive.d.ts +25 -0
- package/lib/collapse/collapse.module.d.ts +12 -0
- package/lib/design-angular-kit.module.d.ts +27 -0
- package/lib/dropdown/dropdown-divider.component.d.ts +3 -0
- package/lib/dropdown/dropdown-item.component.d.ts +22 -8
- package/lib/dropdown/dropdown.component.d.ts +34 -26
- package/lib/dropdown/dropdown.config.d.ts +6 -0
- package/lib/dropdown/dropdown.directive.d.ts +77 -0
- package/lib/dropdown/dropdown.module.d.ts +15 -0
- package/lib/enums/icons.enum.d.ts +23 -0
- package/lib/form-input/form-input-password.utils.d.ts +45 -0
- package/lib/form-input/form-input.component.d.ts +202 -20
- package/lib/form-input/it-prefix.directive.d.ts +5 -0
- package/lib/form-input/it-suffix.directive.d.ts +5 -0
- package/lib/form-input/it-text-prefix.directive.d.ts +5 -0
- package/lib/form-input/it-text-suffix.directive.d.ts +5 -0
- package/lib/form-input/mark-matching-text.pipe.d.ts +10 -0
- package/lib/icon/icon.component.d.ts +34 -0
- package/lib/icon/icon.module.d.ts +8 -0
- package/lib/models/Alignment.d.ts +12 -0
- package/lib/models/ButtonSize.d.ts +1 -1
- package/lib/models/InputType.d.ts +22 -1
- package/lib/models/ThemeColor.d.ts +1 -1
- package/lib/popover/popover.config.d.ts +5 -6
- package/lib/popover/popover.directive.d.ts +13 -108
- package/lib/popover/popover.module.d.ts +9 -0
- package/lib/progress-bar/progress-bar.component.d.ts +25 -19
- package/lib/radio/radio.component.d.ts +22 -10
- package/lib/radio/unique-selection-dispatcher.d.ts +3 -0
- package/lib/tabs/tab-group.component.d.ts +17 -11
- package/lib/tabs/tab.component.d.ts +6 -2
- package/lib/tabs/tabs.module.d.ts +10 -0
- package/lib/toggle/toggle.component.d.ts +9 -4
- package/lib/tooltip/tooltip.config.d.ts +7 -7
- package/lib/tooltip/tooltip.directive.d.ts +12 -92
- package/lib/tooltip/tooltip.module.d.ts +9 -0
- package/lib/util/focus-mouse.directive.d.ts +13 -0
- package/lib/util/utils.module.d.ts +7 -0
- package/package.json +34 -20
- package/public_api.d.ts +19 -2
- package/bundles/design-angular-kit.umd.js +0 -5829
- package/bundles/design-angular-kit.umd.js.map +0 -1
- package/bundles/design-angular-kit.umd.min.js +0 -31
- package/bundles/design-angular-kit.umd.min.js.map +0 -1
- package/design-angular-kit.d.ts +0 -8
- package/design-angular-kit.metadata.json +0 -1
- package/esm2015/design-angular-kit.js +0 -14
- package/esm2015/lib/badge/badge.directive.js +0 -116
- package/esm2015/lib/breadcrumb/breadcrumb-item.component.js +0 -117
- package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -128
- package/esm2015/lib/button/button.component.js +0 -165
- package/esm2015/lib/checkbox/checkbox.component.js +0 -170
- package/esm2015/lib/design-angular-kit.module.js +0 -81
- package/esm2015/lib/dropdown/dropdown-divider.component.js +0 -18
- package/esm2015/lib/dropdown/dropdown-header.component.js +0 -29
- package/esm2015/lib/dropdown/dropdown-item.component.js +0 -157
- package/esm2015/lib/dropdown/dropdown.component.js +0 -248
- package/esm2015/lib/form-input/form-input.component.js +0 -489
- package/esm2015/lib/models/ButtonSize.js +0 -25
- package/esm2015/lib/models/IconPosition.js +0 -21
- package/esm2015/lib/models/InputType.js +0 -33
- package/esm2015/lib/models/InteractionTrigger.js +0 -35
- package/esm2015/lib/models/ThemeColor.js +0 -45
- package/esm2015/lib/popover/popover.component.js +0 -134
- package/esm2015/lib/popover/popover.config.js +0 -35
- package/esm2015/lib/popover/popover.directive.js +0 -433
- package/esm2015/lib/popover/popup.js +0 -105
- package/esm2015/lib/popover/positioning.js +0 -349
- package/esm2015/lib/popover/triggers.js +0 -99
- package/esm2015/lib/progress-bar/progress-bar.component.js +0 -170
- package/esm2015/lib/radio/radio.component.js +0 -526
- package/esm2015/lib/radio/unique-selection-dispatcher.js +0 -70
- package/esm2015/lib/tabs/tab-group.component.js +0 -339
- package/esm2015/lib/tabs/tab.component.js +0 -143
- package/esm2015/lib/toggle/toggle.component.js +0 -173
- package/esm2015/lib/tooltip/popup.js +0 -105
- package/esm2015/lib/tooltip/positioning.js +0 -349
- package/esm2015/lib/tooltip/tooltip.component.js +0 -77
- package/esm2015/lib/tooltip/tooltip.config.js +0 -31
- package/esm2015/lib/tooltip/tooltip.directive.js +0 -384
- package/esm2015/lib/tooltip/triggers.js +0 -99
- package/esm2015/lib/util/util.js +0 -30
- package/esm2015/public_api.js +0 -28
- package/esm5/design-angular-kit.js +0 -14
- package/esm5/lib/badge/badge.directive.js +0 -145
- package/esm5/lib/breadcrumb/breadcrumb-item.component.js +0 -135
- package/esm5/lib/breadcrumb/breadcrumb.component.js +0 -164
- package/esm5/lib/button/button.component.js +0 -221
- package/esm5/lib/checkbox/checkbox.component.js +0 -200
- package/esm5/lib/design-angular-kit.module.js +0 -85
- package/esm5/lib/dropdown/dropdown-divider.component.js +0 -20
- package/esm5/lib/dropdown/dropdown-header.component.js +0 -27
- package/esm5/lib/dropdown/dropdown-item.component.js +0 -197
- package/esm5/lib/dropdown/dropdown.component.js +0 -309
- package/esm5/lib/form-input/form-input.component.js +0 -582
- package/esm5/lib/models/ButtonSize.js +0 -25
- package/esm5/lib/models/IconPosition.js +0 -21
- package/esm5/lib/models/InputType.js +0 -33
- package/esm5/lib/models/InteractionTrigger.js +0 -35
- package/esm5/lib/models/ThemeColor.js +0 -45
- package/esm5/lib/popover/popover.component.js +0 -144
- package/esm5/lib/popover/popover.config.js +0 -37
- package/esm5/lib/popover/popover.directive.js +0 -573
- package/esm5/lib/popover/popup.js +0 -116
- package/esm5/lib/popover/positioning.js +0 -446
- package/esm5/lib/popover/triggers.js +0 -115
- package/esm5/lib/progress-bar/progress-bar.component.js +0 -218
- package/esm5/lib/radio/radio.component.js +0 -610
- package/esm5/lib/radio/unique-selection-dispatcher.js +0 -108
- package/esm5/lib/tabs/tab-group.component.js +0 -401
- package/esm5/lib/tabs/tab.component.js +0 -156
- package/esm5/lib/toggle/toggle.component.js +0 -200
- package/esm5/lib/tooltip/popup.js +0 -116
- package/esm5/lib/tooltip/positioning.js +0 -446
- package/esm5/lib/tooltip/tooltip.component.js +0 -80
- package/esm5/lib/tooltip/tooltip.config.js +0 -33
- package/esm5/lib/tooltip/tooltip.directive.js +0 -516
- package/esm5/lib/tooltip/triggers.js +0 -115
- package/esm5/lib/util/util.js +0 -48
- package/esm5/public_api.js +0 -28
- package/fesm2015/design-angular-kit.js +0 -4751
- package/fesm2015/design-angular-kit.js.map +0 -1
- package/fesm5/design-angular-kit.js +0 -5867
- package/fesm5/design-angular-kit.js.map +0 -1
- package/lib/button/button.component.d.ts +0 -50
- package/lib/dropdown/dropdown-header.component.d.ts +0 -3
- package/lib/models/IconPosition.d.ts +0 -9
- package/lib/models/InteractionTrigger.d.ts +0 -19
- package/lib/popover/popover.component.d.ts +0 -25
- package/lib/popover/popup.d.ts +0 -27
- package/lib/popover/positioning.d.ts +0 -32
- package/lib/popover/triggers.d.ts +0 -18
- package/lib/tooltip/popup.d.ts +0 -27
- package/lib/tooltip/positioning.d.ts +0 -32
- package/lib/tooltip/tooltip.component.d.ts +0 -20
- package/lib/tooltip/triggers.d.ts +0 -18
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import { TemplateRef } from '@angular/core';
|
|
6
|
-
var ContentRef = /** @class */ (function () {
|
|
7
|
-
function ContentRef(nodes, viewRef, componentRef) {
|
|
8
|
-
this.nodes = nodes;
|
|
9
|
-
this.viewRef = viewRef;
|
|
10
|
-
this.componentRef = componentRef;
|
|
11
|
-
}
|
|
12
|
-
return ContentRef;
|
|
13
|
-
}());
|
|
14
|
-
export { ContentRef };
|
|
15
|
-
if (false) {
|
|
16
|
-
/** @type {?} */
|
|
17
|
-
ContentRef.prototype.nodes;
|
|
18
|
-
/** @type {?} */
|
|
19
|
-
ContentRef.prototype.viewRef;
|
|
20
|
-
/** @type {?} */
|
|
21
|
-
ContentRef.prototype.componentRef;
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* @template T
|
|
25
|
-
*/
|
|
26
|
-
var /**
|
|
27
|
-
* @template T
|
|
28
|
-
*/
|
|
29
|
-
PopupService = /** @class */ (function () {
|
|
30
|
-
function PopupService(_type, _injector, _viewContainerRef, _renderer, _componentFactoryResolver) {
|
|
31
|
-
this._type = _type;
|
|
32
|
-
this._injector = _injector;
|
|
33
|
-
this._viewContainerRef = _viewContainerRef;
|
|
34
|
-
this._renderer = _renderer;
|
|
35
|
-
this._componentFactoryResolver = _componentFactoryResolver;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* @param {?=} content
|
|
39
|
-
* @param {?=} context
|
|
40
|
-
* @return {?}
|
|
41
|
-
*/
|
|
42
|
-
PopupService.prototype.open = /**
|
|
43
|
-
* @param {?=} content
|
|
44
|
-
* @param {?=} context
|
|
45
|
-
* @return {?}
|
|
46
|
-
*/
|
|
47
|
-
function (content, context) {
|
|
48
|
-
if (!this._windowRef) {
|
|
49
|
-
this._contentRef = this._getContentRef(content, context);
|
|
50
|
-
this._windowRef = this._viewContainerRef.createComponent(this._componentFactoryResolver.resolveComponentFactory(this._type), 0, this._injector, this._contentRef.nodes);
|
|
51
|
-
}
|
|
52
|
-
return this._windowRef;
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* @return {?}
|
|
56
|
-
*/
|
|
57
|
-
PopupService.prototype.close = /**
|
|
58
|
-
* @return {?}
|
|
59
|
-
*/
|
|
60
|
-
function () {
|
|
61
|
-
if (this._windowRef) {
|
|
62
|
-
this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._windowRef.hostView));
|
|
63
|
-
this._windowRef = null;
|
|
64
|
-
if (this._contentRef.viewRef) {
|
|
65
|
-
this._viewContainerRef.remove(this._viewContainerRef.indexOf(this._contentRef.viewRef));
|
|
66
|
-
this._contentRef = null;
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* @param {?} content
|
|
72
|
-
* @param {?=} context
|
|
73
|
-
* @return {?}
|
|
74
|
-
*/
|
|
75
|
-
PopupService.prototype._getContentRef = /**
|
|
76
|
-
* @param {?} content
|
|
77
|
-
* @param {?=} context
|
|
78
|
-
* @return {?}
|
|
79
|
-
*/
|
|
80
|
-
function (content, context) {
|
|
81
|
-
if (!content) {
|
|
82
|
-
return new ContentRef([]);
|
|
83
|
-
}
|
|
84
|
-
else if (content instanceof TemplateRef) {
|
|
85
|
-
/** @type {?} */
|
|
86
|
-
var viewRef = this._viewContainerRef.createEmbeddedView(/** @type {?} */ (content), context);
|
|
87
|
-
return new ContentRef([viewRef.rootNodes], viewRef);
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
return new ContentRef([[this._renderer.createText("" + content)]]);
|
|
91
|
-
}
|
|
92
|
-
};
|
|
93
|
-
return PopupService;
|
|
94
|
-
}());
|
|
95
|
-
/**
|
|
96
|
-
* @template T
|
|
97
|
-
*/
|
|
98
|
-
export { PopupService };
|
|
99
|
-
if (false) {
|
|
100
|
-
/** @type {?} */
|
|
101
|
-
PopupService.prototype._windowRef;
|
|
102
|
-
/** @type {?} */
|
|
103
|
-
PopupService.prototype._contentRef;
|
|
104
|
-
/** @type {?} */
|
|
105
|
-
PopupService.prototype._type;
|
|
106
|
-
/** @type {?} */
|
|
107
|
-
PopupService.prototype._injector;
|
|
108
|
-
/** @type {?} */
|
|
109
|
-
PopupService.prototype._viewContainerRef;
|
|
110
|
-
/** @type {?} */
|
|
111
|
-
PopupService.prototype._renderer;
|
|
112
|
-
/** @type {?} */
|
|
113
|
-
PopupService.prototype._componentFactoryResolver;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wdXAuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kZXNpZ24tYW5ndWxhci1raXQvIiwic291cmNlcyI6WyJsaWIvcG9wb3Zlci9wb3B1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBT0EsT0FBTyxFQUVILFdBQVcsRUFNZCxNQUFNLGVBQWUsQ0FBQztBQUV2QixJQUFBO0lBQ0ksb0JBQW1CLEtBQVksRUFBUyxPQUFpQixFQUFTLFlBQWdDO1FBQS9FLFVBQUssR0FBTCxLQUFLLENBQU87UUFBUyxZQUFPLEdBQVAsT0FBTyxDQUFVO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQW9CO0tBQUs7cUJBbEIzRztJQW1CQyxDQUFBO0FBRkQsc0JBRUM7Ozs7Ozs7Ozs7OztBQUVEOzs7QUFBQTtJQUlJLHNCQUNZLE9BQW9CLFNBQW1CLEVBQVUsaUJBQW1DLEVBQ3BGLFdBQThCLHlCQUFtRDtRQURqRixVQUFLLEdBQUwsS0FBSztRQUFlLGNBQVMsR0FBVCxTQUFTLENBQVU7UUFBVSxzQkFBaUIsR0FBakIsaUJBQWlCLENBQWtCO1FBQ3BGLGNBQVMsR0FBVCxTQUFTO1FBQXFCLDhCQUF5QixHQUF6Qix5QkFBeUIsQ0FBMEI7S0FBSzs7Ozs7O0lBRWxHLDJCQUFJOzs7OztJQUFKLFVBQUssT0FBbUMsRUFBRSxPQUFhO1FBQ25ELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQ3BELElBQUksQ0FBQyx5QkFBeUIsQ0FBQyx1QkFBdUIsQ0FBSSxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQ3hGLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDL0I7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztLQUMxQjs7OztJQUVELDRCQUFLOzs7SUFBTDtRQUNJLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7WUFDeEYsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7WUFFdkIsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixJQUFJLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUN4RixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQzthQUMzQjtTQUNKO0tBQ0o7Ozs7OztJQUVPLHFDQUFjOzs7OztjQUFDLE9BQWtDLEVBQUUsT0FBYTtRQUNwRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDWCxNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDN0I7UUFBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsT0FBTyxZQUFZLFdBQVcsQ0FBQyxDQUFDLENBQUM7O1lBQ3hDLElBQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsbUJBQWlCLE9BQU8sR0FBRSxPQUFPLENBQUMsQ0FBQztZQUM1RixNQUFNLENBQUMsSUFBSSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDdkQ7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLE1BQU0sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBRyxPQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUN0RTs7dUJBNURUO0lBOERDLENBQUE7Ozs7QUF6Q0Qsd0JBeUNDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEFuZ3VsYXIgbmctYm9vdHN0cmFwIHRlYW0gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcC9tYXN0ZXIvTElDRU5TRVxuICovXG5pbXBvcnQge1xuICAgIEluamVjdG9yLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdSZWYsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBSZW5kZXJlcjIsXG4gICAgQ29tcG9uZW50UmVmLFxuICAgIENvbXBvbmVudEZhY3RvcnlSZXNvbHZlclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGNsYXNzIENvbnRlbnRSZWYge1xuICAgIGNvbnN0cnVjdG9yKHB1YmxpYyBub2RlczogYW55W10sIHB1YmxpYyB2aWV3UmVmPzogVmlld1JlZiwgcHVibGljIGNvbXBvbmVudFJlZj86IENvbXBvbmVudFJlZjxhbnk+KSB7IH1cbn1cblxuZXhwb3J0IGNsYXNzIFBvcHVwU2VydmljZTxUPiB7XG4gICAgcHJpdmF0ZSBfd2luZG93UmVmOiBDb21wb25lbnRSZWY8VD47XG4gICAgcHJpdmF0ZSBfY29udGVudFJlZjogQ29udGVudFJlZjtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIF90eXBlOiBhbnksIHByaXZhdGUgX2luamVjdG9yOiBJbmplY3RvciwgcHJpdmF0ZSBfdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSBfcmVuZGVyZXI6IFJlbmRlcmVyMiwgcHJpdmF0ZSBfY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOiBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIpIHsgfVxuXG4gICAgb3Blbihjb250ZW50Pzogc3RyaW5nIHwgVGVtcGxhdGVSZWY8YW55PiwgY29udGV4dD86IGFueSk6IENvbXBvbmVudFJlZjxUPiB7XG4gICAgICAgIGlmICghdGhpcy5fd2luZG93UmVmKSB7XG4gICAgICAgICAgICB0aGlzLl9jb250ZW50UmVmID0gdGhpcy5fZ2V0Q29udGVudFJlZihjb250ZW50LCBjb250ZXh0KTtcbiAgICAgICAgICAgIHRoaXMuX3dpbmRvd1JlZiA9IHRoaXMuX3ZpZXdDb250YWluZXJSZWYuY3JlYXRlQ29tcG9uZW50KFxuICAgICAgICAgICAgICAgIHRoaXMuX2NvbXBvbmVudEZhY3RvcnlSZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeTxUPih0aGlzLl90eXBlKSwgMCwgdGhpcy5faW5qZWN0b3IsXG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGVudFJlZi5ub2Rlcyk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93UmVmO1xuICAgIH1cblxuICAgIGNsb3NlKCkge1xuICAgICAgICBpZiAodGhpcy5fd2luZG93UmVmKSB7XG4gICAgICAgICAgICB0aGlzLl92aWV3Q29udGFpbmVyUmVmLnJlbW92ZSh0aGlzLl92aWV3Q29udGFpbmVyUmVmLmluZGV4T2YodGhpcy5fd2luZG93UmVmLmhvc3RWaWV3KSk7XG4gICAgICAgICAgICB0aGlzLl93aW5kb3dSZWYgPSBudWxsO1xuXG4gICAgICAgICAgICBpZiAodGhpcy5fY29udGVudFJlZi52aWV3UmVmKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdmlld0NvbnRhaW5lclJlZi5yZW1vdmUodGhpcy5fdmlld0NvbnRhaW5lclJlZi5pbmRleE9mKHRoaXMuX2NvbnRlbnRSZWYudmlld1JlZikpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NvbnRlbnRSZWYgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfZ2V0Q29udGVudFJlZihjb250ZW50OiBzdHJpbmcgfCBUZW1wbGF0ZVJlZjxhbnk+LCBjb250ZXh0PzogYW55KTogQ29udGVudFJlZiB7XG4gICAgICAgIGlmICghY29udGVudCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBDb250ZW50UmVmKFtdKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb250ZW50IGluc3RhbmNlb2YgVGVtcGxhdGVSZWYpIHtcbiAgICAgICAgICAgIGNvbnN0IHZpZXdSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyg8VGVtcGxhdGVSZWY8VD4+Y29udGVudCwgY29udGV4dCk7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW3ZpZXdSZWYucm9vdE5vZGVzXSwgdmlld1JlZik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IENvbnRlbnRSZWYoW1t0aGlzLl9yZW5kZXJlci5jcmVhdGVUZXh0KGAke2NvbnRlbnR9YCldXSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -1,446 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @fileoverview added by tsickle
|
|
3
|
-
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
|
|
4
|
-
*/
|
|
5
|
-
import * as tslib_1 from "tslib";
|
|
6
|
-
/**
|
|
7
|
-
* @license
|
|
8
|
-
* Copyright Angular ng-bootstrap team All Rights Reserved.
|
|
9
|
-
*
|
|
10
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
11
|
-
* found in the LICENSE file at https://raw.githubusercontent.com/ng-bootstrap/ng-bootstrap/master/LICENSE
|
|
12
|
-
*/
|
|
13
|
-
var /**
|
|
14
|
-
* @license
|
|
15
|
-
* Copyright Angular ng-bootstrap team All Rights Reserved.
|
|
16
|
-
*
|
|
17
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
18
|
-
* found in the LICENSE file at https://raw.githubusercontent.com/ng-bootstrap/ng-bootstrap/master/LICENSE
|
|
19
|
-
*/
|
|
20
|
-
Positioning = /** @class */ (function () {
|
|
21
|
-
function Positioning() {
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
* @param {?} element
|
|
25
|
-
* @return {?}
|
|
26
|
-
*/
|
|
27
|
-
Positioning.prototype.getAllStyles = /**
|
|
28
|
-
* @param {?} element
|
|
29
|
-
* @return {?}
|
|
30
|
-
*/
|
|
31
|
-
function (element) { return window.getComputedStyle(element); };
|
|
32
|
-
/**
|
|
33
|
-
* @param {?} element
|
|
34
|
-
* @param {?} prop
|
|
35
|
-
* @return {?}
|
|
36
|
-
*/
|
|
37
|
-
Positioning.prototype.getStyle = /**
|
|
38
|
-
* @param {?} element
|
|
39
|
-
* @param {?} prop
|
|
40
|
-
* @return {?}
|
|
41
|
-
*/
|
|
42
|
-
function (element, prop) { return this.getAllStyles(element)[prop]; };
|
|
43
|
-
/**
|
|
44
|
-
* @param {?} element
|
|
45
|
-
* @return {?}
|
|
46
|
-
*/
|
|
47
|
-
Positioning.prototype.isStaticPositioned = /**
|
|
48
|
-
* @param {?} element
|
|
49
|
-
* @return {?}
|
|
50
|
-
*/
|
|
51
|
-
function (element) {
|
|
52
|
-
return (this.getStyle(element, 'position') || 'static') === 'static';
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* @param {?} element
|
|
56
|
-
* @return {?}
|
|
57
|
-
*/
|
|
58
|
-
Positioning.prototype.offsetParent = /**
|
|
59
|
-
* @param {?} element
|
|
60
|
-
* @return {?}
|
|
61
|
-
*/
|
|
62
|
-
function (element) {
|
|
63
|
-
/** @type {?} */
|
|
64
|
-
var offsetParentEl = /** @type {?} */ (element.offsetParent) || document.documentElement;
|
|
65
|
-
while (offsetParentEl && offsetParentEl !== document.documentElement && this.isStaticPositioned(offsetParentEl)) {
|
|
66
|
-
offsetParentEl = /** @type {?} */ (offsetParentEl.offsetParent);
|
|
67
|
-
}
|
|
68
|
-
return offsetParentEl || document.documentElement;
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* @param {?} element
|
|
72
|
-
* @param {?=} round
|
|
73
|
-
* @return {?}
|
|
74
|
-
*/
|
|
75
|
-
Positioning.prototype.position = /**
|
|
76
|
-
* @param {?} element
|
|
77
|
-
* @param {?=} round
|
|
78
|
-
* @return {?}
|
|
79
|
-
*/
|
|
80
|
-
function (element, round) {
|
|
81
|
-
if (round === void 0) { round = true; }
|
|
82
|
-
/** @type {?} */
|
|
83
|
-
var elPosition;
|
|
84
|
-
/** @type {?} */
|
|
85
|
-
var parentOffset = { width: 0, height: 0, top: 0, bottom: 0, left: 0, right: 0 };
|
|
86
|
-
if (this.getStyle(element, 'position') === 'fixed') {
|
|
87
|
-
elPosition = element.getBoundingClientRect();
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
/** @type {?} */
|
|
91
|
-
var offsetParentEl = this.offsetParent(element);
|
|
92
|
-
elPosition = this.offset(element, false);
|
|
93
|
-
if (offsetParentEl !== document.documentElement) {
|
|
94
|
-
parentOffset = this.offset(offsetParentEl, false);
|
|
95
|
-
}
|
|
96
|
-
parentOffset.top += offsetParentEl.clientTop;
|
|
97
|
-
parentOffset.left += offsetParentEl.clientLeft;
|
|
98
|
-
}
|
|
99
|
-
elPosition.top -= parentOffset.top;
|
|
100
|
-
elPosition.bottom -= parentOffset.top;
|
|
101
|
-
elPosition.left -= parentOffset.left;
|
|
102
|
-
elPosition.right -= parentOffset.left;
|
|
103
|
-
if (round) {
|
|
104
|
-
elPosition.top = Math.round(elPosition.top);
|
|
105
|
-
elPosition.bottom = Math.round(elPosition.bottom);
|
|
106
|
-
elPosition.left = Math.round(elPosition.left);
|
|
107
|
-
elPosition.right = Math.round(elPosition.right);
|
|
108
|
-
}
|
|
109
|
-
return elPosition;
|
|
110
|
-
};
|
|
111
|
-
/**
|
|
112
|
-
* @param {?} element
|
|
113
|
-
* @param {?=} round
|
|
114
|
-
* @return {?}
|
|
115
|
-
*/
|
|
116
|
-
Positioning.prototype.offset = /**
|
|
117
|
-
* @param {?} element
|
|
118
|
-
* @param {?=} round
|
|
119
|
-
* @return {?}
|
|
120
|
-
*/
|
|
121
|
-
function (element, round) {
|
|
122
|
-
if (round === void 0) { round = true; }
|
|
123
|
-
/** @type {?} */
|
|
124
|
-
var elBcr = element.getBoundingClientRect();
|
|
125
|
-
/** @type {?} */
|
|
126
|
-
var viewportOffset = {
|
|
127
|
-
top: window.pageYOffset - document.documentElement.clientTop,
|
|
128
|
-
left: window.pageXOffset - document.documentElement.clientLeft
|
|
129
|
-
};
|
|
130
|
-
/** @type {?} */
|
|
131
|
-
var elOffset = {
|
|
132
|
-
height: elBcr.height || element.offsetHeight,
|
|
133
|
-
width: elBcr.width || element.offsetWidth,
|
|
134
|
-
top: elBcr.top + viewportOffset.top,
|
|
135
|
-
bottom: elBcr.bottom + viewportOffset.top,
|
|
136
|
-
left: elBcr.left + viewportOffset.left,
|
|
137
|
-
right: elBcr.right + viewportOffset.left
|
|
138
|
-
};
|
|
139
|
-
if (round) {
|
|
140
|
-
elOffset.height = Math.round(elOffset.height);
|
|
141
|
-
elOffset.width = Math.round(elOffset.width);
|
|
142
|
-
elOffset.top = Math.round(elOffset.top);
|
|
143
|
-
elOffset.bottom = Math.round(elOffset.bottom);
|
|
144
|
-
elOffset.left = Math.round(elOffset.left);
|
|
145
|
-
elOffset.right = Math.round(elOffset.right);
|
|
146
|
-
}
|
|
147
|
-
return elOffset;
|
|
148
|
-
};
|
|
149
|
-
/**
|
|
150
|
-
* @param {?} hostElement
|
|
151
|
-
* @param {?} targetElement
|
|
152
|
-
* @param {?} placement
|
|
153
|
-
* @param {?=} appendToBody
|
|
154
|
-
* @return {?}
|
|
155
|
-
*/
|
|
156
|
-
Positioning.prototype.positionElements = /**
|
|
157
|
-
* @param {?} hostElement
|
|
158
|
-
* @param {?} targetElement
|
|
159
|
-
* @param {?} placement
|
|
160
|
-
* @param {?=} appendToBody
|
|
161
|
-
* @return {?}
|
|
162
|
-
*/
|
|
163
|
-
function (hostElement, targetElement, placement, appendToBody) {
|
|
164
|
-
/** @type {?} */
|
|
165
|
-
var hostElPosition = appendToBody ? this.offset(hostElement, false) : this.position(hostElement, false);
|
|
166
|
-
/** @type {?} */
|
|
167
|
-
var targetElStyles = this.getAllStyles(targetElement);
|
|
168
|
-
/** @type {?} */
|
|
169
|
-
var targetElBCR = targetElement.getBoundingClientRect();
|
|
170
|
-
/** @type {?} */
|
|
171
|
-
var placementPrimary = placement.split('-')[0] || 'top';
|
|
172
|
-
/** @type {?} */
|
|
173
|
-
var placementSecondary = placement.split('-')[1] || 'center';
|
|
174
|
-
/** @type {?} */
|
|
175
|
-
var targetElPosition = {
|
|
176
|
-
'height': targetElBCR.height || targetElement.offsetHeight,
|
|
177
|
-
'width': targetElBCR.width || targetElement.offsetWidth,
|
|
178
|
-
'top': 0,
|
|
179
|
-
'bottom': targetElBCR.height || targetElement.offsetHeight,
|
|
180
|
-
'left': 0,
|
|
181
|
-
'right': targetElBCR.width || targetElement.offsetWidth
|
|
182
|
-
};
|
|
183
|
-
switch (placementPrimary) {
|
|
184
|
-
case 'top':
|
|
185
|
-
targetElPosition.top =
|
|
186
|
-
hostElPosition.top - (targetElement.offsetHeight + parseFloat(targetElStyles.marginBottom));
|
|
187
|
-
break;
|
|
188
|
-
case 'bottom':
|
|
189
|
-
targetElPosition.top = hostElPosition.top + hostElPosition.height;
|
|
190
|
-
break;
|
|
191
|
-
case 'left':
|
|
192
|
-
targetElPosition.left =
|
|
193
|
-
hostElPosition.left - (targetElement.offsetWidth + parseFloat(targetElStyles.marginRight));
|
|
194
|
-
break;
|
|
195
|
-
case 'right':
|
|
196
|
-
targetElPosition.left = hostElPosition.left + hostElPosition.width;
|
|
197
|
-
break;
|
|
198
|
-
}
|
|
199
|
-
switch (placementSecondary) {
|
|
200
|
-
case 'top':
|
|
201
|
-
targetElPosition.top = hostElPosition.top;
|
|
202
|
-
break;
|
|
203
|
-
case 'bottom':
|
|
204
|
-
targetElPosition.top = hostElPosition.top + hostElPosition.height - targetElement.offsetHeight;
|
|
205
|
-
break;
|
|
206
|
-
case 'left':
|
|
207
|
-
targetElPosition.left = hostElPosition.left;
|
|
208
|
-
break;
|
|
209
|
-
case 'right':
|
|
210
|
-
targetElPosition.left = hostElPosition.left + hostElPosition.width - targetElement.offsetWidth;
|
|
211
|
-
break;
|
|
212
|
-
case 'center':
|
|
213
|
-
if (placementPrimary === 'top' || placementPrimary === 'bottom') {
|
|
214
|
-
targetElPosition.left = hostElPosition.left + hostElPosition.width / 2 - targetElement.offsetWidth / 2;
|
|
215
|
-
}
|
|
216
|
-
else {
|
|
217
|
-
targetElPosition.top = hostElPosition.top + hostElPosition.height / 2 - targetElement.offsetHeight / 2;
|
|
218
|
-
}
|
|
219
|
-
break;
|
|
220
|
-
}
|
|
221
|
-
targetElPosition.top = Math.round(targetElPosition.top);
|
|
222
|
-
targetElPosition.bottom = Math.round(targetElPosition.bottom);
|
|
223
|
-
targetElPosition.left = Math.round(targetElPosition.left);
|
|
224
|
-
targetElPosition.right = Math.round(targetElPosition.right);
|
|
225
|
-
return targetElPosition;
|
|
226
|
-
};
|
|
227
|
-
// Restituisce i collocamenti disponibili per l'elemento target nella viewport in base all'elemento host
|
|
228
|
-
/**
|
|
229
|
-
* @param {?} hostElement
|
|
230
|
-
* @param {?} targetElement
|
|
231
|
-
* @return {?}
|
|
232
|
-
*/
|
|
233
|
-
Positioning.prototype.getAvailablePlacements = /**
|
|
234
|
-
* @param {?} hostElement
|
|
235
|
-
* @param {?} targetElement
|
|
236
|
-
* @return {?}
|
|
237
|
-
*/
|
|
238
|
-
function (hostElement, targetElement) {
|
|
239
|
-
/** @type {?} */
|
|
240
|
-
var availablePlacements = [];
|
|
241
|
-
/** @type {?} */
|
|
242
|
-
var hostElemClientRect = hostElement.getBoundingClientRect();
|
|
243
|
-
/** @type {?} */
|
|
244
|
-
var targetElemClientRect = targetElement.getBoundingClientRect();
|
|
245
|
-
/** @type {?} */
|
|
246
|
-
var html = document.documentElement;
|
|
247
|
-
/** @type {?} */
|
|
248
|
-
var windowHeight = window.innerHeight || html.clientHeight;
|
|
249
|
-
/** @type {?} */
|
|
250
|
-
var windowWidth = window.innerWidth || html.clientWidth;
|
|
251
|
-
/** @type {?} */
|
|
252
|
-
var hostElemClientRectHorCenter = hostElemClientRect.left + hostElemClientRect.width / 2;
|
|
253
|
-
/** @type {?} */
|
|
254
|
-
var hostElemClientRectVerCenter = hostElemClientRect.top + hostElemClientRect.height / 2;
|
|
255
|
-
// controlla se la larghezza dell'elemento target può essere collocata tra la sinistra dell'host e l'inizio della viewport
|
|
256
|
-
// e controlla anche se l'altezza del target è nella viewport
|
|
257
|
-
if (targetElemClientRect.width < hostElemClientRect.left) {
|
|
258
|
-
// controlla solo per la sinistra
|
|
259
|
-
if (hostElemClientRectVerCenter > targetElemClientRect.height / 2 &&
|
|
260
|
-
windowHeight - hostElemClientRectVerCenter > targetElemClientRect.height / 2) {
|
|
261
|
-
availablePlacements.splice(availablePlacements.length, 1, 'left');
|
|
262
|
-
}
|
|
263
|
-
// controlla solo per le varianti di sinistra left-top and left-bottom
|
|
264
|
-
this.setSecondaryPlacementForLeftRight(hostElemClientRect, targetElemClientRect, 'left', availablePlacements);
|
|
265
|
-
}
|
|
266
|
-
// controlla se l'altezza del target è minore della cima dell'host
|
|
267
|
-
if (targetElemClientRect.height < hostElemClientRect.top) {
|
|
268
|
-
if (hostElemClientRectHorCenter > targetElemClientRect.width / 2 &&
|
|
269
|
-
windowWidth - hostElemClientRectHorCenter > targetElemClientRect.width / 2) {
|
|
270
|
-
availablePlacements.splice(availablePlacements.length, 1, 'top');
|
|
271
|
-
}
|
|
272
|
-
this.setSecondaryPlacementForTopBottom(hostElemClientRect, targetElemClientRect, 'top', availablePlacements);
|
|
273
|
-
}
|
|
274
|
-
// controlla se la larghezza dell'elemento target può essere collocata tra la destra dell'host e la fine della viewport
|
|
275
|
-
// e controlla anche se l'altezza del target è nella viewport
|
|
276
|
-
if (windowWidth - hostElemClientRect.right > targetElemClientRect.width) {
|
|
277
|
-
// controlla solo per la destra
|
|
278
|
-
if (hostElemClientRectVerCenter > targetElemClientRect.height / 2 &&
|
|
279
|
-
windowHeight - hostElemClientRectVerCenter > targetElemClientRect.height / 2) {
|
|
280
|
-
availablePlacements.splice(availablePlacements.length, 1, 'right');
|
|
281
|
-
}
|
|
282
|
-
// controlla solo per le varianti di destra right-top and right-bottom
|
|
283
|
-
this.setSecondaryPlacementForLeftRight(hostElemClientRect, targetElemClientRect, 'right', availablePlacements);
|
|
284
|
-
}
|
|
285
|
-
// controlla se c'è abbastanza spazio tra la base dell'host e la fine della viewport per l'altezza del target
|
|
286
|
-
if (windowHeight - hostElemClientRect.bottom > targetElemClientRect.height) {
|
|
287
|
-
if (hostElemClientRectHorCenter > targetElemClientRect.width / 2 &&
|
|
288
|
-
windowWidth - hostElemClientRectHorCenter > targetElemClientRect.width / 2) {
|
|
289
|
-
availablePlacements.splice(availablePlacements.length, 1, 'bottom');
|
|
290
|
-
}
|
|
291
|
-
this.setSecondaryPlacementForTopBottom(hostElemClientRect, targetElemClientRect, 'bottom', availablePlacements);
|
|
292
|
-
}
|
|
293
|
-
return availablePlacements;
|
|
294
|
-
};
|
|
295
|
-
/**
|
|
296
|
-
* Controlla se il collocamento secondario per sinistra e destra è disponibile, come left-top, left-bottom, right-top e right-bottom
|
|
297
|
-
* primaryplacement: left|right
|
|
298
|
-
* availablePlacementArr: array con i collocamenti disponibili
|
|
299
|
-
* @param {?} hostElemClientRect
|
|
300
|
-
* @param {?} targetElemClientRect
|
|
301
|
-
* @param {?} primaryPlacement
|
|
302
|
-
* @param {?} availablePlacementArr
|
|
303
|
-
* @return {?}
|
|
304
|
-
*/
|
|
305
|
-
Positioning.prototype.setSecondaryPlacementForLeftRight = /**
|
|
306
|
-
* Controlla se il collocamento secondario per sinistra e destra è disponibile, come left-top, left-bottom, right-top e right-bottom
|
|
307
|
-
* primaryplacement: left|right
|
|
308
|
-
* availablePlacementArr: array con i collocamenti disponibili
|
|
309
|
-
* @param {?} hostElemClientRect
|
|
310
|
-
* @param {?} targetElemClientRect
|
|
311
|
-
* @param {?} primaryPlacement
|
|
312
|
-
* @param {?} availablePlacementArr
|
|
313
|
-
* @return {?}
|
|
314
|
-
*/
|
|
315
|
-
function (hostElemClientRect, targetElemClientRect, primaryPlacement, availablePlacementArr) {
|
|
316
|
-
/** @type {?} */
|
|
317
|
-
var html = document.documentElement;
|
|
318
|
-
// check for left-bottom
|
|
319
|
-
if (targetElemClientRect.height <= hostElemClientRect.bottom) {
|
|
320
|
-
availablePlacementArr.splice(availablePlacementArr.length, 1, primaryPlacement + '-bottom');
|
|
321
|
-
}
|
|
322
|
-
if ((window.innerHeight || html.clientHeight) - hostElemClientRect.top >= targetElemClientRect.height) {
|
|
323
|
-
availablePlacementArr.splice(availablePlacementArr.length, 1, primaryPlacement + '-top');
|
|
324
|
-
}
|
|
325
|
-
};
|
|
326
|
-
/**
|
|
327
|
-
* Controlla se il collocamento secondario per sopra e sotto è disponibile, come top-left, top-right, bottom-left, bottom-right
|
|
328
|
-
* primaryplacement: top|bottom
|
|
329
|
-
* availablePlacementArr: array con i collocamenti disponibili
|
|
330
|
-
* @param {?} hostElemClientRect
|
|
331
|
-
* @param {?} targetElemClientRect
|
|
332
|
-
* @param {?} primaryPlacement
|
|
333
|
-
* @param {?} availablePlacementArr
|
|
334
|
-
* @return {?}
|
|
335
|
-
*/
|
|
336
|
-
Positioning.prototype.setSecondaryPlacementForTopBottom = /**
|
|
337
|
-
* Controlla se il collocamento secondario per sopra e sotto è disponibile, come top-left, top-right, bottom-left, bottom-right
|
|
338
|
-
* primaryplacement: top|bottom
|
|
339
|
-
* availablePlacementArr: array con i collocamenti disponibili
|
|
340
|
-
* @param {?} hostElemClientRect
|
|
341
|
-
* @param {?} targetElemClientRect
|
|
342
|
-
* @param {?} primaryPlacement
|
|
343
|
-
* @param {?} availablePlacementArr
|
|
344
|
-
* @return {?}
|
|
345
|
-
*/
|
|
346
|
-
function (hostElemClientRect, targetElemClientRect, primaryPlacement, availablePlacementArr) {
|
|
347
|
-
/** @type {?} */
|
|
348
|
-
var html = document.documentElement;
|
|
349
|
-
// check for left-bottom
|
|
350
|
-
if ((window.innerWidth || html.clientWidth) - hostElemClientRect.left >= targetElemClientRect.width) {
|
|
351
|
-
availablePlacementArr.splice(availablePlacementArr.length, 1, primaryPlacement + '-left');
|
|
352
|
-
}
|
|
353
|
-
if (targetElemClientRect.width <= hostElemClientRect.right) {
|
|
354
|
-
availablePlacementArr.splice(availablePlacementArr.length, 1, primaryPlacement + '-right');
|
|
355
|
-
}
|
|
356
|
-
};
|
|
357
|
-
return Positioning;
|
|
358
|
-
}());
|
|
359
|
-
/**
|
|
360
|
-
* @license
|
|
361
|
-
* Copyright Angular ng-bootstrap team All Rights Reserved.
|
|
362
|
-
*
|
|
363
|
-
* Use of this source code is governed by an MIT-style license that can be
|
|
364
|
-
* found in the LICENSE file at https://raw.githubusercontent.com/ng-bootstrap/ng-bootstrap/master/LICENSE
|
|
365
|
-
*/
|
|
366
|
-
export { Positioning };
|
|
367
|
-
/** @type {?} */
|
|
368
|
-
var positionService = new Positioning();
|
|
369
|
-
/**
|
|
370
|
-
* @param {?} hostElement
|
|
371
|
-
* @param {?} targetElement
|
|
372
|
-
* @param {?} placement
|
|
373
|
-
* @param {?=} appendToBody
|
|
374
|
-
* @return {?}
|
|
375
|
-
*/
|
|
376
|
-
export function positionElements(hostElement, targetElement, placement, appendToBody) {
|
|
377
|
-
/** @type {?} */
|
|
378
|
-
var placementVals = Array.isArray(placement) ? placement : [/** @type {?} */ (placement)];
|
|
379
|
-
/** @type {?} */
|
|
380
|
-
var hasAuto = placementVals.findIndex(function (val) { return val === 'auto'; });
|
|
381
|
-
if (hasAuto >= 0) {
|
|
382
|
-
['top', 'bottom', 'left', 'right', 'top-left', 'top-right', 'bottom-left', 'bottom-right', 'left-top',
|
|
383
|
-
'left-bottom', 'right-top', 'right-bottom',
|
|
384
|
-
].forEach(function (obj) {
|
|
385
|
-
if (placementVals.find(function (val) { return val.search('^' + obj) !== -1; }) == null) {
|
|
386
|
-
placementVals.splice(hasAuto++, 1, /** @type {?} */ (obj));
|
|
387
|
-
}
|
|
388
|
-
});
|
|
389
|
-
}
|
|
390
|
-
/** @type {?} */
|
|
391
|
-
var topVal = 0;
|
|
392
|
-
/** @type {?} */
|
|
393
|
-
var leftVal = 0;
|
|
394
|
-
/** @type {?} */
|
|
395
|
-
var appliedPlacement;
|
|
396
|
-
/** @type {?} */
|
|
397
|
-
var availablePlacements = positionService.getAvailablePlacements(hostElement, targetElement);
|
|
398
|
-
var _loop_1 = function (item, index) {
|
|
399
|
-
// Controlla se il collocamento passato è presente nel collocamento disponibile, altrimenti applica l'ultimo collocamento nella
|
|
400
|
-
// lista del collocamento passato
|
|
401
|
-
if ((availablePlacements.find(function (val) { return val === item; }) != null) || (placementVals.length === index + 1)) {
|
|
402
|
-
appliedPlacement = /** @type {?} */ (item);
|
|
403
|
-
/** @type {?} */
|
|
404
|
-
var pos = positionService.positionElements(hostElement, targetElement, item, appendToBody);
|
|
405
|
-
topVal = pos.top;
|
|
406
|
-
leftVal = pos.left;
|
|
407
|
-
return "break";
|
|
408
|
-
}
|
|
409
|
-
};
|
|
410
|
-
try {
|
|
411
|
-
// iterare sui collocamenti acquisiti
|
|
412
|
-
for (var _a = tslib_1.__values(toItemIndexes(placementVals)), _b = _a.next(); !_b.done; _b = _a.next()) {
|
|
413
|
-
var _c = _b.value, item = _c.item, index = _c.index;
|
|
414
|
-
var state_1 = _loop_1(item, index);
|
|
415
|
-
if (state_1 === "break")
|
|
416
|
-
break;
|
|
417
|
-
}
|
|
418
|
-
}
|
|
419
|
-
catch (e_1_1) { e_1 = { error: e_1_1 }; }
|
|
420
|
-
finally {
|
|
421
|
-
try {
|
|
422
|
-
if (_b && !_b.done && (_d = _a.return)) _d.call(_a);
|
|
423
|
-
}
|
|
424
|
-
finally { if (e_1) throw e_1.error; }
|
|
425
|
-
}
|
|
426
|
-
targetElement.style.top = topVal + "px";
|
|
427
|
-
targetElement.style.left = leftVal + "px";
|
|
428
|
-
return appliedPlacement;
|
|
429
|
-
var e_1, _d;
|
|
430
|
-
}
|
|
431
|
-
/**
|
|
432
|
-
* @template T
|
|
433
|
-
* @param {?} a
|
|
434
|
-
* @return {?}
|
|
435
|
-
*/
|
|
436
|
-
function toItemIndexes(a) {
|
|
437
|
-
return a.map(function (item, index) { return ({ item: item, index: index }); });
|
|
438
|
-
}
|
|
439
|
-
/** @typedef {?} */
|
|
440
|
-
var Placement;
|
|
441
|
-
export { Placement };
|
|
442
|
-
/** @typedef {?} */
|
|
443
|
-
var PlacementArray;
|
|
444
|
-
export { PlacementArray };
|
|
445
|
-
|
|
446
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zaXRpb25pbmcuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9kZXNpZ24tYW5ndWxhci1raXQvIiwic291cmNlcyI6WyJsaWIvcG9wb3Zlci9wb3NpdGlvbmluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFPQTs7Ozs7OztBQUFBOzs7Ozs7O0lBQ1ksa0NBQVk7Ozs7Y0FBQyxPQUFvQixJQUFJLE1BQU0sQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7Ozs7OztJQUU3RSw4QkFBUTs7Ozs7Y0FBQyxPQUFvQixFQUFFLElBQVksSUFBWSxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQzs7Ozs7SUFFL0Ysd0NBQWtCOzs7O2NBQUMsT0FBb0I7UUFDM0MsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksUUFBUSxDQUFDLEtBQUssUUFBUSxDQUFDOzs7Ozs7SUFHakUsa0NBQVk7Ozs7Y0FBQyxPQUFvQjs7UUFDckMsSUFBSSxjQUFjLHFCQUFnQixPQUFPLENBQUMsWUFBWSxLQUFJLFFBQVEsQ0FBQyxlQUFlLENBQUM7UUFFbkYsT0FBTyxjQUFjLElBQUksY0FBYyxLQUFLLFFBQVEsQ0FBQyxlQUFlLElBQUksSUFBSSxDQUFDLGtCQUFrQixDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUM7WUFDOUcsY0FBYyxxQkFBZ0IsY0FBYyxDQUFDLFlBQVksQ0FBQSxDQUFDO1NBQzdEO1FBRUQsTUFBTSxDQUFDLGNBQWMsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDOzs7Ozs7O0lBR3RELDhCQUFROzs7OztJQUFSLFVBQVMsT0FBb0IsRUFBRSxLQUFZO1FBQVosc0JBQUEsRUFBQSxZQUFZOztRQUN2QyxJQUFJLFVBQVUsQ0FBYTs7UUFDM0IsSUFBSSxZQUFZLEdBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFF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LENBQUM7O1lBQ25DLElBQU0sR0FBRyxHQUFHLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxZQUFZLENBQUMsQ0FBQztZQUM3RixNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQztZQUNqQixPQUFPLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQzs7U0FFdEI7OztRQVZMLHFDQUFxQztRQUNyQyxHQUFHLENBQUMsQ0FBMEIsSUFBQSxLQUFBLGlCQUFBLGFBQWEsQ0FBQyxhQUFhLENBQUMsQ0FBQSxnQkFBQTsrQkFBN0MsY0FBSSxFQUFFLGdCQUFLO2tDQUFYLElBQUksRUFBRSxLQUFLOzs7U0FVdkI7Ozs7Ozs7OztJQUNELGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFNLE1BQU0sT0FBSSxDQUFDO0lBQ3hDLGFBQWEsQ0FBQyxLQUFLLENBQUMsSUFBSSxHQUFNLE9BQU8sT0FBSSxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQzs7Q0FDM0I7Ozs7OztBQUdELHVCQUEwQixDQUFNO0lBQzVCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLFVBQUMsSUFBSSxFQUFFLEtBQUssSUFBSyxPQUFBLENBQUMsRUFBRSxJQUFJLE1BQUEsRUFBRSxLQUFLLE9BQUEsRUFBRSxDQUFDLEVBQWpCLENBQWlCLENBQUMsQ0FBQztDQUNwRCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBBbmd1bGFyIG5nLWJvb3RzdHJhcCB0ZWFtIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAvbWFzdGVyL0xJQ0VOU0VcbiAqL1xuZXhwb3J0IGNsYXNzIFBvc2l0aW9uaW5nIHtcbiAgICBwcml2YXRlIGdldEFsbFN0eWxlcyhlbGVtZW50OiBIVE1MRWxlbWVudCkgeyByZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7IH1cblxuICAgIHByaXZhdGUgZ2V0U3R5bGUoZWxlbWVudDogSFRNTEVsZW1lbnQsIHByb3A6IHN0cmluZyk6IHN0cmluZyB7IHJldHVybiB0aGlzLmdldEFsbFN0eWxlcyhlbGVtZW50KVtwcm9wXTsgfVxuXG4gICAgcHJpdmF0ZSBpc1N0YXRpY1Bvc2l0aW9uZWQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICh0aGlzLmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpIHx8ICdzdGF0aWMnKSA9PT0gJ3N0YXRpYyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBvZmZzZXRQYXJlbnQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBIVE1MRWxlbWVudCB7XG4gICAgICAgIGxldCBvZmZzZXRQYXJlbnRFbCA9IDxIVE1MRWxlbWVudD5lbGVtZW50Lm9mZnNldFBhcmVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgICAgd2hpbGUgKG9mZnNldFBhcmVudEVsICYmIG9mZnNldFBhcmVudEVsICE9PSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgdGhpcy5pc1N0YXRpY1Bvc2l0aW9uZWQob2Zmc2V0UGFyZW50RWwpKSB7XG4gICAgICAgICAgICBvZmZzZXRQYXJlbnRFbCA9IDxIVE1MRWxlbWVudD5vZmZzZXRQYXJlbnRFbC5vZmZzZXRQYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gb2Zmc2V0UGFyZW50RWwgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgIH1cblxuICAgIHBvc2l0aW9uKGVsZW1lbnQ6IEhUTUxFbGVtZW50LCByb3VuZCA9IHRydWUpOiBDbGllbnRSZWN0IHtcbiAgICAgICAgbGV0IGVsUG9zaXRpb246IENsaWVudFJlY3Q7XG4gICAgICAgIGxldCBwYXJlbnRPZmZzZXQ6IENsaWVudFJlY3QgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAsIHRvcDogMCwgYm90dG9tOiAwLCBsZWZ0OiAwLCByaWdodDogMCB9O1xuXG4gICAgICAgIGlmICh0aGlzLmdldFN0eWxlKGVsZW1lbnQsICdwb3NpdGlvbicpID09PSAnZml4ZWQnKSB7XG4gICAgICAgICAgICBlbFBvc2l0aW9uID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG9mZnNldFBhcmVudEVsID0gdGhpcy5vZmZzZXRQYXJlbnQoZWxlbWVudCk7XG5cbiAgICAgICAgICAgIGVsUG9zaXRpb24gPSB0aGlzLm9mZnNldChlbGVtZW50LCBmYWxzZSk7XG5cbiAgICAgICAgICAgIGlmIChvZmZzZXRQYXJlbnRFbCAhPT0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgcGFyZW50T2Zmc2V0ID0gdGhpcy5vZmZzZXQob2Zmc2V0UGFyZW50RWwsIGZhbHNlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcGFyZW50T2Zmc2V0LnRvcCArPSBvZmZzZXRQYXJlbnRFbC5jbGllbnRUb3A7XG4gICAgICAgICAgICBwYXJlbnRPZmZzZXQubGVmdCArPSBvZmZzZXRQYXJlbnRFbC5jbGllbnRMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgZWxQb3NpdGlvbi50b3AgLT0gcGFyZW50T2Zmc2V0LnRvcDtcbiAgICAgICAgZWxQb3NpdGlvbi5ib3R0b20gLT0gcGFyZW50T2Zmc2V0LnRvcDtcbiAgICAgICAgZWxQb3NpdGlvbi5sZWZ0IC09IHBhcmVudE9mZnNldC5sZWZ0O1xuICAgICAgICBlbFBvc2l0aW9uLnJpZ2h0IC09IHBhcmVudE9mZnNldC5sZWZ0O1xuXG4gICAgICAgIGlmIChyb3VuZCkge1xuICAgICAgICAgICAgZWxQb3NpdGlvbi50b3AgPSBNYXRoLnJvdW5kKGVsUG9zaXRpb24udG9wKTtcbiAgICAgICAgICAgIGVsUG9zaXRpb24uYm90dG9tID0gTWF0aC5yb3VuZChlbFBvc2l0aW9uLmJvdHRvbSk7XG4gICAgICAgICAgICBlbFBvc2l0aW9uLmxlZnQgPSBNYXRoLnJvdW5kKGVsUG9zaXRpb24ubGVmdCk7XG4gICAgICAgICAgICBlbFBvc2l0aW9uLnJpZ2h0ID0gTWF0aC5yb3VuZChlbFBvc2l0aW9uLnJpZ2h0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBlbFBvc2l0aW9uO1xuICAgIH1cblxuICAgIG9mZnNldChlbGVtZW50OiBIVE1MRWxlbWVudCwgcm91bmQgPSB0cnVlKTogQ2xpZW50UmVjdCB7XG4gICAgICAgIGNvbnN0IGVsQmNyID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3Qgdmlld3BvcnRPZmZzZXQgPSB7XG4gICAgICAgICAgICB0b3A6IHdpbmRvdy5wYWdlWU9mZnNldCAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRUb3AsXG4gICAgICAgICAgICBsZWZ0OiB3aW5kb3cucGFnZVhPZmZzZXQgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50TGVmdFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IGVsT2Zmc2V0ID0ge1xuICAgICAgICAgICAgaGVpZ2h0OiBlbEJjci5oZWlnaHQgfHwgZWxlbWVudC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgICB3aWR0aDogZWxCY3Iud2lkdGggfHwgZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgICAgICAgIHRvcDogZWxCY3IudG9wICsgdmlld3BvcnRPZmZzZXQudG9wLFxuICAgICAgICAgICAgYm90dG9tOiBlbEJjci5ib3R0b20gKyB2aWV3cG9ydE9mZnNldC50b3AsXG4gICAgICAgICAgICBsZWZ0OiBlbEJjci5sZWZ0ICsgdmlld3BvcnRPZmZzZXQubGVmdCxcbiAgICAgICAgICAgIHJpZ2h0OiBlbEJjci5yaWdodCArIHZpZXdwb3J0T2Zmc2V0LmxlZnRcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAocm91bmQpIHtcbiAgICAgICAgICAgIGVsT2Zmc2V0LmhlaWdodCA9IE1hdGgucm91bmQoZWxPZmZzZXQuaGVpZ2h0KTtcbiAgICAgICAgICAgIGVsT2Zmc2V0LndpZHRoID0gTWF0aC5yb3VuZChlbE9mZnNldC53aWR0aCk7XG4gICAgICAgICAgICBlbE9mZnNldC50b3AgPSBNYXRoLnJvdW5kKGVsT2Zmc2V0LnRvcCk7XG4gICAgICAgICAgICBlbE9mZnNldC5ib3R0b20gPSBNYXRoLnJvdW5kKGVsT2Zmc2V0LmJvdHRvbSk7XG4gICAgICAgICAgICBlbE9mZnNldC5sZWZ0ID0gTWF0aC5yb3VuZChlbE9mZnNldC5sZWZ0KTtcbiAgICAgICAgICAgIGVsT2Zmc2V0LnJpZ2h0ID0gTWF0aC5yb3VuZChlbE9mZnNldC5yaWdodCk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZWxPZmZzZXQ7XG4gICAgfVxuXG4gICAgcG9zaXRpb25FbGVtZW50cyhob3N0RWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwbGFjZW1lbnQ6IHN0cmluZywgYXBwZW5kVG9Cb2R5PzogYm9vbGVhbik6XG4gICAgICAgIENsaWVudFJlY3Qge1xuICAgICAgICBjb25zdCBob3N0RWxQb3NpdGlvbiA9IGFwcGVuZFRvQm9keSA/IHRoaXMub2Zmc2V0KGhvc3RFbGVtZW50LCBmYWxzZSkgOiB0aGlzLnBvc2l0aW9uKGhvc3RFbGVtZW50LCBmYWxzZSk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsU3R5bGVzID0gdGhpcy5nZXRBbGxTdHlsZXModGFyZ2V0RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsQkNSID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgcGxhY2VtZW50UHJpbWFyeSA9IHBsYWNlbWVudC5zcGxpdCgnLScpWzBdIHx8ICd0b3AnO1xuICAgICAgICBjb25zdCBwbGFjZW1lbnRTZWNvbmRhcnkgPSBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXSB8fCAnY2VudGVyJztcblxuICAgICAgICBjb25zdCB0YXJnZXRFbFBvc2l0aW9uOiBDbGllbnRSZWN0ID0ge1xuICAgICAgICAgICAgJ2hlaWdodCc6IHRhcmdldEVsQkNSLmhlaWdodCB8fCB0YXJnZXRFbGVtZW50Lm9mZnNldEhlaWdodCxcbiAgICAgICAgICAgICd3aWR0aCc6IHRhcmdldEVsQkNSLndpZHRoIHx8IHRhcmdldEVsZW1lbnQub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICAndG9wJzogMCxcbiAgICAgICAgICAgICdib3R0b20nOiB0YXJnZXRFbEJDUi5oZWlnaHQgfHwgdGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQsXG4gICAgICAgICAgICAnbGVmdCc6IDAsXG4gICAgICAgICAgICAncmlnaHQnOiB0YXJnZXRFbEJDUi53aWR0aCB8fCB0YXJnZXRFbGVtZW50Lm9mZnNldFdpZHRoXG4gICAgICAgIH07XG5cbiAgICAgICAgc3dpdGNoIChwbGFjZW1lbnRQcmltYXJ5KSB7XG4gICAgICAgICAgICBjYXNlICd0b3AnOlxuICAgICAgICAgICAgICAgIHRhcmdldEVsUG9zaXRpb24udG9wID1cbiAgICAgICAgICAgICAgICAgICAgaG9zdEVsUG9zaXRpb24udG9wIC0gKHRhcmdldEVsZW1lbnQub2Zmc2V0SGVpZ2h0ICsgcGFyc2VGbG9hdCh0YXJnZXRFbFN0eWxlcy5tYXJnaW5Cb3R0b20pKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2JvdHRvbSc6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi50b3AgPSBob3N0RWxQb3NpdGlvbi50b3AgKyBob3N0RWxQb3NpdGlvbi5oZWlnaHQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLmxlZnQgPVxuICAgICAgICAgICAgICAgICAgICBob3N0RWxQb3NpdGlvbi5sZWZ0IC0gKHRhcmdldEVsZW1lbnQub2Zmc2V0V2lkdGggKyBwYXJzZUZsb2F0KHRhcmdldEVsU3R5bGVzLm1hcmdpblJpZ2h0KSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdyaWdodCc6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi5sZWZ0ID0gaG9zdEVsUG9zaXRpb24ubGVmdCArIGhvc3RFbFBvc2l0aW9uLndpZHRoO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoIChwbGFjZW1lbnRTZWNvbmRhcnkpIHtcbiAgICAgICAgICAgIGNhc2UgJ3RvcCc6XG4gICAgICAgICAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi50b3AgPSBob3N0RWxQb3NpdGlvbi50b3A7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdib3R0b20nOlxuICAgICAgICAgICAgICAgIHRhcmdldEVsUG9zaXRpb24udG9wID0gaG9zdEVsUG9zaXRpb24udG9wICsgaG9zdEVsUG9zaXRpb24uaGVpZ2h0IC0gdGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdsZWZ0JzpcbiAgICAgICAgICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLmxlZnQgPSBob3N0RWxQb3NpdGlvbi5sZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAncmlnaHQnOlxuICAgICAgICAgICAgICAgIHRhcmdldEVsUG9zaXRpb24ubGVmdCA9IGhvc3RFbFBvc2l0aW9uLmxlZnQgKyBob3N0RWxQb3NpdGlvbi53aWR0aCAtIHRhcmdldEVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAgICAgICAgIGlmIChwbGFjZW1lbnRQcmltYXJ5ID09PSAndG9wJyB8fCBwbGFjZW1lbnRQcmltYXJ5ID09PSAnYm90dG9tJykge1xuICAgICAgICAgICAgICAgICAgICB0YXJnZXRFbFBvc2l0aW9uLmxlZnQgPSBob3N0RWxQb3NpdGlvbi5sZWZ0ICsgaG9zdEVsUG9zaXRpb24ud2lkdGggLyAyIC0gdGFyZ2V0RWxlbWVudC5vZmZzZXRXaWR0aCAvIDI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi50b3AgPSBob3N0RWxQb3NpdGlvbi50b3AgKyBob3N0RWxQb3NpdGlvbi5oZWlnaHQgLyAyIC0gdGFyZ2V0RWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuXG4gICAgICAgIHRhcmdldEVsUG9zaXRpb24udG9wID0gTWF0aC5yb3VuZCh0YXJnZXRFbFBvc2l0aW9uLnRvcCk7XG4gICAgICAgIHRhcmdldEVsUG9zaXRpb24uYm90dG9tID0gTWF0aC5yb3VuZCh0YXJnZXRFbFBvc2l0aW9uLmJvdHRvbSk7XG4gICAgICAgIHRhcmdldEVsUG9zaXRpb24ubGVmdCA9IE1hdGgucm91bmQodGFyZ2V0RWxQb3NpdGlvbi5sZWZ0KTtcbiAgICAgICAgdGFyZ2V0RWxQb3NpdGlvbi5yaWdodCA9IE1hdGgucm91bmQodGFyZ2V0RWxQb3NpdGlvbi5yaWdodCk7XG5cbiAgICAgICAgcmV0dXJuIHRhcmdldEVsUG9zaXRpb247XG4gICAgfVxuXG4gICAgLy8gUmVzdGl0dWlzY2UgaSBjb2xsb2NhbWVudGkgZGlzcG9uaWJpbGkgcGVyIGwnZWxlbWVudG8gdGFyZ2V0IG5lbGxhIHZpZXdwb3J0IGluIGJhc2UgYWxsJ2VsZW1lbnRvIGhvc3RcbiAgICBnZXRBdmFpbGFibGVQbGFjZW1lbnRzKGhvc3RFbGVtZW50OiBIVE1MRWxlbWVudCwgdGFyZ2V0RWxlbWVudDogSFRNTEVsZW1lbnQpOiBzdHJpbmdbXSB7XG4gICAgICAgIGNvbnN0IGF2YWlsYWJsZVBsYWNlbWVudHM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgICAgICAgY29uc3QgaG9zdEVsZW1DbGllbnRSZWN0ID0gaG9zdEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGNvbnN0IHRhcmdldEVsZW1DbGllbnRSZWN0ID0gdGFyZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgY29uc3Qgd2luZG93SGVpZ2h0ID0gd2luZG93LmlubmVySGVpZ2h0IHx8IGh0bWwuY2xpZW50SGVpZ2h0O1xuICAgICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IGh0bWwuY2xpZW50V2lkdGg7XG4gICAgICAgIGNvbnN0IGhvc3RFbGVtQ2xpZW50UmVjdEhvckNlbnRlciA9IGhvc3RFbGVtQ2xpZW50UmVjdC5sZWZ0ICsgaG9zdEVsZW1DbGllbnRSZWN0LndpZHRoIC8gMjtcbiAgICAgICAgY29uc3QgaG9zdEVsZW1DbGllbnRSZWN0VmVyQ2VudGVyID0gaG9zdEVsZW1DbGllbnRSZWN0LnRvcCArIGhvc3RFbGVtQ2xpZW50UmVjdC5oZWlnaHQgLyAyO1xuXG4gICAgICAgIC8vIGNvbnRyb2xsYSBzZSBsYSBsYXJnaGV6emEgZGVsbCdlbGVtZW50byB0YXJnZXQgcHXDsiBlc3NlcmUgY29sbG9jYXRhIHRyYSBsYSBzaW5pc3RyYSBkZWxsJ2hvc3QgZSBsJ2luaXppbyBkZWxsYSB2aWV3cG9ydFxuICAgICAgICAvLyBlIGNvbnRyb2xsYSBhbmNoZSBzZSBsJ2FsdGV6emEgZGVsIHRhcmdldCDDqCBuZWxsYSB2aWV3cG9ydFxuICAgICAgICBpZiAodGFyZ2V0RWxlbUNsaWVudFJlY3Qud2lkdGggPCBob3N0RWxlbUNsaWVudFJlY3QubGVmdCkge1xuICAgICAgICAgICAgLy8gY29udHJvbGxhIHNvbG8gcGVyIGxhIHNpbmlzdHJhXG4gICAgICAgICAgICBpZiAoaG9zdEVsZW1DbGllbnRSZWN0VmVyQ2VudGVyID4gdGFyZ2V0RWxlbUNsaWVudFJlY3QuaGVpZ2h0IC8gMiAmJlxuICAgICAgICAgICAgICAgIHdpbmRvd0hlaWdodCAtIGhvc3RFbGVtQ2xpZW50UmVjdFZlckNlbnRlciA+IHRhcmdldEVsZW1DbGllbnRSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVQbGFjZW1lbnRzLnNwbGljZShhdmFpbGFibGVQbGFjZW1lbnRzLmxlbmd0aCwgMSwgJ2xlZnQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIGNvbnRyb2xsYSBzb2xvIHBlciBsZSB2YXJpYW50aSBkaSBzaW5pc3RyYSBsZWZ0LXRvcCBhbmQgbGVmdC1ib3R0b21cbiAgICAgICAgICAgIHRoaXMuc2V0U2Vjb25kYXJ5UGxhY2VtZW50Rm9yTGVmdFJpZ2h0KGhvc3RFbGVtQ2xpZW50UmVjdCwgdGFyZ2V0RWxlbUNsaWVudFJlY3QsICdsZWZ0JywgYXZhaWxhYmxlUGxhY2VtZW50cyk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb250cm9sbGEgc2UgbCdhbHRlenphIGRlbCB0YXJnZXQgw6ggbWlub3JlIGRlbGxhIGNpbWEgZGVsbCdob3N0XG4gICAgICAgIGlmICh0YXJnZXRFbGVtQ2xpZW50UmVjdC5oZWlnaHQgPCBob3N0RWxlbUNsaWVudFJlY3QudG9wKSB7XG4gICAgICAgICAgICBpZiAoaG9zdEVsZW1DbGllbnRSZWN0SG9yQ2VudGVyID4gdGFyZ2V0RWxlbUNsaWVudFJlY3Qud2lkdGggLyAyICYmXG4gICAgICAgICAgICAgICAgd2luZG93V2lkdGggLSBob3N0RWxlbUNsaWVudFJlY3RIb3JDZW50ZXIgPiB0YXJnZXRFbGVtQ2xpZW50UmVjdC53aWR0aCAvIDIpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVQbGFjZW1lbnRzLnNwbGljZShhdmFpbGFibGVQbGFjZW1lbnRzLmxlbmd0aCwgMSwgJ3RvcCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRTZWNvbmRhcnlQbGFjZW1lbnRGb3JUb3BCb3R0b20oaG9zdEVsZW1DbGllbnRSZWN0LCB0YXJnZXRFbGVtQ2xpZW50UmVjdCwgJ3RvcCcsIGF2YWlsYWJsZVBsYWNlbWVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gY29udHJvbGxhIHNlIGxhIGxhcmdoZXp6YSBkZWxsJ2VsZW1lbnRvIHRhcmdldCBwdcOyIGVzc2VyZSBjb2xsb2NhdGEgdHJhIGxhIGRlc3RyYSBkZWxsJ2hvc3QgZSBsYSBmaW5lIGRlbGxhIHZpZXdwb3J0XG4gICAgICAgIC8vIGUgY29udHJvbGxhIGFuY2hlIHNlIGwnYWx0ZXp6YSBkZWwgdGFyZ2V0IMOoIG5lbGxhIHZpZXdwb3J0XG4gICAgICAgIGlmICh3aW5kb3dXaWR0aCAtIGhvc3RFbGVtQ2xpZW50UmVjdC5yaWdodCA+IHRhcmdldEVsZW1DbGllbnRSZWN0LndpZHRoKSB7XG4gICAgICAgICAgICAvLyBjb250cm9sbGEgc29sbyBwZXIgbGEgZGVzdHJhXG4gICAgICAgICAgICBpZiAoaG9zdEVsZW1DbGllbnRSZWN0VmVyQ2VudGVyID4gdGFyZ2V0RWxlbUNsaWVudFJlY3QuaGVpZ2h0IC8gMiAmJlxuICAgICAgICAgICAgICAgIHdpbmRvd0hlaWdodCAtIGhvc3RFbGVtQ2xpZW50UmVjdFZlckNlbnRlciA+IHRhcmdldEVsZW1DbGllbnRSZWN0LmhlaWdodCAvIDIpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVQbGFjZW1lbnRzLnNwbGljZShhdmFpbGFibGVQbGFjZW1lbnRzLmxlbmd0aCwgMSwgJ3JpZ2h0Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBjb250cm9sbGEgc29sbyBwZXIgbGUgdmFyaWFudGkgZGkgZGVzdHJhIHJpZ2h0LXRvcCBhbmQgcmlnaHQtYm90dG9tXG4gICAgICAgICAgICB0aGlzLnNldFNlY29uZGFyeVBsYWNlbWVudEZvckxlZnRSaWdodChob3N0RWxlbUNsaWVudFJlY3QsIHRhcmdldEVsZW1DbGllbnRSZWN0LCAncmlnaHQnLCBhdmFpbGFibGVQbGFjZW1lbnRzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbnRyb2xsYSBzZSBjJ8OoIGFiYmFzdGFuemEgc3BhemlvIHRyYSBsYSBiYXNlIGRlbGwnaG9zdCBlIGxhIGZpbmUgZGVsbGEgdmlld3BvcnQgcGVyIGwnYWx0ZXp6YSBkZWwgdGFyZ2V0XG4gICAgICAgIGlmICh3aW5kb3dIZWlnaHQgLSBob3N0RWxlbUNsaWVudFJlY3QuYm90dG9tID4gdGFyZ2V0RWxlbUNsaWVudFJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICBpZiAoaG9zdEVsZW1DbGllbnRSZWN0SG9yQ2VudGVyID4gdGFyZ2V0RWxlbUNsaWVudFJlY3Qud2lkdGggLyAyICYmXG4gICAgICAgICAgICAgICAgd2luZG93V2lkdGggLSBob3N0RWxlbUNsaWVudFJlY3RIb3JDZW50ZXIgPiB0YXJnZXRFbGVtQ2xpZW50UmVjdC53aWR0aCAvIDIpIHtcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVQbGFjZW1lbnRzLnNwbGljZShhdmFpbGFibGVQbGFjZW1lbnRzLmxlbmd0aCwgMSwgJ2JvdHRvbScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zZXRTZWNvbmRhcnlQbGFjZW1lbnRGb3JUb3BCb3R0b20oaG9zdEVsZW1DbGllbnRSZWN0LCB0YXJnZXRFbGVtQ2xpZW50UmVjdCwgJ2JvdHRvbScsIGF2YWlsYWJsZVBsYWNlbWVudHMpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVBsYWNlbWVudHM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGxhIHNlIGlsIGNvbGxvY2FtZW50byBzZWNvbmRhcmlvIHBlciBzaW5pc3RyYSBlIGRlc3RyYSDDqCBkaXNwb25pYmlsZSwgY29tZSBsZWZ0LXRvcCwgbGVmdC1ib3R0b20sIHJpZ2h0LXRvcCBlIHJpZ2h0LWJvdHRvbVxuICAgICAqIHByaW1hcnlwbGFjZW1lbnQ6IGxlZnR8cmlnaHRcbiAgICAgKiBhdmFpbGFibGVQbGFjZW1lbnRBcnI6IGFycmF5IGNvbiBpIGNvbGxvY2FtZW50aSBkaXNwb25pYmlsaVxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0U2Vjb25kYXJ5UGxhY2VtZW50Rm9yTGVmdFJpZ2h0KFxuICAgICAgICBob3N0RWxlbUNsaWVudFJlY3Q6IENsaWVudFJlY3QsIHRhcmdldEVsZW1DbGllbnRSZWN0OiBDbGllbnRSZWN0LCBwcmltYXJ5UGxhY2VtZW50OiBzdHJpbmcsXG4gICAgICAgIGF2YWlsYWJsZVBsYWNlbWVudEFycjogQXJyYXk8c3RyaW5nPikge1xuICAgICAgICBjb25zdCBodG1sID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAvLyBjaGVjayBmb3IgbGVmdC1ib3R0b21cbiAgICAgICAgaWYgKHRhcmdldEVsZW1DbGllbnRSZWN0LmhlaWdodCA8PSBob3N0RWxlbUNsaWVudFJlY3QuYm90dG9tKSB7XG4gICAgICAgICAgICBhdmFpbGFibGVQbGFjZW1lbnRBcnIuc3BsaWNlKGF2YWlsYWJsZVBsYWNlbWVudEFyci5sZW5ndGgsIDEsIHByaW1hcnlQbGFjZW1lbnQgKyAnLWJvdHRvbScpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgod2luZG93LmlubmVySGVpZ2h0IHx8IGh0bWwuY2xpZW50SGVpZ2h0KSAtIGhvc3RFbGVtQ2xpZW50UmVjdC50b3AgPj0gdGFyZ2V0RWxlbUNsaWVudFJlY3QuaGVpZ2h0KSB7XG4gICAgICAgICAgICBhdmFpbGFibGVQbGFjZW1lbnRBcnIuc3BsaWNlKGF2YWlsYWJsZVBsYWNlbWVudEFyci5sZW5ndGgsIDEsIHByaW1hcnlQbGFjZW1lbnQgKyAnLXRvcCcpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ29udHJvbGxhIHNlIGlsIGNvbGxvY2FtZW50byBzZWNvbmRhcmlvIHBlciBzb3ByYSBlIHNvdHRvIMOoIGRpc3BvbmliaWxlLCBjb21lIHRvcC1sZWZ0LCB0b3AtcmlnaHQsIGJvdHRvbS1sZWZ0LCBib3R0b20tcmlnaHRcbiAgICAgKiBwcmltYXJ5cGxhY2VtZW50OiB0b3B8Ym90dG9tXG4gICAgICogYXZhaWxhYmxlUGxhY2VtZW50QXJyOiBhcnJheSBjb24gaSBjb2xsb2NhbWVudGkgZGlzcG9uaWJpbGlcbiAgICAgKi9cbiAgICBwcml2YXRlIHNldFNlY29uZGFyeVBsYWNlbWVudEZvclRvcEJvdHRvbShcbiAgICAgICAgaG9zdEVsZW1DbGllbnRSZWN0OiBDbGllbnRSZWN0LCB0YXJnZXRFbGVtQ2xpZW50UmVjdDogQ2xpZW50UmVjdCwgcHJpbWFyeVBsYWNlbWVudDogc3RyaW5nLFxuICAgICAgICBhdmFpbGFibGVQbGFjZW1lbnRBcnI6IEFycmF5PHN0cmluZz4pIHtcbiAgICAgICAgY29uc3QgaHRtbCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcbiAgICAgICAgLy8gY2hlY2sgZm9yIGxlZnQtYm90dG9tXG4gICAgICAgIGlmICgod2luZG93LmlubmVyV2lkdGggfHwgaHRtbC5jbGllbnRXaWR0aCkgLSBob3N0RWxlbUNsaWVudFJlY3QubGVmdCA+PSB0YXJnZXRFbGVtQ2xpZW50UmVjdC53aWR0aCkge1xuICAgICAgICAgICAgYXZhaWxhYmxlUGxhY2VtZW50QXJyLnNwbGljZShhdmFpbGFibGVQbGFjZW1lbnRBcnIubGVuZ3RoLCAxLCBwcmltYXJ5UGxhY2VtZW50ICsgJy1sZWZ0Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhcmdldEVsZW1DbGllbnRSZWN0LndpZHRoIDw9IGhvc3RFbGVtQ2xpZW50UmVjdC5yaWdodCkge1xuICAgICAgICAgICAgYXZhaWxhYmxlUGxhY2VtZW50QXJyLnNwbGljZShhdmFpbGFibGVQbGFjZW1lbnRBcnIubGVuZ3RoLCAxLCBwcmltYXJ5UGxhY2VtZW50ICsgJy1yaWdodCcpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5jb25zdCBwb3NpdGlvblNlcnZpY2UgPSBuZXcgUG9zaXRpb25pbmcoKTtcblxuLypcbiAqIEFjY2V0dGEgbCdhcnJheSBkZWwgY29sbG9jYW1lbnRvIGUgYXBwbGljYSBpbCBjb2xsb2NhbWVudG8gYWRhdHRvIGluIGJhc2UgYWxsYSB2aWV3cG9ydC5cbiAqIFJpdG9ybmEgaWwgY29sbG9jYW1lbnRvIGFwcGxpY2F0by5cbiAqIEluIGNhc28gZGkgY29sbG9jYW1lbnRvIGF1dG8sIGkgY29sbG9jYW1lbnRpIHNvbm8gc2VsZXppb25hdGkgaW4gb3JkaW5lXG4gKiAgICd0b3AnLCAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnLFxuICogICAndG9wLWxlZnQnLCAndG9wLXJpZ2h0JyxcbiAqICAgJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsXG4gKiAgICdsZWZ0LXRvcCcsICdsZWZ0LWJvdHRvbScsXG4gKiAgICdyaWdodC10b3AnLCAncmlnaHQtYm90dG9tJy5cbiAqICovXG5leHBvcnQgZnVuY3Rpb24gcG9zaXRpb25FbGVtZW50cyhcbiAgICBob3N0RWxlbWVudDogSFRNTEVsZW1lbnQsIHRhcmdldEVsZW1lbnQ6IEhUTUxFbGVtZW50LCBwbGFjZW1lbnQ6IHN0cmluZyB8IFBsYWNlbWVudCB8IFBsYWNlbWVudEFycmF5LFxuICAgIGFwcGVuZFRvQm9keT86IGJvb2xlYW4pOiBQbGFjZW1lbnQge1xuICAgIGNvbnN0IHBsYWNlbWVudFZhbHM6IEFycmF5PFBsYWNlbWVudD4gPSBBcnJheS5pc0FycmF5KHBsYWNlbWVudCkgPyBwbGFjZW1lbnQgOiBbcGxhY2VtZW50IGFzIFBsYWNlbWVudF07XG5cbiAgICAvLyBTb3N0aXR1aXNjZSBpbCBjb2xsb2NhbWVudG8gYXV0byBjb24gYWx0cmkgY29sbG9jYW1lbnRpXG4gICAgbGV0IGhhc0F1dG8gPSBwbGFjZW1lbnRWYWxzLmZpbmRJbmRleCh2YWwgPT4gdmFsID09PSAnYXV0bycpO1xuICAgIGlmIChoYXNBdXRvID49IDApIHtcbiAgICAgICAgWyd0b3AnLCAnYm90dG9tJywgJ2xlZnQnLCAncmlnaHQnLCAndG9wLWxlZnQnLCAndG9wLXJpZ2h0JywgJ2JvdHRvbS1sZWZ0JywgJ2JvdHRvbS1yaWdodCcsICdsZWZ0LXRvcCcsXG4gICAgICAgICAgICAnbGVmdC1ib3R0b20nLCAncmlnaHQtdG9wJywgJ3JpZ2h0LWJvdHRvbScsXG4gICAgICAgIF0uZm9yRWFjaChmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICBpZiAocGxhY2VtZW50VmFscy5maW5kKHZhbCA9PiB2YWwuc2VhcmNoKCdeJyArIG9iaikgIT09IC0xKSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGxhY2VtZW50VmFscy5zcGxpY2UoaGFzQXV0bysrLCAxLCBvYmogYXMgUGxhY2VtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gY29vcmRpbmF0ZSBwZXIgZG92ZSBwb3NpemlvbmFyZVxuICAgIGxldCB0b3BWYWwgPSAwLCBsZWZ0VmFsID0gMDtcbiAgICBsZXQgYXBwbGllZFBsYWNlbWVudDogUGxhY2VtZW50O1xuICAgIC8vIHByZW5kZXJlIGkgY29sbG9jYW1lbnRpIGRpc3BvbmliaWxpXG4gICAgY29uc3QgYXZhaWxhYmxlUGxhY2VtZW50cyA9IHBvc2l0aW9uU2VydmljZS5nZXRBdmFpbGFibGVQbGFjZW1lbnRzKGhvc3RFbGVtZW50LCB0YXJnZXRFbGVtZW50KTtcbiAgICAvLyBpdGVyYXJlIHN1aSBjb2xsb2NhbWVudGkgYWNxdWlzaXRpXG4gICAgZm9yIChjb25zdCB7IGl0ZW0sIGluZGV4IH0gb2YgdG9JdGVtSW5kZXhlcyhwbGFjZW1lbnRWYWxzKSkge1xuICAgICAgICAvLyBDb250cm9sbGEgc2UgaWwgY29sbG9jYW1lbnRvIHBhc3NhdG8gw6ggcHJlc2VudGUgbmVsIGNvbGxvY2FtZW50byBkaXNwb25pYmlsZSwgYWx0cmltZW50aSBhcHBsaWNhIGwndWx0aW1vIGNvbGxvY2FtZW50byBuZWxsYVxuICAgICAgICAvLyBsaXN0YSBkZWwgY29sbG9jYW1lbnRvIHBhc3NhdG9cbiAgICAgICAgaWYgKChhdmFpbGFibGVQbGFjZW1lbnRzLmZpbmQodmFsID0+IHZhbCA9PT0gaXRlbSkgIT0gbnVsbCkgfHwgKHBsYWNlbWVudFZhbHMubGVuZ3RoID09PSBpbmRleCArIDEpKSB7XG4gICAgICAgICAgICBhcHBsaWVkUGxhY2VtZW50ID0gPFBsYWNlbWVudD5pdGVtO1xuICAgICAgICAgICAgY29uc3QgcG9zID0gcG9zaXRpb25TZXJ2aWNlLnBvc2l0aW9uRWxlbWVudHMoaG9zdEVsZW1lbnQsIHRhcmdldEVsZW1lbnQsIGl0ZW0sIGFwcGVuZFRvQm9keSk7XG4gICAgICAgICAgICB0b3BWYWwgPSBwb3MudG9wO1xuICAgICAgICAgICAgbGVmdFZhbCA9IHBvcy5sZWZ0O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG4gICAgdGFyZ2V0RWxlbWVudC5zdHlsZS50b3AgPSBgJHt0b3BWYWx9cHhgO1xuICAgIHRhcmdldEVsZW1lbnQuc3R5bGUubGVmdCA9IGAke2xlZnRWYWx9cHhgO1xuICAgIHJldHVybiBhcHBsaWVkUGxhY2VtZW50O1xufVxuXG4vLyBGdW56aW9uZSBwZXIgcHJlbmRlcmUgbCdpbmRpY2UgZSBsJ29nZ2V0dG8gZGkgdW4gYXJyYXlcbmZ1bmN0aW9uIHRvSXRlbUluZGV4ZXM8VD4oYTogVFtdKSB7XG4gICAgcmV0dXJuIGEubWFwKChpdGVtLCBpbmRleCkgPT4gKHsgaXRlbSwgaW5kZXggfSkpO1xufVxuXG5leHBvcnQgdHlwZSBQbGFjZW1lbnQgPSAnYXV0bycgfCAndG9wJyB8ICdib3R0b20nIHwgJ2xlZnQnIHwgJ3JpZ2h0JyB8ICd0b3AtbGVmdCcgfCAndG9wLXJpZ2h0JyB8ICdib3R0b20tbGVmdCcgfFxuICAgICdib3R0b20tcmlnaHQnIHwgJ2xlZnQtdG9wJyB8ICdsZWZ0LWJvdHRvbScgfCAncmlnaHQtdG9wJyB8ICdyaWdodC1ib3R0b20nO1xuXG5leHBvcnQgdHlwZSBQbGFjZW1lbnRBcnJheSA9IFBsYWNlbWVudCB8IEFycmF5PFBsYWNlbWVudD47XG4iXX0=
|