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.
Files changed (201) hide show
  1. package/README.md +61 -31
  2. package/esm2020/design-angular-kit.mjs +5 -0
  3. package/esm2020/lib/badge/badge.directive.mjs +83 -0
  4. package/esm2020/lib/breadcrumb/breadcrumb-item.component.mjs +66 -0
  5. package/esm2020/lib/breadcrumb/breadcrumb.component.mjs +89 -0
  6. package/esm2020/lib/button/button.directive.mjs +185 -0
  7. package/esm2020/lib/button/button.module.mjs +18 -0
  8. package/esm2020/lib/checkbox/checkbox.component.mjs +138 -0
  9. package/esm2020/lib/collapse/collapse-group.component.mjs +57 -0
  10. package/esm2020/lib/collapse/collapse-item.component.mjs +79 -0
  11. package/esm2020/lib/collapse/collapse.config.mjs +12 -0
  12. package/esm2020/lib/collapse/collapse.directive.mjs +55 -0
  13. package/esm2020/lib/collapse/collapse.module.mjs +22 -0
  14. package/esm2020/lib/design-angular-kit.module.mjs +142 -0
  15. package/esm2020/lib/dropdown/dropdown-divider.component.mjs +11 -0
  16. package/esm2020/lib/dropdown/dropdown-item.component.mjs +97 -0
  17. package/esm2020/lib/dropdown/dropdown.component.mjs +143 -0
  18. package/esm2020/lib/dropdown/dropdown.config.mjs +12 -0
  19. package/esm2020/lib/dropdown/dropdown.directive.mjs +156 -0
  20. package/esm2020/lib/dropdown/dropdown.module.mjs +25 -0
  21. package/esm2020/lib/enums/icons.enum.mjs +27 -0
  22. package/esm2020/lib/form-input/form-input-password.utils.mjs +154 -0
  23. package/esm2020/lib/form-input/form-input.component.mjs +495 -0
  24. package/esm2020/lib/form-input/it-prefix.directive.mjs +13 -0
  25. package/esm2020/lib/form-input/it-suffix.directive.mjs +13 -0
  26. package/esm2020/lib/form-input/it-text-prefix.directive.mjs +13 -0
  27. package/esm2020/lib/form-input/it-text-suffix.directive.mjs +13 -0
  28. package/esm2020/lib/form-input/mark-matching-text.pipe.mjs +36 -0
  29. package/esm2020/lib/icon/icon.component.mjs +87 -0
  30. package/esm2020/lib/icon/icon.module.mjs +18 -0
  31. package/esm2020/lib/models/Alignment.mjs +15 -0
  32. package/esm2020/lib/models/ButtonSize.mjs +15 -0
  33. package/esm2020/lib/models/InputType.mjs +44 -0
  34. package/esm2020/lib/models/ThemeColor.mjs +30 -0
  35. package/esm2020/lib/popover/popover.config.mjs +17 -0
  36. package/esm2020/lib/popover/popover.directive.mjs +33 -0
  37. package/esm2020/lib/popover/popover.module.mjs +19 -0
  38. package/esm2020/lib/progress-bar/progress-bar.component.mjs +98 -0
  39. package/esm2020/lib/radio/radio.component.mjs +287 -0
  40. package/esm2020/lib/radio/unique-selection-dispatcher.mjs +55 -0
  41. package/esm2020/lib/tabs/tab-group.component.mjs +177 -0
  42. package/esm2020/lib/tabs/tab.component.mjs +73 -0
  43. package/esm2020/lib/tabs/tabs.module.mjs +20 -0
  44. package/esm2020/lib/toggle/toggle.component.mjs +86 -0
  45. package/esm2020/lib/tooltip/tooltip.config.mjs +17 -0
  46. package/esm2020/lib/tooltip/tooltip.directive.mjs +43 -0
  47. package/esm2020/lib/tooltip/tooltip.module.mjs +19 -0
  48. package/esm2020/lib/util/focus-mouse.directive.mjs +32 -0
  49. package/esm2020/lib/util/util.mjs +12 -0
  50. package/esm2020/lib/util/utils.module.mjs +16 -0
  51. package/esm2020/public_api.mjs +40 -0
  52. package/fesm2015/design-angular-kit.mjs +3181 -0
  53. package/fesm2015/design-angular-kit.mjs.map +1 -0
  54. package/fesm2020/design-angular-kit.mjs +3160 -0
  55. package/fesm2020/design-angular-kit.mjs.map +1 -0
  56. package/index.d.ts +5 -0
  57. package/lib/badge/badge.directive.d.ts +11 -5
  58. package/lib/breadcrumb/breadcrumb-item.component.d.ts +16 -5
  59. package/lib/breadcrumb/breadcrumb.component.d.ts +12 -5
  60. package/lib/button/button.directive.d.ts +72 -0
  61. package/lib/button/button.module.d.ts +8 -0
  62. package/lib/checkbox/checkbox.component.d.ts +25 -5
  63. package/lib/collapse/collapse-group.component.d.ts +16 -0
  64. package/lib/collapse/collapse-item.component.d.ts +46 -0
  65. package/lib/collapse/collapse.config.d.ts +6 -0
  66. package/lib/collapse/collapse.directive.d.ts +25 -0
  67. package/lib/collapse/collapse.module.d.ts +12 -0
  68. package/lib/design-angular-kit.module.d.ts +27 -0
  69. package/lib/dropdown/dropdown-divider.component.d.ts +3 -0
  70. package/lib/dropdown/dropdown-item.component.d.ts +22 -8
  71. package/lib/dropdown/dropdown.component.d.ts +34 -26
  72. package/lib/dropdown/dropdown.config.d.ts +6 -0
  73. package/lib/dropdown/dropdown.directive.d.ts +77 -0
  74. package/lib/dropdown/dropdown.module.d.ts +15 -0
  75. package/lib/enums/icons.enum.d.ts +23 -0
  76. package/lib/form-input/form-input-password.utils.d.ts +45 -0
  77. package/lib/form-input/form-input.component.d.ts +202 -20
  78. package/lib/form-input/it-prefix.directive.d.ts +5 -0
  79. package/lib/form-input/it-suffix.directive.d.ts +5 -0
  80. package/lib/form-input/it-text-prefix.directive.d.ts +5 -0
  81. package/lib/form-input/it-text-suffix.directive.d.ts +5 -0
  82. package/lib/form-input/mark-matching-text.pipe.d.ts +10 -0
  83. package/lib/icon/icon.component.d.ts +34 -0
  84. package/lib/icon/icon.module.d.ts +8 -0
  85. package/lib/models/Alignment.d.ts +12 -0
  86. package/lib/models/ButtonSize.d.ts +1 -1
  87. package/lib/models/InputType.d.ts +22 -1
  88. package/lib/models/ThemeColor.d.ts +1 -1
  89. package/lib/popover/popover.config.d.ts +5 -6
  90. package/lib/popover/popover.directive.d.ts +13 -108
  91. package/lib/popover/popover.module.d.ts +9 -0
  92. package/lib/progress-bar/progress-bar.component.d.ts +25 -19
  93. package/lib/radio/radio.component.d.ts +22 -10
  94. package/lib/radio/unique-selection-dispatcher.d.ts +3 -0
  95. package/lib/tabs/tab-group.component.d.ts +17 -11
  96. package/lib/tabs/tab.component.d.ts +6 -2
  97. package/lib/tabs/tabs.module.d.ts +10 -0
  98. package/lib/toggle/toggle.component.d.ts +9 -4
  99. package/lib/tooltip/tooltip.config.d.ts +7 -7
  100. package/lib/tooltip/tooltip.directive.d.ts +12 -92
  101. package/lib/tooltip/tooltip.module.d.ts +9 -0
  102. package/lib/util/focus-mouse.directive.d.ts +13 -0
  103. package/lib/util/utils.module.d.ts +7 -0
  104. package/package.json +34 -20
  105. package/public_api.d.ts +19 -2
  106. package/bundles/design-angular-kit.umd.js +0 -5829
  107. package/bundles/design-angular-kit.umd.js.map +0 -1
  108. package/bundles/design-angular-kit.umd.min.js +0 -31
  109. package/bundles/design-angular-kit.umd.min.js.map +0 -1
  110. package/design-angular-kit.d.ts +0 -8
  111. package/design-angular-kit.metadata.json +0 -1
  112. package/esm2015/design-angular-kit.js +0 -14
  113. package/esm2015/lib/badge/badge.directive.js +0 -116
  114. package/esm2015/lib/breadcrumb/breadcrumb-item.component.js +0 -117
  115. package/esm2015/lib/breadcrumb/breadcrumb.component.js +0 -128
  116. package/esm2015/lib/button/button.component.js +0 -165
  117. package/esm2015/lib/checkbox/checkbox.component.js +0 -170
  118. package/esm2015/lib/design-angular-kit.module.js +0 -81
  119. package/esm2015/lib/dropdown/dropdown-divider.component.js +0 -18
  120. package/esm2015/lib/dropdown/dropdown-header.component.js +0 -29
  121. package/esm2015/lib/dropdown/dropdown-item.component.js +0 -157
  122. package/esm2015/lib/dropdown/dropdown.component.js +0 -248
  123. package/esm2015/lib/form-input/form-input.component.js +0 -489
  124. package/esm2015/lib/models/ButtonSize.js +0 -25
  125. package/esm2015/lib/models/IconPosition.js +0 -21
  126. package/esm2015/lib/models/InputType.js +0 -33
  127. package/esm2015/lib/models/InteractionTrigger.js +0 -35
  128. package/esm2015/lib/models/ThemeColor.js +0 -45
  129. package/esm2015/lib/popover/popover.component.js +0 -134
  130. package/esm2015/lib/popover/popover.config.js +0 -35
  131. package/esm2015/lib/popover/popover.directive.js +0 -433
  132. package/esm2015/lib/popover/popup.js +0 -105
  133. package/esm2015/lib/popover/positioning.js +0 -349
  134. package/esm2015/lib/popover/triggers.js +0 -99
  135. package/esm2015/lib/progress-bar/progress-bar.component.js +0 -170
  136. package/esm2015/lib/radio/radio.component.js +0 -526
  137. package/esm2015/lib/radio/unique-selection-dispatcher.js +0 -70
  138. package/esm2015/lib/tabs/tab-group.component.js +0 -339
  139. package/esm2015/lib/tabs/tab.component.js +0 -143
  140. package/esm2015/lib/toggle/toggle.component.js +0 -173
  141. package/esm2015/lib/tooltip/popup.js +0 -105
  142. package/esm2015/lib/tooltip/positioning.js +0 -349
  143. package/esm2015/lib/tooltip/tooltip.component.js +0 -77
  144. package/esm2015/lib/tooltip/tooltip.config.js +0 -31
  145. package/esm2015/lib/tooltip/tooltip.directive.js +0 -384
  146. package/esm2015/lib/tooltip/triggers.js +0 -99
  147. package/esm2015/lib/util/util.js +0 -30
  148. package/esm2015/public_api.js +0 -28
  149. package/esm5/design-angular-kit.js +0 -14
  150. package/esm5/lib/badge/badge.directive.js +0 -145
  151. package/esm5/lib/breadcrumb/breadcrumb-item.component.js +0 -135
  152. package/esm5/lib/breadcrumb/breadcrumb.component.js +0 -164
  153. package/esm5/lib/button/button.component.js +0 -221
  154. package/esm5/lib/checkbox/checkbox.component.js +0 -200
  155. package/esm5/lib/design-angular-kit.module.js +0 -85
  156. package/esm5/lib/dropdown/dropdown-divider.component.js +0 -20
  157. package/esm5/lib/dropdown/dropdown-header.component.js +0 -27
  158. package/esm5/lib/dropdown/dropdown-item.component.js +0 -197
  159. package/esm5/lib/dropdown/dropdown.component.js +0 -309
  160. package/esm5/lib/form-input/form-input.component.js +0 -582
  161. package/esm5/lib/models/ButtonSize.js +0 -25
  162. package/esm5/lib/models/IconPosition.js +0 -21
  163. package/esm5/lib/models/InputType.js +0 -33
  164. package/esm5/lib/models/InteractionTrigger.js +0 -35
  165. package/esm5/lib/models/ThemeColor.js +0 -45
  166. package/esm5/lib/popover/popover.component.js +0 -144
  167. package/esm5/lib/popover/popover.config.js +0 -37
  168. package/esm5/lib/popover/popover.directive.js +0 -573
  169. package/esm5/lib/popover/popup.js +0 -116
  170. package/esm5/lib/popover/positioning.js +0 -446
  171. package/esm5/lib/popover/triggers.js +0 -115
  172. package/esm5/lib/progress-bar/progress-bar.component.js +0 -218
  173. package/esm5/lib/radio/radio.component.js +0 -610
  174. package/esm5/lib/radio/unique-selection-dispatcher.js +0 -108
  175. package/esm5/lib/tabs/tab-group.component.js +0 -401
  176. package/esm5/lib/tabs/tab.component.js +0 -156
  177. package/esm5/lib/toggle/toggle.component.js +0 -200
  178. package/esm5/lib/tooltip/popup.js +0 -116
  179. package/esm5/lib/tooltip/positioning.js +0 -446
  180. package/esm5/lib/tooltip/tooltip.component.js +0 -80
  181. package/esm5/lib/tooltip/tooltip.config.js +0 -33
  182. package/esm5/lib/tooltip/tooltip.directive.js +0 -516
  183. package/esm5/lib/tooltip/triggers.js +0 -115
  184. package/esm5/lib/util/util.js +0 -48
  185. package/esm5/public_api.js +0 -28
  186. package/fesm2015/design-angular-kit.js +0 -4751
  187. package/fesm2015/design-angular-kit.js.map +0 -1
  188. package/fesm5/design-angular-kit.js +0 -5867
  189. package/fesm5/design-angular-kit.js.map +0 -1
  190. package/lib/button/button.component.d.ts +0 -50
  191. package/lib/dropdown/dropdown-header.component.d.ts +0 -3
  192. package/lib/models/IconPosition.d.ts +0 -9
  193. package/lib/models/InteractionTrigger.d.ts +0 -19
  194. package/lib/popover/popover.component.d.ts +0 -25
  195. package/lib/popover/popup.d.ts +0 -27
  196. package/lib/popover/positioning.d.ts +0 -32
  197. package/lib/popover/triggers.d.ts +0 -18
  198. package/lib/tooltip/popup.d.ts +0 -27
  199. package/lib/tooltip/positioning.d.ts +0 -32
  200. package/lib/tooltip/tooltip.component.d.ts +0 -20
  201. 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=