@skyux/popovers 5.0.2 → 5.5.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 (152) hide show
  1. package/README.md +6 -4
  2. package/bundles/skyux-popovers-testing.umd.js +8 -8
  3. package/bundles/skyux-popovers.umd.js +43 -39
  4. package/documentation.json +241 -44
  5. package/esm2015/index.js +23 -0
  6. package/esm2015/index.js.map +1 -0
  7. package/esm2015/lib/modules/dropdown/dropdown-button.component.js +14 -0
  8. package/esm2015/lib/modules/dropdown/dropdown-button.component.js.map +1 -0
  9. package/esm2015/lib/modules/dropdown/dropdown-extensions.js +14 -0
  10. package/esm2015/lib/modules/dropdown/dropdown-extensions.js.map +1 -0
  11. package/esm2015/lib/modules/dropdown/dropdown-item.component.js +72 -0
  12. package/esm2015/lib/modules/dropdown/dropdown-item.component.js.map +1 -0
  13. package/esm2015/lib/modules/dropdown/dropdown-menu.component.js +307 -0
  14. package/esm2015/lib/modules/dropdown/dropdown-menu.component.js.map +1 -0
  15. package/esm2015/lib/modules/dropdown/dropdown.component.js +360 -0
  16. package/esm2015/lib/modules/dropdown/dropdown.component.js.map +1 -0
  17. package/esm2015/lib/modules/dropdown/dropdown.module.js +60 -0
  18. package/esm2015/lib/modules/dropdown/dropdown.module.js.map +1 -0
  19. package/esm2015/lib/modules/dropdown/types/dropdown-horizontal-alignment.js +2 -0
  20. package/esm2015/lib/modules/dropdown/types/dropdown-horizontal-alignment.js.map +1 -0
  21. package/esm2015/lib/modules/dropdown/types/dropdown-menu-change.js +2 -0
  22. package/esm2015/lib/modules/dropdown/types/dropdown-menu-change.js.map +1 -0
  23. package/esm2015/lib/modules/dropdown/types/dropdown-message-type.js +37 -0
  24. package/esm2015/lib/modules/dropdown/types/dropdown-message-type.js.map +1 -0
  25. package/esm2015/lib/modules/dropdown/types/dropdown-message.js +2 -0
  26. package/esm2015/lib/modules/dropdown/types/dropdown-message.js.map +1 -0
  27. package/esm2015/lib/modules/dropdown/types/dropdown-trigger-type.js +2 -0
  28. package/esm2015/lib/modules/dropdown/types/dropdown-trigger-type.js.map +1 -0
  29. package/esm2015/lib/modules/popover/popover-adapter.service.js +74 -0
  30. package/esm2015/lib/modules/popover/popover-adapter.service.js.map +1 -0
  31. package/esm2015/lib/modules/popover/popover-animation-state.js +2 -0
  32. package/esm2015/lib/modules/popover/popover-animation-state.js.map +1 -0
  33. package/esm2015/lib/modules/popover/popover-animation.js +19 -0
  34. package/esm2015/lib/modules/popover/popover-animation.js.map +1 -0
  35. package/esm2015/lib/modules/popover/popover-content.component.js +268 -0
  36. package/esm2015/lib/modules/popover/popover-content.component.js.map +1 -0
  37. package/esm2015/lib/modules/popover/popover-context.js +10 -0
  38. package/esm2015/lib/modules/popover/popover-context.js.map +1 -0
  39. package/esm2015/lib/modules/popover/popover-extensions.js +29 -0
  40. package/esm2015/lib/modules/popover/popover-extensions.js.map +1 -0
  41. package/esm2015/lib/modules/popover/popover.component.js +203 -0
  42. package/esm2015/lib/modules/popover/popover.component.js.map +1 -0
  43. package/esm2015/lib/modules/popover/popover.directive.js +176 -0
  44. package/esm2015/lib/modules/popover/popover.directive.js.map +1 -0
  45. package/esm2015/lib/modules/popover/popover.module.js +56 -0
  46. package/esm2015/lib/modules/popover/popover.module.js.map +1 -0
  47. package/esm2015/lib/modules/popover/types/popover-adapter-arrow-coordinates.js +2 -0
  48. package/esm2015/lib/modules/popover/types/popover-adapter-arrow-coordinates.js.map +1 -0
  49. package/esm2015/lib/modules/popover/types/popover-adapter-elements.js +2 -0
  50. package/esm2015/lib/modules/popover/types/popover-adapter-elements.js.map +1 -0
  51. package/esm2015/lib/modules/popover/types/popover-alignment.js +2 -0
  52. package/esm2015/lib/modules/popover/types/popover-alignment.js.map +1 -0
  53. package/esm2015/lib/modules/popover/types/popover-message-type.js +24 -0
  54. package/esm2015/lib/modules/popover/types/popover-message-type.js.map +1 -0
  55. package/esm2015/lib/modules/popover/types/popover-message.js +2 -0
  56. package/esm2015/lib/modules/popover/types/popover-message.js.map +1 -0
  57. package/esm2015/lib/modules/popover/types/popover-placement.js +2 -0
  58. package/esm2015/lib/modules/popover/types/popover-placement.js.map +1 -0
  59. package/esm2015/lib/modules/popover/types/popover-position.js +2 -0
  60. package/esm2015/lib/modules/popover/types/popover-position.js.map +1 -0
  61. package/esm2015/lib/modules/popover/types/popover-trigger.js +2 -0
  62. package/esm2015/lib/modules/popover/types/popover-trigger.js.map +1 -0
  63. package/esm2015/lib/modules/shared/sky-popovers-resources.module.js +47 -0
  64. package/esm2015/lib/modules/shared/sky-popovers-resources.module.js.map +1 -0
  65. package/esm2015/skyux-popovers.js +2 -2
  66. package/esm2015/skyux-popovers.js.map +1 -0
  67. package/esm2015/testing/dropdown/dropdown-fixture.js +1 -1
  68. package/esm2015/testing/dropdown/dropdown-fixture.js.map +1 -0
  69. package/esm2015/testing/dropdown/dropdown-testing.module.js +5 -5
  70. package/esm2015/testing/dropdown/dropdown-testing.module.js.map +1 -0
  71. package/esm2015/testing/dropdown/popovers-fixture-dropdown-item.js +1 -1
  72. package/esm2015/testing/dropdown/popovers-fixture-dropdown-item.js.map +1 -0
  73. package/esm2015/testing/dropdown/popovers-fixture-dropdown-menu.js +1 -1
  74. package/esm2015/testing/dropdown/popovers-fixture-dropdown-menu.js.map +1 -0
  75. package/esm2015/testing/dropdown/popovers-fixture-dropdown.js +1 -1
  76. package/esm2015/testing/dropdown/popovers-fixture-dropdown.js.map +1 -0
  77. package/esm2015/testing/popover/popover-fixture.js +1 -1
  78. package/esm2015/testing/popover/popover-fixture.js.map +1 -0
  79. package/esm2015/testing/popover/popover-testing.module.js +5 -5
  80. package/esm2015/testing/popover/popover-testing.module.js.map +1 -0
  81. package/esm2015/testing/public-api.js +1 -1
  82. package/esm2015/testing/public-api.js.map +1 -0
  83. package/esm2015/testing/skyux-popovers-testing.js +1 -1
  84. package/esm2015/testing/skyux-popovers-testing.js.map +1 -0
  85. package/fesm2015/skyux-popovers-testing.js +8 -8
  86. package/fesm2015/skyux-popovers-testing.js.map +1 -1
  87. package/fesm2015/skyux-popovers.js +53 -49
  88. package/fesm2015/skyux-popovers.js.map +1 -1
  89. package/index.d.ts +20 -0
  90. package/{modules → lib/modules}/dropdown/dropdown-button.component.d.ts +0 -0
  91. package/{modules → lib/modules}/dropdown/dropdown-extensions.d.ts +0 -0
  92. package/{modules → lib/modules}/dropdown/dropdown-item.component.d.ts +0 -0
  93. package/{modules → lib/modules}/dropdown/dropdown-menu.component.d.ts +0 -0
  94. package/{modules → lib/modules}/dropdown/dropdown.component.d.ts +0 -0
  95. package/{modules → lib/modules}/dropdown/dropdown.module.d.ts +0 -0
  96. package/{modules → lib/modules}/dropdown/types/dropdown-horizontal-alignment.d.ts +0 -0
  97. package/{modules → lib/modules}/dropdown/types/dropdown-menu-change.d.ts +0 -0
  98. package/{modules → lib/modules}/dropdown/types/dropdown-message-type.d.ts +0 -0
  99. package/{modules → lib/modules}/dropdown/types/dropdown-message.d.ts +0 -0
  100. package/{modules → lib/modules}/dropdown/types/dropdown-trigger-type.d.ts +0 -0
  101. package/{modules → lib/modules}/popover/popover-adapter.service.d.ts +0 -0
  102. package/{modules → lib/modules}/popover/popover-animation-state.d.ts +0 -0
  103. package/{modules → lib/modules}/popover/popover-animation.d.ts +0 -0
  104. package/{modules → lib/modules}/popover/popover-content.component.d.ts +0 -0
  105. package/{modules → lib/modules}/popover/popover-context.d.ts +0 -0
  106. package/{modules → lib/modules}/popover/popover-extensions.d.ts +0 -0
  107. package/{modules → lib/modules}/popover/popover.component.d.ts +4 -1
  108. package/{modules → lib/modules}/popover/popover.directive.d.ts +2 -0
  109. package/{modules → lib/modules}/popover/popover.module.d.ts +0 -0
  110. package/{modules → lib/modules}/popover/types/popover-adapter-arrow-coordinates.d.ts +0 -0
  111. package/{modules → lib/modules}/popover/types/popover-adapter-elements.d.ts +0 -0
  112. package/{modules → lib/modules}/popover/types/popover-alignment.d.ts +0 -0
  113. package/{modules → lib/modules}/popover/types/popover-message-type.d.ts +0 -0
  114. package/{modules → lib/modules}/popover/types/popover-message.d.ts +0 -0
  115. package/{modules → lib/modules}/popover/types/popover-placement.d.ts +0 -0
  116. package/{modules → lib/modules}/popover/types/popover-position.d.ts +0 -0
  117. package/{modules → lib/modules}/popover/types/popover-trigger.d.ts +0 -0
  118. package/{modules → lib/modules}/shared/sky-popovers-resources.module.d.ts +0 -0
  119. package/package.json +23 -9
  120. package/skyux-popovers.d.ts +1 -1
  121. package/LICENSE +0 -21
  122. package/esm2015/modules/dropdown/dropdown-button.component.js +0 -14
  123. package/esm2015/modules/dropdown/dropdown-extensions.js +0 -14
  124. package/esm2015/modules/dropdown/dropdown-item.component.js +0 -72
  125. package/esm2015/modules/dropdown/dropdown-menu.component.js +0 -306
  126. package/esm2015/modules/dropdown/dropdown.component.js +0 -357
  127. package/esm2015/modules/dropdown/dropdown.module.js +0 -60
  128. package/esm2015/modules/dropdown/types/dropdown-horizontal-alignment.js +0 -2
  129. package/esm2015/modules/dropdown/types/dropdown-menu-change.js +0 -2
  130. package/esm2015/modules/dropdown/types/dropdown-message-type.js +0 -37
  131. package/esm2015/modules/dropdown/types/dropdown-message.js +0 -2
  132. package/esm2015/modules/dropdown/types/dropdown-trigger-type.js +0 -2
  133. package/esm2015/modules/popover/popover-adapter.service.js +0 -74
  134. package/esm2015/modules/popover/popover-animation-state.js +0 -2
  135. package/esm2015/modules/popover/popover-animation.js +0 -19
  136. package/esm2015/modules/popover/popover-content.component.js +0 -266
  137. package/esm2015/modules/popover/popover-context.js +0 -10
  138. package/esm2015/modules/popover/popover-extensions.js +0 -29
  139. package/esm2015/modules/popover/popover.component.js +0 -200
  140. package/esm2015/modules/popover/popover.directive.js +0 -175
  141. package/esm2015/modules/popover/popover.module.js +0 -56
  142. package/esm2015/modules/popover/types/popover-adapter-arrow-coordinates.js +0 -2
  143. package/esm2015/modules/popover/types/popover-adapter-elements.js +0 -2
  144. package/esm2015/modules/popover/types/popover-alignment.js +0 -2
  145. package/esm2015/modules/popover/types/popover-message-type.js +0 -24
  146. package/esm2015/modules/popover/types/popover-message.js +0 -2
  147. package/esm2015/modules/popover/types/popover-placement.js +0 -2
  148. package/esm2015/modules/popover/types/popover-position.js +0 -2
  149. package/esm2015/modules/popover/types/popover-trigger.js +0 -2
  150. package/esm2015/modules/shared/sky-popovers-resources.module.js +0 -47
  151. package/esm2015/public-api.js +0 -23
  152. package/public-api.d.ts +0 -20
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1hbmltYXRpb24tc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wb3BvdmVycy9zcmMvbW9kdWxlcy9wb3BvdmVyL3BvcG92ZXItYW5pbWF0aW9uLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgdHlwZSBTa3lQb3BvdmVyQW5pbWF0aW9uU3RhdGUgPSAnb3BlbicgfCAnY2xvc2VkJztcbiJdfQ==
@@ -1,19 +0,0 @@
1
- import { animate, state, style, transition, trigger, } from '@angular/animations';
2
- /**
3
- * @internal
4
- */
5
- export const skyPopoverAnimation = trigger('skyPopoverAnimation', [
6
- state('void', style({
7
- opacity: 0,
8
- })),
9
- state('open', style({
10
- opacity: 1,
11
- })),
12
- state('closed', style({
13
- opacity: 0,
14
- })),
15
- transition('void => *', [animate('250ms')]),
16
- transition('open => closed', [animate('150ms')]),
17
- transition('closed => open', [animate('150ms')]),
18
- ]);
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1hbmltYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wb3BvdmVycy9zcmMvbW9kdWxlcy9wb3BvdmVyL3BvcG92ZXItYW5pbWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxPQUFPLEVBRVAsS0FBSyxFQUNMLEtBQUssRUFDTCxVQUFVLEVBQ1YsT0FBTyxHQUNSLE1BQU0scUJBQXFCLENBQUM7QUFFN0I7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBNkIsT0FBTyxDQUNsRSxxQkFBcUIsRUFDckI7SUFDRSxLQUFLLENBQ0gsTUFBTSxFQUNOLEtBQUssQ0FBQztRQUNKLE9BQU8sRUFBRSxDQUFDO0tBQ1gsQ0FBQyxDQUNIO0lBQ0QsS0FBSyxDQUNILE1BQU0sRUFDTixLQUFLLENBQUM7UUFDSixPQUFPLEVBQUUsQ0FBQztLQUNYLENBQUMsQ0FDSDtJQUNELEtBQUssQ0FDSCxRQUFRLEVBQ1IsS0FBSyxDQUFDO1FBQ0osT0FBTyxFQUFFLENBQUM7S0FDWCxDQUFDLENBQ0g7SUFDRCxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDM0MsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDaEQsVUFBVSxDQUFDLGdCQUFnQixFQUFFLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7Q0FDakQsQ0FDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgYW5pbWF0ZSxcbiAgQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhLFxuICBzdGF0ZSxcbiAgc3R5bGUsXG4gIHRyYW5zaXRpb24sXG4gIHRyaWdnZXIsXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgY29uc3Qgc2t5UG9wb3ZlckFuaW1hdGlvbjogQW5pbWF0aW9uVHJpZ2dlck1ldGFkYXRhID0gdHJpZ2dlcihcbiAgJ3NreVBvcG92ZXJBbmltYXRpb24nLFxuICBbXG4gICAgc3RhdGUoXG4gICAgICAndm9pZCcsXG4gICAgICBzdHlsZSh7XG4gICAgICAgIG9wYWNpdHk6IDAsXG4gICAgICB9KVxuICAgICksXG4gICAgc3RhdGUoXG4gICAgICAnb3BlbicsXG4gICAgICBzdHlsZSh7XG4gICAgICAgIG9wYWNpdHk6IDEsXG4gICAgICB9KVxuICAgICksXG4gICAgc3RhdGUoXG4gICAgICAnY2xvc2VkJyxcbiAgICAgIHN0eWxlKHtcbiAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgIH0pXG4gICAgKSxcbiAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbYW5pbWF0ZSgnMjUwbXMnKV0pLFxuICAgIHRyYW5zaXRpb24oJ29wZW4gPT4gY2xvc2VkJywgW2FuaW1hdGUoJzE1MG1zJyldKSxcbiAgICB0cmFuc2l0aW9uKCdjbG9zZWQgPT4gb3BlbicsIFthbmltYXRlKCcxNTBtcycpXSksXG4gIF1cbik7XG4iXX0=
@@ -1,266 +0,0 @@
1
- import { Component, ElementRef, Optional, ViewChild, ViewContainerRef, } from '@angular/core';
2
- import { SkyAffixAutoFitContext, } from '@skyux/core';
3
- import { fromEvent as observableFromEvent, Subject } from 'rxjs';
4
- import { takeUntil } from 'rxjs/operators';
5
- import { SkyPopoverAdapterService } from './popover-adapter.service';
6
- import { skyPopoverAnimation } from './popover-animation';
7
- import { parseAffixHorizontalAlignment, parseAffixPlacement, } from './popover-extensions';
8
- import * as i0 from "@angular/core";
9
- import * as i1 from "@skyux/core";
10
- import * as i2 from "./popover-adapter.service";
11
- import * as i3 from "./popover-context";
12
- import * as i4 from "@skyux/theme";
13
- import * as i5 from "@angular/common";
14
- /**
15
- * @internal
16
- */
17
- export class SkyPopoverContentComponent {
18
- constructor(changeDetector, elementRef, affixService, coreAdapterService, adapterService, context, themeSvc) {
19
- this.changeDetector = changeDetector;
20
- this.elementRef = elementRef;
21
- this.affixService = affixService;
22
- this.coreAdapterService = coreAdapterService;
23
- this.adapterService = adapterService;
24
- this.context = context;
25
- this.themeSvc = themeSvc;
26
- this.dismissOnBlur = true;
27
- this.enableAnimations = true;
28
- this.isOpen = false;
29
- this.popoverType = 'info';
30
- this.ngUnsubscribe = new Subject();
31
- this._closed = new Subject();
32
- this._isMouseEnter = new Subject();
33
- this._opened = new Subject();
34
- }
35
- get animationState() {
36
- return this.isOpen ? 'open' : 'closed';
37
- }
38
- get closed() {
39
- return this._closed.asObservable();
40
- }
41
- get opened() {
42
- return this._opened.asObservable();
43
- }
44
- get isMouseEnter() {
45
- return this._isMouseEnter.asObservable();
46
- }
47
- ngOnInit() {
48
- var _a;
49
- /*istanbul ignore next*/
50
- this.contentTarget.createEmbeddedView((_a = this.context) === null || _a === void 0 ? void 0 : _a.contentTemplateRef);
51
- this.addEventListeners();
52
- /*istanbul ignore else*/
53
- if (this.themeSvc) {
54
- this.themeSvc.settingsChange
55
- .pipe(takeUntil(this.ngUnsubscribe))
56
- .subscribe((themeSettings) => {
57
- var _a, _b;
58
- /*istanbul ignore next*/
59
- this.themeName = (_b = (_a = themeSettings.currentSettings) === null || _a === void 0 ? void 0 : _a.theme) === null || _b === void 0 ? void 0 : _b.name;
60
- });
61
- }
62
- }
63
- ngOnDestroy() {
64
- this.ngUnsubscribe.next();
65
- this.ngUnsubscribe.complete();
66
- this._closed.complete();
67
- this._isMouseEnter.complete();
68
- this._opened.complete();
69
- /* istanbul ignore else */
70
- if (this.affixer) {
71
- this.affixer.destroy();
72
- }
73
- this._closed =
74
- this._isMouseEnter =
75
- this._opened =
76
- this.affixer =
77
- this.ngUnsubscribe =
78
- undefined;
79
- }
80
- onAnimationEvent(event) {
81
- var _a, _b;
82
- if (event.fromState === 'void') {
83
- return;
84
- }
85
- if (event.phaseName === 'done') {
86
- if (event.toState === 'open') {
87
- /*istanbul ignore next*/
88
- (_a = this._opened) === null || _a === void 0 ? void 0 : _a.next();
89
- }
90
- else {
91
- /*istanbul ignore next*/
92
- (_b = this._closed) === null || _b === void 0 ? void 0 : _b.next();
93
- }
94
- }
95
- }
96
- open(caller, config) {
97
- this.caller = caller;
98
- this.dismissOnBlur = config.dismissOnBlur;
99
- this.enableAnimations = config.enableAnimations;
100
- this.horizontalAlignment = config.horizontalAlignment;
101
- this.placement = config.placement;
102
- this.popoverTitle = config.popoverTitle;
103
- if (config.popoverType) {
104
- this.popoverType = config.popoverType;
105
- }
106
- this.changeDetector.markForCheck();
107
- // Indicates if the popover should be displayed statically.
108
- // Please note: This feature is internal-only and used by the visual tests to capture multiple
109
- // states simultaneously without the overhead of event listeners.
110
- /* istanbul ignore if */
111
- if (config.isStatic) {
112
- this.isOpen = true;
113
- this.changeDetector.markForCheck();
114
- return;
115
- }
116
- // Let the styles render before gauging the affix dimensions.
117
- setTimeout(() => {
118
- var _a;
119
- /*istanbul ignore next*/
120
- if (!((_a = this.popoverRef) === null || _a === void 0 ? void 0 : _a.nativeElement) ||
121
- !this.ngUnsubscribe ||
122
- this.ngUnsubscribe.isStopped) {
123
- return;
124
- }
125
- if (!this.affixer) {
126
- this.setupAffixer();
127
- }
128
- const affixOptions = {
129
- autoFitContext: SkyAffixAutoFitContext.Viewport,
130
- enableAutoFit: true,
131
- horizontalAlignment: parseAffixHorizontalAlignment(this.horizontalAlignment),
132
- isSticky: true,
133
- placement: parseAffixPlacement(this.placement),
134
- };
135
- // Ensure that we are positioning the vertical alginment correctly. These
136
- // are the default alignments for all popovers but ensure that we are future proof here.
137
- if (affixOptions.placement === 'left' ||
138
- affixOptions.placement === 'right') {
139
- affixOptions.verticalAlignment = 'middle';
140
- }
141
- else if (affixOptions.placement === 'above') {
142
- affixOptions.verticalAlignment = 'bottom';
143
- }
144
- else {
145
- affixOptions.verticalAlignment = 'top';
146
- }
147
- this.affixer.affixTo(this.caller.nativeElement, affixOptions);
148
- this.updateArrowOffset();
149
- this.isOpen = true;
150
- this.changeDetector.markForCheck();
151
- });
152
- }
153
- close() {
154
- this.isOpen = false;
155
- this.changeDetector.markForCheck();
156
- }
157
- applyFocus() {
158
- if (this.isOpen) {
159
- this.coreAdapterService.getFocusableChildrenAndApplyFocus(this.popoverRef, '.sky-popover', true);
160
- }
161
- }
162
- setupAffixer() {
163
- const affixer = this.affixService.createAffixer(this.popoverRef);
164
- affixer.offsetChange.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {
165
- this.updateArrowOffset();
166
- this.changeDetector.markForCheck();
167
- });
168
- affixer.overflowScroll.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {
169
- this.updateArrowOffset();
170
- this.changeDetector.markForCheck();
171
- });
172
- affixer.placementChange
173
- .pipe(takeUntil(this.ngUnsubscribe))
174
- .subscribe((change) => {
175
- this.placement = change.placement;
176
- this.changeDetector.markForCheck();
177
- });
178
- this.affixer = affixer;
179
- }
180
- updateArrowOffset() {
181
- const { top, left } = this.adapterService.getArrowCoordinates({
182
- caller: this.caller,
183
- popover: this.popoverRef,
184
- popoverArrow: this.arrowRef,
185
- }, this.placement, this.themeName);
186
- this.arrowTop = top;
187
- this.arrowLeft = left;
188
- }
189
- addEventListeners() {
190
- const hostElement = this.elementRef.nativeElement;
191
- observableFromEvent(hostElement, 'mouseenter')
192
- .pipe(takeUntil(this.ngUnsubscribe))
193
- .subscribe(() => this._isMouseEnter.next(true));
194
- observableFromEvent(hostElement, 'mouseleave')
195
- .pipe(takeUntil(this.ngUnsubscribe))
196
- .subscribe(() => this._isMouseEnter.next(false));
197
- observableFromEvent(hostElement, 'keydown')
198
- .pipe(takeUntil(this.ngUnsubscribe))
199
- .subscribe((event) => {
200
- const key = event.key.toLowerCase();
201
- /* tslint:disable-next-line:switch-default */
202
- switch (key) {
203
- case 'escape':
204
- this.close();
205
- this.caller.nativeElement.focus();
206
- event.preventDefault();
207
- event.stopPropagation();
208
- break;
209
- // Since the popover now lives in an overlay at the bottom of the document body, we need
210
- // to handle the tab key ourselves. Otherwise, focus would be moved to the browser's
211
- // search bar.
212
- case 'tab':
213
- if (!this.dismissOnBlur) {
214
- return;
215
- }
216
- const focusableItems = this.coreAdapterService.getFocusableChildren(hostElement);
217
- const isFirstItem = focusableItems[0] === event.target && event.shiftKey;
218
- const isLastItem = focusableItems[focusableItems.length - 1] === event.target &&
219
- !event.shiftKey;
220
- /*istanbul ignore else*/
221
- if (focusableItems.length === 0 || isFirstItem || isLastItem) {
222
- this.close();
223
- this.caller.nativeElement.focus();
224
- event.preventDefault();
225
- event.stopPropagation();
226
- }
227
- break;
228
- }
229
- });
230
- }
231
- }
232
- SkyPopoverContentComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SkyPopoverContentComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1.SkyAffixService }, { token: i1.SkyCoreAdapterService }, { token: i2.SkyPopoverAdapterService }, { token: i3.SkyPopoverContext, optional: true }, { token: i4.SkyThemeService, optional: true }], target: i0.ɵɵFactoryTarget.Component });
233
- SkyPopoverContentComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: SkyPopoverContentComponent, selector: "sky-popover-content", providers: [SkyPopoverAdapterService], viewQueries: [{ propertyName: "arrowRef", first: true, predicate: ["arrowRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "popoverRef", first: true, predicate: ["popoverRef"], descendants: true, read: ElementRef, static: true }, { propertyName: "contentTarget", first: true, predicate: ["contentTarget"], descendants: true, read: ViewContainerRef, static: true }], ngImport: i0, template: "<div\n class=\"sky-popover-container sky-popover-max-height\"\n [@.disabled]=\"!enableAnimations\"\n [@skyPopoverAnimation]=\"animationState\"\n [class.sky-popover-hidden]=\"!placement\"\n [ngClass]=\"[\n 'sky-popover-alignment-' + horizontalAlignment,\n 'sky-popover-placement-' + placement,\n 'sky-popover-' + popoverType\n ]\"\n (@skyPopoverAnimation.done)=\"onAnimationEvent($event)\"\n (@skyPopoverAnimation.start)=\"onAnimationEvent($event)\"\n #popoverRef\n>\n <div\n class=\"sky-popover\"\n tabindex=\"-1\"\n [skyThemeClass]=\"{\n 'sky-rounded-corners sky-shadow': 'default',\n 'sky-elevation-4': 'modern'\n }\"\n >\n <header\n *ngIf=\"popoverTitle\"\n class=\"sky-popover-header\"\n [skyThemeClass]=\"{\n 'sky-padding-even-default': 'default',\n 'sky-padding-even-lg sky-margin-stacked-lg': 'modern'\n }\"\n >\n <h1\n *ngIf=\"popoverTitle\"\n class=\"sky-popover-title\"\n [skyThemeClass]=\"{\n 'sky-emphasized': 'default',\n 'sky-font-emphasized': 'modern'\n }\"\n >\n {{ popoverTitle }}\n </h1>\n </header>\n <div\n class=\"sky-popover-body\"\n [skyThemeClass]=\"{\n 'sky-padding-even-default': 'default',\n 'sky-padding-even-lg': 'modern'\n }\"\n >\n <ng-container #contentTarget></ng-container>\n </div>\n <span\n aria-hidden=\"true\"\n class=\"sky-popover-arrow\"\n [style.left.px]=\"arrowLeft\"\n [style.top.px]=\"arrowTop\"\n #arrowRef\n ></span>\n </div>\n</div>\n", styles: [".sky-popover-container{position:fixed;min-width:276px;max-width:276px}.sky-popover-container.sky-popover-hidden{visibility:hidden;opacity:0;pointer-events:none!important}.sky-popover-container.sky-popover-hidden *{pointer-events:none!important}.sky-popover-container.sky-popover-static .sky-popover-arrow{position:absolute}.sky-popover-container:focus{outline:none}@media (max-width: 276px){.sky-popover-container{max-width:100%;min-width:auto}}.sky-popover{background-color:#fff}.sky-popover-header{padding-bottom:0}.sky-popover-header+.sky-popover-body{padding-top:2px}.sky-popover-title{margin:0}.sky-popover-arrow{width:0;height:0;position:fixed;border:10px solid transparent}.sky-popover-placement-above{padding-bottom:10px}.sky-popover-placement-above .sky-popover{border-bottom:10px solid #00b4f1}.sky-popover-placement-above .sky-popover-arrow{border-bottom:0;border-top-color:#00b4f1;bottom:0;left:50%;margin-left:-10px}.sky-popover-placement-above.sky-popover-danger .sky-popover{border-bottom-color:#ef4044}.sky-popover-placement-above.sky-popover-danger .sky-popover-arrow{border-top-color:#ef4044}.sky-popover-placement-below{padding-top:10px}.sky-popover-placement-below .sky-popover{border-top:10px solid #00b4f1}.sky-popover-placement-below .sky-popover-arrow{border-top:0;border-bottom-color:#00b4f1;top:0;left:50%;margin-left:-10px}.sky-popover-placement-below.sky-popover-danger .sky-popover{border-top-color:#ef4044}.sky-popover-placement-below.sky-popover-danger .sky-popover-arrow{border-bottom-color:#ef4044}.sky-popover-placement-right{padding-left:10px}.sky-popover-placement-right .sky-popover{border-left:10px solid #00b4f1}.sky-popover-placement-right .sky-popover-arrow{border-left:0;border-right-color:#00b4f1;left:0;top:50%;margin-top:-10px}.sky-popover-placement-right.sky-popover-danger .sky-popover{border-left-color:#ef4044}.sky-popover-placement-right.sky-popover-danger .sky-popover-arrow{border-right-color:#ef4044}.sky-popover-placement-left{padding-right:10px}.sky-popover-placement-left .sky-popover{border-right:10px solid #00b4f1}.sky-popover-placement-left .sky-popover-arrow{border-right:0;border-left-color:#00b4f1;right:0;top:50%;margin-top:-10px}.sky-popover-placement-left.sky-popover-danger .sky-popover{border-right-color:#ef4044}.sky-popover-placement-left.sky-popover-danger .sky-popover-arrow{border-left-color:#ef4044}.sky-popover-placement-above.sky-popover-alignment-left .sky-popover-arrow,.sky-popover-placement-below.sky-popover-alignment-left .sky-popover-arrow{left:40px;right:auto}.sky-popover-placement-above.sky-popover-alignment-right .sky-popover-arrow,.sky-popover-placement-below.sky-popover-alignment-right .sky-popover-arrow{left:auto;right:40px}.sky-popover-max-height .sky-popover{overflow-y:auto;overflow-x:hidden;min-height:35px;max-height:calc(50vh - 50px)}:host-context(.sky-theme-modern) .sky-popover{border-radius:6px}:host-context(.sky-theme-modern) .sky-popover-arrow{transform:rotate(45deg);border-color:transparent}:host-context(.sky-theme-modern) .sky-popover-placement-above{padding-bottom:10px}:host-context(.sky-theme-modern) .sky-popover-placement-above .sky-popover{border-bottom:6px solid #00b4f1}:host-context(.sky-theme-modern) .sky-popover-placement-above .sky-popover-arrow{bottom:1px;border-radius:0 0 3px;border-bottom:solid 10px #00b4f1;border-right:solid 10px #00b4f1}:host-context(.sky-theme-modern) .sky-popover-placement-above.sky-popover-danger .sky-popover{border-bottom-color:#ef4044}:host-context(.sky-theme-modern) .sky-popover-placement-above.sky-popover-danger .sky-popover-arrow{border-bottom-color:#ef4044;border-right-color:#ef4044;border-top-color:transparent;border-left-color:transparent}:host-context(.sky-theme-modern) .sky-popover-placement-below{padding-top:10px}:host-context(.sky-theme-modern) .sky-popover-placement-below .sky-popover{border-top:6px solid #00b4f1}:host-context(.sky-theme-modern) .sky-popover-placement-below .sky-popover-arrow{top:1px;border-radius:3px 0 0;border-top:solid 10px #00b4f1;border-left:solid 10px #00b4f1}:host-context(.sky-theme-modern) .sky-popover-placement-below.sky-popover-danger .sky-popover{border-top-color:#ef4044}:host-context(.sky-theme-modern) .sky-popover-placement-below.sky-popover-danger .sky-popover-arrow{border-top-color:#ef4044;border-left-color:#ef4044;border-bottom-color:transparent;border-right-color:transparent}:host-context(.sky-theme-modern) .sky-popover-placement-right{padding-left:10px}:host-context(.sky-theme-modern) .sky-popover-placement-right .sky-popover{border-left:6px solid #00b4f1}:host-context(.sky-theme-modern) .sky-popover-placement-right .sky-popover-arrow{left:1px;border-radius:0 0 0 3px;border-bottom:solid 10px #00b4f1;border-left:solid 10px #00b4f1}:host-context(.sky-theme-modern) .sky-popover-placement-right.sky-popover-danger .sky-popover{border-left-color:#ef4044}:host-context(.sky-theme-modern) .sky-popover-placement-right.sky-popover-danger .sky-popover-arrow{border-bottom-color:#ef4044;border-left-color:#ef4044;border-top-color:transparent;border-right-color:transparent}:host-context(.sky-theme-modern) .sky-popover-placement-left{padding-right:10px}:host-context(.sky-theme-modern) .sky-popover-placement-left .sky-popover{border-right:6px solid #00b4f1}:host-context(.sky-theme-modern) .sky-popover-placement-left .sky-popover-arrow{right:1px;border-radius:0 3px 0 0;border-top:solid 10px #00b4f1;border-right:solid 10px #00b4f1}:host-context(.sky-theme-modern) .sky-popover-placement-left.sky-popover-danger .sky-popover{border-right-color:#ef4044}:host-context(.sky-theme-modern) .sky-popover-placement-left.sky-popover-danger .sky-popover-arrow{border-top-color:#ef4044;border-right-color:#ef4044;border-bottom-color:transparent;border-left-color:transparent}.sky-theme-modern .sky-popover{border-radius:6px}.sky-theme-modern .sky-popover-arrow{transform:rotate(45deg);border-color:transparent}.sky-theme-modern .sky-popover-placement-above{padding-bottom:10px}.sky-theme-modern .sky-popover-placement-above .sky-popover{border-bottom:6px solid #00b4f1}.sky-theme-modern .sky-popover-placement-above .sky-popover-arrow{bottom:1px;border-radius:0 0 3px;border-bottom:solid 10px #00b4f1;border-right:solid 10px #00b4f1}.sky-theme-modern .sky-popover-placement-above.sky-popover-danger .sky-popover{border-bottom-color:#ef4044}.sky-theme-modern .sky-popover-placement-above.sky-popover-danger .sky-popover-arrow{border-bottom-color:#ef4044;border-right-color:#ef4044;border-top-color:transparent;border-left-color:transparent}.sky-theme-modern .sky-popover-placement-below{padding-top:10px}.sky-theme-modern .sky-popover-placement-below .sky-popover{border-top:6px solid #00b4f1}.sky-theme-modern .sky-popover-placement-below .sky-popover-arrow{top:1px;border-radius:3px 0 0;border-top:solid 10px #00b4f1;border-left:solid 10px #00b4f1}.sky-theme-modern .sky-popover-placement-below.sky-popover-danger .sky-popover{border-top-color:#ef4044}.sky-theme-modern .sky-popover-placement-below.sky-popover-danger .sky-popover-arrow{border-top-color:#ef4044;border-left-color:#ef4044;border-bottom-color:transparent;border-right-color:transparent}.sky-theme-modern .sky-popover-placement-right{padding-left:10px}.sky-theme-modern .sky-popover-placement-right .sky-popover{border-left:6px solid #00b4f1}.sky-theme-modern .sky-popover-placement-right .sky-popover-arrow{left:1px;border-radius:0 0 0 3px;border-bottom:solid 10px #00b4f1;border-left:solid 10px #00b4f1}.sky-theme-modern .sky-popover-placement-right.sky-popover-danger .sky-popover{border-left-color:#ef4044}.sky-theme-modern .sky-popover-placement-right.sky-popover-danger .sky-popover-arrow{border-bottom-color:#ef4044;border-left-color:#ef4044;border-top-color:transparent;border-right-color:transparent}.sky-theme-modern .sky-popover-placement-left{padding-right:10px}.sky-theme-modern .sky-popover-placement-left .sky-popover{border-right:6px solid #00b4f1}.sky-theme-modern .sky-popover-placement-left .sky-popover-arrow{right:1px;border-radius:0 3px 0 0;border-top:solid 10px #00b4f1;border-right:solid 10px #00b4f1}.sky-theme-modern .sky-popover-placement-left.sky-popover-danger .sky-popover{border-right-color:#ef4044}.sky-theme-modern .sky-popover-placement-left.sky-popover-danger .sky-popover-arrow{border-top-color:#ef4044;border-right-color:#ef4044;border-bottom-color:transparent;border-left-color:transparent}\n"], directives: [{ type: i5.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i4.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }, { type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], animations: [skyPopoverAnimation] });
234
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SkyPopoverContentComponent, decorators: [{
235
- type: Component,
236
- args: [{
237
- selector: 'sky-popover-content',
238
- templateUrl: './popover-content.component.html',
239
- styleUrls: ['./popover-content.component.scss'],
240
- animations: [skyPopoverAnimation],
241
- providers: [SkyPopoverAdapterService],
242
- }]
243
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1.SkyAffixService }, { type: i1.SkyCoreAdapterService }, { type: i2.SkyPopoverAdapterService }, { type: i3.SkyPopoverContext, decorators: [{
244
- type: Optional
245
- }] }, { type: i4.SkyThemeService, decorators: [{
246
- type: Optional
247
- }] }]; }, propDecorators: { arrowRef: [{
248
- type: ViewChild,
249
- args: ['arrowRef', {
250
- read: ElementRef,
251
- static: true,
252
- }]
253
- }], popoverRef: [{
254
- type: ViewChild,
255
- args: ['popoverRef', {
256
- read: ElementRef,
257
- static: true,
258
- }]
259
- }], contentTarget: [{
260
- type: ViewChild,
261
- args: ['contentTarget', {
262
- read: ViewContainerRef,
263
- static: true,
264
- }]
265
- }] } });
266
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZW50LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BvcG92ZXJzL3NyYy9tb2R1bGVzL3BvcG92ZXIvcG9wb3Zlci1jb250ZW50LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3BvcG92ZXJzL3NyYy9tb2R1bGVzL3BvcG92ZXIvcG9wb3Zlci1jb250ZW50LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUdWLFFBQVEsRUFDUixTQUFTLEVBQ1QsZ0JBQWdCLEdBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxzQkFBc0IsR0FLdkIsTUFBTSxhQUFhLENBQUM7QUFJckIsT0FBTyxFQUFFLFNBQVMsSUFBSSxtQkFBbUIsRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFN0UsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBTTNDLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBRXJFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBTTFELE9BQU8sRUFDTCw2QkFBNkIsRUFDN0IsbUJBQW1CLEdBQ3BCLE1BQU0sc0JBQXNCLENBQUM7Ozs7Ozs7QUFFOUI7O0dBRUc7QUFRSCxNQUFNLE9BQU8sMEJBQTBCO0lBbUVyQyxZQUNVLGNBQWlDLEVBQ2pDLFVBQXNCLEVBQ3RCLFlBQTZCLEVBQzdCLGtCQUF5QyxFQUN6QyxjQUF3QyxFQUM1QixPQUEyQixFQUMzQixRQUEwQjtRQU50QyxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixpQkFBWSxHQUFaLFlBQVksQ0FBaUI7UUFDN0IsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtR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QjtrQkFQdEMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUJBQXFCO29CQUMvQixXQUFXLEVBQUUsa0NBQWtDO29CQUMvQyxTQUFTLEVBQUUsQ0FBQyxrQ0FBa0MsQ0FBQztvQkFDL0MsVUFBVSxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ2pDLFNBQVMsRUFBRSxDQUFDLHdCQUF3QixDQUFDO2lCQUN0Qzs7MEJBMEVJLFFBQVE7OzBCQUNSLFFBQVE7NENBL0JILFFBQVE7c0JBSmYsU0FBUzt1QkFBQyxVQUFVLEVBQUU7d0JBQ3JCLElBQUksRUFBRSxVQUFVO3dCQUNoQixNQUFNLEVBQUUsSUFBSTtxQkFDYjtnQkFPTyxVQUFVO3NCQUpqQixTQUFTO3VCQUFDLFlBQVksRUFBRTt3QkFDdkIsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLE1BQU0sRUFBRSxJQUFJO3FCQUNiO2dCQU9PLGFBQWE7c0JBSnBCLFNBQVM7dUJBQUMsZUFBZSxFQUFFO3dCQUMxQixJQUFJLEVBQUUsZ0JBQWdCO3dCQUN0QixNQUFNLEVBQUUsSUFBSTtxQkFDYiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFuaW1hdGlvbkV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvYW5pbWF0aW9ucyc7XG5cbmltcG9ydCB7XG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBPcHRpb25hbCxcbiAgVmlld0NoaWxkLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHtcbiAgU2t5QWZmaXhBdXRvRml0Q29udGV4dCxcbiAgU2t5QWZmaXhDb25maWcsXG4gIFNreUFmZml4ZXIsXG4gIFNreUFmZml4U2VydmljZSxcbiAgU2t5Q29yZUFkYXB0ZXJTZXJ2aWNlLFxufSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IFNreVRoZW1lU2VydmljZSB9IGZyb20gJ0Bza3l1eC90aGVtZSc7XG5cbmltcG9ydCB7IGZyb21FdmVudCBhcyBvYnNlcnZhYmxlRnJvbUV2ZW50LCBPYnNlcnZhYmxlLCBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgU2t5UG9wb3ZlckFsaWdubWVudCB9IGZyb20gJy4vdHlwZXMvcG9wb3Zlci1hbGlnbm1lbnQnO1xuXG5pbXBvcnQgeyBTa3lQb3BvdmVyUGxhY2VtZW50IH0gZnJvbSAnLi90eXBlcy9wb3BvdmVyLXBsYWNlbWVudCc7XG5cbmltcG9ydCB7IFNreVBvcG92ZXJBZGFwdGVyU2VydmljZSB9IGZyb20gJy4vcG9wb3Zlci1hZGFwdGVyLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBza3lQb3BvdmVyQW5pbWF0aW9uIH0gZnJvbSAnLi9wb3BvdmVyLWFuaW1hdGlvbic7XG5cbmltcG9ydCB7IFNreVBvcG92ZXJBbmltYXRpb25TdGF0ZSB9IGZyb20gJy4vcG9wb3Zlci1hbmltYXRpb24tc3RhdGUnO1xuXG5pbXBvcnQgeyBTa3lQb3BvdmVyQ29udGV4dCB9IGZyb20gJy4vcG9wb3Zlci1jb250ZXh0JztcblxuaW1wb3J0IHtcbiAgcGFyc2VBZmZpeEhvcml6b250YWxBbGlnbm1lbnQsXG4gIHBhcnNlQWZmaXhQbGFjZW1lbnQsXG59IGZyb20gJy4vcG9wb3Zlci1leHRlbnNpb25zJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2t5LXBvcG92ZXItY29udGVudCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wb3BvdmVyLWNvbnRlbnQuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9wb3BvdmVyLWNvbnRlbnQuY29tcG9uZW50LnNjc3MnXSxcbiAgYW5pbWF0aW9uczogW3NreVBvcG92ZXJBbmltYXRpb25dLFxuICBwcm92aWRlcnM6IFtTa3lQb3BvdmVyQWRhcHRlclNlcnZpY2VdLFxufSlcbmV4cG9ydCBjbGFzcyBTa3lQb3BvdmVyQ29udGVudENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgcHVibGljIGdldCBhbmltYXRpb25TdGF0ZSgpOiBTa3lQb3BvdmVyQW5pbWF0aW9uU3RhdGUge1xuICAgIHJldHVybiB0aGlzLmlzT3BlbiA/ICdvcGVuJyA6ICdjbG9zZWQnO1xuICB9XG5cbiAgcHVibGljIGdldCBjbG9zZWQoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuX2Nsb3NlZC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgb3BlbmVkKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9vcGVuZWQuYXNPYnNlcnZhYmxlKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzTW91c2VFbnRlcigpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5faXNNb3VzZUVudGVyLmFzT2JzZXJ2YWJsZSgpO1xuICB9XG5cbiAgcHVibGljIGFmZml4ZXI6IFNreUFmZml4ZXI7XG5cbiAgcHVibGljIGFycm93TGVmdDogbnVtYmVyO1xuXG4gIHB1YmxpYyBhcnJvd1RvcDogbnVtYmVyO1xuXG4gIHB1YmxpYyBkaXNtaXNzT25CbHVyOiBib29sZWFuID0gdHJ1ZTtcblxuICBwdWJsaWMgZW5hYmxlQW5pbWF0aW9uczogYm9vbGVhbiA9IHRydWU7XG5cbiAgcHVibGljIGhvcml6b250YWxBbGlnbm1lbnQ6IFNreVBvcG92ZXJBbGlnbm1lbnQ7XG5cbiAgcHVibGljIGlzT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHB1YmxpYyBwbGFjZW1lbnQ6IFNreVBvcG92ZXJQbGFjZW1lbnQ7XG5cbiAgcHVibGljIHBvcG92ZXJUaXRsZTogc3RyaW5nO1xuXG4gIHB1YmxpYyBwb3BvdmVyVHlwZTogJ2RhbmdlcicgfCAnaW5mbycgPSAnaW5mbyc7XG5cbiAgcHVibGljIHRoZW1lTmFtZTogc3RyaW5nO1xuXG4gIEBWaWV3Q2hpbGQoJ2Fycm93UmVmJywge1xuICAgIHJlYWQ6IEVsZW1lbnRSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIGFycm93UmVmOiBFbGVtZW50UmVmO1xuXG4gIEBWaWV3Q2hpbGQoJ3BvcG92ZXJSZWYnLCB7XG4gICAgcmVhZDogRWxlbWVudFJlZixcbiAgICBzdGF0aWM6IHRydWUsXG4gIH0pXG4gIHByaXZhdGUgcG9wb3ZlclJlZjogRWxlbWVudFJlZjtcblxuICBAVmlld0NoaWxkKCdjb250ZW50VGFyZ2V0Jywge1xuICAgIHJlYWQ6IFZpZXdDb250YWluZXJSZWYsXG4gICAgc3RhdGljOiB0cnVlLFxuICB9KVxuICBwcml2YXRlIGNvbnRlbnRUYXJnZXQ6IFZpZXdDb250YWluZXJSZWY7XG5cbiAgcHJpdmF0ZSBjYWxsZXI6IEVsZW1lbnRSZWY7XG5cbiAgcHJpdmF0ZSBuZ1Vuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIF9jbG9zZWQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2lzTW91c2VFbnRlciA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XG5cbiAgcHJpdmF0ZSBfb3BlbmVkID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBhZmZpeFNlcnZpY2U6IFNreUFmZml4U2VydmljZSxcbiAgICBwcml2YXRlIGNvcmVBZGFwdGVyU2VydmljZTogU2t5Q29yZUFkYXB0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgYWRhcHRlclNlcnZpY2U6IFNreVBvcG92ZXJBZGFwdGVyU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGNvbnRleHQ/OiBTa3lQb3BvdmVyQ29udGV4dCxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHRoZW1lU3ZjPzogU2t5VGhlbWVTZXJ2aWNlXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgbmV4dCovXG4gICAgdGhpcy5jb250ZW50VGFyZ2V0LmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLmNvbnRleHQ/LmNvbnRlbnRUZW1wbGF0ZVJlZik7XG4gICAgdGhpcy5hZGRFdmVudExpc3RlbmVycygpO1xuXG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSovXG4gICAgaWYgKHRoaXMudGhlbWVTdmMpIHtcbiAgICAgIHRoaXMudGhlbWVTdmMuc2V0dGluZ3NDaGFuZ2VcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAgIC5zdWJzY3JpYmUoKHRoZW1lU2V0dGluZ3MpID0+IHtcbiAgICAgICAgICAvKmlzdGFuYnVsIGlnbm9yZSBuZXh0Ki9cbiAgICAgICAgICB0aGlzLnRoZW1lTmFtZSA9IHRoZW1lU2V0dGluZ3MuY3VycmVudFNldHRpbmdzPy50aGVtZT8ubmFtZTtcbiAgICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5uZXh0KCk7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmNvbXBsZXRlKCk7XG5cbiAgICB0aGlzLl9jbG9zZWQuY29tcGxldGUoKTtcbiAgICB0aGlzLl9pc01vdXNlRW50ZXIuY29tcGxldGUoKTtcbiAgICB0aGlzLl9vcGVuZWQuY29tcGxldGUoKTtcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRoaXMuYWZmaXhlcikge1xuICAgICAgdGhpcy5hZmZpeGVyLmRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICB0aGlzLl9jbG9zZWQgPVxuICAgICAgdGhpcy5faXNNb3VzZUVudGVyID1cbiAgICAgIHRoaXMuX29wZW5lZCA9XG4gICAgICB0aGlzLmFmZml4ZXIgPVxuICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlID1cbiAgICAgICAgdW5kZWZpbmVkO1xuICB9XG5cbiAgcHVibGljIG9uQW5pbWF0aW9uRXZlbnQoZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KTogdm9pZCB7XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3ZvaWQnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LnBoYXNlTmFtZSA9PT0gJ2RvbmUnKSB7XG4gICAgICBpZiAoZXZlbnQudG9TdGF0ZSA9PT0gJ29wZW4nKSB7XG4gICAgICAgIC8qaXN0YW5idWwgaWdub3JlIG5leHQqL1xuICAgICAgICB0aGlzLl9vcGVuZWQ/Lm5leHQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qaXN0YW5idWwgaWdub3JlIG5leHQqL1xuICAgICAgICB0aGlzLl9jbG9zZWQ/Lm5leHQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgb3BlbihcbiAgICBjYWxsZXI6IEVsZW1lbnRSZWYsXG4gICAgY29uZmlnOiB7XG4gICAgICBkaXNtaXNzT25CbHVyOiBib29sZWFuO1xuICAgICAgZW5hYmxlQW5pbWF0aW9uczogYm9vbGVhbjtcbiAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6IFNreVBvcG92ZXJBbGlnbm1lbnQ7XG4gICAgICBpc1N0YXRpYzogYm9vbGVhbjtcbiAgICAgIHBsYWNlbWVudDogU2t5UG9wb3ZlclBsYWNlbWVudDtcbiAgICAgIHBvcG92ZXJUaXRsZTogc3RyaW5nO1xuICAgICAgcG9wb3ZlclR5cGU/OiAnZGFuZ2VyJyB8ICdpbmZvJztcbiAgICB9XG4gICk6IHZvaWQge1xuICAgIHRoaXMuY2FsbGVyID0gY2FsbGVyO1xuICAgIHRoaXMuZGlzbWlzc09uQmx1ciA9IGNvbmZpZy5kaXNtaXNzT25CbHVyO1xuICAgIHRoaXMuZW5hYmxlQW5pbWF0aW9ucyA9IGNvbmZpZy5lbmFibGVBbmltYXRpb25zO1xuICAgIHRoaXMuaG9yaXpvbnRhbEFsaWdubWVudCA9IGNvbmZpZy5ob3Jpem9udGFsQWxpZ25tZW50O1xuICAgIHRoaXMucGxhY2VtZW50ID0gY29uZmlnLnBsYWNlbWVudDtcbiAgICB0aGlzLnBvcG92ZXJUaXRsZSA9IGNvbmZpZy5wb3BvdmVyVGl0bGU7XG4gICAgaWYgKGNvbmZpZy5wb3BvdmVyVHlwZSkge1xuICAgICAgdGhpcy5wb3BvdmVyVHlwZSA9IGNvbmZpZy5wb3BvdmVyVHlwZTtcbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuXG4gICAgLy8gSW5kaWNhdGVzIGlmIHRoZSBwb3BvdmVyIHNob3VsZCBiZSBkaXNwbGF5ZWQgc3RhdGljYWxseS5cbiAgICAvLyBQbGVhc2Ugbm90ZTogVGhpcyBmZWF0dXJlIGlzIGludGVybmFsLW9ubHkgYW5kIHVzZWQgYnkgdGhlIHZpc3VhbCB0ZXN0cyB0byBjYXB0dXJlIG11bHRpcGxlXG4gICAgLy8gc3RhdGVzIHNpbXVsdGFuZW91c2x5IHdpdGhvdXQgdGhlIG92ZXJoZWFkIG9mIGV2ZW50IGxpc3RlbmVycy5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoY29uZmlnLmlzU3RhdGljKSB7XG4gICAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIExldCB0aGUgc3R5bGVzIHJlbmRlciBiZWZvcmUgZ2F1Z2luZyB0aGUgYWZmaXggZGltZW5zaW9ucy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIC8qaXN0YW5idWwgaWdub3JlIG5leHQqL1xuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5wb3BvdmVyUmVmPy5uYXRpdmVFbGVtZW50IHx8XG4gICAgICAgICF0aGlzLm5nVW5zdWJzY3JpYmUgfHxcbiAgICAgICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLmlzU3RvcHBlZFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzLmFmZml4ZXIpIHtcbiAgICAgICAgdGhpcy5zZXR1cEFmZml4ZXIoKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYWZmaXhPcHRpb25zOiBTa3lBZmZpeENvbmZpZyA9IHtcbiAgICAgICAgYXV0b0ZpdENvbnRleHQ6IFNreUFmZml4QXV0b0ZpdENvbnRleHQuVmlld3BvcnQsXG4gICAgICAgIGVuYWJsZUF1dG9GaXQ6IHRydWUsXG4gICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ6IHBhcnNlQWZmaXhIb3Jpem9udGFsQWxpZ25tZW50KFxuICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbEFsaWdubWVudFxuICAgICAgICApLFxuICAgICAgICBpc1N0aWNreTogdHJ1ZSxcbiAgICAgICAgcGxhY2VtZW50OiBwYXJzZUFmZml4UGxhY2VtZW50KHRoaXMucGxhY2VtZW50KSxcbiAgICAgIH07XG5cbiAgICAgIC8vIEVuc3VyZSB0aGF0IHdlIGFyZSBwb3NpdGlvbmluZyB0aGUgdmVydGljYWwgYWxnaW5tZW50IGNvcnJlY3RseS4gVGhlc2VcbiAgICAgIC8vIGFyZSB0aGUgZGVmYXVsdCBhbGlnbm1lbnRzIGZvciBhbGwgcG9wb3ZlcnMgYnV0IGVuc3VyZSB0aGF0IHdlIGFyZSBmdXR1cmUgcHJvb2YgaGVyZS5cbiAgICAgIGlmIChcbiAgICAgICAgYWZmaXhPcHRpb25zLnBsYWNlbWVudCA9PT0gJ2xlZnQnIHx8XG4gICAgICAgIGFmZml4T3B0aW9ucy5wbGFjZW1lbnQgPT09ICdyaWdodCdcbiAgICAgICkge1xuICAgICAgICBhZmZpeE9wdGlvbnMudmVydGljYWxBbGlnbm1lbnQgPSAnbWlkZGxlJztcbiAgICAgIH0gZWxzZSBpZiAoYWZmaXhPcHRpb25zLnBsYWNlbWVudCA9PT0gJ2Fib3ZlJykge1xuICAgICAgICBhZmZpeE9wdGlvbnMudmVydGljYWxBbGlnbm1lbnQgPSAnYm90dG9tJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFmZml4T3B0aW9ucy52ZXJ0aWNhbEFsaWdubWVudCA9ICd0b3AnO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFmZml4ZXIuYWZmaXhUbyh0aGlzLmNhbGxlci5uYXRpdmVFbGVtZW50LCBhZmZpeE9wdGlvbnMpO1xuXG4gICAgICB0aGlzLnVwZGF0ZUFycm93T2Zmc2V0KCk7XG5cbiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgdGhpcy5pc09wZW4gPSBmYWxzZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGFwcGx5Rm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNPcGVuKSB7XG4gICAgICB0aGlzLmNvcmVBZGFwdGVyU2VydmljZS5nZXRGb2N1c2FibGVDaGlsZHJlbkFuZEFwcGx5Rm9jdXMoXG4gICAgICAgIHRoaXMucG9wb3ZlclJlZixcbiAgICAgICAgJy5za3ktcG9wb3ZlcicsXG4gICAgICAgIHRydWVcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzZXR1cEFmZml4ZXIoKTogdm9pZCB7XG4gICAgY29uc3QgYWZmaXhlciA9IHRoaXMuYWZmaXhTZXJ2aWNlLmNyZWF0ZUFmZml4ZXIodGhpcy5wb3BvdmVyUmVmKTtcblxuICAgIGFmZml4ZXIub2Zmc2V0Q2hhbmdlLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZUFycm93T2Zmc2V0KCk7XG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgIH0pO1xuXG4gICAgYWZmaXhlci5vdmVyZmxvd1Njcm9sbC5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy51cGRhdGVBcnJvd09mZnNldCgpO1xuICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIGFmZml4ZXIucGxhY2VtZW50Q2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGNoYW5nZSkgPT4ge1xuICAgICAgICB0aGlzLnBsYWNlbWVudCA9IGNoYW5nZS5wbGFjZW1lbnQ7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuYWZmaXhlciA9IGFmZml4ZXI7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZUFycm93T2Zmc2V0KCk6IHZvaWQge1xuICAgIGNvbnN0IHsgdG9wLCBsZWZ0IH0gPSB0aGlzLmFkYXB0ZXJTZXJ2aWNlLmdldEFycm93Q29vcmRpbmF0ZXMoXG4gICAgICB7XG4gICAgICAgIGNhbGxlcjogdGhpcy5jYWxsZXIsXG4gICAgICAgIHBvcG92ZXI6IHRoaXMucG9wb3ZlclJlZixcbiAgICAgICAgcG9wb3ZlckFycm93OiB0aGlzLmFycm93UmVmLFxuICAgICAgfSxcbiAgICAgIHRoaXMucGxhY2VtZW50LFxuICAgICAgdGhpcy50aGVtZU5hbWVcbiAgICApO1xuXG4gICAgdGhpcy5hcnJvd1RvcCA9IHRvcDtcbiAgICB0aGlzLmFycm93TGVmdCA9IGxlZnQ7XG4gIH1cblxuICBwcml2YXRlIGFkZEV2ZW50TGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGNvbnN0IGhvc3RFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KGhvc3RFbGVtZW50LCAnbW91c2VlbnRlcicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5faXNNb3VzZUVudGVyLm5leHQodHJ1ZSkpO1xuXG4gICAgb2JzZXJ2YWJsZUZyb21FdmVudChob3N0RWxlbWVudCwgJ21vdXNlbGVhdmUnKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuX2lzTW91c2VFbnRlci5uZXh0KGZhbHNlKSk7XG5cbiAgICBvYnNlcnZhYmxlRnJvbUV2ZW50KGhvc3RFbGVtZW50LCAna2V5ZG93bicpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTpzd2l0Y2gtZGVmYXVsdCAqL1xuICAgICAgICBzd2l0Y2ggKGtleSkge1xuICAgICAgICAgIGNhc2UgJ2VzY2FwZSc6XG4gICAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgICAgICB0aGlzLmNhbGxlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgIC8vIFNpbmNlIHRoZSBwb3BvdmVyIG5vdyBsaXZlcyBpbiBhbiBvdmVybGF5IGF0IHRoZSBib3R0b20gb2YgdGhlIGRvY3VtZW50IGJvZHksIHdlIG5lZWRcbiAgICAgICAgICAvLyB0byBoYW5kbGUgdGhlIHRhYiBrZXkgb3Vyc2VsdmVzLiBPdGhlcndpc2UsIGZvY3VzIHdvdWxkIGJlIG1vdmVkIHRvIHRoZSBicm93c2VyJ3NcbiAgICAgICAgICAvLyBzZWFyY2ggYmFyLlxuICAgICAgICAgIGNhc2UgJ3RhYic6XG4gICAgICAgICAgICBpZiAoIXRoaXMuZGlzbWlzc09uQmx1cikge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZvY3VzYWJsZUl0ZW1zID1cbiAgICAgICAgICAgICAgdGhpcy5jb3JlQWRhcHRlclNlcnZpY2UuZ2V0Rm9jdXNhYmxlQ2hpbGRyZW4oaG9zdEVsZW1lbnQpO1xuXG4gICAgICAgICAgICBjb25zdCBpc0ZpcnN0SXRlbSA9XG4gICAgICAgICAgICAgIGZvY3VzYWJsZUl0ZW1zWzBdID09PSBldmVudC50YXJnZXQgJiYgZXZlbnQuc2hpZnRLZXk7XG5cbiAgICAgICAgICAgIGNvbnN0IGlzTGFzdEl0ZW0gPVxuICAgICAgICAgICAgICBmb2N1c2FibGVJdGVtc1tmb2N1c2FibGVJdGVtcy5sZW5ndGggLSAxXSA9PT0gZXZlbnQudGFyZ2V0ICYmXG4gICAgICAgICAgICAgICFldmVudC5zaGlmdEtleTtcblxuICAgICAgICAgICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSovXG4gICAgICAgICAgICBpZiAoZm9jdXNhYmxlSXRlbXMubGVuZ3RoID09PSAwIHx8IGlzRmlyc3RJdGVtIHx8IGlzTGFzdEl0ZW0pIHtcbiAgICAgICAgICAgICAgdGhpcy5jbG9zZSgpO1xuICAgICAgICAgICAgICB0aGlzLmNhbGxlci5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICB9XG59XG4iLCI8ZGl2XG4gIGNsYXNzPVwic2t5LXBvcG92ZXItY29udGFpbmVyIHNreS1wb3BvdmVyLW1heC1oZWlnaHRcIlxuICBbQC5kaXNhYmxlZF09XCIhZW5hYmxlQW5pbWF0aW9uc1wiXG4gIFtAc2t5UG9wb3ZlckFuaW1hdGlvbl09XCJhbmltYXRpb25TdGF0ZVwiXG4gIFtjbGFzcy5za3ktcG9wb3Zlci1oaWRkZW5dPVwiIXBsYWNlbWVudFwiXG4gIFtuZ0NsYXNzXT1cIltcbiAgICAnc2t5LXBvcG92ZXItYWxpZ25tZW50LScgKyBob3Jpem9udGFsQWxpZ25tZW50LFxuICAgICdza3ktcG9wb3Zlci1wbGFjZW1lbnQtJyArIHBsYWNlbWVudCxcbiAgICAnc2t5LXBvcG92ZXItJyArIHBvcG92ZXJUeXBlXG4gIF1cIlxuICAoQHNreVBvcG92ZXJBbmltYXRpb24uZG9uZSk9XCJvbkFuaW1hdGlvbkV2ZW50KCRldmVudClcIlxuICAoQHNreVBvcG92ZXJBbmltYXRpb24uc3RhcnQpPVwib25BbmltYXRpb25FdmVudCgkZXZlbnQpXCJcbiAgI3BvcG92ZXJSZWZcbj5cbiAgPGRpdlxuICAgIGNsYXNzPVwic2t5LXBvcG92ZXJcIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICdza3ktcm91bmRlZC1jb3JuZXJzIHNreS1zaGFkb3cnOiAnZGVmYXVsdCcsXG4gICAgICAnc2t5LWVsZXZhdGlvbi00JzogJ21vZGVybidcbiAgICB9XCJcbiAgPlxuICAgIDxoZWFkZXJcbiAgICAgICpuZ0lmPVwicG9wb3ZlclRpdGxlXCJcbiAgICAgIGNsYXNzPVwic2t5LXBvcG92ZXItaGVhZGVyXCJcbiAgICAgIFtza3lUaGVtZUNsYXNzXT1cIntcbiAgICAgICAgJ3NreS1wYWRkaW5nLWV2ZW4tZGVmYXVsdCc6ICdkZWZhdWx0JyxcbiAgICAgICAgJ3NreS1wYWRkaW5nLWV2ZW4tbGcgc2t5LW1hcmdpbi1zdGFja2VkLWxnJzogJ21vZGVybidcbiAgICAgIH1cIlxuICAgID5cbiAgICAgIDxoMVxuICAgICAgICAqbmdJZj1cInBvcG92ZXJUaXRsZVwiXG4gICAgICAgIGNsYXNzPVwic2t5LXBvcG92ZXItdGl0bGVcIlxuICAgICAgICBbc2t5VGhlbWVDbGFzc109XCJ7XG4gICAgICAgICAgJ3NreS1lbXBoYXNpemVkJzogJ2RlZmF1bHQnLFxuICAgICAgICAgICdza3ktZm9udC1lbXBoYXNpemVkJzogJ21vZGVybidcbiAgICAgICAgfVwiXG4gICAgICA+XG4gICAgICAgIHt7IHBvcG92ZXJUaXRsZSB9fVxuICAgICAgPC9oMT5cbiAgICA8L2hlYWRlcj5cbiAgICA8ZGl2XG4gICAgICBjbGFzcz1cInNreS1wb3BvdmVyLWJvZHlcIlxuICAgICAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICAgICAnc2t5LXBhZGRpbmctZXZlbi1kZWZhdWx0JzogJ2RlZmF1bHQnLFxuICAgICAgICAnc2t5LXBhZGRpbmctZXZlbi1sZyc6ICdtb2Rlcm4nXG4gICAgICB9XCJcbiAgICA+XG4gICAgICA8bmctY29udGFpbmVyICNjb250ZW50VGFyZ2V0PjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxzcGFuXG4gICAgICBhcmlhLWhpZGRlbj1cInRydWVcIlxuICAgICAgY2xhc3M9XCJza3ktcG9wb3Zlci1hcnJvd1wiXG4gICAgICBbc3R5bGUubGVmdC5weF09XCJhcnJvd0xlZnRcIlxuICAgICAgW3N0eWxlLnRvcC5weF09XCJhcnJvd1RvcFwiXG4gICAgICAjYXJyb3dSZWZcbiAgICA+PC9zcGFuPlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -1,10 +0,0 @@
1
- /**
2
- * @dynamic
3
- * @internal
4
- */
5
- export class SkyPopoverContext {
6
- constructor(args) {
7
- this.contentTemplateRef = args.contentTemplateRef;
8
- }
9
- }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1jb250ZXh0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcG9wb3ZlcnMvc3JjL21vZHVsZXMvcG9wb3Zlci9wb3BvdmVyLWNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7OztHQUdHO0FBQ0gsTUFBTSxPQUFPLGlCQUFpQjtJQUc1QixZQUFZLElBQThDO1FBQ3hELElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBAZHluYW1pY1xuICogQGludGVybmFsXG4gKi9cbmV4cG9ydCBjbGFzcyBTa3lQb3BvdmVyQ29udGV4dCB7XG4gIHB1YmxpYyByZWFkb25seSBjb250ZW50VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgY29uc3RydWN0b3IoYXJnczogeyBjb250ZW50VGVtcGxhdGVSZWY6IFRlbXBsYXRlUmVmPGFueT4gfSkge1xuICAgIHRoaXMuY29udGVudFRlbXBsYXRlUmVmID0gYXJncy5jb250ZW50VGVtcGxhdGVSZWY7XG4gIH1cbn1cbiJdfQ==
@@ -1,29 +0,0 @@
1
- export function parseAffixPlacement(placement) {
2
- switch (placement) {
3
- case 'above':
4
- return 'above';
5
- case 'below':
6
- return 'below';
7
- case 'right':
8
- return 'right';
9
- case 'left':
10
- return 'left';
11
- /* istanbul ignore next */
12
- default:
13
- throw `SkyAffixPlacement does not have a matching value for '${placement}'!`;
14
- }
15
- }
16
- export function parseAffixHorizontalAlignment(alignment) {
17
- switch (alignment) {
18
- case 'center':
19
- return 'center';
20
- case 'left':
21
- return 'left';
22
- case 'right':
23
- return 'right';
24
- /* istanbul ignore next */
25
- default:
26
- throw `SkyAffixHorizontalAlignment does not have a matching value for '${alignment}'!`;
27
- }
28
- }
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci1leHRlbnNpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcG9wb3ZlcnMvc3JjL21vZHVsZXMvcG9wb3Zlci9wb3BvdmVyLWV4dGVuc2lvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxTQUE4QjtJQUU5QixRQUFRLFNBQVMsRUFBRTtRQUNqQixLQUFLLE9BQU87WUFDVixPQUFPLE9BQU8sQ0FBQztRQUNqQixLQUFLLE9BQU87WUFDVixPQUFPLE9BQU8sQ0FBQztRQUNqQixLQUFLLE9BQU87WUFDVixPQUFPLE9BQU8sQ0FBQztRQUNqQixLQUFLLE1BQU07WUFDVCxPQUFPLE1BQU0sQ0FBQztRQUNoQiwwQkFBMEI7UUFDMUI7WUFDRSxNQUFNLHlEQUF5RCxTQUFTLElBQUksQ0FBQztLQUNoRjtBQUNILENBQUM7QUFFRCxNQUFNLFVBQVUsNkJBQTZCLENBQzNDLFNBQThCO0lBRTlCLFFBQVEsU0FBUyxFQUFFO1FBQ2pCLEtBQUssUUFBUTtZQUNYLE9BQU8sUUFBUSxDQUFDO1FBQ2xCLEtBQUssTUFBTTtZQUNULE9BQU8sTUFBTSxDQUFDO1FBQ2hCLEtBQUssT0FBTztZQUNWLE9BQU8sT0FBTyxDQUFDO1FBQ2pCLDBCQUEwQjtRQUMxQjtZQUNFLE1BQU0sbUVBQW1FLFNBQVMsSUFBSSxDQUFDO0tBQzFGO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNreUFmZml4SG9yaXpvbnRhbEFsaWdubWVudCwgU2t5QWZmaXhQbGFjZW1lbnQgfSBmcm9tICdAc2t5dXgvY29yZSc7XG5cbmltcG9ydCB7IFNreVBvcG92ZXJBbGlnbm1lbnQgfSBmcm9tICcuL3R5cGVzL3BvcG92ZXItYWxpZ25tZW50JztcblxuaW1wb3J0IHsgU2t5UG9wb3ZlclBsYWNlbWVudCB9IGZyb20gJy4vdHlwZXMvcG9wb3Zlci1wbGFjZW1lbnQnO1xuXG5leHBvcnQgZnVuY3Rpb24gcGFyc2VBZmZpeFBsYWNlbWVudChcbiAgcGxhY2VtZW50OiBTa3lQb3BvdmVyUGxhY2VtZW50XG4pOiBTa3lBZmZpeFBsYWNlbWVudCB7XG4gIHN3aXRjaCAocGxhY2VtZW50KSB7XG4gICAgY2FzZSAnYWJvdmUnOlxuICAgICAgcmV0dXJuICdhYm92ZSc7XG4gICAgY2FzZSAnYmVsb3cnOlxuICAgICAgcmV0dXJuICdiZWxvdyc7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgY2FzZSAnbGVmdCc6XG4gICAgICByZXR1cm4gJ2xlZnQnO1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IGBTa3lBZmZpeFBsYWNlbWVudCBkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgdmFsdWUgZm9yICcke3BsYWNlbWVudH0nIWA7XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlQWZmaXhIb3Jpem9udGFsQWxpZ25tZW50KFxuICBhbGlnbm1lbnQ6IFNreVBvcG92ZXJBbGlnbm1lbnRcbik6IFNreUFmZml4SG9yaXpvbnRhbEFsaWdubWVudCB7XG4gIHN3aXRjaCAoYWxpZ25tZW50KSB7XG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIHJldHVybiAnY2VudGVyJztcbiAgICBjYXNlICdsZWZ0JzpcbiAgICAgIHJldHVybiAnbGVmdCc7XG4gICAgY2FzZSAncmlnaHQnOlxuICAgICAgcmV0dXJuICdyaWdodCc7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgYFNreUFmZml4SG9yaXpvbnRhbEFsaWdubWVudCBkb2VzIG5vdCBoYXZlIGEgbWF0Y2hpbmcgdmFsdWUgZm9yICcke2FsaWdubWVudH0nIWA7XG4gIH1cbn1cbiJdfQ==
@@ -1,200 +0,0 @@
1
- import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild, } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { takeUntil } from 'rxjs/operators';
4
- import { SkyPopoverContentComponent } from './popover-content.component';
5
- import { SkyPopoverContext } from './popover-context';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@skyux/core";
8
- export class SkyPopoverComponent {
9
- constructor(overlayService) {
10
- this.overlayService = overlayService;
11
- /**
12
- * Fires when users close the popover.
13
- */
14
- this.popoverClosed = new EventEmitter();
15
- /**
16
- * Fires when users open the popover.
17
- */
18
- this.popoverOpened = new EventEmitter();
19
- /**
20
- * Indicates that the popover is in the process of being opened or closed.
21
- * @internal
22
- */
23
- this.isActive = false;
24
- /**
25
- * Used by unit tests to disable animations since the component is injected at the bottom of the
26
- * document body.
27
- * @internal
28
- */
29
- this.enableAnimations = true;
30
- this.isMouseEnter = false;
31
- this.isMarkedForCloseOnMouseLeave = false;
32
- this.ngUnsubscribe = new Subject();
33
- }
34
- /**
35
- * Specifies the horizontal alignment of the popover in relation to the trigger element.
36
- * The `skyPopoverAlignment` property on the popover directive overwrites this property.
37
- * @default "center"
38
- */
39
- set alignment(value) {
40
- this._alignment = value;
41
- }
42
- get alignment() {
43
- return this._alignment || 'center';
44
- }
45
- /**
46
- * Indicates whether to close the popover when it loses focus.
47
- * To require users to click a trigger button to close the popover, set this input to false.
48
- * @default true
49
- */
50
- set dismissOnBlur(value) {
51
- this._dismissOnBlur = value;
52
- }
53
- get dismissOnBlur() {
54
- if (this._dismissOnBlur === undefined) {
55
- return true;
56
- }
57
- return this._dismissOnBlur;
58
- }
59
- /**
60
- * Specifies the placement of the popover in relation to the trigger element.
61
- * The `skyPopoverPlacement` property on the popover directive overwrites this property.
62
- * @default "above"
63
- */
64
- set placement(value) {
65
- this._placement = value;
66
- }
67
- get placement() {
68
- return this._placement || 'above';
69
- }
70
- ngOnDestroy() {
71
- this.ngUnsubscribe.next();
72
- this.ngUnsubscribe.complete();
73
- this.ngUnsubscribe = undefined;
74
- if (this.overlay) {
75
- this.overlayService.close(this.overlay);
76
- this.overlay = undefined;
77
- }
78
- }
79
- /**
80
- * Positions the popover next to a given caller element.
81
- * @param caller The element that opened the popover.
82
- * @param placement The placement of the popover.
83
- * @param alignment The horizontal alignment of the popover.
84
- * @internal
85
- */
86
- positionNextTo(caller, placement, alignment) {
87
- if (!this.overlay) {
88
- this.setupOverlay();
89
- }
90
- this.placement = placement;
91
- this.alignment = alignment;
92
- this.isActive = true;
93
- this.contentRef.open(caller, {
94
- dismissOnBlur: this.dismissOnBlur,
95
- enableAnimations: this.enableAnimations,
96
- horizontalAlignment: this.alignment,
97
- isStatic: false,
98
- placement: this.placement,
99
- popoverTitle: this.popoverTitle,
100
- popoverType: this.popoverType,
101
- });
102
- }
103
- /**
104
- * Closes the popover.
105
- * @internal
106
- */
107
- close() {
108
- var _a;
109
- /*istanbul ignore next*/
110
- (_a = this.contentRef) === null || _a === void 0 ? void 0 : _a.close();
111
- }
112
- /**
113
- * Brings focus to the popover element if its open.
114
- * @internal
115
- */
116
- applyFocus() {
117
- var _a;
118
- /*istanbul ignore next*/
119
- (_a = this.contentRef) === null || _a === void 0 ? void 0 : _a.applyFocus();
120
- }
121
- /**
122
- * Adds a flag to the popover to close when the mouse leaves the popover's bounds.
123
- * @internal
124
- */
125
- markForCloseOnMouseLeave() {
126
- this.isMarkedForCloseOnMouseLeave = true;
127
- }
128
- setupOverlay() {
129
- const overlay = this.overlayService.create({
130
- enableScroll: true,
131
- enablePointerEvents: true,
132
- });
133
- overlay.backdropClick.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {
134
- if (this.dismissOnBlur) {
135
- this.close();
136
- }
137
- });
138
- const contentRef = overlay.attachComponent(SkyPopoverContentComponent, [
139
- {
140
- provide: SkyPopoverContext,
141
- useValue: new SkyPopoverContext({
142
- contentTemplateRef: this.templateRef,
143
- }),
144
- },
145
- ]);
146
- contentRef.opened.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {
147
- this.popoverOpened.emit(this);
148
- });
149
- contentRef.closed.pipe(takeUntil(this.ngUnsubscribe)).subscribe(() => {
150
- /*istanbul ignore else*/
151
- if (this.isActive) {
152
- this.overlayService.close(this.overlay);
153
- this.overlay = undefined;
154
- this.isActive = false;
155
- this.popoverClosed.emit(this);
156
- }
157
- });
158
- contentRef.isMouseEnter
159
- .pipe(takeUntil(this.ngUnsubscribe))
160
- .subscribe((isMouseEnter) => {
161
- this.isMouseEnter = isMouseEnter;
162
- if (this.isMarkedForCloseOnMouseLeave) {
163
- this.isMarkedForCloseOnMouseLeave = false;
164
- this.close();
165
- }
166
- });
167
- this.overlay = overlay;
168
- this.contentRef = contentRef;
169
- }
170
- }
171
- SkyPopoverComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SkyPopoverComponent, deps: [{ token: i1.SkyOverlayService }], target: i0.ɵɵFactoryTarget.Component });
172
- SkyPopoverComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.15", type: SkyPopoverComponent, selector: "sky-popover", inputs: { alignment: "alignment", dismissOnBlur: "dismissOnBlur", placement: "placement", popoverTitle: "popoverTitle", popoverType: "popoverType" }, outputs: { popoverClosed: "popoverClosed", popoverOpened: "popoverOpened" }, viewQueries: [{ propertyName: "templateRef", first: true, predicate: ["templateRef"], descendants: true, read: TemplateRef, static: true }], ngImport: i0, template: "<ng-template #templateRef>\n <ng-content></ng-content>\n</ng-template>\n" });
173
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.15", ngImport: i0, type: SkyPopoverComponent, decorators: [{
174
- type: Component,
175
- args: [{
176
- selector: 'sky-popover',
177
- templateUrl: './popover.component.html',
178
- }]
179
- }], ctorParameters: function () { return [{ type: i1.SkyOverlayService }]; }, propDecorators: { alignment: [{
180
- type: Input
181
- }], dismissOnBlur: [{
182
- type: Input
183
- }], placement: [{
184
- type: Input
185
- }], popoverTitle: [{
186
- type: Input
187
- }], popoverType: [{
188
- type: Input
189
- }], popoverClosed: [{
190
- type: Output
191
- }], popoverOpened: [{
192
- type: Output
193
- }], templateRef: [{
194
- type: ViewChild,
195
- args: ['templateRef', {
196
- read: TemplateRef,
197
- static: true,
198
- }]
199
- }] } });
200
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9wb3Zlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wb3BvdmVycy9zcmMvbW9kdWxlcy9wb3BvdmVyL3BvcG92ZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcG9wb3ZlcnMvc3JjL21vZHVsZXMvcG9wb3Zlci9wb3BvdmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFFTCxNQUFNLEVBQ04sV0FBVyxFQUNYLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUl2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU0zQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUV6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQzs7O0FBTXRELE1BQU0sT0FBTyxtQkFBbUI7SUEyRzlCLFlBQW9CLGNBQWlDO1FBQWpDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQS9DckQ7O1dBRUc7UUFFSSxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUF1QixDQUFDO1FBRS9EOztXQUVHO1FBRUksa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUUvRDs7O1dBR0c7UUFDSSxhQUFRLEdBQVksS0FBSyxDQUFDO1FBRWpDOzs7O1dBSUc7UUFDSSxxQkFBZ0IsR0FBWSxJQUFJLENBQUM7UUFFakMsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFVN0IsaUNBQTRCLEdBQVksS0FBSyxDQUFDO1FBRTlDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQVVZLENBQUM7SUExR3pEOzs7O09BSUc7SUFDSCxJQUNXLFNBQVMsQ0FBQyxL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LENBQUMsNEJBQTRCLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyw0QkFBNEIsR0FBRyxLQUFLLENBQUM7Z0JBQzFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQzthQUNkO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDOztpSEFoT1UsbUJBQW1CO3FHQUFuQixtQkFBbUIsNldBd0Z0QixXQUFXLDJDQ3JIckIsMkVBR0E7NEZEMEJhLG1CQUFtQjtrQkFKL0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsYUFBYTtvQkFDdkIsV0FBVyxFQUFFLDBCQUEwQjtpQkFDeEM7d0dBUVksU0FBUztzQkFEbkIsS0FBSztnQkFlSyxhQUFhO3NCQUR2QixLQUFLO2dCQW1CSyxTQUFTO3NCQURuQixLQUFLO2dCQWFDLFlBQVk7c0JBRGxCLEtBQUs7Z0JBUUMsV0FBVztzQkFEakIsS0FBSztnQkFPQyxhQUFhO3NCQURuQixNQUFNO2dCQU9BLGFBQWE7c0JBRG5CLE1BQU07Z0JBc0JDLFdBQVc7c0JBSmxCLFNBQVM7dUJBQUMsYUFBYSxFQUFFO3dCQUN4QixJQUFJLEVBQUUsV0FBVzt3QkFDakIsTUFBTSxFQUFFLElBQUk7cUJBQ2IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgU2t5T3ZlcmxheUluc3RhbmNlLCBTa3lPdmVybGF5U2VydmljZSB9IGZyb20gJ0Bza3l1eC9jb3JlJztcblxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVBvcG92ZXJBbGlnbm1lbnQgfSBmcm9tICcuL3R5cGVzL3BvcG92ZXItYWxpZ25tZW50JztcblxuaW1wb3J0IHsgU2t5UG9wb3ZlclBsYWNlbWVudCB9IGZyb20gJy4vdHlwZXMvcG9wb3Zlci1wbGFjZW1lbnQnO1xuXG5pbXBvcnQgeyBTa3lQb3BvdmVyQ29udGVudENvbXBvbmVudCB9IGZyb20gJy4vcG9wb3Zlci1jb250ZW50LmNvbXBvbmVudCc7XG5cbmltcG9ydCB7IFNreVBvcG92ZXJDb250ZXh0IH0gZnJvbSAnLi9wb3BvdmVyLWNvbnRleHQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcG9wb3ZlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9wb3BvdmVyLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UG9wb3ZlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGhvcml6b250YWwgYWxpZ25tZW50IG9mIHRoZSBwb3BvdmVyIGluIHJlbGF0aW9uIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQuXG4gICAqIFRoZSBgc2t5UG9wb3ZlckFsaWdubWVudGAgcHJvcGVydHkgb24gdGhlIHBvcG92ZXIgZGlyZWN0aXZlIG92ZXJ3cml0ZXMgdGhpcyBwcm9wZXJ0eS5cbiAgICogQGRlZmF1bHQgXCJjZW50ZXJcIlxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBhbGlnbm1lbnQodmFsdWU6IFNreVBvcG92ZXJBbGlnbm1lbnQpIHtcbiAgICB0aGlzLl9hbGlnbm1lbnQgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYWxpZ25tZW50KCk6IFNreVBvcG92ZXJBbGlnbm1lbnQge1xuICAgIHJldHVybiB0aGlzLl9hbGlnbm1lbnQgfHwgJ2NlbnRlcic7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gY2xvc2UgdGhlIHBvcG92ZXIgd2hlbiBpdCBsb3NlcyBmb2N1cy5cbiAgICogVG8gcmVxdWlyZSB1c2VycyB0byBjbGljayBhIHRyaWdnZXIgYnV0dG9uIHRvIGNsb3NlIHRoZSBwb3BvdmVyLCBzZXQgdGhpcyBpbnB1dCB0byBmYWxzZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBkaXNtaXNzT25CbHVyKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzbWlzc09uQmx1ciA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNtaXNzT25CbHVyKCk6IGJvb2xlYW4ge1xuICAgIGlmICh0aGlzLl9kaXNtaXNzT25CbHVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9kaXNtaXNzT25CbHVyO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyIGluIHJlbGF0aW9uIHRvIHRoZSB0cmlnZ2VyIGVsZW1lbnQuXG4gICAqIFRoZSBgc2t5UG9wb3ZlclBsYWNlbWVudGAgcHJvcGVydHkgb24gdGhlIHBvcG92ZXIgZGlyZWN0aXZlIG92ZXJ3cml0ZXMgdGhpcyBwcm9wZXJ0eS5cbiAgICogQGRlZmF1bHQgXCJhYm92ZVwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBsYWNlbWVudCh2YWx1ZTogU2t5UG9wb3ZlclBsYWNlbWVudCkge1xuICAgIHRoaXMuX3BsYWNlbWVudCA9IHZhbHVlO1xuICB9XG5cbiAgcHVibGljIGdldCBwbGFjZW1lbnQoKTogU2t5UG9wb3ZlclBsYWNlbWVudCB7XG4gICAgcmV0dXJuIHRoaXMuX3BsYWNlbWVudCB8fCAnYWJvdmUnO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyBhIHRpdGxlIGZvciB0aGUgcG9wb3Zlci5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBwb3BvdmVyVGl0bGU6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSB0eXBlIG9mIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0ICdpbmZvJ1xuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHBvcG92ZXJUeXBlOiAnZGFuZ2VyJyB8ICdpbmZvJztcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBjbG9zZSB0aGUgcG9wb3Zlci5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcG9wb3ZlckNsb3NlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5UG9wb3ZlckNvbXBvbmVudD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBvcGVuIHRoZSBwb3BvdmVyLlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBwb3BvdmVyT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lQb3BvdmVyQ29tcG9uZW50PigpO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgcG9wb3ZlciBpcyBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBvcGVuZWQgb3IgY2xvc2VkLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBpc0FjdGl2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBVc2VkIGJ5IHVuaXQgdGVzdHMgdG8gZGlzYWJsZSBhbmltYXRpb25zIHNpbmNlIHRoZSBjb21wb25lbnQgaXMgaW5qZWN0ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGVcbiAgICogZG9jdW1lbnQgYm9keS5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgZW5hYmxlQW5pbWF0aW9uczogYm9vbGVhbiA9IHRydWU7XG5cbiAgcHVibGljIGlzTW91c2VFbnRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIEBWaWV3Q2hpbGQoJ3RlbXBsYXRlUmVmJywge1xuICAgIHJlYWQ6IFRlbXBsYXRlUmVmLFxuICAgIHN0YXRpYzogdHJ1ZSxcbiAgfSlcbiAgcHJpdmF0ZSB0ZW1wbGF0ZVJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICBwcml2YXRlIGNvbnRlbnRSZWY6IFNreVBvcG92ZXJDb250ZW50Q29tcG9uZW50O1xuXG4gIHByaXZhdGUgaXNNYXJrZWRGb3JDbG9zZU9uTW91c2VMZWF2ZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgbmdVbnN1YnNjcmliZSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBvdmVybGF5OiBTa3lPdmVybGF5SW5zdGFuY2U7XG5cbiAgcHJpdmF0ZSBfYWxpZ25tZW50OiBTa3lQb3BvdmVyQWxpZ25tZW50O1xuXG4gIHByaXZhdGUgX2Rpc21pc3NPbkJsdXI6IGJvb2xlYW47XG5cbiAgcHJpdmF0ZSBfcGxhY2VtZW50OiBTa3lQb3BvdmVyUGxhY2VtZW50O1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3ZlcmxheVNlcnZpY2U6IFNreU92ZXJsYXlTZXJ2aWNlKSB7fVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZSA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0aGlzLm92ZXJsYXkpIHtcbiAgICAgIHRoaXMub3ZlcmxheVNlcnZpY2UuY2xvc2UodGhpcy5vdmVybGF5KTtcbiAgICAgIHRoaXMub3ZlcmxheSA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUG9zaXRpb25zIHRoZSBwb3BvdmVyIG5leHQgdG8gYSBnaXZlbiBjYWxsZXIgZWxlbWVudC5cbiAgICogQHBhcmFtIGNhbGxlciBUaGUgZWxlbWVudCB0aGF0IG9wZW5lZCB0aGUgcG9wb3Zlci5cbiAgICogQHBhcmFtIHBsYWNlbWVudCBUaGUgcGxhY2VtZW50IG9mIHRoZSBwb3BvdmVyLlxuICAgKiBAcGFyYW0gYWxpZ25tZW50IFRoZSBob3Jpem9udGFsIGFsaWdubWVudCBvZiB0aGUgcG9wb3Zlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgcG9zaXRpb25OZXh0VG8oXG4gICAgY2FsbGVyOiBFbGVtZW50UmVmLFxuICAgIHBsYWNlbWVudD86IFNreVBvcG92ZXJQbGFjZW1lbnQsXG4gICAgYWxpZ25tZW50PzogU2t5UG9wb3ZlckFsaWdubWVudFxuICApOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMub3ZlcmxheSkge1xuICAgICAgdGhpcy5zZXR1cE92ZXJsYXkoKTtcbiAgICB9XG5cbiAgICB0aGlzLnBsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICB0aGlzLmFsaWdubWVudCA9IGFsaWdubWVudDtcbiAgICB0aGlzLmlzQWN0aXZlID0gdHJ1ZTtcblxuICAgIHRoaXMuY29udGVudFJlZi5vcGVuKGNhbGxlciwge1xuICAgICAgZGlzbWlzc09uQmx1cjogdGhpcy5kaXNtaXNzT25CbHVyLFxuICAgICAgZW5hYmxlQW5pbWF0aW9uczogdGhpcy5lbmFibGVBbmltYXRpb25zLFxuICAgICAgaG9yaXpvbnRhbEFsaWdubWVudDogdGhpcy5hbGlnbm1lbnQsXG4gICAgICBpc1N0YXRpYzogZmFsc2UsXG4gICAgICBwbGFjZW1lbnQ6IHRoaXMucGxhY2VtZW50LFxuICAgICAgcG9wb3ZlclRpdGxlOiB0aGlzLnBvcG92ZXJUaXRsZSxcbiAgICAgIHBvcG92ZXJUeXBlOiB0aGlzLnBvcG92ZXJUeXBlLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIENsb3NlcyB0aGUgcG9wb3Zlci5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgbmV4dCovXG4gICAgdGhpcy5jb250ZW50UmVmPy5jbG9zZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJyaW5ncyBmb2N1cyB0byB0aGUgcG9wb3ZlciBlbGVtZW50IGlmIGl0cyBvcGVuLlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBhcHBseUZvY3VzKCk6IHZvaWQge1xuICAgIC8qaXN0YW5idWwgaWdub3JlIG5leHQqL1xuICAgIHRoaXMuY29udGVudFJlZj8uYXBwbHlGb2N1cygpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBmbGFnIHRvIHRoZSBwb3BvdmVyIHRvIGNsb3NlIHdoZW4gdGhlIG1vdXNlIGxlYXZlcyB0aGUgcG9wb3ZlcidzIGJvdW5kcy5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgbWFya0ZvckNsb3NlT25Nb3VzZUxlYXZlKCk6IHZvaWQge1xuICAgIHRoaXMuaXNNYXJrZWRGb3JDbG9zZU9uTW91c2VMZWF2ZSA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIHNldHVwT3ZlcmxheSgpOiB2b2lkIHtcbiAgICBjb25zdCBvdmVybGF5ID0gdGhpcy5vdmVybGF5U2VydmljZS5jcmVhdGUoe1xuICAgICAgZW5hYmxlU2Nyb2xsOiB0cnVlLFxuICAgICAgZW5hYmxlUG9pbnRlckV2ZW50czogdHJ1ZSxcbiAgICB9KTtcblxuICAgIG92ZXJsYXkuYmFja2Ryb3BDbGljay5waXBlKHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZGlzbWlzc09uQmx1cikge1xuICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb25zdCBjb250ZW50UmVmID0gb3ZlcmxheS5hdHRhY2hDb21wb25lbnQoU2t5UG9wb3ZlckNvbnRlbnRDb21wb25lbnQsIFtcbiAgICAgIHtcbiAgICAgICAgcHJvdmlkZTogU2t5UG9wb3ZlckNvbnRleHQsXG4gICAgICAgIHVzZVZhbHVlOiBuZXcgU2t5UG9wb3ZlckNvbnRleHQoe1xuICAgICAgICAgIGNvbnRlbnRUZW1wbGF0ZVJlZjogdGhpcy50ZW1wbGF0ZVJlZixcbiAgICAgICAgfSksXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgY29udGVudFJlZi5vcGVuZWQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMucG9wb3Zlck9wZW5lZC5lbWl0KHRoaXMpO1xuICAgIH0pO1xuXG4gICAgY29udGVudFJlZi5jbG9zZWQucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIC8qaXN0YW5idWwgaWdub3JlIGVsc2UqL1xuICAgICAgaWYgKHRoaXMuaXNBY3RpdmUpIHtcbiAgICAgICAgdGhpcy5vdmVybGF5U2VydmljZS5jbG9zZSh0aGlzLm92ZXJsYXkpO1xuICAgICAgICB0aGlzLm92ZXJsYXkgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMuaXNBY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wb3BvdmVyQ2xvc2VkLmVtaXQodGhpcyk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBjb250ZW50UmVmLmlzTW91c2VFbnRlclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKChpc01vdXNlRW50ZXIpID0+IHtcbiAgICAgICAgdGhpcy5pc01vdXNlRW50ZXIgPSBpc01vdXNlRW50ZXI7XG4gICAgICAgIGlmICh0aGlzLmlzTWFya2VkRm9yQ2xvc2VPbk1vdXNlTGVhdmUpIHtcbiAgICAgICAgICB0aGlzLmlzTWFya2VkRm9yQ2xvc2VPbk1vdXNlTGVhdmUgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLmNsb3NlKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgdGhpcy5vdmVybGF5ID0gb3ZlcmxheTtcbiAgICB0aGlzLmNvbnRlbnRSZWYgPSBjb250ZW50UmVmO1xuICB9XG59XG4iLCI8bmctdGVtcGxhdGUgI3RlbXBsYXRlUmVmPlxuICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG48L25nLXRlbXBsYXRlPlxuIl19