@skyux/tabs 4.7.0 → 5.0.0-beta.2

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 (150) hide show
  1. package/LICENSE +21 -0
  2. package/bundles/skyux-tabs-testing.umd.js +324 -221
  3. package/bundles/skyux-tabs-testing.umd.js.map +1 -1
  4. package/bundles/skyux-tabs.umd.js +648 -792
  5. package/bundles/skyux-tabs.umd.js.map +1 -1
  6. package/documentation.json +5484 -0
  7. package/esm2015/modules/sectioned-form/sectioned-form-section.component.js +29 -32
  8. package/esm2015/modules/sectioned-form/sectioned-form.component.js +52 -41
  9. package/esm2015/modules/sectioned-form/sectioned-form.module.js +30 -21
  10. package/esm2015/modules/sectioned-form/sectioned-form.service.js +9 -8
  11. package/esm2015/modules/shared/sky-tabs-resources.module.js +41 -0
  12. package/esm2015/modules/tabs/tab-button.component.js +41 -47
  13. package/esm2015/modules/tabs/tab-index.js +2 -1
  14. package/esm2015/modules/tabs/tab.component.js +31 -41
  15. package/esm2015/modules/tabs/tabs.module.js +45 -23
  16. package/esm2015/modules/tabs/tabset-active-tab-unregistered-args.js +2 -1
  17. package/esm2015/modules/tabs/tabset-adapter.service.js +9 -8
  18. package/esm2015/modules/tabs/tabset-buttons-display-mode.js +2 -1
  19. package/esm2015/modules/tabs/tabset-nav-button.component.js +21 -26
  20. package/esm2015/modules/tabs/tabset-permalink.service.js +11 -15
  21. package/esm2015/modules/tabs/tabset-style.js +2 -1
  22. package/esm2015/modules/tabs/tabset-tab-indexes-change.js +2 -1
  23. package/esm2015/modules/tabs/tabset.component.js +56 -57
  24. package/esm2015/modules/tabs/tabset.service.js +10 -8
  25. package/esm2015/modules/vertical-tabset/vertical-tab-media-query.service.js +9 -8
  26. package/esm2015/modules/vertical-tabset/vertical-tab.component.js +59 -65
  27. package/esm2015/modules/vertical-tabset/vertical-tabset-adapter.service.js +10 -15
  28. package/esm2015/modules/vertical-tabset/vertical-tabset-group.component.js +75 -54
  29. package/esm2015/modules/vertical-tabset/vertical-tabset.component.js +63 -62
  30. package/esm2015/modules/vertical-tabset/vertical-tabset.module.js +41 -30
  31. package/esm2015/modules/vertical-tabset/vertical-tabset.service.js +19 -16
  32. package/esm2015/public-api.js +23 -0
  33. package/esm2015/skyux-tabs.js +2 -18
  34. package/esm2015/testing/public-api.js +3 -0
  35. package/esm2015/testing/skyux-tabs-testing.js +2 -2
  36. package/esm2015/testing/tabs/tab-fixture-tab.js +2 -1
  37. package/esm2015/testing/tabs/tabset-fixture.js +1 -1
  38. package/fesm2015/skyux-tabs-testing.js.map +1 -1
  39. package/fesm2015/skyux-tabs.js +588 -529
  40. package/fesm2015/skyux-tabs.js.map +1 -1
  41. package/modules/sectioned-form/sectioned-form-section.component.d.ts +3 -0
  42. package/modules/sectioned-form/sectioned-form.component.d.ts +3 -0
  43. package/modules/sectioned-form/sectioned-form.module.d.ts +9 -0
  44. package/modules/sectioned-form/sectioned-form.service.d.ts +3 -0
  45. package/modules/shared/sky-tabs-resources.module.d.ts +14 -0
  46. package/modules/tabs/tab-button.component.d.ts +3 -0
  47. package/modules/tabs/tab.component.d.ts +3 -0
  48. package/modules/tabs/tabs.module.d.ts +15 -0
  49. package/modules/tabs/tabset-adapter.service.d.ts +3 -0
  50. package/modules/tabs/tabset-nav-button.component.d.ts +3 -0
  51. package/modules/tabs/tabset-permalink.service.d.ts +3 -0
  52. package/modules/tabs/tabset.component.d.ts +4 -1
  53. package/modules/tabs/tabset.service.d.ts +3 -0
  54. package/modules/vertical-tabset/vertical-tab-media-query.service.d.ts +3 -0
  55. package/modules/vertical-tabset/vertical-tab.component.d.ts +3 -0
  56. package/modules/vertical-tabset/vertical-tabset-adapter.service.d.ts +3 -1
  57. package/modules/vertical-tabset/vertical-tabset-group.component.d.ts +3 -0
  58. package/modules/vertical-tabset/vertical-tabset.component.d.ts +4 -4
  59. package/modules/vertical-tabset/vertical-tabset.module.d.ts +11 -0
  60. package/modules/vertical-tabset/vertical-tabset.service.d.ts +3 -0
  61. package/package.json +14 -29
  62. package/public-api.d.ts +16 -0
  63. package/skyux-tabs.d.ts +2 -17
  64. package/testing/package.json +2 -5
  65. package/testing/{public_api.d.ts → public-api.d.ts} +0 -0
  66. package/testing/skyux-tabs-testing.d.ts +2 -1
  67. package/CHANGELOG.md +0 -222
  68. package/bundles/skyux-tabs-testing.umd.min.js +0 -16
  69. package/bundles/skyux-tabs-testing.umd.min.js.map +0 -1
  70. package/bundles/skyux-tabs.umd.min.js +0 -16
  71. package/bundles/skyux-tabs.umd.min.js.map +0 -1
  72. package/esm2015/modules/shared/tabs-resources.module.js +0 -17
  73. package/esm2015/plugin-resources/tabs-resources-provider.js +0 -16
  74. package/esm2015/public_api.js +0 -10
  75. package/esm2015/testing/public_api.js +0 -2
  76. package/esm5/modules/sectioned-form/sectioned-form-section.component.js +0 -84
  77. package/esm5/modules/sectioned-form/sectioned-form.component.js +0 -111
  78. package/esm5/modules/sectioned-form/sectioned-form.module.js +0 -33
  79. package/esm5/modules/sectioned-form/sectioned-form.service.js +0 -35
  80. package/esm5/modules/shared/tabs-resources.module.js +0 -20
  81. package/esm5/modules/tabs/tab-button.component.js +0 -72
  82. package/esm5/modules/tabs/tab-index.js +0 -1
  83. package/esm5/modules/tabs/tab.component.js +0 -173
  84. package/esm5/modules/tabs/tabs.module.js +0 -44
  85. package/esm5/modules/tabs/tabset-active-tab-unregistered-args.js +0 -1
  86. package/esm5/modules/tabs/tabset-adapter.service.js +0 -58
  87. package/esm5/modules/tabs/tabset-buttons-display-mode.js +0 -1
  88. package/esm5/modules/tabs/tabset-nav-button.component.js +0 -145
  89. package/esm5/modules/tabs/tabset-permalink.service.js +0 -129
  90. package/esm5/modules/tabs/tabset-style.js +0 -1
  91. package/esm5/modules/tabs/tabset-tab-indexes-change.js +0 -1
  92. package/esm5/modules/tabs/tabset.component.js +0 -434
  93. package/esm5/modules/tabs/tabset.service.js +0 -122
  94. package/esm5/modules/vertical-tabset/vertical-tab-media-query.service.js +0 -76
  95. package/esm5/modules/vertical-tabset/vertical-tab.component.js +0 -214
  96. package/esm5/modules/vertical-tabset/vertical-tabset-adapter.service.js +0 -51
  97. package/esm5/modules/vertical-tabset/vertical-tabset-group.component.js +0 -119
  98. package/esm5/modules/vertical-tabset/vertical-tabset.component.js +0 -145
  99. package/esm5/modules/vertical-tabset/vertical-tabset.module.js +0 -46
  100. package/esm5/modules/vertical-tabset/vertical-tabset.service.js +0 -176
  101. package/esm5/plugin-resources/tabs-resources-provider.js +0 -17
  102. package/esm5/public_api.js +0 -10
  103. package/esm5/skyux-tabs.js +0 -21
  104. package/esm5/testing/public_api.js +0 -2
  105. package/esm5/testing/skyux-tabs-testing.js +0 -5
  106. package/esm5/testing/tabs/tab-fixture-tab.js +0 -1
  107. package/esm5/testing/tabs/tabset-fixture.js +0 -168
  108. package/fesm5/skyux-tabs-testing.js +0 -174
  109. package/fesm5/skyux-tabs-testing.js.map +0 -1
  110. package/fesm5/skyux-tabs.js +0 -2183
  111. package/fesm5/skyux-tabs.js.map +0 -1
  112. package/modules/shared/tabs-resources.module.d.ts +0 -2
  113. package/plugin-resources/tabs-resources-provider.d.ts +0 -5
  114. package/public_api.d.ts +0 -9
  115. package/skyux-tabs.metadata.json +0 -1
  116. package/src/assets/img/guidelines/tabs/tabs-anatomy.png +0 -0
  117. package/src/assets/img/guidelines/tabs/tabs-behavior-1.png +0 -0
  118. package/src/assets/img/guidelines/tabs/tabs-layout-1.png +0 -0
  119. package/src/assets/img/guidelines/tabs/tabs-layout-2.png +0 -0
  120. package/src/assets/img/guidelines/tabs/tabs-layout-3.png +0 -0
  121. package/src/assets/img/guidelines/tabs/tabs-layout-4.png +0 -0
  122. package/src/assets/img/guidelines/tabs/tabs-options-1.png +0 -0
  123. package/src/assets/img/guidelines/tabs/tabs-options-2.png +0 -0
  124. package/src/assets/img/guidelines/tabs/tabs-state-collapsed-closed.png +0 -0
  125. package/src/assets/img/guidelines/tabs/tabs-state-collapsed-open.png +0 -0
  126. package/src/assets/img/guidelines/tabs/tabs-state-hover.png +0 -0
  127. package/src/assets/img/guidelines/tabs/tabs-state-selected.png +0 -0
  128. package/src/assets/img/guidelines/tabs/tabs-state-unselected.png +0 -0
  129. package/src/assets/img/guidelines/tabs/tabs-usage-1.png +0 -0
  130. package/src/assets/img/guidelines/tabs/tabs-usage-2.png +0 -0
  131. package/src/assets/img/guidelines/tabs/tabs-usage-3.png +0 -0
  132. package/src/assets/img/guidelines/tabs/tabs-usage-4.png +0 -0
  133. package/src/assets/img/guidelines/tabs/tabs-usage-5.png +0 -0
  134. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-anatomy-1.png +0 -0
  135. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-anatomy-2.png +0 -0
  136. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-layout-1.png +0 -0
  137. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-hover.png +0 -0
  138. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-selected-group.png +0 -0
  139. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-selected.png +0 -0
  140. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-unselected-group.png +0 -0
  141. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-state-unselected.png +0 -0
  142. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-1.png +0 -0
  143. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-2.png +0 -0
  144. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-3.png +0 -0
  145. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-4.png +0 -0
  146. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-5.png +0 -0
  147. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-6.png +0 -0
  148. package/src/assets/img/guidelines/vertical-tabs/vertical-tabs-usage-7.png +0 -0
  149. package/src/assets/locales/resources_en_US.json +0 -26
  150. package/testing/skyux-tabs-testing.metadata.json +0 -1
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LWJ1dHRvbnMtZGlzcGxheS1tb2RlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L3RhYnMvIiwic291cmNlcyI6WyJtb2R1bGVzL3RhYnMvdGFic2V0LWJ1dHRvbnMtZGlzcGxheS1tb2RlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTa3lUYWJzZXRCdXR0b25zRGlzcGxheU1vZGUgPSAnZHJvcGRvd24nIHwgJ3RhYnMnO1xuIl19
@@ -1,145 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { AfterViewInit, ChangeDetectorRef, Component, Input } from '@angular/core';
3
- import { SkyLibResourcesService } from '@skyux/i18n';
4
- import { forkJoin } from 'rxjs';
5
- import { take } from 'rxjs/operators';
6
- var buttonTypeNext = 'next';
7
- var buttonTypePrevious = 'previous';
8
- /**
9
- * @internal
10
- */
11
- var SkyTabsetNavButtonComponent = /** @class */ (function () {
12
- function SkyTabsetNavButtonComponent(resourceService, changeDetector) {
13
- this.resourceService = resourceService;
14
- this.changeDetector = changeDetector;
15
- }
16
- Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "buttonText", {
17
- get: function () {
18
- if (this._buttonText) {
19
- return this._buttonText;
20
- }
21
- switch (this.buttonType) {
22
- case buttonTypePrevious:
23
- return this.previousButtonText;
24
- case buttonTypeNext:
25
- return this.nextButtonText;
26
- /* istanbul ignore next */
27
- default:
28
- return '';
29
- }
30
- },
31
- set: function (value) {
32
- this._buttonText = value;
33
- },
34
- enumerable: true,
35
- configurable: true
36
- });
37
- Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "disabled", {
38
- get: function () {
39
- var tabToSelect;
40
- switch (this.buttonType) {
41
- case buttonTypePrevious:
42
- tabToSelect = this.previousTab;
43
- break;
44
- case buttonTypeNext:
45
- tabToSelect = this.nextTab;
46
- break;
47
- /* istanbul ignore next */
48
- default:
49
- break;
50
- }
51
- return !tabToSelect || tabToSelect.disabled;
52
- },
53
- enumerable: true,
54
- configurable: true
55
- });
56
- Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "selectedTab", {
57
- get: function () {
58
- var _this = this;
59
- var selectedTab;
60
- if (this.tabset && this.tabset.tabs) {
61
- selectedTab = this.tabset.tabs.find(function (tab) { return tab.tabIndex === _this.tabset.lastActiveTabIndex; });
62
- }
63
- return selectedTab;
64
- },
65
- enumerable: true,
66
- configurable: true
67
- });
68
- Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "nextTab", {
69
- get: function () {
70
- var selectedTab = this.selectedTab;
71
- if (selectedTab) {
72
- var tabs = this.tabset.tabs.toArray();
73
- return tabs[tabs.indexOf(selectedTab) + 1];
74
- }
75
- return undefined;
76
- },
77
- enumerable: true,
78
- configurable: true
79
- });
80
- Object.defineProperty(SkyTabsetNavButtonComponent.prototype, "previousTab", {
81
- get: function () {
82
- var selectedTab = this.selectedTab;
83
- if (selectedTab) {
84
- var tabs = this.tabset.tabs.toArray();
85
- return tabs[tabs.indexOf(selectedTab) - 1];
86
- }
87
- return undefined;
88
- },
89
- enumerable: true,
90
- configurable: true
91
- });
92
- SkyTabsetNavButtonComponent.prototype.ngAfterViewInit = function () {
93
- var _this = this;
94
- forkJoin([
95
- this.resourceService.getString('skyux_tabs_navigator_previous'),
96
- this.resourceService.getString('skyux_tabs_navigator_next')
97
- ])
98
- .pipe(take(1))
99
- .subscribe(function (resources) {
100
- _this.previousButtonText = resources[0];
101
- _this.nextButtonText = resources[1];
102
- _this.changeDetector.detectChanges();
103
- });
104
- };
105
- SkyTabsetNavButtonComponent.prototype.buttonClick = function () {
106
- var tabToSelect;
107
- switch (this.buttonType) {
108
- case buttonTypePrevious:
109
- tabToSelect = this.previousTab;
110
- break;
111
- case buttonTypeNext:
112
- tabToSelect = this.nextTab;
113
- break;
114
- /* istanbul ignore next */
115
- default:
116
- break;
117
- }
118
- /* istanbul ignore else */
119
- if (tabToSelect && !tabToSelect.disabled) {
120
- this.tabset.active = tabToSelect.tabIndex;
121
- }
122
- };
123
- SkyTabsetNavButtonComponent.ctorParameters = function () { return [
124
- { type: SkyLibResourcesService },
125
- { type: ChangeDetectorRef }
126
- ]; };
127
- __decorate([
128
- Input()
129
- ], SkyTabsetNavButtonComponent.prototype, "tabset", void 0);
130
- __decorate([
131
- Input()
132
- ], SkyTabsetNavButtonComponent.prototype, "buttonType", void 0);
133
- __decorate([
134
- Input()
135
- ], SkyTabsetNavButtonComponent.prototype, "buttonText", null);
136
- SkyTabsetNavButtonComponent = __decorate([
137
- Component({
138
- selector: 'sky-tabset-nav-button',
139
- template: "<button\n class=\"sky-btn sky-btn-default\"\n type=\"button\"\n [disabled]=\"disabled\"\n (click)=\"buttonClick()\"\n>\n {{ buttonText }}\n</button>\n"
140
- })
141
- ], SkyTabsetNavButtonComponent);
142
- return SkyTabsetNavButtonComponent;
143
- }());
144
- export { SkyTabsetNavButtonComponent };
145
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L3RhYnMvIiwic291cmNlcyI6WyJtb2R1bGVzL3RhYnMvdGFic2V0LW5hdi1idXR0b24uY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsYUFBYSxFQUNiLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsS0FBSyxFQUNOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFDTCxzQkFBc0IsRUFDdkIsTUFBTSxhQUFhLENBQUM7QUFFckIsT0FBTyxFQUNMLFFBQVEsRUFDVCxNQUFNLE1BQU0sQ0FBQztBQUVkLE9BQU8sRUFDTCxJQUFJLEVBQ0wsTUFBTSxnQkFBZ0IsQ0FBQztBQVV4QixJQUFNLGNBQWMsR0FBRyxNQUFNLENBQUM7QUFFOUIsSUFBTSxrQkFBa0IsR0FBRyxVQUFVLENBQUM7QUFFdEM7O0dBRUc7QUFLSDtJQW1GRSxxQ0FBb0IsZUFBdUMsRUFBVSxjQUFpQztRQUFsRixvQkFBZSxHQUFmLGVBQWUsQ0FBd0I7UUFBVSxtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7SUFBSSxDQUFDO0lBMUUzRyxzQkFBVyxtREFBVTthQUlyQjtZQUNFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDcEIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ3pCO1lBRUQsUUFBUSxJQUFJLENBQUMsVUFBVSxFQUFFO2dCQUN2QixLQUFLLGtCQUFrQjtvQkFDckIsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUM7Z0JBQ2pDLEtBQUssY0FBYztvQkFDakIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO2dCQUM3QiwwQkFBMEI7Z0JBQzFCO29CQUNFLE9BQU8sRUFBRSxDQUFDO2FBQ2I7UUFDSCxDQUFDO2FBbEJELFVBQXNCLEtBQWE7WUFDakMsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7UUFDM0IsQ0FBQzs7O09BQUE7SUFr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Q0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFO1lBQ3hDLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7U0FDM0M7SUFDSCxDQUFDOztnQkFsQ29DLHNCQUFzQjtnQkFBMEIsaUJBQWlCOztJQWhGdEc7UUFEQyxLQUFLLEVBQUU7K0RBQzBCO0lBR2xDO1FBREMsS0FBSyxFQUFFO21FQUNrQjtJQUcxQjtRQURDLEtBQUssRUFBRTtpRUFHUDtJQVhVLDJCQUEyQjtRQUp2QyxTQUFTLENBQUM7WUFDVCxRQUFRLEVBQUUsdUJBQXVCO1lBQ2pDLHVLQUFpRDtTQUNsRCxDQUFDO09BQ1csMkJBQTJCLENBc0h2QztJQUFELGtDQUFDO0NBQUEsQUF0SEQsSUFzSEM7U0F0SFksMkJBQTJCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgSW5wdXRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIFNreUxpYlJlc291cmNlc1NlcnZpY2Vcbn0gZnJvbSAnQHNreXV4L2kxOG4nO1xuXG5pbXBvcnQge1xuICBmb3JrSm9pblxufSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHtcbiAgdGFrZVxufSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7XG4gIFNreVRhYnNldENvbXBvbmVudFxufSBmcm9tICcuL3RhYnNldC5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lUYWJDb21wb25lbnRcbn0gZnJvbSAnLi90YWIuY29tcG9uZW50JztcblxuY29uc3QgYnV0dG9uVHlwZU5leHQgPSAnbmV4dCc7XG5cbmNvbnN0IGJ1dHRvblR5cGVQcmV2aW91cyA9ICdwcmV2aW91cyc7XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10YWJzZXQtbmF2LWJ1dHRvbicsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJzZXQtbmF2LWJ1dHRvbi5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgU2t5VGFic2V0TmF2QnV0dG9uQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHRhYnNldDogU2t5VGFic2V0Q29tcG9uZW50O1xuXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBidXR0b25UeXBlOiBzdHJpbmc7XG5cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBidXR0b25UZXh0KHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLl9idXR0b25UZXh0ID0gdmFsdWU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGJ1dHRvblRleHQoKTogc3RyaW5nIHtcbiAgICBpZiAodGhpcy5fYnV0dG9uVGV4dCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2J1dHRvblRleHQ7XG4gICAgfVxuXG4gICAgc3dpdGNoICh0aGlzLmJ1dHRvblR5cGUpIHtcbiAgICAgIGNhc2UgYnV0dG9uVHlwZVByZXZpb3VzOlxuICAgICAgICByZXR1cm4gdGhpcy5wcmV2aW91c0J1dHRvblRleHQ7XG4gICAgICBjYXNlIGJ1dHRvblR5cGVOZXh0OlxuICAgICAgICByZXR1cm4gdGhpcy5uZXh0QnV0dG9uVGV4dDtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICBsZXQgdGFiVG9TZWxlY3Q6IFNreVRhYkNvbXBvbmVudDtcblxuICAgIHN3aXRjaCAodGhpcy5idXR0b25UeXBlKSB7XG4gICAgICBjYXNlIGJ1dHRvblR5cGVQcmV2aW91czpcbiAgICAgICAgdGFiVG9TZWxlY3QgPSB0aGlzLnByZXZpb3VzVGFiO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgYnV0dG9uVHlwZU5leHQ6XG4gICAgICAgIHRhYlRvU2VsZWN0ID0gdGhpcy5uZXh0VGFiO1xuICAgICAgICBicmVhaztcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICByZXR1cm4gIXRhYlRvU2VsZWN0IHx8IHRhYlRvU2VsZWN0LmRpc2FibGVkO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgc2VsZWN0ZWRUYWIoKTogU2t5VGFiQ29tcG9uZW50IHtcbiAgICBsZXQgc2VsZWN0ZWRUYWI6IFNreVRhYkNvbXBvbmVudDtcblxuICAgIGlmICh0aGlzLnRhYnNldCAmJiB0aGlzLnRhYnNldC50YWJzKSB7XG4gICAgICBzZWxlY3RlZFRhYiA9IHRoaXMudGFic2V0LnRhYnMuZmluZCgodGFiKSA9PiB0YWIudGFiSW5kZXggPT09IHRoaXMudGFic2V0Lmxhc3RBY3RpdmVUYWJJbmRleCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlbGVjdGVkVGFiO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgbmV4dFRhYigpOiBTa3lUYWJDb21wb25lbnQge1xuICAgIGxldCBzZWxlY3RlZFRhYiA9IHRoaXMuc2VsZWN0ZWRUYWI7XG5cbiAgICBpZiAoc2VsZWN0ZWRUYWIpIHtcbiAgICAgIGxldCB0YWJzID0gdGhpcy50YWJzZXQudGFicy50b0FycmF5KCk7XG4gICAgICByZXR1cm4gdGFic1t0YWJzLmluZGV4T2Yoc2VsZWN0ZWRUYWIpICsgMV07XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IHByZXZpb3VzVGFiKCk6IFNreVRhYkNvbXBvbmVudCB7XG4gICAgbGV0IHNlbGVjdGVkVGFiID0gdGhpcy5zZWxlY3RlZFRhYjtcblxuICAgIGlmIChzZWxlY3RlZFRhYikge1xuICAgICAgbGV0IHRhYnMgPSB0aGlzLnRhYnNldC50YWJzLnRvQXJyYXkoKTtcbiAgICAgIHJldHVybiB0YWJzW3RhYnMuaW5kZXhPZihzZWxlY3RlZFRhYikgLSAxXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBfYnV0dG9uVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIHByZXZpb3VzQnV0dG9uVGV4dDogc3RyaW5nO1xuICBwcml2YXRlIG5leHRCdXR0b25UZXh0OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZXNvdXJjZVNlcnZpY2U6IFNreUxpYlJlc291cmNlc1NlcnZpY2UsIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7IH1cblxuICBwdWJsaWMgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGZvcmtKb2luKFtcbiAgICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfdGFic19uYXZpZ2F0b3JfcHJldmlvdXMnKSxcbiAgICAgIHRoaXMucmVzb3VyY2VTZXJ2aWNlLmdldFN0cmluZygnc2t5dXhfdGFic19uYXZpZ2F0b3JfbmV4dCcpXG4gICAgXSlcbiAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAuc3Vic2NyaWJlKHJlc291cmNlcyA9PiB7XG4gICAgICAgIHRoaXMucHJldmlvdXNCdXR0b25UZXh0ID0gcmVzb3VyY2VzWzBdO1xuICAgICAgICB0aGlzLm5leHRCdXR0b25UZXh0ID0gcmVzb3VyY2VzWzFdO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHVibGljIGJ1dHRvbkNsaWNrKCkge1xuICAgIGxldCB0YWJUb1NlbGVjdDogU2t5VGFiQ29tcG9uZW50O1xuXG4gICAgc3dpdGNoICh0aGlzLmJ1dHRvblR5cGUpIHtcbiAgICAgIGNhc2UgYnV0dG9uVHlwZVByZXZpb3VzOlxuICAgICAgICB0YWJUb1NlbGVjdCA9IHRoaXMucHJldmlvdXNUYWI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBidXR0b25UeXBlTmV4dDpcbiAgICAgICAgdGFiVG9TZWxlY3QgPSB0aGlzLm5leHRUYWI7XG4gICAgICAgIGJyZWFrO1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKHRhYlRvU2VsZWN0ICYmICF0YWJUb1NlbGVjdC5kaXNhYmxlZCkge1xuICAgICAgdGhpcy50YWJzZXQuYWN0aXZlID0gdGFiVG9TZWxlY3QudGFiSW5kZXg7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,129 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { Location } from '@angular/common';
3
- import { Injectable } from '@angular/core';
4
- import { ActivatedRoute, Router } from '@angular/router';
5
- import { Subject } from 'rxjs';
6
- /**
7
- * @internal
8
- */
9
- var SkyTabsetPermalinkService = /** @class */ (function () {
10
- function SkyTabsetPermalinkService(activatedRoute, location, router) {
11
- this.activatedRoute = activatedRoute;
12
- this.location = location;
13
- this.router = router;
14
- this._popStateChange = new Subject();
15
- }
16
- Object.defineProperty(SkyTabsetPermalinkService.prototype, "popStateChange", {
17
- get: function () {
18
- return this._popStateChange.asObservable();
19
- },
20
- enumerable: true,
21
- configurable: true
22
- });
23
- SkyTabsetPermalinkService.prototype.ngOnDestroy = function () {
24
- if (this.subscription) {
25
- this.subscription.unsubscribe();
26
- }
27
- };
28
- SkyTabsetPermalinkService.prototype.init = function () {
29
- var _this = this;
30
- this.subscription = this.location.subscribe(function () {
31
- _this._popStateChange.next();
32
- });
33
- };
34
- /**
35
- * Returns the value of a URL query param.
36
- */
37
- SkyTabsetPermalinkService.prototype.getParam = function (name) {
38
- return this.getParams()[name];
39
- };
40
- /**
41
- * Sets the value of a URL query param.
42
- */
43
- SkyTabsetPermalinkService.prototype.setParam = function (name, value) {
44
- var params = this.getParams();
45
- if (value === null) {
46
- delete params[name];
47
- }
48
- else {
49
- params[name] = value;
50
- }
51
- // Update the URL without triggering a navigation state change.
52
- // See: https://stackoverflow.com/a/46486677
53
- var url = this.router.createUrlTree(['.'], {
54
- relativeTo: this.activatedRoute,
55
- queryParams: params,
56
- queryParamsHandling: 'merge'
57
- }).toString();
58
- // Abort redirect if the current URL is equal to the new URL.
59
- if (this.location.isCurrentPathEqualTo(url)) {
60
- return;
61
- }
62
- this.location.go(url);
63
- };
64
- /**
65
- * Removes the provided query param from the URL.
66
- */
67
- SkyTabsetPermalinkService.prototype.clearParam = function (name) {
68
- /*tslint:disable-next-line:no-null-keyword*/
69
- this.setParam(name, null);
70
- };
71
- /**
72
- * Returns a relative URL that includes the provided query parameter. The value is inteded to be
73
- * used by an HTML anchor element.
74
- */
75
- SkyTabsetPermalinkService.prototype.getParamHref = function (name, value) {
76
- if (!name) {
77
- /*tslint:disable-next-line:no-null-keyword*/
78
- return null;
79
- }
80
- var params = this.getParams();
81
- params[name] = value;
82
- var baseUrl = this.location.path().split('?')[0];
83
- var paramString = Object.keys(params).map(function (k) { return k + "=" + params[k]; }).join('&');
84
- return this.location.prepareExternalUrl(baseUrl + "?" + paramString);
85
- };
86
- /**
87
- * Converts the provided string into a value that can be safely used in a URL.
88
- */
89
- SkyTabsetPermalinkService.prototype.urlify = function (value) {
90
- if (!value) {
91
- return '';
92
- }
93
- var sanitized = value.toLowerCase()
94
- // Remove special characters.
95
- .replace(/[\_\~\`\@\!\#\$\%\^\&\*\(\)\[\]\{\}\;\:\'\/\\\<\>\,\.\?\=\+\|"]/g, '')
96
- // Replace space characters with a dash.
97
- .replace(/\s/g, '-')
98
- // Remove any double-dashes.
99
- .replace(/--/g, '-');
100
- return sanitized;
101
- };
102
- /**
103
- * Returns all query params that exist in the current URL.
104
- */
105
- SkyTabsetPermalinkService.prototype.getParams = function () {
106
- var params = {};
107
- var path = this.location.path();
108
- if (path.indexOf('?') === -1) {
109
- return params;
110
- }
111
- var existingParamPairs = path.split('?')[1].split('&');
112
- existingParamPairs.forEach(function (pair) {
113
- var fragments = pair.split('=');
114
- params[fragments[0]] = decodeURIComponent(fragments[1]);
115
- });
116
- return params;
117
- };
118
- SkyTabsetPermalinkService.ctorParameters = function () { return [
119
- { type: ActivatedRoute },
120
- { type: Location },
121
- { type: Router }
122
- ]; };
123
- SkyTabsetPermalinkService = __decorate([
124
- Injectable()
125
- ], SkyTabsetPermalinkService);
126
- return SkyTabsetPermalinkService;
127
- }());
128
- export { SkyTabsetPermalinkService };
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LXBlcm1hbGluay5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L3RhYnMvIiwic291cmNlcyI6WyJtb2R1bGVzL3RhYnMvdGFic2V0LXBlcm1hbGluay5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQ0wsUUFBUSxFQUNULE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUNMLFVBQVUsRUFFWCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsY0FBYyxFQUNkLE1BQU0sRUFDUCxNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFFTCxPQUFPLEVBRVIsTUFBTSxNQUFNLENBQUM7QUFTZDs7R0FFRztBQUVIO0lBVUUsbUNBQ1UsY0FBOEIsRUFDOUIsUUFBa0IsRUFDbEIsTUFBYztRQUZkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2xCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFQaEIsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBUTFDLENBQUM7SUFaTCxzQkFBVyxxREFBYzthQUF6QjtZQUNFLE9BQU8sSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUM3QyxDQUFDOzs7T0FBQTtJQVlNLCtDQUFXLEdBQWxCO1FBQ0UsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRU0sd0NBQUksR0FBWDtRQUFBLGlCQUlDO1FBSEMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUMxQyxLQUFJLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzlCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksNENBQVEsR0FBZixVQUFnQixJ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ZjtRQUVELElBQU0sa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekQsa0JBQWtCLENBQUMsT0FBTyxDQUFDLFVBQUMsSUFBSTtZQUM5QixJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMxRCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7O2dCQXZIeUIsY0FBYztnQkFDcEIsUUFBUTtnQkFDVixNQUFNOztJQWJiLHlCQUF5QjtRQURyQyxVQUFVLEVBQUU7T0FDQSx5QkFBeUIsQ0FvSXJDO0lBQUQsZ0NBQUM7Q0FBQSxBQXBJRCxJQW9JQztTQXBJWSx5QkFBeUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBMb2NhdGlvblxufSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge1xuICBJbmplY3RhYmxlLFxuICBPbkRlc3Ryb3lcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7XG4gIEFjdGl2YXRlZFJvdXRlLFxuICBSb3V0ZXJcbn0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgU3Vic2NyaXB0aW9uTGlrZVxufSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiBAaW50ZXJuYWxcbiAqL1xuaW50ZXJmYWNlIFBlcm1hbGlua1BhcmFtcyB7XG4gIFtfOiBzdHJpbmddOiBzdHJpbmc7XG59XG5cbi8qKlxuICogQGludGVybmFsXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTa3lUYWJzZXRQZXJtYWxpbmtTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcblxuICBwdWJsaWMgZ2V0IHBvcFN0YXRlQ2hhbmdlKCk6IE9ic2VydmFibGU8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLl9wb3BTdGF0ZUNoYW5nZS5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX3BvcFN0YXRlQ2hhbmdlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uTGlrZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyXG4gICkgeyB9XG5cbiAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMubG9jYXRpb24uc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgIHRoaXMuX3BvcFN0YXRlQ2hhbmdlLm5leHQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSB2YWx1ZSBvZiBhIFVSTCBxdWVyeSBwYXJhbS5cbiAgICovXG4gIHB1YmxpYyBnZXRQYXJhbShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLmdldFBhcmFtcygpW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHZhbHVlIG9mIGEgVVJMIHF1ZXJ5IHBhcmFtLlxuICAgKi9cbiAgcHVibGljIHNldFBhcmFtKG5hbWU6IHN0cmluZywgdmFsdWU6IHN0cmluZyB8IG51bGwpOiB2b2lkIHtcbiAgICBjb25zdCBwYXJhbXMgPSB0aGlzLmdldFBhcmFtcygpO1xuXG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICBkZWxldGUgcGFyYW1zW25hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICBwYXJhbXNbbmFtZV0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIFVSTCB3aXRob3V0IHRyaWdnZXJpbmcgYSBuYXZpZ2F0aW9uIHN0YXRlIGNoYW5nZS5cbiAgICAvLyBTZWU6IGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80NjQ4NjY3N1xuICAgIGNvbnN0IHVybCA9IHRoaXMucm91dGVyLmNyZWF0ZVVybFRyZWUoWycuJ10sIHtcbiAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZhdGVkUm91dGUsXG4gICAgICBxdWVyeVBhcmFtczogcGFyYW1zLFxuICAgICAgcXVlcnlQYXJhbXNIYW5kbGluZzogJ21lcmdlJ1xuICAgIH0pLnRvU3RyaW5nKCk7XG5cbiAgICAvLyBBYm9ydCByZWRpcmVjdCBpZiB0aGUgY3VycmVudCBVUkwgaXMgZXF1YWwgdG8gdGhlIG5ldyBVUkwuXG4gICAgaWYgKHRoaXMubG9jYXRpb24uaXNDdXJyZW50UGF0aEVxdWFsVG8odXJsKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubG9jYXRpb24uZ28odXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmVzIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbSBmcm9tIHRoZSBVUkwuXG4gICAqL1xuICBwdWJsaWMgY2xlYXJQYXJhbShuYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICAvKnRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1udWxsLWtleXdvcmQqL1xuICAgIHRoaXMuc2V0UGFyYW0obmFtZSwgbnVsbCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIHJlbGF0aXZlIFVSTCB0aGF0IGluY2x1ZGVzIHRoZSBwcm92aWRlZCBxdWVyeSBwYXJhbWV0ZXIuIFRoZSB2YWx1ZSBpcyBpbnRlZGVkIHRvIGJlXG4gICAqIHVzZWQgYnkgYW4gSFRNTCBhbmNob3IgZWxlbWVudC5cbiAgICovXG4gIHB1YmxpYyBnZXRQYXJhbUhyZWYobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgaWYgKCFuYW1lKSB7XG4gICAgICAvKnRzbGludDpkaXNhYmxlLW5leHQtbGluZTpuby1udWxsLWtleXdvcmQqL1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgY29uc3QgcGFyYW1zID0gdGhpcy5nZXRQYXJhbXMoKTtcbiAgICBwYXJhbXNbbmFtZV0gPSB2YWx1ZTtcblxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzLmxvY2F0aW9uLnBhdGgoKS5zcGxpdCgnPycpWzBdO1xuICAgIGNvbnN0IHBhcmFtU3RyaW5nID0gT2JqZWN0LmtleXMocGFyYW1zKS5tYXAoayA9PiBgJHtrfT0ke3BhcmFtc1trXX1gKS5qb2luKCcmJyk7XG5cbiAgICByZXR1cm4gdGhpcy5sb2NhdGlvbi5wcmVwYXJlRXh0ZXJuYWxVcmwoYCR7YmFzZVVybH0/JHtwYXJhbVN0cmluZ31gKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyB0aGUgcHJvdmlkZWQgc3RyaW5nIGludG8gYSB2YWx1ZSB0aGF0IGNhbiBiZSBzYWZlbHkgdXNlZCBpbiBhIFVSTC5cbiAgICovXG4gIHB1YmxpYyB1cmxpZnkodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCF2YWx1ZSkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IHNhbml0aXplZCA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgLy8gUmVtb3ZlIHNwZWNpYWwgY2hhcmFjdGVycy5cbiAgICAgIC5yZXBsYWNlKC9bXFxfXFx+XFxgXFxAXFwhXFwjXFwkXFwlXFxeXFwmXFwqXFwoXFwpXFxbXFxdXFx7XFx9XFw7XFw6XFwnXFwvXFxcXFxcPFxcPlxcLFxcLlxcP1xcPVxcK1xcfFwiXS9nLCAnJylcblxuICAgICAgLy8gUmVwbGFjZSBzcGFjZSBjaGFyYWN0ZXJzIHdpdGggYSBkYXNoLlxuICAgICAgLnJlcGxhY2UoL1xccy9nLCAnLScpXG5cbiAgICAgIC8vIFJlbW92ZSBhbnkgZG91YmxlLWRhc2hlcy5cbiAgICAgIC5yZXBsYWNlKC8tLS9nLCAnLScpO1xuXG4gICAgcmV0dXJuIHNhbml0aXplZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGFsbCBxdWVyeSBwYXJhbXMgdGhhdCBleGlzdCBpbiB0aGUgY3VycmVudCBVUkwuXG4gICAqL1xuICBwcml2YXRlIGdldFBhcmFtcygpOiBQZXJtYWxpbmtQYXJhbXMge1xuICAgIGNvbnN0IHBhcmFtczogUGVybWFsaW5rUGFyYW1zID0ge307XG5cbiAgICBjb25zdCBwYXRoID0gdGhpcy5sb2NhdGlvbi5wYXRoKCk7XG4gICAgaWYgKHBhdGguaW5kZXhPZignPycpID09PSAtMSkge1xuICAgICAgcmV0dXJuIHBhcmFtcztcbiAgICB9XG5cbiAgICBjb25zdCBleGlzdGluZ1BhcmFtUGFpcnMgPSBwYXRoLnNwbGl0KCc/JylbMV0uc3BsaXQoJyYnKTtcbiAgICBleGlzdGluZ1BhcmFtUGFpcnMuZm9yRWFjaCgocGFpcikgPT4ge1xuICAgICAgY29uc3QgZnJhZ21lbnRzID0gcGFpci5zcGxpdCgnPScpO1xuICAgICAgcGFyYW1zW2ZyYWdtZW50c1swXV0gPSBkZWNvZGVVUklDb21wb25lbnQoZnJhZ21lbnRzWzFdKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBwYXJhbXM7XG4gIH1cblxufVxuIl19
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LXN0eWxlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQHNreXV4L3RhYnMvIiwic291cmNlcyI6WyJtb2R1bGVzL3RhYnMvdGFic2V0LXN0eWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgdHlwZSBTa3lUYWJzZXRTdHlsZSA9ICd0YWJzJyB8ICd3aXphcmQnO1xuIl19
@@ -1 +0,0 @@
1
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LXRhYi1pbmRleGVzLWNoYW5nZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC90YWJzLyIsInNvdXJjZXMiOlsibW9kdWxlcy90YWJzL3RhYnNldC10YWItaW5kZXhlcy1jaGFuZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIFNreVRhYkluZGV4XG59IGZyb20gJy4vdGFiLWluZGV4JztcblxuZXhwb3J0IGludGVyZmFjZSBTa3lUYWJzZXRUYWJJbmRleGVzQ2hhbmdlIHtcblxuICB0YWJzPzoge1xuXG4gICAgdGFiSGVhZGluZzogc3RyaW5nO1xuXG4gICAgdGFiSW5kZXg6IFNreVRhYkluZGV4O1xuXG4gIH1bXTtcblxufVxuIl19
@@ -1,434 +0,0 @@
1
- import { __decorate } from "tslib";
2
- import { AfterViewInit, ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Input, OnDestroy, Output, QueryList, ViewEncapsulation } from '@angular/core';
3
- import { combineLatest, race, Subject } from 'rxjs';
4
- import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
5
- import { SkyTabComponent } from './tab.component';
6
- import { SkyTabsetAdapterService } from './tabset-adapter.service';
7
- import { SkyTabsetPermalinkService } from './tabset-permalink.service';
8
- import { SkyTabsetService } from './tabset.service';
9
- var SkyTabsetComponent = /** @class */ (function () {
10
- function SkyTabsetComponent(changeDetector, elementRef, adapterService, permalinkService, tabsetService) {
11
- this.changeDetector = changeDetector;
12
- this.elementRef = elementRef;
13
- this.adapterService = adapterService;
14
- this.permalinkService = permalinkService;
15
- this.tabsetService = tabsetService;
16
- /**
17
- * Fires when the active tab changes. This event emits the index of the active tab.
18
- */
19
- this.activeChange = new EventEmitter();
20
- /**
21
- * Fires when users click the button to add a new tab.
22
- * The new tab button is added to the tab area when you specify a listener for this event.
23
- */
24
- this.newTab = new EventEmitter();
25
- /**
26
- * Fires when users click the button to open a tab.
27
- * The open tab button is added to the tab area when you specify a listener for this event.
28
- */
29
- this.openTab = new EventEmitter();
30
- /**
31
- * Fires when any tab's `tabIndex` value changes.
32
- */
33
- this.tabIndexesChange = new EventEmitter();
34
- this.tabButtons = [];
35
- this.ngUnsubscribe = new Subject();
36
- this.tabComponentsStateChangeUnsubscribe = new Subject();
37
- }
38
- Object.defineProperty(SkyTabsetComponent.prototype, "active", {
39
- get: function () {
40
- return this._active;
41
- },
42
- /**
43
- * Activates a tab by its `tabIndex` property.
44
- */
45
- set: function (value) {
46
- var _this = this;
47
- if (value === undefined ||
48
- this.tabsetService.tabIndexesEqual(value, this._active)) {
49
- return;
50
- }
51
- this._active = value;
52
- if (this.tabs) {
53
- this.tabsetService.setActiveTabIndex(value);
54
- }
55
- else {
56
- // On init, wait for children tabs to render before broadcasting the active tab index.
57
- setTimeout(function () {
58
- if (_this.tabsetService.isValidTabIndex(value)) {
59
- // On init, yield to the permalink ID, if it exists.
60
- if (_this.getActiveTabIndexByPermalinkId() === undefined) {
61
- _this.tabsetService.setActiveTabIndex(value);
62
- }
63
- }
64
- else {
65
- // Activate the first tab if the new tab index is invalid.
66
- _this._active = _this.tabsetService.activateFirstTab();
67
- }
68
- });
69
- }
70
- },
71
- enumerable: true,
72
- configurable: true
73
- });
74
- Object.defineProperty(SkyTabsetComponent.prototype, "permalinkId", {
75
- get: function () {
76
- return this._permalinkId || '';
77
- },
78
- /**
79
- * Distinguishes a tabset's unique state in the URL by generating a query parameter
80
- * that is written as `?<queryParam>-active-tab=<sanitized-tab-heading>`.
81
- * The query parameter's value is parsed automatically from the selected tab's heading text,
82
- * but you can supply a custom query parameter value for each tab with its `permalinkValue`.
83
- */
84
- set: function (value) {
85
- if (!value) {
86
- return;
87
- }
88
- var sanitized = this.permalinkService.urlify(value);
89
- this._permalinkId = sanitized + "-active-tab";
90
- },
91
- enumerable: true,
92
- configurable: true
93
- });
94
- Object.defineProperty(SkyTabsetComponent.prototype, "tabStyle", {
95
- get: function () {
96
- return this._tabStyle || 'tabs';
97
- },
98
- /**
99
- * Specifies the behavior for a series of tabs.
100
- * @deprecated The property was designed to create wizards by setting tabStyle="wizard" on tabsets in modals,
101
- * but this wizard implementation was replaced by the
102
- * [progress indicator component](https://developer.blackbaud.com/skyux/components/progress-indicator).
103
- * @default 'tabs'
104
- */
105
- set: function (value) {
106
- /*istanbul ignore else*/
107
- if (value && value.toLowerCase() === 'wizard') {
108
- console.warn('The tabset wizard is deprecated. Please implement the new approach using ' +
109
- 'progress indicator as documented here: https://developer.blackbaud.com/skyux/components/wizard.');
110
- }
111
- this._tabStyle = value;
112
- },
113
- enumerable: true,
114
- configurable: true
115
- });
116
- Object.defineProperty(SkyTabsetComponent.prototype, "tabDisplayMode", {
117
- get: function () {
118
- return this._tabDisplayMode || 'tabs';
119
- },
120
- set: function (value) {
121
- this._tabDisplayMode = value;
122
- this.changeDetector.markForCheck();
123
- },
124
- enumerable: true,
125
- configurable: true
126
- });
127
- SkyTabsetComponent.prototype.ngAfterViewInit = function () {
128
- var _this = this;
129
- this.initTabComponents();
130
- this.listenTabComponentsStructuralChange();
131
- var initialTabIndex = this.getInitialTabIndex();
132
- this.tabsetService.setActiveTabIndex(initialTabIndex);
133
- this.listenTabButtonsOverflowChange();
134
- this.listenLocationPopStateChange();
135
- // If the currently active tab is getting unregistered, activate the next one.
136
- this.tabsetService.activeTabUnregistered
137
- .pipe(takeUntil(this.ngUnsubscribe))
138
- .subscribe(function (tab) {
139
- // Wait for the new tabs to render before activating.
140
- setTimeout(function () {
141
- _this.tabsetService.activateNearestTab(tab.arrayIndex);
142
- });
143
- });
144
- // Let the tabset render the initial active index before listening for changes.
145
- setTimeout(function () {
146
- _this.listenTabComponentsStateChange();
147
- _this.listenActiveIndexChange();
148
- _this.permalinkService.init();
149
- });
150
- };
151
- SkyTabsetComponent.prototype.ngOnDestroy = function () {
152
- this.ngUnsubscribe.next();
153
- this.ngUnsubscribe.complete();
154
- this.unsubscribeTabComponentsStateChange();
155
- this.permalinkService.clearParam(this.permalinkId);
156
- };
157
- SkyTabsetComponent.prototype.onWindowResize = function () {
158
- this.adapterService.detectOverflow();
159
- };
160
- SkyTabsetComponent.prototype.onTabCloseClick = function (tabButton) {
161
- var _this = this;
162
- var tabComponent = this.tabs.find(function (tab) {
163
- return _this.tabsetService.tabIndexesEqual(tab.tabIndex, tabButton.tabIndex);
164
- });
165
- tabComponent.close.emit();
166
- };
167
- SkyTabsetComponent.prototype.onTabButtonClick = function (tabButton) {
168
- this.tabsetService.setActiveTabIndex(tabButton.tabIndex);
169
- };
170
- SkyTabsetComponent.prototype.onNewTabClick = function () {
171
- this.newTab.emit();
172
- };
173
- SkyTabsetComponent.prototype.onOpenTabClick = function () {
174
- this.openTab.emit();
175
- };
176
- /**
177
- * Sets the initial active tab index based on the following criteria.
178
- * 1. Does the URL include a query param that reflects this tabset's active tab?
179
- * 2. Does one of the tab components have their `active` property set to `true`?
180
- * 3. Is the tabset component's `active` property set to a specific tab index?
181
- */
182
- SkyTabsetComponent.prototype.getInitialTabIndex = function () {
183
- var _a;
184
- var activeIndex = this.getActiveTabIndexByPermalinkId();
185
- if (activeIndex === undefined) {
186
- activeIndex = (_a = this.getActiveTabComponent()) === null || _a === void 0 ? void 0 : _a.tabIndex;
187
- if (activeIndex === undefined) {
188
- activeIndex = this.active;
189
- }
190
- }
191
- return activeIndex;
192
- };
193
- SkyTabsetComponent.prototype.listenActiveIndexChange = function () {
194
- var _this = this;
195
- this.tabsetService.activeTabIndex
196
- .pipe(distinctUntilChanged(), takeUntil(this.ngUnsubscribe))
197
- .subscribe(function (activeIndex) {
198
- _this.updateTabsetComponent(activeIndex);
199
- });
200
- };
201
- SkyTabsetComponent.prototype.listenTabComponentsStructuralChange = function () {
202
- var _this = this;
203
- this.tabs.changes
204
- .pipe(takeUntil(this.ngUnsubscribe))
205
- .subscribe(function () {
206
- _this.resetTabComponents();
207
- });
208
- };
209
- SkyTabsetComponent.prototype.listenTabComponentsStateChange = function () {
210
- var _this = this;
211
- combineLatest(this.tabs.map(function (tab) { return tab.activeChange; }))
212
- .pipe(takeUntil(race(this.tabComponentsStateChangeUnsubscribe, this.ngUnsubscribe)))
213
- .subscribe(function () {
214
- // Wait for the tab components to render changes before finding the active one.
215
- setTimeout(function () {
216
- var _a;
217
- var tabIndex = (_a = _this.getActiveTabComponent()) === null || _a === void 0 ? void 0 : _a.tabIndex;
218
- _this.tabsetService.setActiveTabIndex(tabIndex);
219
- });
220
- });
221
- combineLatest(this.tabs.map(function (tab) { return tab.tabIndexChange; }))
222
- .pipe(takeUntil(race(this.tabComponentsStateChangeUnsubscribe, this.ngUnsubscribe)))
223
- .subscribe(function () {
224
- // Don't emit the first change.
225
- if (_this.lastActiveTabIndex !== undefined) {
226
- // Wait for the tab components to render changes before updating the view.
227
- setTimeout(function () {
228
- _this.updateTabsetComponent(_this.tabsetService.currentActiveTabIndex, true);
229
- _this.emitTabIndexChange();
230
- });
231
- }
232
- });
233
- combineLatest(this.tabs.map(function (tab) { return tab.stateChange; }))
234
- .pipe(takeUntil(race(this.tabComponentsStateChangeUnsubscribe, this.ngUnsubscribe)))
235
- .subscribe(function () {
236
- // Wait for the tab components to render changes before finding the active one.
237
- setTimeout(function () {
238
- _this.updateTabsetComponent(_this.tabsetService.currentActiveTabIndex, true);
239
- });
240
- });
241
- };
242
- SkyTabsetComponent.prototype.initTabComponents = function () {
243
- this.tabs.forEach(function (tab) { return tab.init(); });
244
- };
245
- SkyTabsetComponent.prototype.resetTabComponents = function () {
246
- var _a;
247
- this.unsubscribeTabComponentsStateChange();
248
- this.tabsetService.unregisterAll();
249
- // If there are no tab components, do a hard reset of the view.
250
- if (this.tabs.length === 0) {
251
- this.updateTabsetComponent(0, true);
252
- return;
253
- }
254
- this.initTabComponents();
255
- var activeIndex = (_a = this.getActiveTabComponent()) === null || _a === void 0 ? void 0 : _a.tabIndex;
256
- this.tabsetService.setActiveTabIndex(activeIndex, {
257
- emitChange: false
258
- });
259
- this.listenTabComponentsStateChange();
260
- };
261
- SkyTabsetComponent.prototype.emitTabIndexChange = function () {
262
- this.tabIndexesChange.emit({
263
- tabs: this.tabs.map(function (tab) { return ({
264
- tabHeading: tab.tabHeading,
265
- tabIndex: tab.tabIndex
266
- }); })
267
- });
268
- };
269
- SkyTabsetComponent.prototype.unsubscribeTabComponentsStateChange = function () {
270
- this.tabComponentsStateChangeUnsubscribe.next();
271
- this.tabComponentsStateChangeUnsubscribe.complete();
272
- this.tabComponentsStateChangeUnsubscribe = new Subject();
273
- };
274
- SkyTabsetComponent.prototype.listenTabButtonsOverflowChange = function () {
275
- var _this = this;
276
- this.adapterService.registerTabset(this.elementRef);
277
- this.adapterService.overflowChange
278
- .pipe(takeUntil(this.ngUnsubscribe))
279
- .subscribe(function (isOverflowing) {
280
- _this.tabDisplayMode = (isOverflowing) ? 'dropdown' : 'tabs';
281
- _this.changeDetector.markForCheck();
282
- });
283
- };
284
- /**
285
- * Listen for back/forward history button presses to detect query param changes in the URL.
286
- */
287
- SkyTabsetComponent.prototype.listenLocationPopStateChange = function () {
288
- var _this = this;
289
- this.permalinkService.popStateChange
290
- .pipe(takeUntil(this.ngUnsubscribe))
291
- .subscribe(function () {
292
- _this.setActiveTabIndexByPermalinkId();
293
- });
294
- };
295
- SkyTabsetComponent.prototype.setActiveTabIndexByPermalinkId = function () {
296
- var activeIndex = this.getActiveTabIndexByPermalinkId();
297
- this.tabsetService.setActiveTabIndex(activeIndex);
298
- };
299
- SkyTabsetComponent.prototype.getActiveTabIndexByPermalinkId = function () {
300
- var _a;
301
- if (this.permalinkId) {
302
- var paramValue_1 = this.permalinkService.getParam(this.permalinkId);
303
- if (paramValue_1) {
304
- return (_a = this.tabs.find(function (tab) { return tab.permalinkValue === paramValue_1; })) === null || _a === void 0 ? void 0 : _a.tabIndex;
305
- }
306
- }
307
- };
308
- SkyTabsetComponent.prototype.getActiveTabComponent = function () {
309
- return this.tabs.toArray().reverse().find(function (tab) { return tab.active === true; });
310
- };
311
- SkyTabsetComponent.prototype.createTabButtons = function (activeIndex) {
312
- var _this = this;
313
- return this.tabs.map(function (tab) { return ({
314
- active: _this.tabsetService.tabIndexesEqual(tab.tabIndex, activeIndex),
315
- closeable: tab.closeable,
316
- ariaControls: tab.tabPanelId,
317
- disabled: tab.disabled,
318
- /*tslint:disable-next-line:no-null-keyword*/
319
- buttonHref: (tab.disabled) ? null : _this.permalinkService.getParamHref(_this.permalinkId, tab.permalinkValue),
320
- buttonId: tab.tabButtonId,
321
- buttonTextCount: tab.tabHeaderCount,
322
- buttonText: tab.tabHeading,
323
- tabIndex: tab.tabIndex
324
- }); });
325
- };
326
- SkyTabsetComponent.prototype.updateTabButtons = function (activeIndex) {
327
- var _this = this;
328
- this.tabButtons.forEach(function (button) {
329
- button.active = _this.tabsetService.tabIndexesEqual(button.tabIndex, activeIndex);
330
- });
331
- };
332
- /**
333
- * Updates the UI and state of the tabset component after the tab index or
334
- * tab components have changed.
335
- * @param activeIndex The currently active tab index.
336
- * @param regenerateTabButtons Indicates if tab button view models should be regenerated.
337
- * Setting this value to `false` will simply update the existing tab buttons. Setting this value
338
- * to `true` is only necessary when the underlying tab components have changed and the tab
339
- * buttons must reflect those changes.
340
- */
341
- SkyTabsetComponent.prototype.updateTabsetComponent = function (activeIndex, regenerateTabButtons) {
342
- var _this = this;
343
- if (regenerateTabButtons === void 0) { regenerateTabButtons = false; }
344
- var _a;
345
- // Activate/deactivate tab components.
346
- this.tabs.forEach(function (tab) {
347
- _this.tabsetService.tabIndexesEqual(tab.tabIndex, activeIndex)
348
- ? tab.activate()
349
- : tab.deactivate();
350
- });
351
- // Update the tab button models.
352
- if (regenerateTabButtons || !this.tabButtons.length) {
353
- this.tabButtons = this.createTabButtons(activeIndex);
354
- }
355
- else {
356
- this.updateTabButtons(activeIndex);
357
- }
358
- // Update the dropdown trigger button text.
359
- this.dropdownTriggerButtonText = (_a = this.tabButtons.find(function (b) {
360
- return _this.tabsetService.tabIndexesEqual(b.tabIndex, activeIndex);
361
- })) === null || _a === void 0 ? void 0 : _a.buttonText;
362
- // Set the query params based on active tab.
363
- if (this.permalinkId) {
364
- var activeTabComponent = this.tabs.find(function (tab) {
365
- return _this.tabsetService.tabIndexesEqual(tab.tabIndex, activeIndex);
366
- });
367
- this.permalinkService.setParam(this.permalinkId, activeTabComponent.permalinkValue);
368
- }
369
- // Wait for tab button view models to render before gauging dimensions.
370
- setTimeout(function () {
371
- _this.adapterService.detectOverflow();
372
- });
373
- this.changeDetector.markForCheck();
374
- // Emit the new active index value to consumers.
375
- if (this.lastActiveTabIndex !== activeIndex) {
376
- this.lastActiveTabIndex = activeIndex;
377
- this.activeChange.emit(activeIndex);
378
- }
379
- };
380
- SkyTabsetComponent.ctorParameters = function () { return [
381
- { type: ChangeDetectorRef },
382
- { type: ElementRef },
383
- { type: SkyTabsetAdapterService },
384
- { type: SkyTabsetPermalinkService },
385
- { type: SkyTabsetService }
386
- ]; };
387
- __decorate([
388
- Input()
389
- ], SkyTabsetComponent.prototype, "active", null);
390
- __decorate([
391
- Input()
392
- ], SkyTabsetComponent.prototype, "ariaLabel", void 0);
393
- __decorate([
394
- Input()
395
- ], SkyTabsetComponent.prototype, "ariaLabelledBy", void 0);
396
- __decorate([
397
- Input()
398
- ], SkyTabsetComponent.prototype, "permalinkId", null);
399
- __decorate([
400
- Input()
401
- ], SkyTabsetComponent.prototype, "tabStyle", null);
402
- __decorate([
403
- Output()
404
- ], SkyTabsetComponent.prototype, "activeChange", void 0);
405
- __decorate([
406
- Output()
407
- ], SkyTabsetComponent.prototype, "newTab", void 0);
408
- __decorate([
409
- Output()
410
- ], SkyTabsetComponent.prototype, "openTab", void 0);
411
- __decorate([
412
- Output()
413
- ], SkyTabsetComponent.prototype, "tabIndexesChange", void 0);
414
- __decorate([
415
- ContentChildren(SkyTabComponent)
416
- ], SkyTabsetComponent.prototype, "tabs", void 0);
417
- SkyTabsetComponent = __decorate([
418
- Component({
419
- selector: 'sky-tabset',
420
- template: "<div\n class=\"sky-tabset\"\n role=\"tablist\"\n [attr.aria-label]=\"ariaLabel\"\n [attr.aria-labelledby]=\"ariaLabelledBy\"\n [ngClass]=\"'sky-tabset-mode-' + tabDisplayMode + ' sky-tabset-style-' + tabStyle\"\n (window:resize)=\"onWindowResize()\"\n>\n <span class=\"sky-tabset-dropdown\">\n <sky-dropdown *ngIf=\"tabDisplayMode === 'dropdown'\"\n buttonType=\"tab\"\n >\n <sky-dropdown-button>\n {{ dropdownTriggerButtonText }}\n </sky-dropdown-button>\n <sky-dropdown-menu>\n <sky-dropdown-item *ngFor=\"let tabButton of tabButtons\"\n class=\"sky-tab-dropdown-menu-item\"\n >\n <div\n class=\"sky-tab-dropdown-item\"\n [ngClass]=\"{\n 'sky-tab-dropdown-item-selected': tabButton.active\n }\"\n >\n <ng-container *ngTemplateOutlet=\"tabButtonTemplate; context: {\n $implicit: tabButton\n }\"></ng-container>\n </div>\n </sky-dropdown-item>\n </sky-dropdown-menu>\n </sky-dropdown>\n </span>\n <span\n class=\"sky-tabset-tabs\"\n >\n <ng-container *ngFor=\"let tabButton of tabButtons\">\n <ng-container *ngTemplateOutlet=\"tabButtonTemplate; context: {\n $implicit: tabButton\n }\"></ng-container>\n </ng-container>\n </span>\n <span\n class=\"sky-tabset-btns\"\n >\n <button *ngIf=\"newTab.observers.length > 0\"\n class=\"sky-btn sky-btn-icon sky-tabset-btn-new sky-margin-inline-compact\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_tab_add' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-margin-inline-sm': 'modern'\n }\"\n (click)=\"onNewTabClick()\"\n >\n <sky-icon\n icon=\"plus-circle\"\n size=\"lg\"\n >\n </sky-icon>\n </button>\n <button *ngIf=\"openTab.observers.length > 0\"\n class=\"sky-btn sky-btn-icon sky-tabset-btn-open sky-margin-inline-compact\"\n type=\"button\"\n [attr.aria-label]=\"'skyux_tab_open' | skyLibResources\"\n [skyThemeClass]=\"{\n 'sky-margin-inline-sm': 'modern'\n }\"\n (click)=\"onOpenTabClick()\"\n >\n <sky-icon\n icon=\"folder-open-o\"\n size=\"lg\"\n >\n </sky-icon>\n </button>\n </span>\n</div>\n<ng-content></ng-content>\n\n<ng-template\n let-tabButton\n #tabButtonTemplate\n>\n <sky-tab-button\n [active]=\"tabButton.active\"\n [ariaControls]=\"tabButton.ariaControls\"\n [buttonHref]=\"tabButton.buttonHref\"\n [buttonId]=\"tabButton.buttonId\"\n [buttonText]=\"tabButton.buttonText\"\n [buttonTextCount]=\"tabButton.buttonTextCount\"\n [closeable]=\"tabButton.closeable\"\n [disabled]=\"tabButton.disabled\"\n [tabStyle]=\"tabStyle\"\n (buttonClick)=\"onTabButtonClick(tabButton)\"\n (closeClick)=\"onTabCloseClick(tabButton)\"\n ></sky-tab-button>\n</ng-template>\n",
421
- providers: [
422
- SkyTabsetAdapterService,
423
- SkyTabsetPermalinkService,
424
- SkyTabsetService
425
- ],
426
- changeDetection: ChangeDetectionStrategy.OnPush,
427
- encapsulation: ViewEncapsulation.None,
428
- styles: [".sky-tabset{align-items:center;border-bottom:2px solid #0974a1;display:flex;list-style-type:none;margin:0;overflow:hidden;padding:0 0 0 15px;white-space:nowrap}.sky-tabset.sky-tabset-style-wizard{border-bottom:none;padding-bottom:10px;padding-left:0}.sky-tabset-btns{order:1;padding-left:10px}.sky-tabset-dropdown{order:0;max-width:100%}.sky-tabset-mode-dropdown{line-height:0}.sky-tabset-mode-dropdown .sky-tabset-tabs{visibility:hidden;order:2}.sky-tab-dropdown-menu-item sky-tab-button{display:flex;min-width:300px}.sky-tab-dropdown-menu-item .sky-dropdown-item{margin:0}.sky-tab-dropdown-menu-item .sky-btn-tab-wrapper{width:100%;margin-right:0}.sky-tab-dropdown-menu-item .sky-btn-tab{margin:0;border-radius:0;width:100%;display:flex}.sky-tab-dropdown-menu-item .sky-btn-tab>.sky-tab-heading{flex:1 1 auto}.sky-tab-dropdown-menu-item .sky-btn-tab>.sky-btn-tab-close{flex:0 1 auto}.sky-tabset-tabs{order:0;white-space:nowrap}.sky-tabset-btn-new,.sky-tabset-btn-open{color:#0974a1}.sky-theme-modern .sky-tabset{border-bottom:1px solid #d2d2d2;overflow:visible}.sky-theme-modern .sky-tab-dropdown-menu-item .sky-btn-tab-wrapper{margin-right:0}"]
429
- })
430
- ], SkyTabsetComponent);
431
- return SkyTabsetComponent;
432
- }());
433
- export { SkyTabsetComponent };
434
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFic2V0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0Bza3l1eC90YWJzLyIsInNvdXJjZXMiOlsibW9kdWxlcy90YWJzL3RhYnNldC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFDTCxhQUFhLEVBQ2IsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBQ04sU0FBUyxFQUNULGlCQUFpQixFQUNsQixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQ0wsYUFBYSxFQUNiLElBQUksRUFDSixPQUFPLEVBQ1IsTUFBTSxNQUFNLENBQUM7QUFFZCxPQUFPLEVBQ0wsb0JBQW9CLEVBQ3BCLFNBQVMsRUFDVixNQUFNLGdCQUFnQixDQUFDO0FBVXhCLE9BQU8sRUFDTCxlQUFlLEVBQ2hCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUNMLHVCQUF1QixFQUN4QixNQUFNLDBCQUEwQixDQUFDO0FBTWxDLE9BQU8sRUFDTCx5QkFBeUIsRUFDMUIsTUFBTSw0QkFBNEIsQ0FBQztBQUVwQyxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2pCLE1BQU0sa0JBQWtCLENBQUM7QUFpQzFCO0lBK0pFLDRCQUNVLGNBQWlDLEVBQ2pDLFVBQXNCLEVBQ3RCLGNBQXVDLEVBQ3ZDLGdCQUEyQyxFQUMzQyxhQUErQjtRQUovQixtQkFBYyxHQUFkLGNBQWMsQ0FBbUI7UUFDakMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixtQkFBYyxHQUFkLGNBQWMsQ0FBeUI7UUFDdkMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEyQjtRQUMzQyxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFqRXpDOztXQUVHO1FBRUksaUJBQVksR0FBRyxJQUFJLFlBQVksRUFBZSxDQUFDO1FBRXREOzs7V0FHRztRQUVJLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRXpDOzs7V0FHRztRQUVJLFlBQU8sR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO1FBRTFDOztXQUVHO1FBRUkscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7UUFzQmpFLGVBQVUsR0FBeUIsRUFBRSxDQUFDO1FBRXJDLGtCQUFhLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUVwQyx3Q0FBbUMsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO0lBZ0I5RCxDQUFDO0lBL0pMLHNCQUFXLHNDQUFNO2FBNEJqQjtZQUNFLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUN0QixDQUFDO1FBbENEOztXQUVHO2FBRUgsVUFBa0IsS0FBa0I7WUFEcEMsaUJBMkJDO1lBekJDLElBQ0UsS0FBSyxLQUFLLFNBQVM7Z0JBQ25CLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQ3ZEO2dCQUNBLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBRXJCLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtnQkFDYixJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQzdDO2lCQUFNO2dCQUNMLHNGQUFzRjtnQkFDdEYsVUFBVSxDQUFDO29CQUNULElBQUksS0FBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEVBQUU7d0JBQzdDLG9EQUFvRDt3QkFDcEQsSUFBSSxLQUFJLENBQUMsOEJBQThCLEVBQUUsS0FBSyxTQUFTLEVBQUU7NEJBQ3ZELEtBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7eUJBQzdDO3FCQUNGO3lCQUFNO3dCQUNMLDBEQUEwRDt3QkFDMUQsS0FBSSxDQUFDLE9BQU8sR0FBRyxLQUFJLENBQUMsYUFBYSxDQUFDLGdCQUFnQixFQUFFLENBQUM7cUJBQ3REO2dCQUNILENBQUMsQ0FBQyxDQUFDO2FBQ0o7UUFDSCxDQUFDOzs7T0FBQTtJQThCRCxzQkFBVywyQ0FBVzthQVN0QjtZQUNFLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxFQUFFLENBQUM7UUFDakMsQ0FBQztRQWxCRDs7Ozs7V0FLRzthQUVILFVBQXVCLEtBQWE7WUFDbEMsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVixPQUFPO2FBQ1I7WUFFRCxJQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RELElBQUksQ0FBQyxZQUFZLEdBQU0sU0FBUyxnQkFBYSxDQUFDO1FBQ2hELENBQUM7OztPQUFBO0lBY0Qsc0JBQVcsd0NBQVE7YUFZbkI7WUFDRSxPQUFPLElBQUksQ0FBQyxTQUFTLElBQUksTUFBTSxDQUFDO1FBQ2xDLENBQUM7UUF0QkQ7Ozs7OztXQU1HO2FBRUgsVUFBb0IsS0FBcUI7WUFDdkMsd0JBQXdCO1lBQ3hCLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxRQUFRLEVBQUU7Z0JBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQ1YsMkVBQTJFO29CQUMzRSxpR0FBaUcsQ0FDbEcsQ0FBQzthQUNIO1lBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDekIsQ0FBQzs7O09BQUE7SUFnQ0Qsc0JBQVcsOENBQWM7YUFLekI7WUFDRSxPQUFPLElBQUksQ0FBQyxlQUFlLElBQUksTUFBTSxDQUFDO1FBQ3hDLENBQUM7YUFQRCxVQUEwQixLQUFrQztZQUMxRCxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztZQUM3QixJQUFJLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3JDLENBQUM7OztPQUFBO0lBdUNNLDRDQUFlLEdBQXRCO1FBQUEsaUJBMkJDO1FBekJDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO1FBRTNDLElBQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdEQsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDdEMsSUFBSSxDQUFDLDRCQUE0QixFQUFFLENBQUM7UUFFcEMsOEVBQThFO1FBQzlFLElBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCO2FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQyxVQUFBLEdBQUc7WUFDWixxREFBcUQ7WUFDckQsVUFBVSxDQUFDO2dCQUNULEtBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3hELENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFTCwrRUFBK0U7UUFDL0UsVUFBVSxDQUFDO1lBQ1QsS0FBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7WUFDdEMsS0FBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7WUFDL0IsS0FBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVNLHdDQUFXLEdBQWxCO1FBQ0UsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzlCLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxDQUFDO1FBQzNDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFTSwyQ0FBYyxHQUFyQjtRQUNFLElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYyxFQUFFLENBQUM7SUFDdkMsQ0FBQztJQUVNLDRDQUFlLEdBQXRCLFVBQXVCLFNBQTZCO1FBQXBELGlCQU1DO1FBTEMsSUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBQSxHQUFHO1lBQ3JDLE9BQUEsS0FBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUSxDQUFDO1FBQXBFLENBQW9FLENBQ3JFLENBQUM7UUFFRixZQUFZLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFTSw2Q0FBZ0IsR0FBdkIsVUFBd0IsU0FBNkI7UUFDbkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUVNLDBDQUFhLEdBQXBCO1FBQ0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sMkNBQWMsR0FBckI7UUFDRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLCtDQUFrQixHQUExQjs7UUFDRSxJQUFJLFdBQVcsR0FBZ0IsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDckUsSUFBSSxXQUFXLEtBQUssU0FBUyxFQUFFO1lBQzdCLFdBQVcsU0FBRyxJQUFJLENBQUMscUJBQXFCLEVBQUUsMENBQUUsUUFBUSxDQUFDO1lBQ3JELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtnQkFDN0IsV0FBVyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDM0I7U0FDRjtRQUVELE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFTyxvREFBdUIsR0FBL0I7UUFBQSxpQkFTQztRQVJDLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYzthQUM5QixJQUFJLENBQ0gsb0JBQW9CLEVBQUUsRUFDdEIsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FDOUI7YUFDQSxTQUFTLENBQUMsVUFBQSxXQUFXO1lBQ3BCLEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTyxnRUFBbUMsR0FBM0M7UUFBQSxpQkFNQztRQUxDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTzthQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ25DLFNBQVMsQ0FBQztZQUNULEtBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzVCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLDJEQUE4QixHQUF0QztRQUFBLGlCQWdDQztRQS9CQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsWUFBWSxFQUFoQixDQUFnQixDQUFDLENBQUM7YUFDbEQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLG1DQUFtQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO2FBQ25GLFNBQVMsQ0FBQztZQUNULCtFQUErRTtZQUMvRSxVQUFVLENBQUM7O2dCQUNULElBQU0sUUFBUSxTQUFHLEtBQUksQ0FBQyxxQkFBcUIsRUFBRSwwQ0FBRSxRQUFRLENBQUM7Z0JBQ3hELEtBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDakQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVMLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLEdBQUcsQ0FBQyxjQUFjLEVBQWxCLENBQWtCLENBQUMsQ0FBQzthQUNwRCxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsbUNBQW1DLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7YUFDbkYsU0FBUyxDQUFDO1lBQ1QsK0JBQStCO1lBQy9CLElBQUksS0FBSSxDQUFDLGtCQUFrQixLQUFLLFNBQVMsRUFBRTtnQkFDekMsMEVBQTBFO2dCQUMxRSxVQUFVLENBQUM7b0JBQ1QsS0FBSSxDQUFDLHFCQUFxQixDQUFDLEtBQUksQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsSUFBSSxDQUFDLENBQUM7b0JBQzNFLEtBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO2dCQUM1QixDQUFDLENBQUMsQ0FBQzthQUNKO1FBQ0gsQ0FBQyxDQUFDLENBQUM7UUFFTCxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsV0FBVyxFQUFmLENBQWUsQ0FBQyxDQUFDO2FBQ2pELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQ0FBbUMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQzthQUNuRixTQUFTLENBQUM7WUFDVCwrRUFBK0U7WUFDL0UsVUFBVSxDQUFDO2dCQUNULEtBQUksQ0FBQyxxQkFBcUIsQ0FBQyxLQUFJLENBQUMsYUFBYSxDQUFDLHFCQUFxQixFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzdFLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sOENBQWlCLEdBQXpCO1FBQ0UsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBQSxHQUFHLElBQUksT0FBQSxHQUFHLENBQUMsSUFBSSxFQUFFLEVBQVYsQ0FBVSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLCtDQUFrQixHQUExQjs7UUFDRSxJQUFJLENBQUMsbUNBQW1DLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBRW5DLCtEQUErRDtRQUMvRCxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUMxQixJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQ3BDLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQU0sV0FBVyxTQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSwwQ0FBRSxRQUFRLENBQUM7UUFDM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEVBQUU7WUFDaEQsVUFBVSxFQUFFLEtBQUs7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7SUFDeEMsQ0FBQztJQUVPLCtDQUFrQixHQUExQjtRQUNFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUM7WUFDekIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsQ0FBQztnQkFDMUIsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO2dCQUMxQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7YUFDdkIsQ0FBQyxFQUh5QixDQUd6QixDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGdFQUFtQyxHQUEzQztRQUNFLElBQUksQ0FBQyxtQ0FBbUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNoRCxJQUFJLENBQUMsbUNBQW1DLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLG1DQUFtQyxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFDakUsQ0FBQztJQUVPLDJEQUE4QixHQUF0QztRQUFBLGlCQVFDO1FBUEMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxjQUFjLENBQUMsY0FBYzthQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzthQUNuQyxTQUFTLENBQUMsVUFBQSxhQUFhO1lBQ3RCLEtBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDNUQsS0FBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNyQyxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNLLHlEQUE0QixHQUFwQztRQUFBLGlCQU1DO1FBTEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWM7YUFDakMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7YUFDbkMsU0FBUyxDQUFDO1lBQ1QsS0FBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDeEMsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sMkRBQThCLEdBQXRDO1FBQ0UsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNwRCxDQUFDO0lBRU8sMkRBQThCLEdBQXRDOztRQUNFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNwQixJQUFNLFlBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRSxJQUFJLFlBQVUsRUFBRTtnQkFDZCxhQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsR0FBRyxDQUFDLGNBQWMsS0FBSyxZQUFVLEVBQWpDLENBQWlDLENBQUMsMENBQUUsUUFBUSxDQUFDO2FBQzNFO1NBQ0Y7SUFDSCxDQUFDO0lBRU8sa0RBQXFCLEdBQTdCO1FBQ0UsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFBLEdBQUcsSUFBSSxPQUFBLEdBQUcsQ0FBQyxNQUFNLEtBQUssSUFBSSxFQUFuQixDQUFtQixDQUFDLENBQUM7SUFDeEUsQ0FBQztJQUVPLDZDQUFnQixHQUF4QixVQUF5QixXQUF3QjtRQUFqRCxpQkFnQkM7UUFmQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQUEsR0FBRyxJQUFJLE9BQUEsQ0FBQztZQUMzQixNQUFNLEVBQUUsS0FBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUM7WUFDckUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxTQUFTO1lBQ3hCLFlBQVksRUFBRSxHQUFHLENBQUMsVUFBVTtZQUM1QixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVE7WUFDdEIsNENBQTRDO1lBQzVDLFVBQVUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUNwRSxLQUFJLENBQUMsV0FBVyxFQUNoQixHQUFHLENBQUMsY0FBYyxDQUNuQjtZQUNELFFBQVEsRUFBRSxHQUFHLENBQUMsV0FBVztZQUN6QixlQUFlLEVBQUUsR0FBRyxDQUFDLGNBQWM7WUFDbkMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxVQUFVO1lBQzFCLFFBQVEsRUFBRSxHQUFHLENBQUMsUUFBUTtTQUN2QixDQUFDLEVBZDBCLENBYzFCLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFTyw2Q0FBZ0IsR0FBeEIsVUFBeUIsV0FBd0I7UUFBakQsaUJBSUM7UUFIQyxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxVQUFBLE1BQU07WUFDNUIsTUFBTSxDQUFDLE1BQU0sR0FBRyxLQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ25GLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7Ozs7OztPQVFHO0lBQ0ssa0RBQXFCLEdBQTdCLFVBQ0UsV0FBd0IsRUFDeEIsb0JBQTRCO1FBRjlCLGlCQTRDQztRQTFDQyxxQ0FBQSxFQUFBLDRCQUE0Qjs7UUFHNUIsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztZQUNuQixLQUFJLENBQUMsYUFBYSxDQUFDLGVBQWUsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQztnQkFDM0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2hCLENBQUMsQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDdkIsQ0FBQyxDQUFDLENBQUM7UUFFSCxnQ0FBZ0M7UUFDaEMsSUFBSSxvQkFBb0IsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1lBQ25ELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1NBQ3REO2FBQU07WUFDTCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDcEM7UUFFRCwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLHlCQUF5QixTQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQUEsQ0FBQztZQUNyRCxPQUFPLEtBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckUsQ0FBQyxDQUFDLDBDQUFFLFVBQVUsQ0FBQztRQUVmLDRDQUE0QztRQUM1QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFBLEdBQUc7Z0JBQzNDLE9BQU8sS0FBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUN2RSxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxrQkFBa0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUNyRjtRQUVELHVFQUF1RTtRQUN2RSxVQUFVLENBQUM7WUFDVCxLQUFJLENBQUMsY0FBYyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUVuQyxnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsa0JBQWtCLEtBQUssV0FBVyxFQUFFO1lBQzNDLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxXQUFXLENBQUM7WUFDdEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDOztnQkFuU3lCLGlCQUFpQjtnQkFDckIsVUFBVTtnQkFDTix1QkFBdUI7Z0JBQ3JCLHlCQUF5QjtnQkFDNUIsZ0JBQWdCOztJQTlKekM7UUFEQyxLQUFLLEVBQUU7b0RBMkJQO0lBWUQ7UUFEQyxLQUFLLEVBQUU7eURBQ2lCO0lBU3pCO1FBREMsS0FBSyxFQUFFOzhEQUNzQjtJQVM5QjtRQURDLEtBQUssRUFBRTt5REFRUDtJQWNEO1FBREMsS0FBSyxFQUFFO3NEQVdQO0lBVUQ7UUFEQyxNQUFNLEVBQUU7NERBQzZDO0lBT3REO1FBREMsTUFBTSxFQUFFO3NEQUNnQztJQU96QztRQURDLE1BQU0sRUFBRTt1REFDaUM7SUFNMUM7UUFEQyxNQUFNLEVBQUU7Z0VBQytEO0lBWXhFO1FBREMsZUFBZSxDQUFDLGVBQWUsQ0FBQztvREFDTztJQXZJN0Isa0JBQWtCO1FBWjlCLFNBQVMsQ0FBQztZQUNULFFBQVEsRUFBRSxZQUFZO1lBRXRCLGs0RkFBc0M7WUFDdEMsU0FBUyxFQUFFO2dCQUNULHVCQUF1QjtnQkFDdkIseUJBQXlCO2dCQUN6QixnQkFBZ0I7YUFDakI7WUFDRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtZQUMvQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTs7U0FDdEMsQ0FBQztPQUNXLGtCQUFrQixDQW9jOUI7SUFBRCx5QkFBQztDQUFBLEFBcGNELElBb2NDO1NBcGNZLGtCQUFrQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE9uRGVzdHJveSxcbiAgT3V0cHV0LFxuICBRdWVyeUxpc3QsXG4gIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQge1xuICBjb21iaW5lTGF0ZXN0LFxuICByYWNlLFxuICBTdWJqZWN0XG59IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1xuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgdGFrZVVudGlsXG59IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHtcbiAgU2t5VGFiSW5kZXhcbn0gZnJvbSAnLi90YWItaW5kZXgnO1xuXG5pbXBvcnQge1xuICBTa3lUYWJzZXRTdHlsZVxufSBmcm9tICcuL3RhYnNldC1zdHlsZSc7XG5cbmltcG9ydCB7XG4gIFNreVRhYkNvbXBvbmVudFxufSBmcm9tICcuL3RhYi5jb21wb25lbnQnO1xuXG5pbXBvcnQge1xuICBTa3lUYWJzZXRBZGFwdGVyU2VydmljZVxufSBmcm9tICcuL3RhYnNldC1hZGFwdGVyLnNlcnZpY2UnO1xuXG5pbXBvcnQge1xuICBTa3lUYWJzZXRCdXR0b25zRGlzcGxheU1vZGVcbn0gZnJvbSAnLi90YWJzZXQtYnV0dG9ucy1kaXNwbGF5LW1vZGUnO1xuXG5pbXBvcnQge1xuICBTa3lUYWJzZXRQZXJtYWxpbmtTZXJ2aWNlXG59IGZyb20gJy4vdGFic2V0LXBlcm1hbGluay5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgU2t5VGFic2V0U2VydmljZVxufSBmcm9tICcuL3RhYnNldC5zZXJ2aWNlJztcblxuaW1wb3J0IHtcbiAgU2t5VGFic2V0VGFiSW5kZXhlc0NoYW5nZVxufSBmcm9tICcuL3RhYnNldC10YWItaW5kZXhlcy1jaGFuZ2UnO1xuXG4vKipcbiAqIEBpbnRlcm5hbFxuICovXG5pbnRlcmZhY2UgVGFiQnV0dG9uVmlld01vZGVsIHtcbiAgYWN0aXZlOiBib29sZWFuO1xuICBhcmlhQ29udHJvbHM6IHN0cmluZztcbiAgYnV0dG9uSHJlZjogc3RyaW5nO1xuICBidXR0b25JZDogc3RyaW5nO1xuICBidXR0b25UZXh0OiBzdHJpbmc7XG4gIGJ1dHRvblRleHRDb3VudDogc3RyaW5nO1xuICBjbG9zZWFibGU6IGJvb2xlYW47XG4gIGRpc2FibGVkOiBib29sZWFuO1xuICB0YWJJbmRleDogU2t5VGFiSW5kZXg7XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS10YWJzZXQnLFxuICBzdHlsZVVybHM6IFsnLi90YWJzZXQuY29tcG9uZW50LnNjc3MnXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYnNldC5jb21wb25lbnQuaHRtbCcsXG4gIHByb3ZpZGVyczogW1xuICAgIFNreVRhYnNldEFkYXB0ZXJTZXJ2aWNlLFxuICAgIFNreVRhYnNldFBlcm1hbGlua1NlcnZpY2UsXG4gICAgU2t5VGFic2V0U2VydmljZVxuICBdLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxufSlcbmV4cG9ydCBjbGFzcyBTa3lUYWJzZXRDb21wb25lbnQgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3kge1xuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgYSB0YWIgYnkgaXRzIGB0YWJJbmRleGAgcHJvcGVydHkuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGFjdGl2ZSh2YWx1ZTogU2t5VGFiSW5kZXgpIHtcbiAgICBpZiAoXG4gICAgICB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICB0aGlzLnRhYnNldFNlcnZpY2UudGFiSW5kZXhlc0VxdWFsKHZhbHVlLCB0aGlzLl9hY3RpdmUpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlID0gdmFsdWU7XG5cbiAgICBpZiAodGhpcy50YWJzKSB7XG4gICAgICB0aGlzLnRhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgodmFsdWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPbiBpbml0LCB3YWl0IGZvciBjaGlsZHJlbiB0YWJzIHRvIHJlbmRlciBiZWZvcmUgYnJvYWRjYXN0aW5nIHRoZSBhY3RpdmUgdGFiIGluZGV4LlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnRhYnNldFNlcnZpY2UuaXNWYWxpZFRhYkluZGV4KHZhbHVlKSkge1xuICAgICAgICAgIC8vIE9uIGluaXQsIHlpZWxkIHRvIHRoZSBwZXJtYWxpbmsgSUQsIGlmIGl0IGV4aXN0cy5cbiAgICAgICAgICBpZiAodGhpcy5nZXRBY3RpdmVUYWJJbmRleEJ5UGVybWFsaW5rSWQoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnRhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBY3RpdmF0ZSB0aGUgZmlyc3QgdGFiIGlmIHRoZSBuZXcgdGFiIGluZGV4IGlzIGludmFsaWQuXG4gICAgICAgICAgdGhpcy5fYWN0aXZlID0gdGhpcy50YWJzZXRTZXJ2aWNlLmFjdGl2YXRlRmlyc3RUYWIoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGdldCBhY3RpdmUoKTogU2t5VGFiSW5kZXgge1xuICAgIHJldHVybiB0aGlzLl9hY3RpdmU7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIGFuIEFSSUEgbGFiZWwgZm9yIHRoZSB0YWJzZXQuIFRoaXMgc2V0cyB0aGUgdGFic2V0J3MgYGFyaWEtbGFiZWxgIGF0dHJpYnV0ZVxuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKiBJZiB0aGUgdGFic2V0IGluY2x1ZGVzIGEgdmlzaWJsZSBsYWJlbCwgdXNlIGBhcmlhTGFiZWxsZWRCeWAgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWw6IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBIVE1MIGVsZW1lbnQgSUQgKHdpdGhvdXQgdGhlIGxlYWRpbmcgYCNgKSBvZiB0aGUgZWxlbWVudCB0aGF0IGxhYmVsc1xuICAgKiB0aGUgdGFic2V0LiBUaGlzIHNldHMgdGhlIHRhYnNldCdzIGBhcmlhLWxhYmVsbGVkYnlgIGF0dHJpYnV0ZVxuICAgKiBbdG8gc3VwcG9ydCBhY2Nlc3NpYmlsaXR5XShodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2xlYXJuL2FjY2Vzc2liaWxpdHkpLlxuICAgKiBJZiB0aGUgdGFic2V0IGRvZXMgbm90IGluY2x1ZGUgYSB2aXNpYmxlIGxhYmVsLCB1c2UgYGFyaWFMYWJlbGAgaW5zdGVhZC5cbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBhcmlhTGFiZWxsZWRCeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEaXN0aW5ndWlzaGVzIGEgdGFic2V0J3MgdW5pcXVlIHN0YXRlIGluIHRoZSBVUkwgYnkgZ2VuZXJhdGluZyBhIHF1ZXJ5IHBhcmFtZXRlclxuICAgKiB0aGF0IGlzIHdyaXR0ZW4gYXMgYD88cXVlcnlQYXJhbT4tYWN0aXZlLXRhYj08c2FuaXRpemVkLXRhYi1oZWFkaW5nPmAuXG4gICAqIFRoZSBxdWVyeSBwYXJhbWV0ZXIncyB2YWx1ZSBpcyBwYXJzZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSBzZWxlY3RlZCB0YWIncyBoZWFkaW5nIHRleHQsXG4gICAqIGJ1dCB5b3UgY2FuIHN1cHBseSBhIGN1c3RvbSBxdWVyeSBwYXJhbWV0ZXIgdmFsdWUgZm9yIGVhY2ggdGFiIHdpdGggaXRzIGBwZXJtYWxpbmtWYWx1ZWAuXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IHBlcm1hbGlua0lkKHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXZhbHVlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2FuaXRpemVkID0gdGhpcy5wZXJtYWxpbmtTZXJ2aWNlLnVybGlmeSh2YWx1ZSk7XG4gICAgdGhpcy5fcGVybWFsaW5rSWQgPSBgJHtzYW5pdGl6ZWR9LWFjdGl2ZS10YWJgO1xuICB9XG5cbiAgcHVibGljIGdldCBwZXJtYWxpbmtJZCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLl9wZXJtYWxpbmtJZCB8fCAnJztcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIGJlaGF2aW9yIGZvciBhIHNlcmllcyBvZiB0YWJzLlxuICAgKiBAZGVwcmVjYXRlZCBUaGUgcHJvcGVydHkgd2FzIGRlc2lnbmVkIHRvIGNyZWF0ZSB3aXphcmRzIGJ5IHNldHRpbmcgdGFiU3R5bGU9XCJ3aXphcmRcIiBvbiB0YWJzZXRzIGluIG1vZGFscyxcbiAgICogYnV0IHRoaXMgd2l6YXJkIGltcGxlbWVudGF0aW9uIHdhcyByZXBsYWNlZCBieSB0aGVcbiAgICogW3Byb2dyZXNzIGluZGljYXRvciBjb21wb25lbnRdKGh0dHBzOi8vZGV2ZWxvcGVyLmJsYWNrYmF1ZC5jb20vc2t5dXgvY29tcG9uZW50cy9wcm9ncmVzcy1pbmRpY2F0b3IpLlxuICAgKiBAZGVmYXVsdCAndGFicydcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgdGFiU3R5bGUodmFsdWU6IFNreVRhYnNldFN0eWxlKSB7XG4gICAgLyppc3RhbmJ1bCBpZ25vcmUgZWxzZSovXG4gICAgaWYgKHZhbHVlICYmIHZhbHVlLnRvTG93ZXJDYXNlKCkgPT09ICd3aXphcmQnKSB7XG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgICdUaGUgdGFic2V0IHdpemFyZCBpcyBkZXByZWNhdGVkLiBQbGVhc2UgaW1wbGVtZW50IHRoZSBuZXcgYXBwcm9hY2ggdXNpbmcgJyArXG4gICAgICAgICdwcm9ncmVzcyBpbmRpY2F0b3IgYXMgZG9jdW1lbnRlZCBoZXJlOiBodHRwczovL2RldmVsb3Blci5ibGFja2JhdWQuY29tL3NreXV4L2NvbXBvbmVudHMvd2l6YXJkLidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fdGFiU3R5bGUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgdGFiU3R5bGUoKTogU2t5VGFic2V0U3R5bGUge1xuICAgIHJldHVybiB0aGlzLl90YWJTdHlsZSB8fCAndGFicyc7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB0aGUgYWN0aXZlIHRhYiBjaGFuZ2VzLiBUaGlzIGV2ZW50IGVtaXRzIHRoZSBpbmRleCBvZiB0aGUgYWN0aXZlIHRhYi5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgYWN0aXZlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxTa3lUYWJJbmRleD4oKTtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBjbGljayB0aGUgYnV0dG9uIHRvIGFkZCBhIG5ldyB0YWIuXG4gICAqIFRoZSBuZXcgdGFiIGJ1dHRvbiBpcyBhZGRlZCB0byB0aGUgdGFiIGFyZWEgd2hlbiB5b3Ugc3BlY2lmeSBhIGxpc3RlbmVyIGZvciB0aGlzIGV2ZW50LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBuZXdUYWIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gdXNlcnMgY2xpY2sgdGhlIGJ1dHRvbiB0byBvcGVuIGEgdGFiLlxuICAgKiBUaGUgb3BlbiB0YWIgYnV0dG9uIGlzIGFkZGVkIHRvIHRoZSB0YWIgYXJlYSB3aGVuIHlvdSBzcGVjaWZ5IGEgbGlzdGVuZXIgZm9yIHRoaXMgZXZlbnQuXG4gICAqL1xuICBAT3V0cHV0KClcbiAgcHVibGljIG9wZW5UYWIgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgLyoqXG4gICAqIEZpcmVzIHdoZW4gYW55IHRhYidzIGB0YWJJbmRleGAgdmFsdWUgY2hhbmdlcy5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgdGFiSW5kZXhlc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5VGFic2V0VGFiSW5kZXhlc0NoYW5nZT4oKTtcblxuICBwdWJsaWMgc2V0IHRhYkRpc3BsYXlNb2RlKHZhbHVlOiBTa3lUYWJzZXRCdXR0b25zRGlzcGxheU1vZGUpIHtcbiAgICB0aGlzLl90YWJEaXNwbGF5TW9kZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IHRhYkRpc3BsYXlNb2RlKCk6IFNreVRhYnNldEJ1dHRvbnNEaXNwbGF5TW9kZSB7XG4gICAgcmV0dXJuIHRoaXMuX3RhYkRpc3BsYXlNb2RlIHx8ICd0YWJzJztcbiAgfVxuXG4gIEBDb250ZW50Q2hpbGRyZW4oU2t5VGFiQ29tcG9uZW50KVxuICBwdWJsaWMgdGFiczogUXVlcnlMaXN0PFNreVRhYkNvbXBvbmVudD47XG5cbiAgcHVibGljIGRyb3Bkb3duVHJpZ2dlckJ1dHRvblRleHQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBwcm9wZXJ0eSBpcyB1c2VkIGJ5IHRoZSBkZXByZWNhdGVkIHRhYnNldC1uYXYtYnV0dG9uIGNvbXBvbmVudC5cbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgbGFzdEFjdGl2ZVRhYkluZGV4OiBTa3lUYWJJbmRleDtcblxuICBwdWJsaWMgdGFiQnV0dG9uczogVGFiQnV0dG9uVmlld01vZGVsW10gPSBbXTtcblxuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgdGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIHByaXZhdGUgX2FjdGl2ZTogU2t5VGFiSW5kZXg7XG5cbiAgcHJpdmF0ZSBfcGVybWFsaW5rSWQ6IHN0cmluZztcblxuICBwcml2YXRlIF90YWJEaXNwbGF5TW9kZTogU2t5VGFic2V0QnV0dG9uc0Rpc3BsYXlNb2RlO1xuXG4gIHByaXZhdGUgX3RhYlN0eWxlOiBTa3lUYWJzZXRTdHlsZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBhZGFwdGVyU2VydmljZTogU2t5VGFic2V0QWRhcHRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwZXJtYWxpbmtTZXJ2aWNlOiBTa3lUYWJzZXRQZXJtYWxpbmtTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGFic2V0U2VydmljZTogU2t5VGFic2V0U2VydmljZVxuICApIHsgfVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cbiAgICB0aGlzLmluaXRUYWJDb21wb25lbnRzKCk7XG4gICAgdGhpcy5saXN0ZW5UYWJDb21wb25lbnRzU3RydWN0dXJhbENoYW5nZSgpO1xuXG4gICAgY29uc3QgaW5pdGlhbFRhYkluZGV4ID0gdGhpcy5nZXRJbml0aWFsVGFiSW5kZXgoKTtcbiAgICB0aGlzLnRhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgoaW5pdGlhbFRhYkluZGV4KTtcblxuICAgIHRoaXMubGlzdGVuVGFiQnV0dG9uc092ZXJmbG93Q2hhbmdlKCk7XG4gICAgdGhpcy5saXN0ZW5Mb2NhdGlvblBvcFN0YXRlQ2hhbmdlKCk7XG5cbiAgICAvLyBJZiB0aGUgY3VycmVudGx5IGFjdGl2ZSB0YWIgaXMgZ2V0dGluZyB1bnJlZ2lzdGVyZWQsIGFjdGl2YXRlIHRoZSBuZXh0IG9uZS5cbiAgICB0aGlzLnRhYnNldFNlcnZpY2UuYWN0aXZlVGFiVW5yZWdpc3RlcmVkXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUodGFiID0+IHtcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIG5ldyB0YWJzIHRvIHJlbmRlciBiZWZvcmUgYWN0aXZhdGluZy5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy50YWJzZXRTZXJ2aWNlLmFjdGl2YXRlTmVhcmVzdFRhYih0YWIuYXJyYXlJbmRleCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG5cbiAgICAvLyBMZXQgdGhlIHRhYnNldCByZW5kZXIgdGhlIGluaXRpYWwgYWN0aXZlIGluZGV4IGJlZm9yZSBsaXN0ZW5pbmcgZm9yIGNoYW5nZXMuXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLmxpc3RlblRhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZSgpO1xuICAgICAgdGhpcy5saXN0ZW5BY3RpdmVJbmRleENoYW5nZSgpO1xuICAgICAgdGhpcy5wZXJtYWxpbmtTZXJ2aWNlLmluaXQoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMubmdVbnN1YnNjcmliZS5jb21wbGV0ZSgpO1xuICAgIHRoaXMudW5zdWJzY3JpYmVUYWJDb21wb25lbnRzU3RhdGVDaGFuZ2UoKTtcbiAgICB0aGlzLnBlcm1hbGlua1NlcnZpY2UuY2xlYXJQYXJhbSh0aGlzLnBlcm1hbGlua0lkKTtcbiAgfVxuXG4gIHB1YmxpYyBvbldpbmRvd1Jlc2l6ZSgpOiB2b2lkIHtcbiAgICB0aGlzLmFkYXB0ZXJTZXJ2aWNlLmRldGVjdE92ZXJmbG93KCk7XG4gIH1cblxuICBwdWJsaWMgb25UYWJDbG9zZUNsaWNrKHRhYkJ1dHRvbjogVGFiQnV0dG9uVmlld01vZGVsKTogdm9pZCB7XG4gICAgY29uc3QgdGFiQ29tcG9uZW50ID0gdGhpcy50YWJzLmZpbmQodGFiID0+XG4gICAgICB0aGlzLnRhYnNldFNlcnZpY2UudGFiSW5kZXhlc0VxdWFsKHRhYi50YWJJbmRleCwgdGFiQnV0dG9uLnRhYkluZGV4KVxuICAgICk7XG5cbiAgICB0YWJDb21wb25lbnQuY2xvc2UuZW1pdCgpO1xuICB9XG5cbiAgcHVibGljIG9uVGFiQnV0dG9uQ2xpY2sodGFiQnV0dG9uOiBUYWJCdXR0b25WaWV3TW9kZWwpOiB2b2lkIHtcbiAgICB0aGlzLnRhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgodGFiQnV0dG9uLnRhYkluZGV4KTtcbiAgfVxuXG4gIHB1YmxpYyBvbk5ld1RhYkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMubmV3VGFiLmVtaXQoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk9wZW5UYWJDbGljaygpOiB2b2lkIHtcbiAgICB0aGlzLm9wZW5UYWIuZW1pdCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIGluaXRpYWwgYWN0aXZlIHRhYiBpbmRleCBiYXNlZCBvbiB0aGUgZm9sbG93aW5nIGNyaXRlcmlhLlxuICAgKiAxLiBEb2VzIHRoZSBVUkwgaW5jbHVkZSBhIHF1ZXJ5IHBhcmFtIHRoYXQgcmVmbGVjdHMgdGhpcyB0YWJzZXQncyBhY3RpdmUgdGFiP1xuICAgKiAyLiBEb2VzIG9uZSBvZiB0aGUgdGFiIGNvbXBvbmVudHMgaGF2ZSB0aGVpciBgYWN0aXZlYCBwcm9wZXJ0eSBzZXQgdG8gYHRydWVgP1xuICAgKiAzLiBJcyB0aGUgdGFic2V0IGNvbXBvbmVudCdzIGBhY3RpdmVgIHByb3BlcnR5IHNldCB0byBhIHNwZWNpZmljIHRhYiBpbmRleD9cbiAgICovXG4gIHByaXZhdGUgZ2V0SW5pdGlhbFRhYkluZGV4KCk6IFNreVRhYkluZGV4IHtcbiAgICBsZXQgYWN0aXZlSW5kZXg6IFNreVRhYkluZGV4ID0gdGhpcy5nZXRBY3RpdmVUYWJJbmRleEJ5UGVybWFsaW5rSWQoKTtcbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgYWN0aXZlSW5kZXggPSB0aGlzLmdldEFjdGl2ZVRhYkNvbXBvbmVudCgpPy50YWJJbmRleDtcbiAgICAgIGlmIChhY3RpdmVJbmRleCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGFjdGl2ZUluZGV4ID0gdGhpcy5hY3RpdmU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjdGl2ZUluZGV4O1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5BY3RpdmVJbmRleENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYnNldFNlcnZpY2UuYWN0aXZlVGFiSW5kZXhcbiAgICAgIC5waXBlKFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhY3RpdmVJbmRleCA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlVGFic2V0Q29tcG9uZW50KGFjdGl2ZUluZGV4KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5UYWJDb21wb25lbnRzU3RydWN0dXJhbENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYnMuY2hhbmdlc1xuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5yZXNldFRhYkNvbXBvbmVudHMoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBsaXN0ZW5UYWJDb21wb25lbnRzU3RhdGVDaGFuZ2UoKTogdm9pZCB7XG4gICAgY29tYmluZUxhdGVzdCh0aGlzLnRhYnMubWFwKHRhYiA9PiB0YWIuYWN0aXZlQ2hhbmdlKSlcbiAgICAgIC5waXBlKHRha2VVbnRpbChyYWNlKHRoaXMudGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlVW5zdWJzY3JpYmUsIHRoaXMubmdVbnN1YnNjcmliZSkpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIFdhaXQgZm9yIHRoZSB0YWIgY29tcG9uZW50cyB0byByZW5kZXIgY2hhbmdlcyBiZWZvcmUgZmluZGluZyB0aGUgYWN0aXZlIG9uZS5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLmdldEFjdGl2ZVRhYkNvbXBvbmVudCgpPy50YWJJbmRleDtcbiAgICAgICAgICB0aGlzLnRhYnNldFNlcnZpY2Uuc2V0QWN0aXZlVGFiSW5kZXgodGFiSW5kZXgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuXG4gICAgY29tYmluZUxhdGVzdCh0aGlzLnRhYnMubWFwKHRhYiA9PiB0YWIudGFiSW5kZXhDaGFuZ2UpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHJhY2UodGhpcy50YWJDb21wb25lbnRzU3RhdGVDaGFuZ2VVbnN1YnNjcmliZSwgdGhpcy5uZ1Vuc3Vic2NyaWJlKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gRG9uJ3QgZW1pdCB0aGUgZmlyc3QgY2hhbmdlLlxuICAgICAgICBpZiAodGhpcy5sYXN0QWN0aXZlVGFiSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIC8vIFdhaXQgZm9yIHRoZSB0YWIgY29tcG9uZW50cyB0byByZW5kZXIgY2hhbmdlcyBiZWZvcmUgdXBkYXRpbmcgdGhlIHZpZXcuXG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVRhYnNldENvbXBvbmVudCh0aGlzLnRhYnNldFNlcnZpY2UuY3VycmVudEFjdGl2ZVRhYkluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdFRhYkluZGV4Q2hhbmdlKCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgY29tYmluZUxhdGVzdCh0aGlzLnRhYnMubWFwKHRhYiA9PiB0YWIuc3RhdGVDaGFuZ2UpKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHJhY2UodGhpcy50YWJDb21wb25lbnRzU3RhdGVDaGFuZ2VVbnN1YnNjcmliZSwgdGhpcy5uZ1Vuc3Vic2NyaWJlKSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHRhYiBjb21wb25lbnRzIHRvIHJlbmRlciBjaGFuZ2VzIGJlZm9yZSBmaW5kaW5nIHRoZSBhY3RpdmUgb25lLlxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZVRhYnNldENvbXBvbmVudCh0aGlzLnRhYnNldFNlcnZpY2UuY3VycmVudEFjdGl2ZVRhYkluZGV4LCB0cnVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdFRhYkNvbXBvbmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy50YWJzLmZvckVhY2godGFiID0+IHRhYi5pbml0KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNldFRhYkNvbXBvbmVudHMoKTogdm9pZCB7XG4gICAgdGhpcy51bnN1YnNjcmliZVRhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZSgpO1xuICAgIHRoaXMudGFic2V0U2VydmljZS51bnJlZ2lzdGVyQWxsKCk7XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgbm8gdGFiIGNvbXBvbmVudHMsIGRvIGEgaGFyZCByZXNldCBvZiB0aGUgdmlldy5cbiAgICBpZiAodGhpcy50YWJzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy51cGRhdGVUYWJzZXRDb21wb25lbnQoMCwgdHJ1ZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5pbml0VGFiQ29tcG9uZW50cygpO1xuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5nZXRBY3RpdmVUYWJDb21wb25lbnQoKT8udGFiSW5kZXg7XG4gICAgdGhpcy50YWJzZXRTZXJ2aWNlLnNldEFjdGl2ZVRhYkluZGV4KGFjdGl2ZUluZGV4LCB7XG4gICAgICBlbWl0Q2hhbmdlOiBmYWxzZVxuICAgIH0pO1xuICAgIHRoaXMubGlzdGVuVGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlKCk7XG4gIH1cblxuICBwcml2YXRlIGVtaXRUYWJJbmRleENoYW5nZSgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkluZGV4ZXNDaGFuZ2UuZW1pdCh7XG4gICAgICB0YWJzOiB0aGlzLnRhYnMubWFwKHRhYiA9PiAoe1xuICAgICAgICB0YWJIZWFkaW5nOiB0YWIudGFiSGVhZGluZyxcbiAgICAgICAgdGFiSW5kZXg6IHRhYi50YWJJbmRleFxuICAgICAgfSkpXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHVuc3Vic2NyaWJlVGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMudGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlVW5zdWJzY3JpYmUubmV4dCgpO1xuICAgIHRoaXMudGFiQ29tcG9uZW50c1N0YXRlQ2hhbmdlVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLnRhYkNvbXBvbmVudHNTdGF0ZUNoYW5nZVVuc3Vic2NyaWJlID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcbiAgfVxuXG4gIHByaXZhdGUgbGlzdGVuVGFiQnV0dG9uc092ZXJmbG93Q2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMuYWRhcHRlclNlcnZpY2UucmVnaXN0ZXJUYWJzZXQodGhpcy5lbGVtZW50UmVmKTtcbiAgICB0aGlzLmFkYXB0ZXJTZXJ2aWNlLm92ZXJmbG93Q2hhbmdlXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5uZ1Vuc3Vic2NyaWJlKSlcbiAgICAgIC5zdWJzY3JpYmUoaXNPdmVyZmxvd2luZyA9PiB7XG4gICAgICAgIHRoaXMudGFiRGlzcGxheU1vZGUgPSAoaXNPdmVyZmxvd2luZykgPyAnZHJvcGRvd24nIDogJ3RhYnMnO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogTGlzdGVuIGZvciBiYWNrL2ZvcndhcmQgaGlzdG9yeSBidXR0b24gcHJlc3NlcyB0byBkZXRlY3QgcXVlcnkgcGFyYW0gY2hhbmdlcyBpbiB0aGUgVVJMLlxuICAgKi9cbiAgcHJpdmF0ZSBsaXN0ZW5Mb2NhdGlvblBvcFN0YXRlQ2hhbmdlKCk6IHZvaWQge1xuICAgIHRoaXMucGVybWFsaW5rU2VydmljZS5wb3BTdGF0ZUNoYW5nZVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMubmdVbnN1YnNjcmliZSkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5zZXRBY3RpdmVUYWJJbmRleEJ5UGVybWFsaW5rSWQoKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRBY3RpdmVUYWJJbmRleEJ5UGVybWFsaW5rSWQoKTogdm9pZCB7XG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLmdldEFjdGl2ZVRhYkluZGV4QnlQZXJtYWxpbmtJZCgpO1xuICAgIHRoaXMudGFic2V0U2VydmljZS5zZXRBY3RpdmVUYWJJbmRleChhY3RpdmVJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZVRhYkluZGV4QnlQZXJtYWxpbmtJZCgpOiBTa3lUYWJJbmRleCB7XG4gICAgaWYgKHRoaXMucGVybWFsaW5rSWQpIHtcbiAgICAgIGNvbnN0IHBhcmFtVmFsdWUgPSB0aGlzLnBlcm1hbGlua1NlcnZpY2UuZ2V0UGFyYW0odGhpcy5wZXJtYWxpbmtJZCk7XG4gICAgICBpZiAocGFyYW1WYWx1ZSkge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzLmZpbmQodGFiID0+IHRhYi5wZXJtYWxpbmtWYWx1ZSA9PT0gcGFyYW1WYWx1ZSk/LnRhYkluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0QWN0aXZlVGFiQ29tcG9uZW50KCk6IFNreVRhYkNvbXBvbmVudCB7XG4gICAgcmV0dXJuIHRoaXMudGFicy50b0FycmF5KCkucmV2ZXJzZSgpLmZpbmQodGFiID0+IHRhYi5hY3RpdmUgPT09IHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVUYWJCdXR0b25zKGFjdGl2ZUluZGV4OiBTa3lUYWJJbmRleCk6IFRhYkJ1dHRvblZpZXdNb2RlbFtdIHtcbiAgICByZXR1cm4gdGhpcy50YWJzLm1hcCh0YWIgPT4gKHtcbiAgICAgIGFjdGl2ZTogdGhpcy50YWJzZXRTZXJ2aWNlLnRhYkluZGV4ZXNFcXVhbCh0YWIudGFiSW5kZXgsIGFjdGl2ZUluZGV4KSxcbiAgICAgIGNsb3NlYWJsZTogdGFiLmNsb3NlYWJsZSxcbiAgICAgIGFyaWFDb250cm9sczogdGFiLnRhYlBhbmVsSWQsXG4gICAgICBkaXNhYmxlZDogdGFiLmRpc2FibGVkLFxuICAgICAgLyp0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbnVsbC1rZXl3b3JkKi9cbiAgICAgIGJ1dHRvbkhyZWY6ICh0YWIuZGlzYWJsZWQpID8gbnVsbCA6IHRoaXMucGVybWFsaW5rU2VydmljZS5nZXRQYXJhbUhyZWYoXG4gICAgICAgIHRoaXMucGVybWFsaW5rSWQsXG4gICAgICAgIHRhYi5wZXJtYWxpbmtWYWx1ZVxuICAgICAgKSxcbiAgICAgIGJ1dHRvbklkOiB0YWIudGFiQnV0dG9uSWQsXG4gICAgICBidXR0b25UZXh0Q291bnQ6IHRhYi50YWJIZWFkZXJDb3VudCxcbiAgICAgIGJ1dHRvblRleHQ6IHRhYi50YWJIZWFkaW5nLFxuICAgICAgdGFiSW5kZXg6IHRhYi50YWJJbmRleFxuICAgIH0pKTtcbiAgfVxuXG4gIHByaXZhdGUgdXBkYXRlVGFiQnV0dG9ucyhhY3RpdmVJbmRleDogU2t5VGFiSW5kZXgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYkJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xuICAgICAgYnV0dG9uLmFjdGl2ZSA9IHRoaXMudGFic2V0U2VydmljZS50YWJJbmRleGVzRXF1YWwoYnV0dG9uLnRhYkluZGV4LCBhY3RpdmVJbmRleCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVXBkYXRlcyB0aGUgVUkgYW5kIHN0YXRlIG9mIHRoZSB0YWJzZXQgY29tcG9uZW50IGFmdGVyIHRoZSB0YWIgaW5kZXggb3JcbiAgICogdGFiIGNvbXBvbmVudHMgaGF2ZSBjaGFuZ2VkLlxuICAgKiBAcGFyYW0gYWN0aXZlSW5kZXggVGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiIGluZGV4LlxuICAgKiBAcGFyYW0gcmVnZW5lcmF0ZVRhYkJ1dHRvbnMgSW5kaWNhdGVzIGlmIHRhYiBidXR0b24gdmlldyBtb2RlbHMgc2hvdWxkIGJlIHJlZ2VuZXJhdGVkLlxuICAgKiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gYGZhbHNlYCB3aWxsIHNpbXBseSB1cGRhdGUgdGhlIGV4aXN0aW5nIHRhYiBidXR0b25zLiBTZXR0aW5nIHRoaXMgdmFsdWVcbiAgICogdG8gYHRydWVgIGlzIG9ubHkgbmVjZXNzYXJ5IHdoZW4gdGhlIHVuZGVybHlpbmcgdGFiIGNvbXBvbmVudHMgaGF2ZSBjaGFuZ2VkIGFuZCB0aGUgdGFiXG4gICAqIGJ1dHRvbnMgbXVzdCByZWZsZWN0IHRob3NlIGNoYW5nZXMuXG4gICAqL1xuICBwcml2YXRlIHVwZGF0ZVRhYnNldENvbXBvbmVudChcbiAgICBhY3RpdmVJbmRleDogU2t5VGFiSW5kZXgsXG4gICAgcmVnZW5lcmF0ZVRhYkJ1dHRvbnMgPSBmYWxzZVxuICApOiB2b2lkIHtcblxuICAgIC8vIEFjdGl2YXRlL2RlYWN0aXZhdGUgdGFiIGNvbXBvbmVudHMuXG4gICAgdGhpcy50YWJzLmZvckVhY2godGFiID0+IHtcbiAgICAgIHRoaXMudGFic2V0U2VydmljZS50YWJJbmRleGVzRXF1YWwodGFiLnRhYkluZGV4LCBhY3RpdmVJbmRleClcbiAgICAgICAgPyB0YWIuYWN0aXZhdGUoKVxuICAgICAgICA6IHRhYi5kZWFjdGl2YXRlKCk7XG4gICAgfSk7XG5cbiAgICAvLyBVcGRhdGUgdGhlIHRhYiBidXR0b24gbW9kZWxzLlxuICAgIGlmIChyZWdlbmVyYXRlVGFiQnV0dG9ucyB8fCAhdGhpcy50YWJCdXR0b25zLmxlbmd0aCkge1xuICAgICAgdGhpcy50YWJCdXR0b25zID0gdGhpcy5jcmVhdGVUYWJCdXR0b25zKGFjdGl2ZUluZGV4KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVUYWJCdXR0b25zKGFjdGl2ZUluZGV4KTtcbiAgICB9XG5cbiAgICAvLyBVcGRhdGUgdGhlIGRyb3Bkb3duIHRyaWdnZXIgYnV0dG9uIHRleHQuXG4gICAgdGhpcy5kcm9wZG93blRyaWdnZXJCdXR0b25UZXh0ID0gdGhpcy50YWJCdXR0b25zLmZpbmQoYiA9PiB7XG4gICAgICByZXR1cm4gdGhpcy50YWJzZXRTZXJ2aWNlLnRhYkluZGV4ZXNFcXVhbChiLnRhYkluZGV4LCBhY3RpdmVJbmRleCk7XG4gICAgfSk/LmJ1dHRvblRleHQ7XG5cbiAgICAvLyBTZXQgdGhlIHF1ZXJ5IHBhcmFtcyBiYXNlZCBvbiBhY3RpdmUgdGFiLlxuICAgIGlmICh0aGlzLnBlcm1hbGlua0lkKSB7XG4gICAgICBjb25zdCBhY3RpdmVUYWJDb21wb25lbnQgPSB0aGlzLnRhYnMuZmluZCh0YWIgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy50YWJzZXRTZXJ2aWNlLnRhYkluZGV4ZXNFcXVhbCh0YWIudGFiSW5kZXgsIGFjdGl2ZUluZGV4KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wZXJtYWxpbmtTZXJ2aWNlLnNldFBhcmFtKHRoaXMucGVybWFsaW5rSWQsIGFjdGl2ZVRhYkNvbXBvbmVudC5wZXJtYWxpbmtWYWx1ZSk7XG4gICAgfVxuXG4gICAgLy8gV2FpdCBmb3IgdGFiIGJ1dHRvbiB2aWV3IG1vZGVscyB0byByZW5kZXIgYmVmb3JlIGdhdWdpbmcgZGltZW5zaW9ucy5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuYWRhcHRlclNlcnZpY2UuZGV0ZWN0T3ZlcmZsb3coKTtcbiAgICB9KTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG5cbiAgICAvLyBFbWl0IHRoZSBuZXcgYWN0aXZlIGluZGV4IHZhbHVlIHRvIGNvbnN1bWVycy5cbiAgICBpZiAodGhpcy5sYXN0QWN0aXZlVGFiSW5kZXggIT09IGFjdGl2ZUluZGV4KSB7XG4gICAgICB0aGlzLmxhc3RBY3RpdmVUYWJJbmRleCA9IGFjdGl2ZUluZGV4O1xuICAgICAgdGhpcy5hY3RpdmVDaGFuZ2UuZW1pdChhY3RpdmVJbmRleCk7XG4gICAgfVxuICB9XG59XG4iXX0=