@skyux/progress-indicator 5.0.3 → 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 (80) hide show
  1. package/README.md +6 -4
  2. package/documentation.json +123 -14
  3. package/esm2015/index.js +18 -0
  4. package/esm2015/index.js.map +1 -0
  5. package/esm2015/lib/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.js +74 -0
  6. package/esm2015/lib/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.js.map +1 -0
  7. package/esm2015/lib/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.js +223 -0
  8. package/esm2015/lib/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.js.map +1 -0
  9. package/esm2015/lib/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.js +59 -0
  10. package/esm2015/lib/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.js.map +1 -0
  11. package/esm2015/{modules → lib/modules}/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.js +3 -2
  12. package/esm2015/lib/modules/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.js.map +1 -0
  13. package/esm2015/{modules → lib/modules}/progress-indicator/progress-indicator-title/progress-indicator-title.component.js +1 -1
  14. package/esm2015/lib/modules/progress-indicator/progress-indicator-title/progress-indicator-title.component.js.map +1 -0
  15. package/esm2015/lib/modules/progress-indicator/progress-indicator.component.js +317 -0
  16. package/esm2015/lib/modules/progress-indicator/progress-indicator.component.js.map +1 -0
  17. package/esm2015/lib/modules/progress-indicator/progress-indicator.module.js +65 -0
  18. package/esm2015/lib/modules/progress-indicator/progress-indicator.module.js.map +1 -0
  19. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-action-click-args.js +2 -0
  20. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-action-click-args.js.map +1 -0
  21. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-action-click-progress-handler.js +14 -0
  22. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-action-click-progress-handler.js.map +1 -0
  23. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-change.js +2 -0
  24. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-change.js.map +1 -0
  25. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-display-mode-type.js +2 -0
  26. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-display-mode-type.js.map +1 -0
  27. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-item-status.js +20 -0
  28. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-item-status.js.map +1 -0
  29. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-message-type.js +28 -0
  30. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-message-type.js.map +1 -0
  31. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-message.js +2 -0
  32. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-message.js.map +1 -0
  33. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-mode.js +16 -0
  34. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-mode.js.map +1 -0
  35. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-nav-button-type.js +2 -0
  36. package/esm2015/lib/modules/progress-indicator/types/progress-indicator-nav-button-type.js.map +1 -0
  37. package/esm2015/lib/modules/shared/sky-progress-indicator-resources.module.js +50 -0
  38. package/esm2015/lib/modules/shared/sky-progress-indicator-resources.module.js.map +1 -0
  39. package/esm2015/skyux-progress-indicator.js +2 -2
  40. package/esm2015/skyux-progress-indicator.js.map +1 -0
  41. package/fesm2015/skyux-progress-indicator.js +1 -1
  42. package/fesm2015/skyux-progress-indicator.js.map +1 -1
  43. package/index.d.ts +15 -0
  44. package/{modules → lib/modules}/progress-indicator/progress-indicator-item/progress-indicator-item.component.d.ts +0 -0
  45. package/{modules → lib/modules}/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.d.ts +0 -0
  46. package/{modules → lib/modules}/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.d.ts +0 -0
  47. package/{modules → lib/modules}/progress-indicator/progress-indicator-status-marker/progress-indicator-status-marker.component.d.ts +0 -0
  48. package/{modules → lib/modules}/progress-indicator/progress-indicator-title/progress-indicator-title.component.d.ts +0 -0
  49. package/{modules → lib/modules}/progress-indicator/progress-indicator.component.d.ts +0 -0
  50. package/{modules → lib/modules}/progress-indicator/progress-indicator.module.d.ts +0 -0
  51. package/{modules → lib/modules}/progress-indicator/types/progress-indicator-action-click-args.d.ts +0 -0
  52. package/{modules → lib/modules}/progress-indicator/types/progress-indicator-action-click-progress-handler.d.ts +0 -0
  53. package/{modules → lib/modules}/progress-indicator/types/progress-indicator-change.d.ts +0 -0
  54. package/{modules → lib/modules}/progress-indicator/types/progress-indicator-display-mode-type.d.ts +0 -0
  55. package/{modules → lib/modules}/progress-indicator/types/progress-indicator-item-status.d.ts +0 -0
  56. package/{modules → lib/modules}/progress-indicator/types/progress-indicator-message-type.d.ts +0 -0
  57. package/{modules → lib/modules}/progress-indicator/types/progress-indicator-message.d.ts +0 -0
  58. package/{modules → lib/modules}/progress-indicator/types/progress-indicator-mode.d.ts +0 -0
  59. package/{modules → lib/modules}/progress-indicator/types/progress-indicator-nav-button-type.d.ts +0 -0
  60. package/{modules → lib/modules}/shared/sky-progress-indicator-resources.module.d.ts +0 -0
  61. package/package.json +18 -4
  62. package/skyux-progress-indicator.d.ts +1 -1
  63. package/LICENSE +0 -21
  64. package/esm2015/modules/progress-indicator/progress-indicator-item/progress-indicator-item.component.js +0 -74
  65. package/esm2015/modules/progress-indicator/progress-indicator-nav-button/progress-indicator-nav-button.component.js +0 -222
  66. package/esm2015/modules/progress-indicator/progress-indicator-reset-button/progress-indicator-reset-button.component.js +0 -58
  67. package/esm2015/modules/progress-indicator/progress-indicator.component.js +0 -316
  68. package/esm2015/modules/progress-indicator/progress-indicator.module.js +0 -65
  69. package/esm2015/modules/progress-indicator/types/progress-indicator-action-click-args.js +0 -2
  70. package/esm2015/modules/progress-indicator/types/progress-indicator-action-click-progress-handler.js +0 -14
  71. package/esm2015/modules/progress-indicator/types/progress-indicator-change.js +0 -2
  72. package/esm2015/modules/progress-indicator/types/progress-indicator-display-mode-type.js +0 -2
  73. package/esm2015/modules/progress-indicator/types/progress-indicator-item-status.js +0 -20
  74. package/esm2015/modules/progress-indicator/types/progress-indicator-message-type.js +0 -28
  75. package/esm2015/modules/progress-indicator/types/progress-indicator-message.js +0 -2
  76. package/esm2015/modules/progress-indicator/types/progress-indicator-mode.js +0 -16
  77. package/esm2015/modules/progress-indicator/types/progress-indicator-nav-button-type.js +0 -2
  78. package/esm2015/modules/shared/sky-progress-indicator-resources.module.js +0 -50
  79. package/esm2015/public-api.js +0 -18
  80. package/public-api.d.ts +0 -15
@@ -1,222 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Optional, Output, } from '@angular/core';
2
- import { Subject } from 'rxjs';
3
- import { distinctUntilChanged, takeUntil } from 'rxjs/operators';
4
- import { SkyProgressIndicatorActionClickProgressHandler } from '../types/progress-indicator-action-click-progress-handler';
5
- import { SkyProgressIndicatorMessageType } from '../types/progress-indicator-message-type';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "../progress-indicator.component";
8
- import * as i2 from "@angular/common";
9
- import * as i3 from "@skyux/theme";
10
- import * as i4 from "@skyux/i18n";
11
- /**
12
- * Displays a button to navigate the steps in modal wizards. We recommend against using it in
13
- * passive progress indicators and waterfall progress indicators.
14
- */
15
- export class SkyProgressIndicatorNavButtonComponent {
16
- constructor(changeDetector, parentComponent) {
17
- this.changeDetector = changeDetector;
18
- this.parentComponent = parentComponent;
19
- /**
20
- * Fires when users select the nav button and emits a `SkyProgressIndicatorActionClickArgs`
21
- * object that is passed into the callback function to allow consumers to decide whether
22
- * the button’s action should complete successfully.
23
- */
24
- this.actionClick = new EventEmitter();
25
- this.ngUnsubscribe = new Subject();
26
- }
27
- /**
28
- * Specifies the type of nav button to include.
29
- * The valid options are `"finish"`, `"next"`, `"previous"`, and `"reset"`.
30
- * @default "next"
31
- */
32
- set buttonType(value) {
33
- this._buttonType = value;
34
- }
35
- get buttonType() {
36
- if (this._buttonType === undefined) {
37
- return 'next';
38
- }
39
- return this._buttonType;
40
- }
41
- /**
42
- * Indicates whether to disable the nav button.
43
- * @default false
44
- */
45
- set disabled(value) {
46
- this._disabled = value;
47
- this.changeDetector.markForCheck();
48
- }
49
- get disabled() {
50
- const buttonType = this.buttonType;
51
- const activeIndex = this.lastProgressChange.activeIndex;
52
- const isLastStep = activeIndex === this.lastProgressChange.itemStatuses.length - 1;
53
- if (buttonType === 'previous' && activeIndex === 0) {
54
- return true;
55
- }
56
- if (buttonType === 'next' && isLastStep) {
57
- return true;
58
- }
59
- return this._disabled || false;
60
- }
61
- /**
62
- * Specifies the progress indicator component to associate with the nav button.
63
- * @required
64
- */
65
- set progressIndicator(value) {
66
- this._progressIndicator = value;
67
- if (value) {
68
- if (this.buttonType === 'finish') {
69
- // The `hasFinishButton` field was added to support legacy API.
70
- // Some implementations only include a next button; we cannot
71
- // assume that every implementation includes both a finish button and a next button.
72
- this._progressIndicator.hasFinishButton = true;
73
- }
74
- this._progressIndicator.progressChanges
75
- .pipe(distinctUntilChanged(), takeUntil(this.ngUnsubscribe))
76
- .subscribe((change) => {
77
- this.lastProgressChange = change;
78
- this.updateButtonVisibility(change);
79
- });
80
- }
81
- else {
82
- if (!this.parentTimeout) {
83
- this.parentTimeout = window.setTimeout(() => {
84
- /* istanbul ignore else */
85
- if (!this.progressIndicator) {
86
- throw new Error('The `<sky-progress-indicator-nav-button>` component requires a reference to ' +
87
- 'the `<sky-progress-indicator>` component it controls. For example:\n' +
88
- '<sky-progress-indicator\n' +
89
- ' #myProgressIndicator\n' +
90
- '>\n' +
91
- '</sky-progress-indicator>\n' +
92
- '<sky-progress-indicator-nav-button\n' +
93
- ' [progressIndicator]="myProgressIndicator"\n' +
94
- '>\n' +
95
- '</sky-progress-indicator-nav-button>');
96
- }
97
- }, 50);
98
- }
99
- }
100
- }
101
- get progressIndicator() {
102
- return this._progressIndicator;
103
- }
104
- get cssClassNames() {
105
- const buttonType = this.buttonType;
106
- const classNames = [`sky-progress-indicator-nav-button-${this.buttonType}`];
107
- switch (buttonType) {
108
- case 'next':
109
- case 'finish':
110
- classNames.push('sky-btn-primary');
111
- break;
112
- case 'reset':
113
- classNames.push('sky-btn-link');
114
- break;
115
- default:
116
- classNames.push('sky-btn-default');
117
- break;
118
- }
119
- return classNames.join(' ');
120
- }
121
- get buttonLabelResourceString() {
122
- return `skyux_progress_indicator_navigator_${this.buttonType}`;
123
- }
124
- set isVisible(value) {
125
- this._isVisible = value;
126
- this.changeDetector.markForCheck();
127
- }
128
- get isVisible() {
129
- return this._isVisible || false;
130
- }
131
- ngAfterViewInit() {
132
- if (!this.progressIndicator && this.parentComponent) {
133
- this.progressIndicator = this.parentComponent;
134
- }
135
- else if (!this.progressIndicator) {
136
- this.progressIndicator = undefined;
137
- }
138
- }
139
- ngOnDestroy() {
140
- this.ngUnsubscribe.next();
141
- this.ngUnsubscribe.complete();
142
- this.actionClick.complete();
143
- }
144
- onClick(event) {
145
- event.preventDefault();
146
- let type;
147
- switch (this.buttonType) {
148
- case 'finish':
149
- type = SkyProgressIndicatorMessageType.Finish;
150
- break;
151
- case 'next':
152
- type = SkyProgressIndicatorMessageType.Progress;
153
- break;
154
- case 'previous':
155
- type = SkyProgressIndicatorMessageType.Regress;
156
- break;
157
- case 'reset':
158
- type = SkyProgressIndicatorMessageType.Reset;
159
- break;
160
- default:
161
- break;
162
- }
163
- // If the consumer has subscribed to the `actionClick` event,
164
- // allow them to decide when to advance to the next step.
165
- if (this.actionClick.observers.length > 0) {
166
- this.actionClick.emit({
167
- event,
168
- progressHandler: new SkyProgressIndicatorActionClickProgressHandler(() => {
169
- this.progressIndicator.sendMessage({ type });
170
- }),
171
- });
172
- }
173
- else {
174
- this.progressIndicator.sendMessage({ type });
175
- }
176
- }
177
- updateButtonVisibility(change) {
178
- const isLastStep = change.activeIndex === change.itemStatuses.length - 1;
179
- const buttonType = this.buttonType;
180
- // Hide the button if all steps are complete
181
- // (except for the reset button)
182
- if (buttonType !== 'reset' && change.isComplete) {
183
- this.isVisible = false;
184
- return;
185
- }
186
- if (buttonType === 'finish') {
187
- this.isVisible = isLastStep;
188
- return;
189
- }
190
- // Hide the next button on the last step only if a finish button exists.
191
- if (buttonType === 'next' &&
192
- isLastStep &&
193
- this.progressIndicator.hasFinishButton) {
194
- this.isVisible = false;
195
- return;
196
- }
197
- this.isVisible = true;
198
- }
199
- }
200
- SkyProgressIndicatorNavButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyProgressIndicatorNavButtonComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1.SkyProgressIndicatorComponent, optional: true }], target: i0.ɵɵFactoryTarget.Component });
201
- SkyProgressIndicatorNavButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkyProgressIndicatorNavButtonComponent, selector: "sky-progress-indicator-nav-button", inputs: { buttonText: "buttonText", buttonType: "buttonType", disabled: "disabled", progressIndicator: "progressIndicator" }, outputs: { actionClick: "actionClick" }, ngImport: i0, template: "<button\n *ngIf=\"isVisible\"\n class=\"sky-btn\"\n type=\"button\"\n [disabled]=\"disabled\"\n [ngClass]=\"cssClassNames\"\n [skyThemeClass]=\"{\n 'sky-margin-inline-compact': 'default',\n 'sky-btn-link': 'modern'\n }\"\n (click)=\"onClick($event)\"\n>\n {{ buttonText || (buttonLabelResourceString | skyLibResources) }}\n</button>\n", directives: [{ type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i3.λ2, selector: "[skyThemeClass]", inputs: ["class", "skyThemeClass"] }], pipes: { "skyLibResources": i4.SkyLibResourcesPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
202
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyProgressIndicatorNavButtonComponent, decorators: [{
203
- type: Component,
204
- args: [{
205
- selector: 'sky-progress-indicator-nav-button',
206
- templateUrl: './progress-indicator-nav-button.component.html',
207
- changeDetection: ChangeDetectionStrategy.OnPush,
208
- }]
209
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i1.SkyProgressIndicatorComponent, decorators: [{
210
- type: Optional
211
- }] }]; }, propDecorators: { buttonText: [{
212
- type: Input
213
- }], buttonType: [{
214
- type: Input
215
- }], disabled: [{
216
- type: Input
217
- }], progressIndicator: [{
218
- type: Input
219
- }], actionClick: [{
220
- type: Output
221
- }] } });
222
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtaW5kaWNhdG9yLW5hdi1idXR0b24uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvZ3Jlc3MtaW5kaWNhdG9yL3NyYy9tb2R1bGVzL3Byb2dyZXNzLWluZGljYXRvci9wcm9ncmVzcy1pbmRpY2F0b3ItbmF2LWJ1dHRvbi9wcm9ncmVzcy1pbmRpY2F0b3ItbmF2LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm9ncmVzcy1pbmRpY2F0b3Ivc3JjL21vZHVsZXMvcHJvZ3Jlc3MtaW5kaWNhdG9yL3Byb2dyZXNzLWluZGljYXRvci1uYXYtYnV0dG9uL3Byb2dyZXNzLWluZGljYXRvci1uYXYtYnV0dG9uLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRS9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUlqRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUkzSCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7Ozs7O0FBTTNGOzs7R0FHRztBQU1ILE1BQU0sT0FBTyxzQ0FBc0M7SUE2SmpELFlBQ1UsY0FBaUMsRUFDckIsZUFBOEM7UUFEMUQsbUJBQWMsR0FBZCxjQUFjLENBQW1CO1FBQ3JCLG9CQUFlLEdBQWYsZUFBZSxDQUErQjtRQXZEcEU7Ozs7V0FJRztRQUVJLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXVDLENBQUM7UUF1Q3JFLGtCQUFhLEdBQUcsSUFB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O1FBQzVDLGdDQUFnQztRQUNoQyxJQUFJLFVBQVUsS0FBSyxPQUFPLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUMvQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztZQUN2QixPQUFPO1NBQ1I7UUFFRCxJQUFJLFVBQVUsS0FBSyxRQUFRLEVBQUU7WUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBRyxVQUFVLENBQUM7WUFDNUIsT0FBTztTQUNSO1FBRUQsd0VBQXdFO1FBQ3hFLElBQ0UsVUFBVSxLQUFLLE1BQU07WUFDckIsVUFBVTtZQUNWLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEVBQ3RDO1lBQ0EsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7WUFDdkIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDeEIsQ0FBQzs7b0lBclBVLHNDQUFzQzt3SEFBdEMsc0NBQXNDLGdQQ3JDbkQsK1ZBY0E7NEZEdUJhLHNDQUFzQztrQkFMbEQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsbUNBQW1DO29CQUM3QyxXQUFXLEVBQUUsZ0RBQWdEO29CQUM3RCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7OzBCQWdLSSxRQUFROzRDQXZKSixVQUFVO3NCQURoQixLQUFLO2dCQVNLLFVBQVU7c0JBRHBCLEtBQUs7Z0JBa0JLLFFBQVE7c0JBRGxCLEtBQUs7Z0JBNEJLLGlCQUFpQjtzQkFEM0IsS0FBSztnQkFtREMsV0FBVztzQkFEakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IGRpc3RpbmN0VW50aWxDaGFuZ2VkLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yQWN0aW9uQ2xpY2tBcmdzIH0gZnJvbSAnLi4vdHlwZXMvcHJvZ3Jlc3MtaW5kaWNhdG9yLWFjdGlvbi1jbGljay1hcmdzJztcblxuaW1wb3J0IHsgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JBY3Rpb25DbGlja1Byb2dyZXNzSGFuZGxlciB9IGZyb20gJy4uL3R5cGVzL3Byb2dyZXNzLWluZGljYXRvci1hY3Rpb24tY2xpY2stcHJvZ3Jlc3MtaGFuZGxlcic7XG5cbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yQ2hhbmdlIH0gZnJvbSAnLi4vdHlwZXMvcHJvZ3Jlc3MtaW5kaWNhdG9yLWNoYW5nZSc7XG5cbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGUgfSBmcm9tICcuLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItbWVzc2FnZS10eXBlJztcblxuaW1wb3J0IHsgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JOYXZCdXR0b25UeXBlIH0gZnJvbSAnLi4vdHlwZXMvcHJvZ3Jlc3MtaW5kaWNhdG9yLW5hdi1idXR0b24tdHlwZSc7XG5cbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yQ29tcG9uZW50IH0gZnJvbSAnLi4vcHJvZ3Jlc3MtaW5kaWNhdG9yLmNvbXBvbmVudCc7XG5cbi8qKlxuICogRGlzcGxheXMgYSBidXR0b24gdG8gbmF2aWdhdGUgdGhlIHN0ZXBzIGluIG1vZGFsIHdpemFyZHMuIFdlIHJlY29tbWVuZCBhZ2FpbnN0IHVzaW5nIGl0IGluXG4gKiBwYXNzaXZlIHByb2dyZXNzIGluZGljYXRvcnMgYW5kIHdhdGVyZmFsbCBwcm9ncmVzcyBpbmRpY2F0b3JzLlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdza3ktcHJvZ3Jlc3MtaW5kaWNhdG9yLW5hdi1idXR0b24nLFxuICB0ZW1wbGF0ZVVybDogJy4vcHJvZ3Jlc3MtaW5kaWNhdG9yLW5hdi1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JOYXZCdXR0b25Db21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBPbkRlc3Ryb3lcbntcbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgbGFiZWwgdG8gZGlzcGxheSBvbiB0aGUgbmF2IGJ1dHRvbi5cbiAgICogQGRlZmF1bHQgXCJOZXh0XCJcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBidXR0b25UZXh0OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFNwZWNpZmllcyB0aGUgdHlwZSBvZiBuYXYgYnV0dG9uIHRvIGluY2x1ZGUuXG4gICAqIFRoZSB2YWxpZCBvcHRpb25zIGFyZSBgXCJmaW5pc2hcImAsIGBcIm5leHRcImAsIGBcInByZXZpb3VzXCJgLCBhbmQgYFwicmVzZXRcImAuXG4gICAqIEBkZWZhdWx0IFwibmV4dFwiXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGJ1dHRvblR5cGUodmFsdWU6IFNreVByb2dyZXNzSW5kaWNhdG9yTmF2QnV0dG9uVHlwZSkge1xuICAgIHRoaXMuX2J1dHRvblR5cGUgPSB2YWx1ZTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgYnV0dG9uVHlwZSgpOiBTa3lQcm9ncmVzc0luZGljYXRvck5hdkJ1dHRvblR5cGUge1xuICAgIGlmICh0aGlzLl9idXR0b25UeXBlID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiAnbmV4dCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2J1dHRvblR5cGU7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdG8gZGlzYWJsZSB0aGUgbmF2IGJ1dHRvbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpXG4gIHB1YmxpYyBzZXQgZGlzYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9kaXNhYmxlZCA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGJ1dHRvblR5cGUgPSB0aGlzLmJ1dHRvblR5cGU7XG4gICAgY29uc3QgYWN0aXZlSW5kZXggPSB0aGlzLmxhc3RQcm9ncmVzc0NoYW5nZS5hY3RpdmVJbmRleDtcbiAgICBjb25zdCBpc0xhc3RTdGVwID1cbiAgICAgIGFjdGl2ZUluZGV4ID09PSB0aGlzLmxhc3RQcm9ncmVzc0NoYW5nZS5pdGVtU3RhdHVzZXMubGVuZ3RoIC0gMTtcblxuICAgIGlmIChidXR0b25UeXBlID09PSAncHJldmlvdXMnICYmIGFjdGl2ZUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoYnV0dG9uVHlwZSA9PT0gJ25leHQnICYmIGlzTGFzdFN0ZXApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9kaXNhYmxlZCB8fCBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIHByb2dyZXNzIGluZGljYXRvciBjb21wb25lbnQgdG8gYXNzb2NpYXRlIHdpdGggdGhlIG5hdiBidXR0b24uXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHNldCBwcm9ncmVzc0luZGljYXRvcih2YWx1ZTogU2t5UHJvZ3Jlc3NJbmRpY2F0b3JDb21wb25lbnQpIHtcbiAgICB0aGlzLl9wcm9ncmVzc0luZGljYXRvciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICBpZiAodGhpcy5idXR0b25UeXBlID09PSAnZmluaXNoJykge1xuICAgICAgICAvLyBUaGUgYGhhc0ZpbmlzaEJ1dHRvbmAgZmllbGQgd2FzIGFkZGVkIHRvIHN1cHBvcnQgbGVnYWN5IEFQSS5cbiAgICAgICAgLy8gU29tZSBpbXBsZW1lbnRhdGlvbnMgb25seSBpbmNsdWRlIGEgbmV4dCBidXR0b247IHdlIGNhbm5vdFxuICAgICAgICAvLyBhc3N1bWUgdGhhdCBldmVyeSBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyBib3RoIGEgZmluaXNoIGJ1dHRvbiBhbmQgYSBuZXh0IGJ1dHRvbi5cbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3NJbmRpY2F0b3IuaGFzRmluaXNoQnV0dG9uID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcHJvZ3Jlc3NJbmRpY2F0b3IucHJvZ3Jlc3NDaGFuZ2VzXG4gICAgICAgIC5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRha2VVbnRpbCh0aGlzLm5nVW5zdWJzY3JpYmUpKVxuICAgICAgICAuc3Vic2NyaWJlKChjaGFuZ2U6IFNreVByb2dyZXNzSW5kaWNhdG9yQ2hhbmdlKSA9PiB7XG4gICAgICAgICAgdGhpcy5sYXN0UHJvZ3Jlc3NDaGFuZ2UgPSBjaGFuZ2U7XG4gICAgICAgICAgdGhpcy51cGRhdGVCdXR0b25WaXNpYmlsaXR5KGNoYW5nZSk7XG4gICAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIXRoaXMucGFyZW50VGltZW91dCkge1xuICAgICAgICB0aGlzLnBhcmVudFRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICBpZiAoIXRoaXMucHJvZ3Jlc3NJbmRpY2F0b3IpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgJ1RoZSBgPHNreS1wcm9ncmVzcy1pbmRpY2F0b3ItbmF2LWJ1dHRvbj5gIGNvbXBvbmVudCByZXF1aXJlcyBhIHJlZmVyZW5jZSB0byAnICtcbiAgICAgICAgICAgICAgICAndGhlIGA8c2t5LXByb2dyZXNzLWluZGljYXRvcj5gIGNvbXBvbmVudCBpdCBjb250cm9scy4gRm9yIGV4YW1wbGU6XFxuJyArXG4gICAgICAgICAgICAgICAgJzxza3ktcHJvZ3Jlc3MtaW5kaWNhdG9yXFxuJyArXG4gICAgICAgICAgICAgICAgJyAgI215UHJvZ3Jlc3NJbmRpY2F0b3JcXG4nICtcbiAgICAgICAgICAgICAgICAnPlxcbicgK1xuICAgICAgICAgICAgICAgICc8L3NreS1wcm9ncmVzcy1pbmRpY2F0b3I+XFxuJyArXG4gICAgICAgICAgICAgICAgJzxza3ktcHJvZ3Jlc3MtaW5kaWNhdG9yLW5hdi1idXR0b25cXG4nICtcbiAgICAgICAgICAgICAgICAnICBbcHJvZ3Jlc3NJbmRpY2F0b3JdPVwibXlQcm9ncmVzc0luZGljYXRvclwiXFxuJyArXG4gICAgICAgICAgICAgICAgJz5cXG4nICtcbiAgICAgICAgICAgICAgICAnPC9za3ktcHJvZ3Jlc3MtaW5kaWNhdG9yLW5hdi1idXR0b24+J1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIDUwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IHByb2dyZXNzSW5kaWNhdG9yKCk6IFNreVByb2dyZXNzSW5kaWNhdG9yQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5fcHJvZ3Jlc3NJbmRpY2F0b3I7XG4gIH1cblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBzZWxlY3QgdGhlIG5hdiBidXR0b24gYW5kIGVtaXRzIGEgYFNreVByb2dyZXNzSW5kaWNhdG9yQWN0aW9uQ2xpY2tBcmdzYFxuICAgKiBvYmplY3QgdGhhdCBpcyBwYXNzZWQgaW50byB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYWxsb3cgY29uc3VtZXJzIHRvIGRlY2lkZSB3aGV0aGVyXG4gICAqIHRoZSBidXR0b27igJlzIGFjdGlvbiBzaG91bGQgY29tcGxldGUgc3VjY2Vzc2Z1bGx5LlxuICAgKi9cbiAgQE91dHB1dCgpXG4gIHB1YmxpYyBhY3Rpb25DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8U2t5UHJvZ3Jlc3NJbmRpY2F0b3JBY3Rpb25DbGlja0FyZ3M+KCk7XG5cbiAgcHVibGljIGdldCBjc3NDbGFzc05hbWVzKCk6IHN0cmluZyB7XG4gICAgY29uc3QgYnV0dG9uVHlwZSA9IHRoaXMuYnV0dG9uVHlwZTtcblxuICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBbYHNreS1wcm9ncmVzcy1pbmRpY2F0b3ItbmF2LWJ1dHRvbi0ke3RoaXMuYnV0dG9uVHlwZX1gXTtcblxuICAgIHN3aXRjaCAoYnV0dG9uVHlwZSkge1xuICAgICAgY2FzZSAnbmV4dCc6XG4gICAgICBjYXNlICdmaW5pc2gnOlxuICAgICAgICBjbGFzc05hbWVzLnB1c2goJ3NreS1idG4tcHJpbWFyeScpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAncmVzZXQnOlxuICAgICAgICBjbGFzc05hbWVzLnB1c2goJ3NreS1idG4tbGluaycpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY2xhc3NOYW1lcy5wdXNoKCdza3ktYnRuLWRlZmF1bHQnKTtcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXNzTmFtZXMuam9pbignICcpO1xuICB9XG5cbiAgcHVibGljIGdldCBidXR0b25MYWJlbFJlc291cmNlU3RyaW5nKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBza3l1eF9wcm9ncmVzc19pbmRpY2F0b3JfbmF2aWdhdG9yXyR7dGhpcy5idXR0b25UeXBlfWA7XG4gIH1cblxuICBwdWJsaWMgc2V0IGlzVmlzaWJsZSh2YWx1ZTogYm9vbGVhbikge1xuICAgIHRoaXMuX2lzVmlzaWJsZSA9IHZhbHVlO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzVmlzaWJsZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5faXNWaXNpYmxlIHx8IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBsYXN0UHJvZ3Jlc3NDaGFuZ2U6IFNreVByb2dyZXNzSW5kaWNhdG9yQ2hhbmdlO1xuICBwcml2YXRlIG5nVW5zdWJzY3JpYmUgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIHBhcmVudFRpbWVvdXQ6IG51bWJlcjtcblxuICBwcml2YXRlIF9idXR0b25UeXBlOiBTa3lQcm9ncmVzc0luZGljYXRvck5hdkJ1dHRvblR5cGU7XG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuO1xuICBwcml2YXRlIF9pc1Zpc2libGU6IGJvb2xlYW47XG4gIHByaXZhdGUgX3Byb2dyZXNzSW5kaWNhdG9yOiBTa3lQcm9ncmVzc0luZGljYXRvckNvbXBvbmVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIHBhcmVudENvbXBvbmVudDogU2t5UHJvZ3Jlc3NJbmRpY2F0b3JDb21wb25lbnRcbiAgKSB7fVxuXG4gIHB1YmxpYyBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnByb2dyZXNzSW5kaWNhdG9yICYmIHRoaXMucGFyZW50Q29tcG9uZW50KSB7XG4gICAgICB0aGlzLnByb2dyZXNzSW5kaWNhdG9yID0gdGhpcy5wYXJlbnRDb21wb25lbnQ7XG4gICAgfSBlbHNlIGlmICghdGhpcy5wcm9ncmVzc0luZGljYXRvcikge1xuICAgICAgdGhpcy5wcm9ncmVzc0luZGljYXRvciA9IHVuZGVmaW5lZDtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5uZ1Vuc3Vic2NyaWJlLm5leHQoKTtcbiAgICB0aGlzLm5nVW5zdWJzY3JpYmUuY29tcGxldGUoKTtcbiAgICB0aGlzLmFjdGlvbkNsaWNrLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwdWJsaWMgb25DbGljayhldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cbiAgICBsZXQgdHlwZTogU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZTtcblxuICAgIHN3aXRjaCAodGhpcy5idXR0b25UeXBlKSB7XG4gICAgICBjYXNlICdmaW5pc2gnOlxuICAgICAgICB0eXBlID0gU2t5UHJvZ3Jlc3NJbmRpY2F0b3JNZXNzYWdlVHlwZS5GaW5pc2g7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICduZXh0JzpcbiAgICAgICAgdHlwZSA9IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGUuUHJvZ3Jlc3M7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdwcmV2aW91cyc6XG4gICAgICAgIHR5cGUgPSBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlLlJlZ3Jlc3M7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdyZXNldCc6XG4gICAgICAgIHR5cGUgPSBTa3lQcm9ncmVzc0luZGljYXRvck1lc3NhZ2VUeXBlLlJlc2V0O1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGNvbnN1bWVyIGhhcyBzdWJzY3JpYmVkIHRvIHRoZSBgYWN0aW9uQ2xpY2tgIGV2ZW50LFxuICAgIC8vIGFsbG93IHRoZW0gdG8gZGVjaWRlIHdoZW4gdG8gYWR2YW5jZSB0byB0aGUgbmV4dCBzdGVwLlxuICAgIGlmICh0aGlzLmFjdGlvbkNsaWNrLm9ic2VydmVycy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmFjdGlvbkNsaWNrLmVtaXQoe1xuICAgICAgICBldmVudCxcbiAgICAgICAgcHJvZ3Jlc3NIYW5kbGVyOiBuZXcgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JBY3Rpb25DbGlja1Byb2dyZXNzSGFuZGxlcihcbiAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnByb2dyZXNzSW5kaWNhdG9yLnNlbmRNZXNzYWdlKHsgdHlwZSB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICksXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9ncmVzc0luZGljYXRvci5zZW5kTWVzc2FnZSh7IHR5cGUgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSB1cGRhdGVCdXR0b25WaXNpYmlsaXR5KGNoYW5nZTogU2t5UHJvZ3Jlc3NJbmRpY2F0b3JDaGFuZ2UpOiB2b2lkIHtcbiAgICBjb25zdCBpc0xhc3RTdGVwID0gY2hhbmdlLmFjdGl2ZUluZGV4ID09PSBjaGFuZ2UuaXRlbVN0YXR1c2VzLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgYnV0dG9uVHlwZSA9IHRoaXMuYnV0dG9uVHlwZTtcblxuICAgIC8vIEhpZGUgdGhlIGJ1dHRvbiBpZiBhbGwgc3RlcHMgYXJlIGNvbXBsZXRlXG4gICAgLy8gKGV4Y2VwdCBmb3IgdGhlIHJlc2V0IGJ1dHRvbilcbiAgICBpZiAoYnV0dG9uVHlwZSAhPT0gJ3Jlc2V0JyAmJiBjaGFuZ2UuaXNDb21wbGV0ZSkge1xuICAgICAgdGhpcy5pc1Zpc2libGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoYnV0dG9uVHlwZSA9PT0gJ2ZpbmlzaCcpIHtcbiAgICAgIHRoaXMuaXNWaXNpYmxlID0gaXNMYXN0U3RlcDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBIaWRlIHRoZSBuZXh0IGJ1dHRvbiBvbiB0aGUgbGFzdCBzdGVwIG9ubHkgaWYgYSBmaW5pc2ggYnV0dG9uIGV4aXN0cy5cbiAgICBpZiAoXG4gICAgICBidXR0b25UeXBlID09PSAnbmV4dCcgJiZcbiAgICAgIGlzTGFzdFN0ZXAgJiZcbiAgICAgIHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3IuaGFzRmluaXNoQnV0dG9uXG4gICAgKSB7XG4gICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNWaXNpYmxlID0gdHJ1ZTtcbiAgfVxufVxuIiwiPGJ1dHRvblxuICAqbmdJZj1cImlzVmlzaWJsZVwiXG4gIGNsYXNzPVwic2t5LWJ0blwiXG4gIHR5cGU9XCJidXR0b25cIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbbmdDbGFzc109XCJjc3NDbGFzc05hbWVzXCJcbiAgW3NreVRoZW1lQ2xhc3NdPVwie1xuICAgICdza3ktbWFyZ2luLWlubGluZS1jb21wYWN0JzogJ2RlZmF1bHQnLFxuICAgICdza3ktYnRuLWxpbmsnOiAnbW9kZXJuJ1xuICB9XCJcbiAgKGNsaWNrKT1cIm9uQ2xpY2soJGV2ZW50KVwiXG4+XG4gIHt7IGJ1dHRvblRleHQgfHwgKGJ1dHRvbkxhYmVsUmVzb3VyY2VTdHJpbmcgfCBza3lMaWJSZXNvdXJjZXMpIH19XG48L2J1dHRvbj5cbiJdfQ==
@@ -1,58 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, } from '@angular/core';
2
- import { SkyProgressIndicatorMessageType } from '../types/progress-indicator-message-type';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * Displays a button to mark all items in the progress indicator as incomplete and set the
6
- * first item as the active item. The steps after the active item remain incomplete until
7
- * users reach them in their sequential order.
8
- */
9
- export class SkyProgressIndicatorResetButtonComponent {
10
- constructor(changeDetector) {
11
- this.changeDetector = changeDetector;
12
- /**
13
- * Fires when users select the reset button that marks all items as incomplete and sets the
14
- * first item as the active item.
15
- */
16
- this.resetClick = new EventEmitter();
17
- console.warn('[Deprecation warning] The `<sky-progress-indicator-reset-button>` component is ' +
18
- 'deprecated. Please use the `<sky-progress-indicator-nav-button>` component instead, with ' +
19
- '`buttonType` set to "reset".');
20
- }
21
- /**
22
- * Indicates whether to disable the reset button.
23
- * @default false
24
- */
25
- set disabled(value) {
26
- this._disabled = value;
27
- this.changeDetector.markForCheck();
28
- }
29
- get disabled() {
30
- return this._disabled || false;
31
- }
32
- ngOnDestroy() {
33
- this.resetClick.complete();
34
- }
35
- onClick() {
36
- this.resetClick.emit();
37
- this.progressIndicator.sendMessage({
38
- type: SkyProgressIndicatorMessageType.Reset,
39
- });
40
- }
41
- }
42
- SkyProgressIndicatorResetButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyProgressIndicatorResetButtonComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
43
- SkyProgressIndicatorResetButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SkyProgressIndicatorResetButtonComponent, selector: "sky-progress-indicator-reset-button", inputs: { disabled: "disabled", progressIndicator: "progressIndicator" }, outputs: { resetClick: "resetClick" }, ngImport: i0, template: "<button\n class=\"sky-btn sky-btn-link\"\n type=\"button\"\n [disabled]=\"disabled\"\n (click)=\"onClick()\"\n>\n <ng-content></ng-content>\n</button>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush });
44
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SkyProgressIndicatorResetButtonComponent, decorators: [{
45
- type: Component,
46
- args: [{
47
- selector: 'sky-progress-indicator-reset-button',
48
- templateUrl: './progress-indicator-reset-button.component.html',
49
- changeDetection: ChangeDetectionStrategy.OnPush,
50
- }]
51
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { disabled: [{
52
- type: Input
53
- }], progressIndicator: [{
54
- type: Input
55
- }], resetClick: [{
56
- type: Output
57
- }] } });
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3MtaW5kaWNhdG9yLXJlc2V0LWJ1dHRvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm9ncmVzcy1pbmRpY2F0b3Ivc3JjL21vZHVsZXMvcHJvZ3Jlc3MtaW5kaWNhdG9yL3Byb2dyZXNzLWluZGljYXRvci1yZXNldC1idXR0b24vcHJvZ3Jlc3MtaW5kaWNhdG9yLXJlc2V0LWJ1dHRvbi5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm9ncmVzcy1pbmRpY2F0b3Ivc3JjL21vZHVsZXMvcHJvZ3Jlc3MtaW5kaWNhdG9yL3Byb2dyZXNzLWluZGljYXRvci1yZXNldC1idXR0b24vcHJvZ3Jlc3MtaW5kaWNhdG9yLXJlc2V0LWJ1dHRvbi5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUVMLE1BQU0sR0FDUCxNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQzs7QUFJM0Y7Ozs7R0FJRztBQU1ILE1BQU0sT0FBTyx3Q0FBd0M7SUErQm5ELFlBQW9CLGNBQWlDO1FBQWpDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQVRyRDs7O1dBR0c7UUFFSSxlQUFVLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUsxQyxPQUFPLENBQUMsSUFBSSxDQUNWLGlGQUFpRjtZQUMvRSwyRkFBMkY7WUFDM0YsOEJBQThCLENBQ2pDLENBQUM7SUFDSixDQUFDO0lBcENEOzs7T0FHRztJQUNILElBQ1csUUFBUSxDQUFDLEtBQWM7UUFDaEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUM7UUFDdkIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBVyxRQUFRO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLFNBQVMsSUFBSSxLQUFLLENBQUM7SUFDakMsQ0FBQztJQTBCTSxXQUFXO1FBQ2hCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUM7WUFDakMsSUFBSSxFQUFFLCtCQUErQixDQUFDLEtBQUs7U0FDNUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzs7c0lBakRVLHdDQUF3QzswSEFBeEMsd0NBQXdDLDRMQ3hCckQsK0pBUUE7NEZEZ0JhLHdDQUF3QztrQkFMcEQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUscUNBQXFDO29CQUMvQyxXQUFXLEVBQUUsa0RBQWtEO29CQUMvRCxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDaEQ7d0dBT1ksUUFBUTtzQkFEbEIsS0FBSztnQkFlQyxpQkFBaUI7c0JBRHZCLEtBQUs7Z0JBUUMsVUFBVTtzQkFEaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkRlc3Ryb3ksXG4gIE91dHB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGUgfSBmcm9tICcuLi90eXBlcy9wcm9ncmVzcy1pbmRpY2F0b3ItbWVzc2FnZS10eXBlJztcblxuaW1wb3J0IHsgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JDb21wb25lbnQgfSBmcm9tICcuLi9wcm9ncmVzcy1pbmRpY2F0b3IuY29tcG9uZW50JztcblxuLyoqXG4gKiBEaXNwbGF5cyBhIGJ1dHRvbiB0byBtYXJrIGFsbCBpdGVtcyBpbiB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGFzIGluY29tcGxldGUgYW5kIHNldCB0aGVcbiAqIGZpcnN0IGl0ZW0gYXMgdGhlIGFjdGl2ZSBpdGVtLiBUaGUgc3RlcHMgYWZ0ZXIgdGhlIGFjdGl2ZSBpdGVtIHJlbWFpbiBpbmNvbXBsZXRlIHVudGlsXG4gKiB1c2VycyByZWFjaCB0aGVtIGluIHRoZWlyIHNlcXVlbnRpYWwgb3JkZXIuXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NreS1wcm9ncmVzcy1pbmRpY2F0b3ItcmVzZXQtYnV0dG9uJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Byb2dyZXNzLWluZGljYXRvci1yZXNldC1idXR0b24uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2t5UHJvZ3Jlc3NJbmRpY2F0b3JSZXNldEJ1dHRvbkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0byBkaXNhYmxlIHRoZSByZXNldCBidXR0b24uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKVxuICBwdWJsaWMgc2V0IGRpc2FibGVkKHZhbHVlOiBib29sZWFuKSB7XG4gICAgdGhpcy5fZGlzYWJsZWQgPSB2YWx1ZTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHVibGljIGdldCBkaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQgfHwgZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSBwcm9ncmVzcyBpbmRpY2F0b3IgY29tcG9uZW50IHRvIGFzc29jaWF0ZSB3aXRoIHRoZSByZXNldCBidXR0b24uXG4gICAqIEByZXF1aXJlZFxuICAgKi9cbiAgQElucHV0KClcbiAgcHVibGljIHByb2dyZXNzSW5kaWNhdG9yOiBTa3lQcm9ncmVzc0luZGljYXRvckNvbXBvbmVudDtcblxuICAvKipcbiAgICogRmlyZXMgd2hlbiB1c2VycyBzZWxlY3QgdGhlIHJlc2V0IGJ1dHRvbiB0aGF0IG1hcmtzIGFsbCBpdGVtcyBhcyBpbmNvbXBsZXRlIGFuZCBzZXRzIHRoZVxuICAgKiBmaXJzdCBpdGVtIGFzIHRoZSBhY3RpdmUgaXRlbS5cbiAgICovXG4gIEBPdXRwdXQoKVxuICBwdWJsaWMgcmVzZXRDbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuXG4gIHByaXZhdGUgX2Rpc2FibGVkOiBib29sZWFuO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmKSB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgJ1tEZXByZWNhdGlvbiB3YXJuaW5nXSBUaGUgYDxza3ktcHJvZ3Jlc3MtaW5kaWNhdG9yLXJlc2V0LWJ1dHRvbj5gIGNvbXBvbmVudCBpcyAnICtcbiAgICAgICAgJ2RlcHJlY2F0ZWQuIFBsZWFzZSB1c2UgdGhlIGA8c2t5LXByb2dyZXNzLWluZGljYXRvci1uYXYtYnV0dG9uPmAgY29tcG9uZW50IGluc3RlYWQsIHdpdGggJyArXG4gICAgICAgICdgYnV0dG9uVHlwZWAgc2V0IHRvIFwicmVzZXRcIi4nXG4gICAgKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLnJlc2V0Q2xpY2suY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMucmVzZXRDbGljay5lbWl0KCk7XG5cbiAgICB0aGlzLnByb2dyZXNzSW5kaWNhdG9yLnNlbmRNZXNzYWdlKHtcbiAgICAgIHR5cGU6IFNreVByb2dyZXNzSW5kaWNhdG9yTWVzc2FnZVR5cGUuUmVzZXQsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxidXR0b25cbiAgY2xhc3M9XCJza3ktYnRuIHNreS1idG4tbGlua1wiXG4gIHR5cGU9XCJidXR0b25cIlxuICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAoY2xpY2spPVwib25DbGljaygpXCJcbj5cbiAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuPC9idXR0b24+XG4iXX0=