@indice/ng-components 0.2.157-beta.1 → 0.2.158
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -4
- package/_styles.css +3634 -3571
- package/{esm2015/indice-ng-components.js → esm2020/indice-ng-components.mjs} +0 -0
- package/{esm2015/lib/controls/avatar-initials/avatar-initials.component.js → esm2020/lib/controls/avatar-initials/avatar-initials.component.mjs} +5 -8
- package/esm2020/lib/controls/collapsible-panel/collapsible-panel.component.mjs +20 -0
- package/esm2020/lib/controls/combobox/combobox.component.mjs +96 -0
- package/esm2020/lib/controls/date-picker/date-picker.component.mjs +292 -0
- package/esm2020/lib/controls/drop-down-menu/drop-down-menu.component.mjs +68 -0
- package/esm2020/lib/controls/kpi-tile/kpi-tile.component.mjs +36 -0
- package/esm2020/lib/controls/language-selection/language-selection.component.mjs +31 -0
- package/{esm2015/lib/controls/list-view/list-column.component.js → esm2020/lib/controls/list-view/list-column.component.mjs} +4 -4
- package/{esm2015/lib/controls/list-view/list-details-section.component.js → esm2020/lib/controls/list-view/list-details-section.component.mjs} +4 -4
- package/{esm2015/lib/controls/list-view/list-tile.component.js → esm2020/lib/controls/list-view/list-tile.component.mjs} +4 -4
- package/esm2020/lib/controls/list-view/list-view-empty-state.component.mjs +29 -0
- package/esm2020/lib/controls/list-view/list-view.component.mjs +183 -0
- package/esm2020/lib/controls/nav-links-list/nav-links-list.component.mjs +42 -0
- package/esm2020/lib/controls/notifications-indicator/notifications-indicator.component.mjs +73 -0
- package/esm2020/lib/controls/pager/pager.component.mjs +130 -0
- package/esm2020/lib/controls/side-pane/side-pane.component.mjs +72 -0
- package/esm2020/lib/controls/skeleton-loader/skeleton-loader.component.mjs +25 -0
- package/{esm2015/lib/controls/stepper/lib-step-info.directive.js → esm2020/lib/controls/stepper/lib-step-info.directive.mjs} +4 -4
- package/{esm2015/lib/controls/stepper/lib-step-label.directive.js → esm2020/lib/controls/stepper/lib-step-label.directive.mjs} +4 -4
- package/esm2020/lib/controls/stepper/lib-step.component.mjs +81 -0
- package/esm2020/lib/controls/stepper/lib-stepper.component.mjs +85 -0
- package/esm2020/lib/controls/stepper/types/step-selected-event.mjs +4 -0
- package/{esm2015/lib/controls/stepper/types/stepper-type.js → esm2020/lib/controls/stepper/types/stepper-type.mjs} +1 -1
- package/esm2020/lib/controls/tabs/lib-tab-group.component.mjs +59 -0
- package/esm2020/lib/controls/tabs/lib-tab.component.mjs +57 -0
- package/esm2020/lib/controls/toaster/toaster-container.component.mjs +28 -0
- package/esm2020/lib/controls/toaster/toaster.component.mjs +31 -0
- package/esm2020/lib/controls/toggle/toggle.component.mjs +64 -0
- package/esm2020/lib/controls/user-profile-menu/user-profile-menu.component.mjs +71 -0
- package/{esm2015/lib/directives/click-outside.directive.js → esm2020/lib/directives/click-outside.directive.mjs} +4 -4
- package/{esm2015/lib/directives/dynamic-component-host.directive.js → esm2020/lib/directives/dynamic-component-host.directive.mjs} +4 -4
- package/esm2020/lib/helpers/base-list.component.mjs +181 -0
- package/{esm2015/lib/icons.js → esm2020/lib/icons.mjs} +1 -1
- package/esm2020/lib/layouts/shell/shell-footer/shell-footer.component.mjs +19 -0
- package/esm2020/lib/layouts/shell/shell-header/shell-header.component.mjs +131 -0
- package/esm2020/lib/layouts/shell/shell-layout/shell-layout.component.mjs +103 -0
- package/esm2020/lib/layouts/shell/shell-sidebar/shell-sidebar.component.mjs +47 -0
- package/esm2020/lib/layouts/views/form-layout/form-layout.component.mjs +80 -0
- package/esm2020/lib/layouts/views/model-view-layout/model-view-layout.component.mjs +49 -0
- package/esm2020/lib/layouts/views/side-view-layout/side-view-layout.component.mjs +98 -0
- package/esm2020/lib/layouts/views/view-layout/view-layout.component.mjs +104 -0
- package/{esm2015/lib/ng-components.module.js → esm2020/lib/ng-components.module.mjs} +7 -9
- package/esm2020/lib/pages/auth/auth-callback/auth-callback.component.mjs +31 -0
- package/{esm2015/lib/pages/auth/auth-renew/auth-renew.component.js → esm2020/lib/pages/auth/auth-renew/auth-renew.component.mjs} +4 -4
- package/esm2020/lib/pages/auth/logged-out/logged-out.component.mjs +28 -0
- package/esm2020/lib/pages/http-status/error/error.component.mjs +17 -0
- package/esm2020/lib/pages/http-status/page-not-found/page-not-found.component.mjs +15 -0
- package/esm2020/lib/pages/http-status/unauthorized/unauthorized.component.mjs +14 -0
- package/{esm2015/lib/pipes/address.pipe.js → esm2020/lib/pipes/address.pipe.mjs} +4 -4
- package/{esm2015/lib/pipes/duration-format.pipe.js → esm2020/lib/pipes/duration-format.pipe.mjs} +4 -4
- package/esm2020/lib/services/component-loader/component-loader-options.class.mjs +8 -0
- package/esm2020/lib/services/component-loader/component-loader.class.mjs +188 -0
- package/{esm2015/lib/services/component-loader/component-loader.factory.js → esm2020/lib/services/component-loader/component-loader.factory.mjs} +4 -4
- package/{esm2015/lib/services/component-loader/content-ref.class.js → esm2020/lib/services/component-loader/content-ref.class.mjs} +1 -1
- package/esm2020/lib/services/modal-service/modal-backdrop-component.mjs +44 -0
- package/esm2020/lib/services/modal-service/modal-container-component.mjs +126 -0
- package/esm2020/lib/services/modal-service/modal-options.class.mjs +35 -0
- package/esm2020/lib/services/modal-service/modal-service.mjs +219 -0
- package/{esm2015/lib/services/modal-service/modal-styles.class.js → esm2020/lib/services/modal-service/modal-styles.class.mjs} +1 -1
- package/esm2020/lib/services/modal-service/modal.class.mjs +27 -0
- package/{esm2015/lib/services/toaster.service.js → esm2020/lib/services/toaster.service.mjs} +4 -4
- package/{esm2015/lib/tokens.js → esm2020/lib/tokens.mjs} +1 -1
- package/{esm2015/lib/types.js → esm2020/lib/types.mjs} +1 -1
- package/{esm2015/public-api.js → esm2020/public-api.mjs} +1 -1
- package/fesm2015/indice-ng-components.mjs +3883 -0
- package/fesm2015/indice-ng-components.mjs.map +1 -0
- package/fesm2020/indice-ng-components.mjs +3818 -0
- package/fesm2020/indice-ng-components.mjs.map +1 -0
- package/{indice-ng-components.d.ts → index.d.ts} +0 -0
- package/lib/controls/avatar-initials/avatar-initials.component.d.ts +1 -1
- package/lib/controls/collapsible-panel/collapsible-panel.component.d.ts +1 -1
- package/lib/controls/combobox/combobox.component.d.ts +1 -1
- package/lib/controls/date-picker/date-picker.component.d.ts +9 -4
- package/lib/controls/drop-down-menu/drop-down-menu.component.d.ts +1 -1
- package/lib/controls/kpi-tile/kpi-tile.component.d.ts +1 -1
- package/lib/controls/language-selection/language-selection.component.d.ts +1 -1
- package/lib/controls/list-view/list-column.component.d.ts +1 -1
- package/lib/controls/list-view/list-details-section.component.d.ts +1 -1
- package/lib/controls/list-view/list-tile.component.d.ts +1 -1
- package/lib/controls/list-view/list-view-empty-state.component.d.ts +1 -1
- package/lib/controls/list-view/list-view.component.d.ts +1 -1
- package/lib/controls/nav-links-list/nav-links-list.component.d.ts +1 -1
- package/lib/controls/notifications-indicator/notifications-indicator.component.d.ts +1 -1
- package/lib/controls/pager/pager.component.d.ts +1 -1
- package/lib/controls/side-pane/side-pane.component.d.ts +1 -1
- package/lib/controls/skeleton-loader/skeleton-loader.component.d.ts +1 -1
- package/lib/controls/stepper/lib-step-info.directive.d.ts +1 -1
- package/lib/controls/stepper/lib-step-label.directive.d.ts +1 -1
- package/lib/controls/stepper/lib-step.component.d.ts +1 -1
- package/lib/controls/stepper/lib-stepper.component.d.ts +1 -1
- package/lib/controls/tabs/lib-tab-group.component.d.ts +1 -1
- package/lib/controls/tabs/lib-tab.component.d.ts +1 -1
- package/lib/controls/toaster/toaster-container.component.d.ts +1 -1
- package/lib/controls/toaster/toaster.component.d.ts +1 -1
- package/lib/controls/toggle/toggle.component.d.ts +1 -1
- package/lib/controls/user-profile-menu/user-profile-menu.component.d.ts +1 -1
- package/lib/directives/click-outside.directive.d.ts +1 -1
- package/lib/directives/dynamic-component-host.directive.d.ts +1 -1
- package/lib/helpers/base-list.component.d.ts +1 -1
- package/lib/layouts/shell/shell-footer/shell-footer.component.d.ts +1 -1
- package/lib/layouts/shell/shell-header/shell-header.component.d.ts +1 -1
- package/lib/layouts/shell/shell-layout/shell-layout.component.d.ts +1 -1
- package/lib/layouts/shell/shell-sidebar/shell-sidebar.component.d.ts +1 -1
- package/lib/layouts/views/form-layout/form-layout.component.d.ts +1 -1
- package/lib/layouts/views/model-view-layout/model-view-layout.component.d.ts +1 -1
- package/lib/layouts/views/side-view-layout/side-view-layout.component.d.ts +1 -1
- package/lib/layouts/views/view-layout/view-layout.component.d.ts +1 -1
- package/lib/pages/auth/auth-callback/auth-callback.component.d.ts +1 -1
- package/lib/pages/auth/auth-renew/auth-renew.component.d.ts +1 -1
- package/lib/pages/auth/logged-out/logged-out.component.d.ts +1 -1
- package/lib/pages/http-status/error/error.component.d.ts +1 -1
- package/lib/pages/http-status/page-not-found/page-not-found.component.d.ts +1 -1
- package/lib/pages/http-status/unauthorized/unauthorized.component.d.ts +1 -1
- package/lib/pipes/address.pipe.d.ts +1 -1
- package/lib/pipes/duration-format.pipe.d.ts +1 -1
- package/lib/services/modal-service/modal-backdrop-component.d.ts +1 -1
- package/lib/services/modal-service/modal-container-component.d.ts +1 -1
- package/modal.css +157 -157
- package/package.json +21 -8
- package/bundles/indice-ng-components.umd.js +0 -4547
- package/bundles/indice-ng-components.umd.js.map +0 -1
- package/esm2015/lib/controls/collapsible-panel/collapsible-panel.component.js +0 -23
- package/esm2015/lib/controls/combobox/combobox.component.js +0 -99
- package/esm2015/lib/controls/date-picker/date-picker.component.js +0 -269
- package/esm2015/lib/controls/drop-down-menu/drop-down-menu.component.js +0 -72
- package/esm2015/lib/controls/kpi-tile/kpi-tile.component.js +0 -39
- package/esm2015/lib/controls/language-selection/language-selection.component.js +0 -35
- package/esm2015/lib/controls/list-view/list-view-empty-state.component.js +0 -32
- package/esm2015/lib/controls/list-view/list-view.component.js +0 -186
- package/esm2015/lib/controls/nav-links-list/nav-links-list.component.js +0 -45
- package/esm2015/lib/controls/notifications-indicator/notifications-indicator.component.js +0 -76
- package/esm2015/lib/controls/pager/pager.component.js +0 -133
- package/esm2015/lib/controls/side-pane/side-pane.component.js +0 -76
- package/esm2015/lib/controls/skeleton-loader/skeleton-loader.component.js +0 -29
- package/esm2015/lib/controls/stepper/lib-step.component.js +0 -84
- package/esm2015/lib/controls/stepper/lib-stepper.component.js +0 -90
- package/esm2015/lib/controls/stepper/types/step-selected-event.js +0 -4
- package/esm2015/lib/controls/tabs/lib-tab-group.component.js +0 -66
- package/esm2015/lib/controls/tabs/lib-tab.component.js +0 -58
- package/esm2015/lib/controls/toaster/toaster-container.component.js +0 -31
- package/esm2015/lib/controls/toaster/toaster.component.js +0 -34
- package/esm2015/lib/controls/toggle/toggle.component.js +0 -68
- package/esm2015/lib/controls/user-profile-menu/user-profile-menu.component.js +0 -75
- package/esm2015/lib/helpers/base-list.component.js +0 -182
- package/esm2015/lib/layouts/shell/shell-footer/shell-footer.component.js +0 -22
- package/esm2015/lib/layouts/shell/shell-header/shell-header.component.js +0 -136
- package/esm2015/lib/layouts/shell/shell-layout/shell-layout.component.js +0 -108
- package/esm2015/lib/layouts/shell/shell-sidebar/shell-sidebar.component.js +0 -50
- package/esm2015/lib/layouts/views/form-layout/form-layout.component.js +0 -85
- package/esm2015/lib/layouts/views/model-view-layout/model-view-layout.component.js +0 -53
- package/esm2015/lib/layouts/views/side-view-layout/side-view-layout.component.js +0 -101
- package/esm2015/lib/layouts/views/view-layout/view-layout.component.js +0 -110
- package/esm2015/lib/pages/auth/auth-callback/auth-callback.component.js +0 -34
- package/esm2015/lib/pages/auth/logged-out/logged-out.component.js +0 -32
- package/esm2015/lib/pages/http-status/error/error.component.js +0 -20
- package/esm2015/lib/pages/http-status/page-not-found/page-not-found.component.js +0 -18
- package/esm2015/lib/pages/http-status/unauthorized/unauthorized.component.js +0 -17
- package/esm2015/lib/services/component-loader/component-loader-options.class.js +0 -8
- package/esm2015/lib/services/component-loader/component-loader.class.js +0 -192
- package/esm2015/lib/services/modal-service/modal-backdrop-component.js +0 -44
- package/esm2015/lib/services/modal-service/modal-container-component.js +0 -128
- package/esm2015/lib/services/modal-service/modal-options.class.js +0 -35
- package/esm2015/lib/services/modal-service/modal-service.js +0 -220
- package/esm2015/lib/services/modal-service/modal.class.js +0 -27
- package/fesm2015/indice-ng-components.js +0 -3929
- package/fesm2015/indice-ng-components.js.map +0 -1
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, ContentChild, Inject, Input, Optional, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import { LIBSTEPPER_ACCESSOR } from '../../tokens';
|
|
3
|
+
import { LibStepInfoDirective } from './lib-step-info.directive';
|
|
4
|
+
import { LibStepLabelDirective } from './lib-step-label.directive';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export var StepState;
|
|
7
|
+
(function (StepState) {
|
|
8
|
+
StepState["Active"] = "Active";
|
|
9
|
+
StepState["Completed"] = "Completed";
|
|
10
|
+
StepState["Upcoming"] = "Upcoming";
|
|
11
|
+
})(StepState || (StepState = {}));
|
|
12
|
+
;
|
|
13
|
+
export class LibStepComponent {
|
|
14
|
+
constructor(_stepper) {
|
|
15
|
+
this._stepper = _stepper;
|
|
16
|
+
}
|
|
17
|
+
/** Indicates the index of the step. */
|
|
18
|
+
get index() {
|
|
19
|
+
return this._stepper?.steps.toArray().indexOf(this);
|
|
20
|
+
}
|
|
21
|
+
/** Indicates whether this step is the last step. */
|
|
22
|
+
get isLast() {
|
|
23
|
+
return this._stepper?.steps.length - 1 === this.index;
|
|
24
|
+
}
|
|
25
|
+
/** Indicates whether you can navigate to the step or not. */
|
|
26
|
+
get isValid() {
|
|
27
|
+
if (!this.stepControl) {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
return this.stepControl.valid;
|
|
31
|
+
}
|
|
32
|
+
/** Shows the current state of the step. */
|
|
33
|
+
get state() {
|
|
34
|
+
const currentIndex = this._stepper?.currentStepIndex;
|
|
35
|
+
if (currentIndex === this.index) {
|
|
36
|
+
return StepState.Active;
|
|
37
|
+
}
|
|
38
|
+
if (currentIndex > this.index) {
|
|
39
|
+
return StepState.Completed;
|
|
40
|
+
}
|
|
41
|
+
return StepState.Upcoming;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
LibStepComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibStepComponent, deps: [{ token: LIBSTEPPER_ACCESSOR, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
+
LibStepComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: LibStepComponent, selector: "lib-step", inputs: { class: "class", stepControl: "stepControl" }, queries: [{ propertyName: "stepLabel", first: true, predicate: LibStepLabelDirective, descendants: true }, { propertyName: "stepInfo", first: true, predicate: LibStepInfoDirective, descendants: true }], viewQueries: [{ propertyName: "content", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: `
|
|
46
|
+
<ng-template>
|
|
47
|
+
<ng-content></ng-content>
|
|
48
|
+
</ng-template>
|
|
49
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
50
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibStepComponent, decorators: [{
|
|
51
|
+
type: Component,
|
|
52
|
+
args: [{
|
|
53
|
+
selector: 'lib-step',
|
|
54
|
+
template: `
|
|
55
|
+
<ng-template>
|
|
56
|
+
<ng-content></ng-content>
|
|
57
|
+
</ng-template>
|
|
58
|
+
`,
|
|
59
|
+
encapsulation: ViewEncapsulation.None,
|
|
60
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
61
|
+
}]
|
|
62
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
63
|
+
type: Optional
|
|
64
|
+
}, {
|
|
65
|
+
type: Inject,
|
|
66
|
+
args: [LIBSTEPPER_ACCESSOR]
|
|
67
|
+
}] }]; }, propDecorators: { content: [{
|
|
68
|
+
type: ViewChild,
|
|
69
|
+
args: [TemplateRef, { static: true }]
|
|
70
|
+
}], stepLabel: [{
|
|
71
|
+
type: ContentChild,
|
|
72
|
+
args: [LibStepLabelDirective]
|
|
73
|
+
}], stepInfo: [{
|
|
74
|
+
type: ContentChild,
|
|
75
|
+
args: [LibStepInfoDirective]
|
|
76
|
+
}], class: [{
|
|
77
|
+
type: Input
|
|
78
|
+
}], stepControl: [{
|
|
79
|
+
type: Input
|
|
80
|
+
}] } });
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLXN0ZXAuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL3N0ZXBwZXIvbGliLXN0ZXAuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHckosT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQ25ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDOztBQUVuRSxNQUFNLENBQU4sSUFBWSxTQUlYO0FBSkQsV0FBWSxTQUFTO0lBQ2pCLDhCQUFpQixDQUFBO0lBQ2pCLG9DQUF1QixDQUFBO0lBQ3ZCLGtDQUFxQixDQUFBO0FBQ3pCLENBQUMsRUFKVyxTQUFTLEtBQVQsU0FBUyxRQUlwQjtBQUFBLENBQUM7QUFZRixNQUFNLE9BQU8sZ0JBQWdCO0lBQ3pCLFlBQzZELFFBQWM7UUFBZCxhQUFRLEdBQVIsUUFBUSxDQUFNO0lBQ3ZFLENBQUM7SUFhTCx1Q0FBdUM7SUFDdkMsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUVELG9EQUFvRDtJQUNwRCxJQUFXLE1BQU07UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQztJQUMxRCxDQUFDO0lBRUQsNkRBQTZEO0lBQzdELElBQVcsT0FBTztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ25CLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO0lBQ2xDLENBQUM7SUFFRCwyQ0FBMkM7SUFDM0MsSUFBVyxLQUFLO1FBQ1osTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxnQkFBZ0IsQ0FBQztRQUNyRCxJQUFJLFlBQVksS0FBSyxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQzdCLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztTQUMzQjtRQUNELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFDM0IsT0FBTyxTQUFTLENBQUMsU0FBUyxDQUFDO1NBQzlCO1FBQ0QsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDO0lBQzlCLENBQUM7OzZHQTVDUSxnQkFBZ0Isa0JBRUQsbUJBQW1CO2lHQUZsQyxnQkFBZ0IsK0lBUVgscUJBQXFCLDJFQUVyQixvQkFBb0IseUZBSnZCLFdBQVcsOERBZFo7Ozs7S0FJVDsyRkFJUSxnQkFBZ0I7a0JBVjVCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFVBQVU7b0JBQ3BCLFFBQVEsRUFBRTs7OztLQUlUO29CQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7OzBCQUdRLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsbUJBQW1COzRDQUlNLE9BQU87c0JBQXZELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFSSxTQUFTO3NCQUFwRCxZQUFZO3VCQUFDLHFCQUFxQjtnQkFFUSxRQUFRO3NCQUFsRCxZQUFZO3VCQUFDLG9CQUFvQjtnQkFFbEIsS0FBSztzQkFBcEIsS0FBSztnQkFFVSxXQUFXO3NCQUExQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBJbmplY3QsIElucHV0LCBPcHRpb25hbCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgTElCU1RFUFBFUl9BQ0NFU1NPUiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBMaWJTdGVwSW5mb0RpcmVjdGl2ZSB9IGZyb20gJy4vbGliLXN0ZXAtaW5mby5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgTGliU3RlcExhYmVsRGlyZWN0aXZlIH0gZnJvbSAnLi9saWItc3RlcC1sYWJlbC5kaXJlY3RpdmUnO1xuXG5leHBvcnQgZW51bSBTdGVwU3RhdGUge1xuICAgIEFjdGl2ZSA9ICdBY3RpdmUnLFxuICAgIENvbXBsZXRlZCA9ICdDb21wbGV0ZWQnLFxuICAgIFVwY29taW5nID0gJ1VwY29taW5nJ1xufTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItc3RlcCcsXG4gICAgdGVtcGxhdGU6IGBcbiAgICAgICAgPG5nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPG5nLWNvbnRlbnQ+PC9uZy1jb250ZW50PlxuICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgIGAsXG4gICAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBMaWJTdGVwQ29tcG9uZW50IHtcbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgQE9wdGlvbmFsKCkgQEluamVjdChMSUJTVEVQUEVSX0FDQ0VTU09SKSBwdWJsaWMgcmVhZG9ubHkgX3N0ZXBwZXI/OiBhbnlcbiAgICApIHsgfVxuXG4gICAgLyoqIFRoZSBjb250ZW50IHByb3ZpZGVkIGZvciB0aGUgc3RlcC4gKi9cbiAgICBAVmlld0NoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgY29udGVudCE6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLyoqIFRoZSBsYWJlbCBvZiB0aGUgc3RlcCBkaXNwbGF5ZWQgaW4gaGVhZGVyLCBpZiBhcHBsaWNhYmxlLiAqL1xuICAgIEBDb250ZW50Q2hpbGQoTGliU3RlcExhYmVsRGlyZWN0aXZlKSBwdWJsaWMgc3RlcExhYmVsOiBMaWJTdGVwTGFiZWxEaXJlY3RpdmUgfCB1bmRlZmluZWQ7XG4gICAgLyoqIFRoZSBpbmZvIG9mIHRoZSBzdGVwIGRpc3BsYXllZCBpbiBoZWFkZXIsIGlmIGFwcGxpY2FibGUuICovXG4gICAgQENvbnRlbnRDaGlsZChMaWJTdGVwSW5mb0RpcmVjdGl2ZSkgcHVibGljIHN0ZXBJbmZvOiBMaWJTdGVwSW5mb0RpcmVjdGl2ZSB8IHVuZGVmaW5lZDtcbiAgICAvKiogQW4gb3B0aW9uYWwgQ1NTIGNsYXNzIGZvciB0aGUgc3RlcCBoZWFkZXIuICovXG4gICAgQElucHV0KCkgcHVibGljIGNsYXNzOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgLyoqIFRoZSBhYnN0cmFjdCBjb250cm9sIG9mIHRoZSBzdGVwLiAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBzdGVwQ29udHJvbDogQWJzdHJhY3RDb250cm9sIHwgdW5kZWZpbmVkO1xuXG4gICAgLyoqIEluZGljYXRlcyB0aGUgaW5kZXggb2YgdGhlIHN0ZXAuICovXG4gICAgcHVibGljIGdldCBpbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RlcHBlcj8uc3RlcHMudG9BcnJheSgpLmluZGV4T2YodGhpcyk7XG4gICAgfVxuXG4gICAgLyoqIEluZGljYXRlcyB3aGV0aGVyIHRoaXMgc3RlcCBpcyB0aGUgbGFzdCBzdGVwLiAqL1xuICAgIHB1YmxpYyBnZXQgaXNMYXN0KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc3RlcHBlcj8uc3RlcHMubGVuZ3RoIC0gMSA9PT0gdGhpcy5pbmRleDtcbiAgICB9XG5cbiAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgeW91IGNhbiBuYXZpZ2F0ZSB0byB0aGUgc3RlcCBvciBub3QuICovXG4gICAgcHVibGljIGdldCBpc1ZhbGlkKCk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIXRoaXMuc3RlcENvbnRyb2wpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnN0ZXBDb250cm9sLnZhbGlkO1xuICAgIH1cblxuICAgIC8qKiBTaG93cyB0aGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgc3RlcC4gKi9cbiAgICBwdWJsaWMgZ2V0IHN0YXRlKCk6IFN0ZXBTdGF0ZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuX3N0ZXBwZXI/LmN1cnJlbnRTdGVwSW5kZXg7XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPT09IHRoaXMuaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBTdGVwU3RhdGUuQWN0aXZlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdXJyZW50SW5kZXggPiB0aGlzLmluZGV4KSB7XG4gICAgICAgICAgICByZXR1cm4gU3RlcFN0YXRlLkNvbXBsZXRlZDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gU3RlcFN0YXRlLlVwY29taW5nO1xuICAgIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Component, ContentChildren, EventEmitter, forwardRef, Input, Output } from '@angular/core';
|
|
2
|
+
import { LibStepComponent, StepState } from './lib-step.component';
|
|
3
|
+
import { LIBSTEPPER_ACCESSOR } from '../../tokens';
|
|
4
|
+
import { StepperType } from './types/stepper-type';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
export class LibStepperComponent {
|
|
8
|
+
constructor() {
|
|
9
|
+
// Private properties.
|
|
10
|
+
this._currentStepIndex = 0;
|
|
11
|
+
/** Emmited when a step change occurs. */
|
|
12
|
+
this.stepChanged = new EventEmitter();
|
|
13
|
+
/** Indicates whether each step has to be validated before proceeding to the next. */
|
|
14
|
+
this.linear = false;
|
|
15
|
+
/** The type of the stepper. */
|
|
16
|
+
this.type = StepperType.Panels;
|
|
17
|
+
this.StepState = StepState;
|
|
18
|
+
this.StepperType = StepperType;
|
|
19
|
+
}
|
|
20
|
+
/** The current wizard step. */
|
|
21
|
+
get currentStep() {
|
|
22
|
+
return this.steps?.get(this._currentStepIndex);
|
|
23
|
+
}
|
|
24
|
+
/** The index (starting from zero) of the current wizard step. */
|
|
25
|
+
get currentStepIndex() {
|
|
26
|
+
return this._currentStepIndex;
|
|
27
|
+
}
|
|
28
|
+
ngOnInit() { }
|
|
29
|
+
/** Proceeds to the next step, if any. */
|
|
30
|
+
goToNextStep() {
|
|
31
|
+
// Cannot go forward.
|
|
32
|
+
if (this._currentStepIndex === this.steps.length - 1) {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
this.updateCurrentStepIndex(this._currentStepIndex + 1);
|
|
36
|
+
}
|
|
37
|
+
/** Proceeds to the previous step, if any. */
|
|
38
|
+
goToPreviousStep() {
|
|
39
|
+
// Cannot go back.
|
|
40
|
+
if (this._currentStepIndex === 0) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.updateCurrentStepIndex(this._currentStepIndex - 1);
|
|
44
|
+
}
|
|
45
|
+
onSelectStep(selectedStep) {
|
|
46
|
+
this.updateCurrentStepIndex(selectedStep.index);
|
|
47
|
+
}
|
|
48
|
+
updateCurrentStepIndex(newIndex) {
|
|
49
|
+
const stepsArray = this.steps.toArray();
|
|
50
|
+
const currentStep = stepsArray[this.currentStepIndex];
|
|
51
|
+
const shouldStop = this.linear && ((!currentStep.isValid && newIndex >= this.currentStepIndex) || // If current step is invalid and want to go forward, then stop.
|
|
52
|
+
(currentStep.isValid && newIndex > this.currentStepIndex + 1 && stepsArray.slice(this.currentStepIndex + 1, newIndex).some(x => !x.isValid)) // If going forward (more than 1 steps), check if there are any invalid steps in between.
|
|
53
|
+
);
|
|
54
|
+
if (shouldStop) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
this.stepChanged.emit({
|
|
58
|
+
selectedIndex: newIndex,
|
|
59
|
+
previouslySelectedIndex: this.currentStepIndex,
|
|
60
|
+
selectedStep: stepsArray[newIndex],
|
|
61
|
+
previouslySelectedStep: currentStep
|
|
62
|
+
});
|
|
63
|
+
this._currentStepIndex = newIndex;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
LibStepperComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibStepperComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
67
|
+
LibStepperComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: LibStepperComponent, selector: "lib-stepper", inputs: { linear: "linear", type: "type" }, outputs: { stepChanged: "stepChanged" }, providers: [
|
|
68
|
+
{ provide: LIBSTEPPER_ACCESSOR, useExisting: forwardRef(() => LibStepperComponent) }
|
|
69
|
+
], queries: [{ propertyName: "steps", predicate: LibStepComponent, descendants: true }], ngImport: i0, template: "<ng-container [ngSwitch]=\"type\">\n <!-- Bullets -->\n <nav class=\"flex items-center justify-center\" aria-label=\"Progress\" *ngSwitchCase=\"StepperType.Bullets\">\n <p class=\"text-sm font-medium\">Step {{ currentStepIndex + 1 }} of {{ steps.length }}</p>\n <ol role=\"list\" class=\"ml-8 flex items-center space-x-5\">\n <li class=\"cursor-pointer\" *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\">\n <!-- Completed Step -->\n <div class=\"block w-2.5 h-2.5 bg-blue-600 rounded-full hover:bg-blue-900\" *ngIf=\"step.state === StepState.Completed\">\n <span class=\"sr-only\">Step {{ step.index }}</span>\n </div>\n <!-- Active Step -->\n <div class=\"relative flex items-center justify-center\" aria-current=\"step\" *ngIf=\"step.state === StepState.Active\">\n <span class=\"absolute w-5 h-5 p-px flex\" aria-hidden=\"true\">\n <span class=\"w-full h-full rounded-full bg-blue-200\"></span>\n </span>\n <span class=\"relative block w-2.5 h-2.5 bg-blue-600 rounded-full\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Step {{ step.index }}</span>\n </div>\n <!-- Upcoming Step -->\n <div href=\"#\" class=\"block w-2.5 h-2.5 bg-gray-200 rounded-full hover:bg-gray-400\" *ngIf=\"step.state === StepState.Upcoming\">\n <span class=\"sr-only\">Step {{ step.index }}</span>\n </div>\n </li>\n </ol>\n </nav>\n <!-- Bullets & Text -->\n <div class=\"flex items-center justify-center\" aria-label=\"Progress\" *ngSwitchCase=\"StepperType.BulletsAndText\">\n <nav aria-label=\"Progress\">\n <ol role=\"list\" class=\"space-y-6\">\n <li class=\"cursor-pointer\" *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\">\n <!-- Complete Step -->\n <div class=\"group\" *ngIf=\"step.state === StepState.Completed\">\n <span class=\"flex items-start\">\n <span class=\"flex-shrink-0 relative h-5 w-5 flex items-center justify-center\">\n <svg class=\"h-full w-full text-blue-600 group-hover:text-blue-800\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <span class=\"ml-3 text-sm font-medium text-gray-500 group-hover:text-gray-900\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </span>\n </div>\n <!-- Active Step -->\n <div class=\"flex items-start\" aria-current=\"step\" *ngIf=\"step.state === StepState.Active\">\n <span class=\"flex-shrink-0 h-5 w-5 relative flex items-center justify-center\" aria-hidden=\"true\">\n <span class=\"absolute h-4 w-4 rounded-full bg-blue-200\"></span>\n <span class=\"relative block w-2 h-2 bg-blue-600 rounded-full\"></span>\n </span>\n <span class=\"ml-3 text-sm font-medium text-blue-600\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n <!-- Upcoming Step -->\n <div class=\"group\" *ngIf=\"step.state === StepState.Upcoming\">\n <div class=\"flex items-start\">\n <div class=\"flex-shrink-0 h-5 w-5 relative flex items-center justify-center\" aria-hidden=\"true\">\n <div class=\"h-2 w-2 bg-gray-300 rounded-full group-hover:bg-gray-400\"></div>\n </div>\n <p class=\"ml-3 text-sm font-medium text-gray-500 group-hover:text-gray-900\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </p>\n </div>\n </div>\n </li>\n </ol>\n </nav>\n </div>\n <!-- Circles -->\n <nav class=\"flex justify-center\" aria-label=\"Progress\" *ngSwitchCase=\"StepperType.Circles\">\n <ol class=\"flex items-center\" role=\"list\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"relative pr-8 sm:pr-20 cursor-pointer\">\n <!-- Completed Step -->\n <ng-container *ngIf=\"step.state === StepState.Completed\">\n <div class=\"absolute inset-0 flex items-center\" aria-hidden=\"true\">\n <div class=\"h-0.5 w-full bg-blue-600\"></div>\n </div>\n <div class=\"relative w-8 h-8 flex items-center justify-center bg-blue-600 rounded-full hover:bg-blue-900\">\n <svg class=\"w-5 h-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n <span class=\"sr-only\">Step {{ step.index + 1 }}</span>\n </div>\n </ng-container>\n <!-- Active Step -->\n <ng-container *ngIf=\"step.state === StepState.Active\">\n <div class=\"absolute inset-0 flex items-center\" aria-hidden=\"true\">\n <div class=\"h-0.5 w-full bg-gray-200\"></div>\n </div>\n <div class=\"relative w-8 h-8 flex items-center justify-center bg-white border-2 border-blue-600 rounded-full\" aria-current=\"step\">\n <span class=\"h-2.5 w-2.5 bg-blue-600 rounded-full\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Step {{ step.index + 1 }}</span>\n </div>\n </ng-container>\n <!-- Upcoming Step -->\n <ng-container *ngIf=\"step.state === StepState.Upcoming\">\n <div class=\"absolute inset-0 flex items-center\" aria-hidden=\"true\">\n <div class=\"h-0.5 w-full bg-gray-200\"></div>\n </div>\n <div class=\"group relative w-8 h-8 flex items-center justify-center bg-white border-2 border-gray-300 rounded-full hover:border-gray-400\">\n <span class=\"h-2.5 w-2.5 bg-transparent rounded-full group-hover:bg-gray-300\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Step {{ step.index + 1 }}</span>\n </div>\n </ng-container>\n </li>\n </ol>\n </nav>\n <!-- Circles With Text -->\n <nav class=\"flex items-center justify-center\" aria-label=\"Progress\" *ngSwitchCase=\"StepperType.CirclesWithText\">\n <ol role=\"list\" class=\"overflow-hidden\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"relative pb-10 cursor-pointer\">\n <!-- Complete Step -->\n <ng-container *ngIf=\"step.state === StepState.Completed\">\n <div class=\"-ml-px absolute mt-0.5 top-4 left-4 w-0.5 h-full bg-blue-600\" aria-hidden=\"true\" *ngIf=\"!step.isLast\"></div>\n <div class=\"relative flex items-start group\">\n <span class=\"h-9 flex items-center\">\n <span class=\"relative z-10 w-8 h-8 flex items-center justify-center bg-blue-600 rounded-full group-hover:bg-blue-800\">\n <svg class=\"w-5 h-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </span>\n <span class=\"ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold tracking-wide uppercase\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </div>\n </ng-container>\n <!-- Active Step -->\n <ng-container *ngIf=\"step.state === StepState.Active\">\n <div class=\"-ml-px absolute mt-0.5 top-4 left-4 w-0.5 h-full bg-gray-300\" aria-hidden=\"true\" *ngIf=\"!step.isLast\"></div>\n <div class=\"relative flex items-start group\" aria-current=\"step\">\n <span class=\"h-9 flex items-center\" aria-hidden=\"true\">\n <span class=\"relative z-10 w-8 h-8 flex items-center justify-center bg-white border-2 border-blue-600 rounded-full\">\n <span class=\"h-2.5 w-2.5 bg-blue-600 rounded-full\"></span>\n </span>\n </span>\n <span class=\"ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold tracking-wide uppercase text-blue-600\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </div>\n </ng-container>\n <!-- Upcoming Step -->\n <ng-container *ngIf=\"step.state === StepState.Upcoming\">\n <div class=\"-ml-px absolute mt-0.5 top-4 left-4 w-0.5 h-full bg-gray-300\" aria-hidden=\"true\" *ngIf=\"!step.isLast\"></div>\n <div href=\"#\" class=\"relative flex items-start group\">\n <span class=\"h-9 flex items-center\" aria-hidden=\"true\">\n <span class=\"relative z-10 w-8 h-8 flex items-center justify-center bg-white border-2 border-gray-300 rounded-full group-hover:border-gray-400\">\n <span class=\"h-2.5 w-2.5 bg-transparent rounded-full group-hover:bg-gray-300\"></span>\n </span>\n </span>\n <span class=\"ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold tracking-wide uppercase text-gray-500\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </div>\n </ng-container>\n </li>\n </ol>\n </nav>\n <!-- Panels -->\n <nav aria-label=\"Progress\" *ngSwitchCase=\"StepperType.Panels\">\n <ol role=\"list\" class=\"border border-gray-300 rounded-md divide-y divide-gray-300 md:flex md:divide-y-0\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"relative md:flex-1 md:flex cursor-pointer\">\n <!-- Completed step -->\n <div class=\"group flex items-center w-full\" *ngIf=\"step.state === StepState.Completed\">\n <span class=\"px-6 py-4 flex items-center text-sm font-medium\">\n <span class=\"flex-shrink-0 w-10 h-10 flex items-center justify-center bg-blue-600 rounded-full group-hover:bg-blue-800\">\n <svg class=\"w-6 h-6 text-white\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <span class=\"ml-4 text-sm font-medium text-gray-900\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </span>\n </div>\n <!-- Active step -->\n <div class=\"px-6 py-4 flex items-center text-sm font-medium\" *ngIf=\"step.state === StepState.Active\">\n <span class=\"flex-shrink-0 w-10 h-10 flex items-center justify-center border-2 border-blue-600 rounded-full\">\n <span class=\"text-blue-600\">{{ (step.index + 1) }}</span>\n </span>\n <span class=\"ml-4 text-sm font-medium text-blue-600\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n <!-- Upcoming step -->\n <div class=\"group flex items-center\" *ngIf=\"step.state === StepState.Upcoming\">\n <span class=\"px-6 py-4 flex items-center text-sm font-medium\">\n <span class=\"flex-shrink-0 w-10 h-10 flex items-center justify-center border-2 border-gray-300 rounded-full group-hover:border-gray-400\">\n <span class=\"text-gray-500 group-hover:text-gray-900\">{{ (step.index + 1) }}</span>\n </span>\n <span class=\"ml-4 text-sm font-medium text-gray-500 group-hover:text-gray-900\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </span>\n </div>\n <!-- Arrow separator for lg screens and up -->\n <div *ngIf=\"!step.isLast\" class=\"hidden md:block absolute top-0 right-0 h-full w-5\" aria-hidden=\"true\">\n <svg class=\"h-full w-full text-gray-300\" viewBox=\"0 0 22 80\" fill=\"none\" preserveAspectRatio=\"none\">\n <path d=\"M0 -2L20 40L0 82\" vector-effect=\"non-scaling-stroke\" stroke=\"currentcolor\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n </li>\n </ol>\n </nav>\n <!-- Panels With Border -->\n <div class=\"lg:border-t lg:border-b lg:border-gray-200\" *ngSwitchCase=\"StepperType.PanelsWithBorder\">\n <nav class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\" aria-label=\"Progress\">\n <ol role=\"list\" class=\"rounded-md overflow-hidden lg:flex lg:border-l lg:border-r lg:border-gray-200 lg:rounded-none\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"relative overflow-hidden lg:flex-1 cursor-pointer\">\n <!-- Completed Step -->\n <div class=\"border border-gray-200 overflow-hidden border-b-0 rounded-t-md lg:border-0\" *ngIf=\"step.state === StepState.Completed\">\n <div class=\"group\">\n <span class=\"absolute top-0 left-0 w-1 h-full bg-transparent group-hover:bg-gray-200 lg:w-full lg:h-1 lg:bottom-0 lg:top-auto\" aria-hidden=\"true\"></span>\n <span class=\"px-6 py-5 flex items-start text-sm font-medium\">\n <span class=\"flex-shrink-0\">\n <span class=\"w-10 h-10 flex items-center justify-center bg-blue-600 rounded-full\">\n <svg class=\"w-6 h-6 text-white\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </span>\n <span class=\"mt-0.5 ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold tracking-wide uppercase\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm font-medium text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </span>\n </div>\n </div>\n <!-- Active Step -->\n <div class=\"border border-gray-200 overflow-hidden lg:border-0\" *ngIf=\"step.state === StepState.Active\">\n <div aria-current=\"step\">\n <span class=\"absolute top-0 left-0 w-1 h-full bg-blue-600 lg:w-full lg:h-1 lg:bottom-0 lg:top-auto\" aria-hidden=\"true\"></span>\n <span class=\"px-6 py-5 flex items-start text-sm font-medium lg:pl-9\">\n <span class=\"flex-shrink-0\">\n <span class=\"w-10 h-10 flex items-center justify-center border-2 border-blue-600 rounded-full\">\n <span class=\"text-blue-600\">{{ step.index + 1 }}</span>\n </span>\n </span>\n <span class=\"mt-0.5 ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold text-blue-600 tracking-wide uppercase\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm font-medium text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </span>\n </div>\n <!-- Separator -->\n <div class=\"hidden absolute top-0 left-0 w-3 inset-0 lg:block\" aria-hidden=\"true\" *ngIf=\"step.index !== 0\">\n <svg class=\"h-full w-full text-gray-300\" viewBox=\"0 0 12 82\" fill=\"none\" preserveAspectRatio=\"none\">\n <path d=\"M0.5 0V31L10.5 41L0.5 51V82\" stroke=\"currentcolor\" vector-effect=\"non-scaling-stroke\" />\n </svg>\n </div>\n </div>\n <!-- Upcoming Step -->\n <div class=\"border border-gray-200 overflow-hidden border-t-0 rounded-b-md lg:border-0\" *ngIf=\"step.state === StepState.Upcoming\">\n <div class=\"group\">\n <span class=\"absolute top-0 left-0 w-1 h-full bg-transparent group-hover:bg-gray-200 lg:w-full lg:h-1 lg:bottom-0 lg:top-auto\" aria-hidden=\"true\"></span>\n <span class=\"px-6 py-5 flex items-start text-sm font-medium lg:pl-9\">\n <span class=\"flex-shrink-0\">\n <span class=\"w-10 h-10 flex items-center justify-center border-2 border-gray-300 rounded-full\">\n <span class=\"text-gray-500\">{{ step.index + 1 }}</span>\n </span>\n </span>\n <span class=\"mt-0.5 ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold text-gray-500 tracking-wide uppercase\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm font-medium text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </span>\n </div>\n <!-- Separator -->\n <div class=\"hidden absolute top-0 left-0 w-3 inset-0 lg:block\" aria-hidden=\"true\" *ngIf=\"step.index !== 0\">\n <svg class=\"h-full w-full text-gray-300\" viewBox=\"0 0 12 82\" fill=\"none\" preserveAspectRatio=\"none\">\n <path d=\"M0.5 0V31L10.5 41L0.5 51V82\" stroke=\"currentcolor\" vector-effect=\"non-scaling-stroke\" />\n </svg>\n </div>\n </div>\n </li>\n </ol>\n </nav>\n </div>\n <!-- Progress -->\n <div *ngSwitchCase=\"StepperType.Progress\">\n <!-- <h4 class=\"sr-only\">Status</h4>\n <p class=\"text-sm font-medium text-gray-900\">Migrating MySQL database...</p> -->\n <div class=\"mt-6\" aria-hidden=\"true\">\n <div class=\"bg-gray-200 rounded-full overflow-hidden\">\n <div class=\"h-2 bg-blue-600 rounded-full\" [style.width]=\"(((currentStepIndex + 1) / steps.length) * 100) + '%'\"></div>\n </div>\n <div class=\"hidden sm:grid grid-cols-4 text-sm font-medium text-gray-600 mt-6\">\n <div *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"text-blue-600 cursor-pointer\">\n <ng-container *ngIf=\"step.stepLabel\" [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </div>\n </div>\n </div>\n </div>\n <!-- Simple -->\n <nav aria-label=\"Progress\" *ngSwitchCase=\"StepperType.Simple\">\n <ol role=\"list\" class=\"space-y-4 md:flex md:space-y-0 md:space-x-8\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"md:flex-1 cursor-pointer\">\n <!-- Completed Step -->\n <div class=\"group pl-4 py-2 flex flex-col border-l-4 border-blue-600 hover:border-blue-800 md:pl-0 md:pt-4 md:pb-0 md:border-l-0 md:border-t-4\" *ngIf=\"step.state === StepState.Completed\">\n <span class=\"text-xs text-blue-600 font-semibold tracking-wide uppercase group-hover:text-blue-800\">Step {{ step.index + 1 }}</span>\n <span class=\"text-sm font-medium\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n <!-- Active Step -->\n <div class=\"pl-4 py-2 flex flex-col border-l-4 border-blue-600 md:pl-0 md:pt-4 md:pb-0 md:border-l-0 md:border-t-4\" aria-current=\"step\" *ngIf=\"step.state === StepState.Active\">\n <span class=\"text-xs text-blue-600 font-semibold tracking-wide uppercase\">Step {{ step.index + 1 }}</span>\n <span class=\"text-sm font-medium\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n <!-- Upcoming Step -->\n <div class=\"group pl-4 py-2 flex flex-col border-l-4 border-gray-200 hover:border-gray-300 md:pl-0 md:pt-4 md:pb-0 md:border-l-0 md:border-t-4\" *ngIf=\"step.state === StepState.Upcoming\">\n <span class=\"text-xs text-gray-500 font-semibold tracking-wide uppercase group-hover:text-gray-700\">Step {{ step.index + 1 }}</span>\n <span class=\"text-sm font-medium\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n </li>\n </ol>\n </nav>\n</ng-container>\n<ng-container *ngFor=\"let step of steps\">\n <ng-container *ngIf=\"step.state === StepState.Active\" [ngTemplateOutlet]=\"step.content\"></ng-container>\n</ng-container>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }] });
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibStepperComponent, decorators: [{
|
|
71
|
+
type: Component,
|
|
72
|
+
args: [{ selector: 'lib-stepper', providers: [
|
|
73
|
+
{ provide: LIBSTEPPER_ACCESSOR, useExisting: forwardRef(() => LibStepperComponent) }
|
|
74
|
+
], template: "<ng-container [ngSwitch]=\"type\">\n <!-- Bullets -->\n <nav class=\"flex items-center justify-center\" aria-label=\"Progress\" *ngSwitchCase=\"StepperType.Bullets\">\n <p class=\"text-sm font-medium\">Step {{ currentStepIndex + 1 }} of {{ steps.length }}</p>\n <ol role=\"list\" class=\"ml-8 flex items-center space-x-5\">\n <li class=\"cursor-pointer\" *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\">\n <!-- Completed Step -->\n <div class=\"block w-2.5 h-2.5 bg-blue-600 rounded-full hover:bg-blue-900\" *ngIf=\"step.state === StepState.Completed\">\n <span class=\"sr-only\">Step {{ step.index }}</span>\n </div>\n <!-- Active Step -->\n <div class=\"relative flex items-center justify-center\" aria-current=\"step\" *ngIf=\"step.state === StepState.Active\">\n <span class=\"absolute w-5 h-5 p-px flex\" aria-hidden=\"true\">\n <span class=\"w-full h-full rounded-full bg-blue-200\"></span>\n </span>\n <span class=\"relative block w-2.5 h-2.5 bg-blue-600 rounded-full\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Step {{ step.index }}</span>\n </div>\n <!-- Upcoming Step -->\n <div href=\"#\" class=\"block w-2.5 h-2.5 bg-gray-200 rounded-full hover:bg-gray-400\" *ngIf=\"step.state === StepState.Upcoming\">\n <span class=\"sr-only\">Step {{ step.index }}</span>\n </div>\n </li>\n </ol>\n </nav>\n <!-- Bullets & Text -->\n <div class=\"flex items-center justify-center\" aria-label=\"Progress\" *ngSwitchCase=\"StepperType.BulletsAndText\">\n <nav aria-label=\"Progress\">\n <ol role=\"list\" class=\"space-y-6\">\n <li class=\"cursor-pointer\" *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\">\n <!-- Complete Step -->\n <div class=\"group\" *ngIf=\"step.state === StepState.Completed\">\n <span class=\"flex items-start\">\n <span class=\"flex-shrink-0 relative h-5 w-5 flex items-center justify-center\">\n <svg class=\"h-full w-full text-blue-600 group-hover:text-blue-800\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <span class=\"ml-3 text-sm font-medium text-gray-500 group-hover:text-gray-900\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </span>\n </div>\n <!-- Active Step -->\n <div class=\"flex items-start\" aria-current=\"step\" *ngIf=\"step.state === StepState.Active\">\n <span class=\"flex-shrink-0 h-5 w-5 relative flex items-center justify-center\" aria-hidden=\"true\">\n <span class=\"absolute h-4 w-4 rounded-full bg-blue-200\"></span>\n <span class=\"relative block w-2 h-2 bg-blue-600 rounded-full\"></span>\n </span>\n <span class=\"ml-3 text-sm font-medium text-blue-600\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n <!-- Upcoming Step -->\n <div class=\"group\" *ngIf=\"step.state === StepState.Upcoming\">\n <div class=\"flex items-start\">\n <div class=\"flex-shrink-0 h-5 w-5 relative flex items-center justify-center\" aria-hidden=\"true\">\n <div class=\"h-2 w-2 bg-gray-300 rounded-full group-hover:bg-gray-400\"></div>\n </div>\n <p class=\"ml-3 text-sm font-medium text-gray-500 group-hover:text-gray-900\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </p>\n </div>\n </div>\n </li>\n </ol>\n </nav>\n </div>\n <!-- Circles -->\n <nav class=\"flex justify-center\" aria-label=\"Progress\" *ngSwitchCase=\"StepperType.Circles\">\n <ol class=\"flex items-center\" role=\"list\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"relative pr-8 sm:pr-20 cursor-pointer\">\n <!-- Completed Step -->\n <ng-container *ngIf=\"step.state === StepState.Completed\">\n <div class=\"absolute inset-0 flex items-center\" aria-hidden=\"true\">\n <div class=\"h-0.5 w-full bg-blue-600\"></div>\n </div>\n <div class=\"relative w-8 h-8 flex items-center justify-center bg-blue-600 rounded-full hover:bg-blue-900\">\n <svg class=\"w-5 h-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n <span class=\"sr-only\">Step {{ step.index + 1 }}</span>\n </div>\n </ng-container>\n <!-- Active Step -->\n <ng-container *ngIf=\"step.state === StepState.Active\">\n <div class=\"absolute inset-0 flex items-center\" aria-hidden=\"true\">\n <div class=\"h-0.5 w-full bg-gray-200\"></div>\n </div>\n <div class=\"relative w-8 h-8 flex items-center justify-center bg-white border-2 border-blue-600 rounded-full\" aria-current=\"step\">\n <span class=\"h-2.5 w-2.5 bg-blue-600 rounded-full\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Step {{ step.index + 1 }}</span>\n </div>\n </ng-container>\n <!-- Upcoming Step -->\n <ng-container *ngIf=\"step.state === StepState.Upcoming\">\n <div class=\"absolute inset-0 flex items-center\" aria-hidden=\"true\">\n <div class=\"h-0.5 w-full bg-gray-200\"></div>\n </div>\n <div class=\"group relative w-8 h-8 flex items-center justify-center bg-white border-2 border-gray-300 rounded-full hover:border-gray-400\">\n <span class=\"h-2.5 w-2.5 bg-transparent rounded-full group-hover:bg-gray-300\" aria-hidden=\"true\"></span>\n <span class=\"sr-only\">Step {{ step.index + 1 }}</span>\n </div>\n </ng-container>\n </li>\n </ol>\n </nav>\n <!-- Circles With Text -->\n <nav class=\"flex items-center justify-center\" aria-label=\"Progress\" *ngSwitchCase=\"StepperType.CirclesWithText\">\n <ol role=\"list\" class=\"overflow-hidden\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"relative pb-10 cursor-pointer\">\n <!-- Complete Step -->\n <ng-container *ngIf=\"step.state === StepState.Completed\">\n <div class=\"-ml-px absolute mt-0.5 top-4 left-4 w-0.5 h-full bg-blue-600\" aria-hidden=\"true\" *ngIf=\"!step.isLast\"></div>\n <div class=\"relative flex items-start group\">\n <span class=\"h-9 flex items-center\">\n <span class=\"relative z-10 w-8 h-8 flex items-center justify-center bg-blue-600 rounded-full group-hover:bg-blue-800\">\n <svg class=\"w-5 h-5 text-white\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </span>\n <span class=\"ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold tracking-wide uppercase\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </div>\n </ng-container>\n <!-- Active Step -->\n <ng-container *ngIf=\"step.state === StepState.Active\">\n <div class=\"-ml-px absolute mt-0.5 top-4 left-4 w-0.5 h-full bg-gray-300\" aria-hidden=\"true\" *ngIf=\"!step.isLast\"></div>\n <div class=\"relative flex items-start group\" aria-current=\"step\">\n <span class=\"h-9 flex items-center\" aria-hidden=\"true\">\n <span class=\"relative z-10 w-8 h-8 flex items-center justify-center bg-white border-2 border-blue-600 rounded-full\">\n <span class=\"h-2.5 w-2.5 bg-blue-600 rounded-full\"></span>\n </span>\n </span>\n <span class=\"ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold tracking-wide uppercase text-blue-600\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </div>\n </ng-container>\n <!-- Upcoming Step -->\n <ng-container *ngIf=\"step.state === StepState.Upcoming\">\n <div class=\"-ml-px absolute mt-0.5 top-4 left-4 w-0.5 h-full bg-gray-300\" aria-hidden=\"true\" *ngIf=\"!step.isLast\"></div>\n <div href=\"#\" class=\"relative flex items-start group\">\n <span class=\"h-9 flex items-center\" aria-hidden=\"true\">\n <span class=\"relative z-10 w-8 h-8 flex items-center justify-center bg-white border-2 border-gray-300 rounded-full group-hover:border-gray-400\">\n <span class=\"h-2.5 w-2.5 bg-transparent rounded-full group-hover:bg-gray-300\"></span>\n </span>\n </span>\n <span class=\"ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold tracking-wide uppercase text-gray-500\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </div>\n </ng-container>\n </li>\n </ol>\n </nav>\n <!-- Panels -->\n <nav aria-label=\"Progress\" *ngSwitchCase=\"StepperType.Panels\">\n <ol role=\"list\" class=\"border border-gray-300 rounded-md divide-y divide-gray-300 md:flex md:divide-y-0\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"relative md:flex-1 md:flex cursor-pointer\">\n <!-- Completed step -->\n <div class=\"group flex items-center w-full\" *ngIf=\"step.state === StepState.Completed\">\n <span class=\"px-6 py-4 flex items-center text-sm font-medium\">\n <span class=\"flex-shrink-0 w-10 h-10 flex items-center justify-center bg-blue-600 rounded-full group-hover:bg-blue-800\">\n <svg class=\"w-6 h-6 text-white\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n <span class=\"ml-4 text-sm font-medium text-gray-900\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </span>\n </div>\n <!-- Active step -->\n <div class=\"px-6 py-4 flex items-center text-sm font-medium\" *ngIf=\"step.state === StepState.Active\">\n <span class=\"flex-shrink-0 w-10 h-10 flex items-center justify-center border-2 border-blue-600 rounded-full\">\n <span class=\"text-blue-600\">{{ (step.index + 1) }}</span>\n </span>\n <span class=\"ml-4 text-sm font-medium text-blue-600\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n <!-- Upcoming step -->\n <div class=\"group flex items-center\" *ngIf=\"step.state === StepState.Upcoming\">\n <span class=\"px-6 py-4 flex items-center text-sm font-medium\">\n <span class=\"flex-shrink-0 w-10 h-10 flex items-center justify-center border-2 border-gray-300 rounded-full group-hover:border-gray-400\">\n <span class=\"text-gray-500 group-hover:text-gray-900\">{{ (step.index + 1) }}</span>\n </span>\n <span class=\"ml-4 text-sm font-medium text-gray-500 group-hover:text-gray-900\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </span>\n </div>\n <!-- Arrow separator for lg screens and up -->\n <div *ngIf=\"!step.isLast\" class=\"hidden md:block absolute top-0 right-0 h-full w-5\" aria-hidden=\"true\">\n <svg class=\"h-full w-full text-gray-300\" viewBox=\"0 0 22 80\" fill=\"none\" preserveAspectRatio=\"none\">\n <path d=\"M0 -2L20 40L0 82\" vector-effect=\"non-scaling-stroke\" stroke=\"currentcolor\" stroke-linejoin=\"round\" />\n </svg>\n </div>\n </li>\n </ol>\n </nav>\n <!-- Panels With Border -->\n <div class=\"lg:border-t lg:border-b lg:border-gray-200\" *ngSwitchCase=\"StepperType.PanelsWithBorder\">\n <nav class=\"mx-auto max-w-7xl px-4 sm:px-6 lg:px-8\" aria-label=\"Progress\">\n <ol role=\"list\" class=\"rounded-md overflow-hidden lg:flex lg:border-l lg:border-r lg:border-gray-200 lg:rounded-none\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"relative overflow-hidden lg:flex-1 cursor-pointer\">\n <!-- Completed Step -->\n <div class=\"border border-gray-200 overflow-hidden border-b-0 rounded-t-md lg:border-0\" *ngIf=\"step.state === StepState.Completed\">\n <div class=\"group\">\n <span class=\"absolute top-0 left-0 w-1 h-full bg-transparent group-hover:bg-gray-200 lg:w-full lg:h-1 lg:bottom-0 lg:top-auto\" aria-hidden=\"true\"></span>\n <span class=\"px-6 py-5 flex items-start text-sm font-medium\">\n <span class=\"flex-shrink-0\">\n <span class=\"w-10 h-10 flex items-center justify-center bg-blue-600 rounded-full\">\n <svg class=\"w-6 h-6 text-white\" xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 20 20\" fill=\"currentColor\" aria-hidden=\"true\">\n <path fill-rule=\"evenodd\" d=\"M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z\" clip-rule=\"evenodd\" />\n </svg>\n </span>\n </span>\n <span class=\"mt-0.5 ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold tracking-wide uppercase\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm font-medium text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </span>\n </div>\n </div>\n <!-- Active Step -->\n <div class=\"border border-gray-200 overflow-hidden lg:border-0\" *ngIf=\"step.state === StepState.Active\">\n <div aria-current=\"step\">\n <span class=\"absolute top-0 left-0 w-1 h-full bg-blue-600 lg:w-full lg:h-1 lg:bottom-0 lg:top-auto\" aria-hidden=\"true\"></span>\n <span class=\"px-6 py-5 flex items-start text-sm font-medium lg:pl-9\">\n <span class=\"flex-shrink-0\">\n <span class=\"w-10 h-10 flex items-center justify-center border-2 border-blue-600 rounded-full\">\n <span class=\"text-blue-600\">{{ step.index + 1 }}</span>\n </span>\n </span>\n <span class=\"mt-0.5 ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold text-blue-600 tracking-wide uppercase\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm font-medium text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </span>\n </div>\n <!-- Separator -->\n <div class=\"hidden absolute top-0 left-0 w-3 inset-0 lg:block\" aria-hidden=\"true\" *ngIf=\"step.index !== 0\">\n <svg class=\"h-full w-full text-gray-300\" viewBox=\"0 0 12 82\" fill=\"none\" preserveAspectRatio=\"none\">\n <path d=\"M0.5 0V31L10.5 41L0.5 51V82\" stroke=\"currentcolor\" vector-effect=\"non-scaling-stroke\" />\n </svg>\n </div>\n </div>\n <!-- Upcoming Step -->\n <div class=\"border border-gray-200 overflow-hidden border-t-0 rounded-b-md lg:border-0\" *ngIf=\"step.state === StepState.Upcoming\">\n <div class=\"group\">\n <span class=\"absolute top-0 left-0 w-1 h-full bg-transparent group-hover:bg-gray-200 lg:w-full lg:h-1 lg:bottom-0 lg:top-auto\" aria-hidden=\"true\"></span>\n <span class=\"px-6 py-5 flex items-start text-sm font-medium lg:pl-9\">\n <span class=\"flex-shrink-0\">\n <span class=\"w-10 h-10 flex items-center justify-center border-2 border-gray-300 rounded-full\">\n <span class=\"text-gray-500\">{{ step.index + 1 }}</span>\n </span>\n </span>\n <span class=\"mt-0.5 ml-4 min-w-0 flex flex-col\">\n <span class=\"text-xs font-semibold text-gray-500 tracking-wide uppercase\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n <span class=\"text-sm font-medium text-gray-500\" *ngIf=\"step.stepInfo\">\n <ng-container [ngTemplateOutlet]=\"step.stepInfo.template\"></ng-container>\n </span>\n </span>\n </span>\n </div>\n <!-- Separator -->\n <div class=\"hidden absolute top-0 left-0 w-3 inset-0 lg:block\" aria-hidden=\"true\" *ngIf=\"step.index !== 0\">\n <svg class=\"h-full w-full text-gray-300\" viewBox=\"0 0 12 82\" fill=\"none\" preserveAspectRatio=\"none\">\n <path d=\"M0.5 0V31L10.5 41L0.5 51V82\" stroke=\"currentcolor\" vector-effect=\"non-scaling-stroke\" />\n </svg>\n </div>\n </div>\n </li>\n </ol>\n </nav>\n </div>\n <!-- Progress -->\n <div *ngSwitchCase=\"StepperType.Progress\">\n <!-- <h4 class=\"sr-only\">Status</h4>\n <p class=\"text-sm font-medium text-gray-900\">Migrating MySQL database...</p> -->\n <div class=\"mt-6\" aria-hidden=\"true\">\n <div class=\"bg-gray-200 rounded-full overflow-hidden\">\n <div class=\"h-2 bg-blue-600 rounded-full\" [style.width]=\"(((currentStepIndex + 1) / steps.length) * 100) + '%'\"></div>\n </div>\n <div class=\"hidden sm:grid grid-cols-4 text-sm font-medium text-gray-600 mt-6\">\n <div *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"text-blue-600 cursor-pointer\">\n <ng-container *ngIf=\"step.stepLabel\" [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </div>\n </div>\n </div>\n </div>\n <!-- Simple -->\n <nav aria-label=\"Progress\" *ngSwitchCase=\"StepperType.Simple\">\n <ol role=\"list\" class=\"space-y-4 md:flex md:space-y-0 md:space-x-8\">\n <li *ngFor=\"let step of steps\" (click)=\"onSelectStep(step)\" class=\"md:flex-1 cursor-pointer\">\n <!-- Completed Step -->\n <div class=\"group pl-4 py-2 flex flex-col border-l-4 border-blue-600 hover:border-blue-800 md:pl-0 md:pt-4 md:pb-0 md:border-l-0 md:border-t-4\" *ngIf=\"step.state === StepState.Completed\">\n <span class=\"text-xs text-blue-600 font-semibold tracking-wide uppercase group-hover:text-blue-800\">Step {{ step.index + 1 }}</span>\n <span class=\"text-sm font-medium\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n <!-- Active Step -->\n <div class=\"pl-4 py-2 flex flex-col border-l-4 border-blue-600 md:pl-0 md:pt-4 md:pb-0 md:border-l-0 md:border-t-4\" aria-current=\"step\" *ngIf=\"step.state === StepState.Active\">\n <span class=\"text-xs text-blue-600 font-semibold tracking-wide uppercase\">Step {{ step.index + 1 }}</span>\n <span class=\"text-sm font-medium\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n <!-- Upcoming Step -->\n <div class=\"group pl-4 py-2 flex flex-col border-l-4 border-gray-200 hover:border-gray-300 md:pl-0 md:pt-4 md:pb-0 md:border-l-0 md:border-t-4\" *ngIf=\"step.state === StepState.Upcoming\">\n <span class=\"text-xs text-gray-500 font-semibold tracking-wide uppercase group-hover:text-gray-700\">Step {{ step.index + 1 }}</span>\n <span class=\"text-sm font-medium\" *ngIf=\"step.stepLabel\">\n <ng-container [ngTemplateOutlet]=\"step.stepLabel.template\"></ng-container>\n </span>\n </div>\n </li>\n </ol>\n </nav>\n</ng-container>\n<ng-container *ngFor=\"let step of steps\">\n <ng-container *ngIf=\"step.state === StepState.Active\" [ngTemplateOutlet]=\"step.content\"></ng-container>\n</ng-container>" }]
|
|
75
|
+
}], ctorParameters: function () { return []; }, propDecorators: { steps: [{
|
|
76
|
+
type: ContentChildren,
|
|
77
|
+
args: [LibStepComponent, { descendants: true }]
|
|
78
|
+
}], stepChanged: [{
|
|
79
|
+
type: Output
|
|
80
|
+
}], linear: [{
|
|
81
|
+
type: Input
|
|
82
|
+
}], type: [{
|
|
83
|
+
type: Input
|
|
84
|
+
}] } });
|
|
85
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLXN0ZXBwZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL3N0ZXBwZXIvbGliLXN0ZXBwZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL3N0ZXBwZXIvbGliLXN0ZXBwZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXZILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNuRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFVbkQsTUFBTSxPQUFPLG1CQUFtQjtJQUk1QjtRQUhBLHNCQUFzQjtRQUNkLHNCQUFpQixHQUFXLENBQUMsQ0FBQztRQU10Qyx5Q0FBeUM7UUFDZixnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFxQixDQUFDO1FBQzlFLHFGQUFxRjtRQUNyRSxXQUFNLEdBQVksS0FBSyxDQUFDO1FBQ3hDLCtCQUErQjtRQUNmLFNBQUksR0FBZ0IsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNoRCxjQUFTLEdBQUcsU0FBUyxDQUFDO1FBQ3RCLGdCQUFXLEdBQUcsV0FBVyxDQUFDO0lBWGpCLENBQUM7SUFhakIsK0JBQStCO0lBQy9CLElBQVcsV0FBVztRQUNsQixPQUFPLElBQUksQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxpRUFBaUU7SUFDakUsSUFBVyxnQkFBZ0I7UUFDdkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7SUFDbEMsQ0FBQztJQUVNLFFBQVEsS0FBVyxDQUFDO0lBRTNCLHlDQUF5QztJQUNsQyxZQUFZO1FBQ2YscUJBQXFCO1FBQ3JCLElBQUksSUFBSSxDQUFDLGlCQUFpQixLQUFLLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNsRCxPQUFPO1NBQ1Y7UUFDRCxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCw2Q0FBNkM7SUFDdEMsZ0JBQWdCO1FBQ25CLGtCQUFrQjtRQUNsQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsS0FBSyxDQUFDLEVBQUU7WUFDOUIsT0FBTztTQUNWO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRU0sWUFBWSxDQUFDLFlBQThCO1FBQzlDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDcEQsQ0FBQztJQUVPLHNCQUFzQixDQUFDLFFBQWdCO1FBQzNDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDeEMsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FDOUIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksUUFBUSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLGdFQUFnRTtZQUMvSCxDQUFDLFdBQVcsQ0FBQyxPQUFPLElBQUksUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxDQUFDLElBQUksVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMseUZBQXlGO1NBQ3pPLENBQUM7UUFDRixJQUFJLFVBQVUsRUFBRTtZQUNaLE9BQU87U0FDVjtRQUNELElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDO1lBQ2xCLGFBQWEsRUFBRSxRQUFRO1lBQ3ZCLHVCQUF1QixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDOUMsWUFBWSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUM7WUFDbEMsc0JBQXNCLEVBQUUsV0FBVztTQUN0QyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsaUJBQWlCLEdBQUcsUUFBUSxDQUFDO0lBQ3RDLENBQUM7O2dIQXBFUSxtQkFBbUI7b0dBQW5CLG1CQUFtQiwySEFKakI7UUFDUCxFQUFFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLG1CQUFtQixDQUFDLEVBQUU7S0FDdkYsZ0RBU2dCLGdCQUFnQixnRENyQnJDLCs1ekJBK1ZlOzJGRGpWRixtQkFBbUI7a0JBUC9CLFNBQVM7K0JBQ0ksYUFBYSxhQUVaO3dCQUNQLEVBQUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLG9CQUFvQixDQUFDLEVBQUU7cUJBQ3ZGOzBFQVNnRSxLQUFLO3NCQUFyRSxlQUFlO3VCQUFDLGdCQUFnQixFQUFFLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRTtnQkFFOUIsV0FBVztzQkFBcEMsTUFBTTtnQkFFUyxNQUFNO3NCQUFyQixLQUFLO2dCQUVVLElBQUk7c0JBQW5CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENvbnRlbnRDaGlsZHJlbiwgRXZlbnRFbWl0dGVyLCBmb3J3YXJkUmVmLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBMaWJTdGVwQ29tcG9uZW50LCBTdGVwU3RhdGUgfSBmcm9tICcuL2xpYi1zdGVwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBMSUJTVEVQUEVSX0FDQ0VTU09SIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcbmltcG9ydCB7IFN0ZXBwZXJUeXBlIH0gZnJvbSAnLi90eXBlcy9zdGVwcGVyLXR5cGUnO1xuaW1wb3J0IHsgU3RlcFNlbGVjdGVkRXZlbnQgfSBmcm9tICcuL3R5cGVzL3N0ZXAtc2VsZWN0ZWQtZXZlbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2xpYi1zdGVwcGVyJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGliLXN0ZXBwZXIuY29tcG9uZW50Lmh0bWwnLFxuICAgIHByb3ZpZGVyczogW1xuICAgICAgICB7IHByb3ZpZGU6IExJQlNURVBQRVJfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExpYlN0ZXBwZXJDb21wb25lbnQpIH1cbiAgICBdXG59KVxuZXhwb3J0IGNsYXNzIExpYlN0ZXBwZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICAgIC8vIFByaXZhdGUgcHJvcGVydGllcy5cbiAgICBwcml2YXRlIF9jdXJyZW50U3RlcEluZGV4OiBudW1iZXIgPSAwO1xuXG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIC8qKiBUaGUgaW5uZXIgc3RlcHMgb2YgdGhlIHdpemFyZC4gKi9cbiAgICBAQ29udGVudENoaWxkcmVuKExpYlN0ZXBDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcHVibGljIHN0ZXBzITogUXVlcnlMaXN0PExpYlN0ZXBDb21wb25lbnQ+O1xuICAgIC8qKiBFbW1pdGVkIHdoZW4gYSBzdGVwIGNoYW5nZSBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzdGVwQ2hhbmdlZCA9IG5ldyBFdmVudEVtaXR0ZXI8U3RlcFNlbGVjdGVkRXZlbnQ+KCk7XG4gICAgLyoqIEluZGljYXRlcyB3aGV0aGVyIGVhY2ggc3RlcCBoYXMgdG8gYmUgdmFsaWRhdGVkIGJlZm9yZSBwcm9jZWVkaW5nIHRvIHRoZSBuZXh0LiAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsaW5lYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICAvKiogVGhlIHR5cGUgb2YgdGhlIHN0ZXBwZXIuICovXG4gICAgQElucHV0KCkgcHVibGljIHR5cGU6IFN0ZXBwZXJUeXBlID0gU3RlcHBlclR5cGUuUGFuZWxzO1xuICAgIHB1YmxpYyBTdGVwU3RhdGUgPSBTdGVwU3RhdGU7XG4gICAgcHVibGljIFN0ZXBwZXJUeXBlID0gU3RlcHBlclR5cGU7XG5cbiAgICAvKiogVGhlIGN1cnJlbnQgd2l6YXJkIHN0ZXAuICovXG4gICAgcHVibGljIGdldCBjdXJyZW50U3RlcCgpOiBMaWJTdGVwQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RlcHM/LmdldCh0aGlzLl9jdXJyZW50U3RlcEluZGV4KTtcbiAgICB9XG5cbiAgICAvKiogVGhlIGluZGV4IChzdGFydGluZyBmcm9tIHplcm8pIG9mIHRoZSBjdXJyZW50IHdpemFyZCBzdGVwLiAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVudFN0ZXBJbmRleCgpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudFN0ZXBJbmRleDtcbiAgICB9XG5cbiAgICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICAgIC8qKiBQcm9jZWVkcyB0byB0aGUgbmV4dCBzdGVwLCBpZiBhbnkuICovXG4gICAgcHVibGljIGdvVG9OZXh0U3RlcCgpOiB2b2lkIHtcbiAgICAgICAgLy8gQ2Fubm90IGdvIGZvcndhcmQuXG4gICAgICAgIGlmICh0aGlzLl9jdXJyZW50U3RlcEluZGV4ID09PSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRTdGVwSW5kZXgodGhpcy5fY3VycmVudFN0ZXBJbmRleCArIDEpO1xuICAgIH1cblxuICAgIC8qKiBQcm9jZWVkcyB0byB0aGUgcHJldmlvdXMgc3RlcCwgaWYgYW55LiAqL1xuICAgIHB1YmxpYyBnb1RvUHJldmlvdXNTdGVwKCk6IHZvaWQge1xuICAgICAgICAvLyBDYW5ub3QgZ28gYmFjay5cbiAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnRTdGVwSW5kZXggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnVwZGF0ZUN1cnJlbnRTdGVwSW5kZXgodGhpcy5fY3VycmVudFN0ZXBJbmRleCAtIDEpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblNlbGVjdFN0ZXAoc2VsZWN0ZWRTdGVwOiBMaWJTdGVwQ29tcG9uZW50KTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlQ3VycmVudFN0ZXBJbmRleChzZWxlY3RlZFN0ZXAuaW5kZXgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdXBkYXRlQ3VycmVudFN0ZXBJbmRleChuZXdJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0ZXBzQXJyYXkgPSB0aGlzLnN0ZXBzLnRvQXJyYXkoKTtcbiAgICAgICAgY29uc3QgY3VycmVudFN0ZXAgPSBzdGVwc0FycmF5W3RoaXMuY3VycmVudFN0ZXBJbmRleF07XG4gICAgICAgIGNvbnN0IHNob3VsZFN0b3AgPSB0aGlzLmxpbmVhciAmJiAoXG4gICAgICAgICAgICAoIWN1cnJlbnRTdGVwLmlzVmFsaWQgJiYgbmV3SW5kZXggPj0gdGhpcy5jdXJyZW50U3RlcEluZGV4KSB8fCAvLyBJZiBjdXJyZW50IHN0ZXAgaXMgaW52YWxpZCBhbmQgd2FudCB0byBnbyBmb3J3YXJkLCB0aGVuIHN0b3AuXG4gICAgICAgICAgICAoY3VycmVudFN0ZXAuaXNWYWxpZCAmJiBuZXdJbmRleCA+IHRoaXMuY3VycmVudFN0ZXBJbmRleCArIDEgJiYgc3RlcHNBcnJheS5zbGljZSh0aGlzLmN1cnJlbnRTdGVwSW5kZXggKyAxLCBuZXdJbmRleCkuc29tZSh4ID0+ICF4LmlzVmFsaWQpKSAvLyBJZiBnb2luZyBmb3J3YXJkIChtb3JlIHRoYW4gMSBzdGVwcyksIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgaW52YWxpZCBzdGVwcyBpbiBiZXR3ZWVuLlxuICAgICAgICApO1xuICAgICAgICBpZiAoc2hvdWxkU3RvcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RlcENoYW5nZWQuZW1pdCh7XG4gICAgICAgICAgICBzZWxlY3RlZEluZGV4OiBuZXdJbmRleCxcbiAgICAgICAgICAgIHByZXZpb3VzbHlTZWxlY3RlZEluZGV4OiB0aGlzLmN1cnJlbnRTdGVwSW5kZXgsXG4gICAgICAgICAgICBzZWxlY3RlZFN0ZXA6IHN0ZXBzQXJyYXlbbmV3SW5kZXhdLFxuICAgICAgICAgICAgcHJldmlvdXNseVNlbGVjdGVkU3RlcDogY3VycmVudFN0ZXBcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRTdGVwSW5kZXggPSBuZXdJbmRleDtcbiAgICB9XG59XG4iLCI8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0eXBlXCI+XG4gICAgPCEtLSBCdWxsZXRzIC0tPlxuICAgIDxuYXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiIGFyaWEtbGFiZWw9XCJQcm9ncmVzc1wiICpuZ1N3aXRjaENhc2U9XCJTdGVwcGVyVHlwZS5CdWxsZXRzXCI+XG4gICAgICAgIDxwIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bVwiPlN0ZXAge3sgY3VycmVudFN0ZXBJbmRleCArIDEgfX0gb2Yge3sgc3RlcHMubGVuZ3RoIH19PC9wPlxuICAgICAgICA8b2wgcm9sZT1cImxpc3RcIiBjbGFzcz1cIm1sLTggZmxleCBpdGVtcy1jZW50ZXIgc3BhY2UteC01XCI+XG4gICAgICAgICAgICA8bGkgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzXCIgKGNsaWNrKT1cIm9uU2VsZWN0U3RlcChzdGVwKVwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQ29tcGxldGVkIFN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJsb2NrIHctMi41IGgtMi41IGJnLWJsdWUtNjAwIHJvdW5kZWQtZnVsbCBob3ZlcjpiZy1ibHVlLTkwMFwiICpuZ0lmPVwic3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLkNvbXBsZXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5TdGVwIHt7IHN0ZXAuaW5kZXggfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBBY3RpdmUgU3RlcCAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIiBhcmlhLWN1cnJlbnQ9XCJzdGVwXCIgKm5nSWY9XCJzdGVwLnN0YXRlID09PSBTdGVwU3RhdGUuQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWJzb2x1dGUgdy01IGgtNSBwLXB4IGZsZXhcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidy1mdWxsIGgtZnVsbCByb3VuZGVkLWZ1bGwgYmctYmx1ZS0yMDBcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWxhdGl2ZSBibG9jayB3LTIuNSBoLTIuNSBiZy1ibHVlLTYwMCByb3VuZGVkLWZ1bGxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3Itb25seVwiPlN0ZXAge3sgc3RlcC5pbmRleCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIFVwY29taW5nIFN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBocmVmPVwiI1wiIGNsYXNzPVwiYmxvY2sgdy0yLjUgaC0yLjUgYmctZ3JheS0yMDAgcm91bmRlZC1mdWxsIGhvdmVyOmJnLWdyYXktNDAwXCIgKm5nSWY9XCJzdGVwLnN0YXRlID09PSBTdGVwU3RhdGUuVXBjb21pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+U3RlcCB7eyBzdGVwLmluZGV4IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgPC9vbD5cbiAgICA8L25hdj5cbiAgICA8IS0tIEJ1bGxldHMgJiBUZXh0IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiIGFyaWEtbGFiZWw9XCJQcm9ncmVzc1wiICpuZ1N3aXRjaENhc2U9XCJTdGVwcGVyVHlwZS5CdWxsZXRzQW5kVGV4dFwiPlxuICAgICAgICA8bmF2IGFyaWEtbGFiZWw9XCJQcm9ncmVzc1wiPlxuICAgICAgICAgICAgPG9sIHJvbGU9XCJsaXN0XCIgY2xhc3M9XCJzcGFjZS15LTZcIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzXCIgKGNsaWNrKT1cIm9uU2VsZWN0U3RlcChzdGVwKVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIENvbXBsZXRlIFN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cFwiICpuZ0lmPVwic3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLkNvbXBsZXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LXNocmluay0wIHJlbGF0aXZlIGgtNSB3LTUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz1cImgtZnVsbCB3LWZ1bGwgdGV4dC1ibHVlLTYwMCBncm91cC1ob3Zlcjp0ZXh0LWJsdWUtODAwXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjcwNy05LjI5M2ExIDEgMCAwMC0xLjQxNC0xLjQxNEw5IDEwLjU4NiA3LjcwNyA5LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwyIDJhMSAxIDAgMDAxLjQxNCAwbDQtNHpcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtMyB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgZ3JvdXAtaG92ZXI6dGV4dC1ncmF5LTkwMFwiICpuZ0lmPVwic3RlcC5zdGVwTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBMYWJlbC50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIFN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0XCIgYXJpYS1jdXJyZW50PVwic3RlcFwiICpuZ0lmPVwic3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLkFjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LXNocmluay0wIGgtNSB3LTUgcmVsYXRpdmUgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFic29sdXRlIGgtNCB3LTQgcm91bmRlZC1mdWxsIGJnLWJsdWUtMjAwXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVsYXRpdmUgYmxvY2sgdy0yIGgtMiBiZy1ibHVlLTYwMCByb3VuZGVkLWZ1bGxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWJsdWUtNjAwXCIgKm5nSWY9XCJzdGVwLnN0ZXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RlcC5zdGVwTGFiZWwudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gVXBjb21pbmcgU3RlcCAtLT5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwXCIgKm5nSWY9XCJzdGVwLnN0YXRlID09PSBTdGVwU3RhdGUuVXBjb21pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLXN0YXJ0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgaC01IHctNSByZWxhdGl2ZSBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0yIHctMiBiZy1ncmF5LTMwMCByb3VuZGVkLWZ1bGwgZ3JvdXAtaG92ZXI6YmctZ3JheS00MDBcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz1cIm1sLTMgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwIGdyb3VwLWhvdmVyOnRleHQtZ3JheS05MDBcIiAqbmdJZj1cInN0ZXAuc3RlcExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RlcC5zdGVwTGFiZWwudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3A+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvb2w+XG4gICAgICAgIDwvbmF2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gQ2lyY2xlcyAtLT5cbiAgICA8bmF2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiIGFyaWEtbGFiZWw9XCJQcm9ncmVzc1wiICpuZ1N3aXRjaENhc2U9XCJTdGVwcGVyVHlwZS5DaXJjbGVzXCI+XG4gICAgICAgIDxvbCBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyXCIgcm9sZT1cImxpc3RcIj5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgc3RlcCBvZiBzdGVwc1wiIChjbGljayk9XCJvblNlbGVjdFN0ZXAoc3RlcClcIiBjbGFzcz1cInJlbGF0aXZlIHByLTggc206cHItMjAgY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8IS0tIENvbXBsZXRlZCBTdGVwIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGVwLnN0YXRlID09PSBTdGVwU3RhdGUuQ29tcGxldGVkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0wLjUgdy1mdWxsIGJnLWJsdWUtNjAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy04IGgtOCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibHVlLTYwMCByb3VuZGVkLWZ1bGwgaG92ZXI6YmctYmx1ZS05MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3LTUgaC01IHRleHQtd2hpdGVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNi43MDcgNS4yOTNhMSAxIDAgMDEwIDEuNDE0bC04IDhhMSAxIDAgMDEtMS40MTQgMGwtNC00YTEgMSAwIDAxMS40MTQtMS40MTRMOCAxMi41ODZsNy4yOTMtNy4yOTNhMSAxIDAgMDExLjQxNCAwelwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5TdGVwIHt7IHN0ZXAuaW5kZXggKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIEFjdGl2ZSBTdGVwIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGVwLnN0YXRlID09PSBTdGVwU3RhdGUuQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhYnNvbHV0ZSBpbnNldC0wIGZsZXggaXRlbXMtY2VudGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0wLjUgdy1mdWxsIGJnLWdyYXktMjAwXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgdy04IGgtOCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy13aGl0ZSBib3JkZXItMiBib3JkZXItYmx1ZS02MDAgcm91bmRlZC1mdWxsXCIgYXJpYS1jdXJyZW50PVwic3RlcFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJoLTIuNSB3LTIuNSBiZy1ibHVlLTYwMCByb3VuZGVkLWZ1bGxcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNyLW9ubHlcIj5TdGVwIHt7IHN0ZXAuaW5kZXggKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIFVwY29taW5nIFN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0ZXAuc3RhdGUgPT09IFN0ZXBTdGF0ZS5VcGNvbWluZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYWJzb2x1dGUgaW5zZXQtMCBmbGV4IGl0ZW1zLWNlbnRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMC41IHctZnVsbCBiZy1ncmF5LTIwMFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwIHJlbGF0aXZlIHctOCBoLTggZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctd2hpdGUgYm9yZGVyLTIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtZnVsbCBob3Zlcjpib3JkZXItZ3JheS00MDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaC0yLjUgdy0yLjUgYmctdHJhbnNwYXJlbnQgcm91bmRlZC1mdWxsIGdyb3VwLWhvdmVyOmJnLWdyYXktMzAwXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzci1vbmx5XCI+U3RlcCB7eyBzdGVwLmluZGV4ICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L29sPlxuICAgIDwvbmF2PlxuICAgIDwhLS0gQ2lyY2xlcyBXaXRoIFRleHQgLS0+XG4gICAgPG5hdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCIgYXJpYS1sYWJlbD1cIlByb2dyZXNzXCIgKm5nU3dpdGNoQ2FzZT1cIlN0ZXBwZXJUeXBlLkNpcmNsZXNXaXRoVGV4dFwiPlxuICAgICAgICA8b2wgcm9sZT1cImxpc3RcIiBjbGFzcz1cIm92ZXJmbG93LWhpZGRlblwiPlxuICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzXCIgKGNsaWNrKT1cIm9uU2VsZWN0U3RlcChzdGVwKVwiIGNsYXNzPVwicmVsYXRpdmUgcGItMTAgY3Vyc29yLXBvaW50ZXJcIj5cbiAgICAgICAgICAgICAgICA8IS0tIENvbXBsZXRlIFN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0ZXAuc3RhdGUgPT09IFN0ZXBTdGF0ZS5Db21wbGV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIi1tbC1weCBhYnNvbHV0ZSBtdC0wLjUgdG9wLTQgbGVmdC00IHctMC41IGgtZnVsbCBiZy1ibHVlLTYwMFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwiIXN0ZXAuaXNMYXN0XCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGl0ZW1zLXN0YXJ0IGdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImgtOSBmbGV4IGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVsYXRpdmUgei0xMCB3LTggaC04IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWJsdWUtNjAwIHJvdW5kZWQtZnVsbCBncm91cC1ob3ZlcjpiZy1ibHVlLTgwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwidy01IGgtNSB0ZXh0LXdoaXRlXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9XCJldmVub2RkXCIgZD1cIk0xNi43MDcgNS4yOTNhMSAxIDAgMDEwIDEuNDE0bC04IDhhMSAxIDAgMDEtMS40MTQgMGwtNC00YTEgMSAwIDAxMS40MTQtMS40MTRMOCAxMi41ODZsNy4yOTMtNy4yOTNhMSAxIDAgMDExLjQxNCAwelwiIGNsaXAtcnVsZT1cImV2ZW5vZGRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTQgbWluLXctMCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctd2lkZSB1cHBlcmNhc2VcIiAqbmdJZj1cInN0ZXAuc3RlcExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RlcC5zdGVwTGFiZWwudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIHRleHQtZ3JheS01MDBcIiAqbmdJZj1cInN0ZXAuc3RlcEluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBJbmZvLnRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8IS0tIEFjdGl2ZSBTdGVwIC0tPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdGVwLnN0YXRlID09PSBTdGVwU3RhdGUuQWN0aXZlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCItbWwtcHggYWJzb2x1dGUgbXQtMC41IHRvcC00IGxlZnQtNCB3LTAuNSBoLWZ1bGwgYmctZ3JheS0zMDBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cIiFzdGVwLmlzTGFzdFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVsYXRpdmUgZmxleCBpdGVtcy1zdGFydCBncm91cFwiIGFyaWEtY3VycmVudD1cInN0ZXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaC05IGZsZXggaXRlbXMtY2VudGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZWxhdGl2ZSB6LTEwIHctOCBoLTggZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYmctd2hpdGUgYm9yZGVyLTIgYm9yZGVyLWJsdWUtNjAwIHJvdW5kZWQtZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImgtMi41IHctMi41IGJnLWJsdWUtNjAwIHJvdW5kZWQtZnVsbFwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1sLTQgbWluLXctMCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIGZvbnQtc2VtaWJvbGQgdHJhY2tpbmctd2lkZSB1cHBlcmNhc2UgdGV4dC1ibHVlLTYwMFwiICpuZ0lmPVwic3RlcC5zdGVwTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBMYWJlbC50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtc20gdGV4dC1ncmF5LTUwMFwiICpuZ0lmPVwic3RlcC5zdGVwSW5mb1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0ZXAuc3RlcEluZm8udGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwhLS0gVXBjb21pbmcgU3RlcCAtLT5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLlVwY29taW5nXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCItbWwtcHggYWJzb2x1dGUgbXQtMC41IHRvcC00IGxlZnQtNCB3LTAuNSBoLWZ1bGwgYmctZ3JheS0zMDBcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cIiFzdGVwLmlzTGFzdFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGhyZWY9XCIjXCIgY2xhc3M9XCJyZWxhdGl2ZSBmbGV4IGl0ZW1zLXN0YXJ0IGdyb3VwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImgtOSBmbGV4IGl0ZW1zLWNlbnRlclwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVsYXRpdmUgei0xMCB3LTggaC04IGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLXdoaXRlIGJvcmRlci0yIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWZ1bGwgZ3JvdXAtaG92ZXI6Ym9yZGVyLWdyYXktNDAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaC0yLjUgdy0yLjUgYmctdHJhbnNwYXJlbnQgcm91bmRlZC1mdWxsIGdyb3VwLWhvdmVyOmJnLWdyYXktMzAwXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtNCBtaW4tdy0wIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0cmFja2luZy13aWRlIHVwcGVyY2FzZSB0ZXh0LWdyYXktNTAwXCIgKm5nSWY9XCJzdGVwLnN0ZXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0ZXAuc3RlcExhYmVsLnRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSB0ZXh0LWdyYXktNTAwXCIgKm5nSWY9XCJzdGVwLnN0ZXBJbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RlcC5zdGVwSW5mby50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L29sPlxuICAgIDwvbmF2PlxuICAgIDwhLS0gUGFuZWxzIC0tPlxuICAgIDxuYXYgYXJpYS1sYWJlbD1cIlByb2dyZXNzXCIgKm5nU3dpdGNoQ2FzZT1cIlN0ZXBwZXJUeXBlLlBhbmVsc1wiPlxuICAgICAgICA8b2wgcm9sZT1cImxpc3RcIiBjbGFzcz1cImJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1tZCBkaXZpZGUteSBkaXZpZGUtZ3JheS0zMDAgbWQ6ZmxleCBtZDpkaXZpZGUteS0wXCI+XG4gICAgICAgICAgICA8bGkgKm5nRm9yPVwibGV0IHN0ZXAgb2Ygc3RlcHNcIiAoY2xpY2spPVwib25TZWxlY3RTdGVwKHN0ZXApXCIgY2xhc3M9XCJyZWxhdGl2ZSBtZDpmbGV4LTEgbWQ6ZmxleCBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQ29tcGxldGVkIHN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwIGZsZXggaXRlbXMtY2VudGVyIHctZnVsbFwiICpuZ0lmPVwic3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLkNvbXBsZXRlZFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInB4LTYgcHktNCBmbGV4IGl0ZW1zLWNlbnRlciB0ZXh0LXNtIGZvbnQtbWVkaXVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgdy0xMCBoLTEwIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIGJnLWJsdWUtNjAwIHJvdW5kZWQtZnVsbCBncm91cC1ob3ZlcjpiZy1ibHVlLTgwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJ3LTYgaC02IHRleHQtd2hpdGVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZmlsbC1ydWxlPVwiZXZlbm9kZFwiIGQ9XCJNMTYuNzA3IDUuMjkzYTEgMSAwIDAxMCAxLjQxNGwtOCA4YTEgMSAwIDAxLTEuNDE0IDBsLTQtNGExIDEgMCAwMTEuNDE0LTEuNDE0TDggMTIuNTg2bDcuMjkzLTcuMjkzYTEgMSAwIDAxMS40MTQgMHpcIiBjbGlwLXJ1bGU9XCJldmVub2RkXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtNCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDBcIiAqbmdJZj1cInN0ZXAuc3RlcExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBMYWJlbC50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBBY3RpdmUgc3RlcCAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicHgtNiBweS00IGZsZXggaXRlbXMtY2VudGVyIHRleHQtc20gZm9udC1tZWRpdW1cIiAqbmdJZj1cInN0ZXAuc3RhdGUgPT09IFN0ZXBTdGF0ZS5BY3RpdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTAgaC0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItMiBib3JkZXItYmx1ZS02MDAgcm91bmRlZC1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYmx1ZS02MDBcIj57eyAoc3RlcC5pbmRleCArIDEpIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtNCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtYmx1ZS02MDBcIiAqbmdJZj1cInN0ZXAuc3RlcExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0ZXAuc3RlcExhYmVsLnRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIFVwY29taW5nIHN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwIGZsZXggaXRlbXMtY2VudGVyXCIgKm5nSWY9XCJzdGVwLnN0YXRlID09PSBTdGVwU3RhdGUuVXBjb21pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJweC02IHB5LTQgZmxleCBpdGVtcy1jZW50ZXIgdGV4dC1zbSBmb250LW1lZGl1bVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTAgaC0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItMiBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1mdWxsIGdyb3VwLWhvdmVyOmJvcmRlci1ncmF5LTQwMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ncmF5LTUwMCBncm91cC1ob3Zlcjp0ZXh0LWdyYXktOTAwXCI+e3sgKHN0ZXAuaW5kZXggKyAxKSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWwtNCB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDAgZ3JvdXAtaG92ZXI6dGV4dC1ncmF5LTkwMFwiICpuZ0lmPVwic3RlcC5zdGVwTGFiZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0ZXAuc3RlcExhYmVsLnRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIEFycm93IHNlcGFyYXRvciBmb3IgbGcgc2NyZWVucyBhbmQgdXAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIiFzdGVwLmlzTGFzdFwiIGNsYXNzPVwiaGlkZGVuIG1kOmJsb2NrIGFic29sdXRlIHRvcC0wIHJpZ2h0LTAgaC1mdWxsIHctNVwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC1mdWxsIHctZnVsbCB0ZXh0LWdyYXktMzAwXCIgdmlld0JveD1cIjAgMCAyMiA4MFwiIGZpbGw9XCJub25lXCIgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMCAtMkwyMCA0MEwwIDgyXCIgdmVjdG9yLWVmZmVjdD1cIm5vbi1zY2FsaW5nLXN0cm9rZVwiIHN0cm9rZT1cImN1cnJlbnRjb2xvclwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L29sPlxuICAgIDwvbmF2PlxuICAgIDwhLS0gUGFuZWxzIFdpdGggQm9yZGVyIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJsZzpib3JkZXItdCBsZzpib3JkZXItYiBsZzpib3JkZXItZ3JheS0yMDBcIiAqbmdTd2l0Y2hDYXNlPVwiU3RlcHBlclR5cGUuUGFuZWxzV2l0aEJvcmRlclwiPlxuICAgICAgICA8bmF2IGNsYXNzPVwibXgtYXV0byBtYXgtdy03eGwgcHgtNCBzbTpweC02IGxnOnB4LThcIiBhcmlhLWxhYmVsPVwiUHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgIDxvbCByb2xlPVwibGlzdFwiIGNsYXNzPVwicm91bmRlZC1tZCBvdmVyZmxvdy1oaWRkZW4gbGc6ZmxleCBsZzpib3JkZXItbCBsZzpib3JkZXItciBsZzpib3JkZXItZ3JheS0yMDAgbGc6cm91bmRlZC1ub25lXCI+XG4gICAgICAgICAgICAgICAgPGxpICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzXCIgKGNsaWNrKT1cIm9uU2VsZWN0U3RlcChzdGVwKVwiIGNsYXNzPVwicmVsYXRpdmUgb3ZlcmZsb3ctaGlkZGVuIGxnOmZsZXgtMSBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIENvbXBsZXRlZCBTdGVwIC0tPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBvdmVyZmxvdy1oaWRkZW4gYm9yZGVyLWItMCByb3VuZGVkLXQtbWQgbGc6Ym9yZGVyLTBcIiAqbmdJZj1cInN0ZXAuc3RhdGUgPT09IFN0ZXBTdGF0ZS5Db21wbGV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYWJzb2x1dGUgdG9wLTAgbGVmdC0wIHctMSBoLWZ1bGwgYmctdHJhbnNwYXJlbnQgZ3JvdXAtaG92ZXI6YmctZ3JheS0yMDAgbGc6dy1mdWxsIGxnOmgtMSBsZzpib3R0b20tMCBsZzp0b3AtYXV0b1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInB4LTYgcHktNSBmbGV4IGl0ZW1zLXN0YXJ0IHRleHQtc20gZm9udC1tZWRpdW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMTAgaC0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBiZy1ibHVlLTYwMCByb3VuZGVkLWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwidy02IGgtNiB0ZXh0LXdoaXRlXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwiY3VycmVudENvbG9yXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGZpbGwtcnVsZT1cImV2ZW5vZGRcIiBkPVwiTTE2LjcwNyA1LjI5M2ExIDEgMCAwMTAgMS40MTRsLTggOGExIDEgMCAwMS0xLjQxNCAwbC00LTRhMSAxIDAgMDExLjQxNC0xLjQxNEw4IDEyLjU4Nmw3LjI5My03LjI5M2ExIDEgMCAwMTEuNDE0IDB6XCIgY2xpcC1ydWxlPVwiZXZlbm9kZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0wLjUgbWwtNCBtaW4tdy0wIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRyYWNraW5nLXdpZGUgdXBwZXJjYXNlXCIgKm5nSWY9XCJzdGVwLnN0ZXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RlcC5zdGVwTGFiZWwudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwXCIgKm5nSWY9XCJzdGVwLnN0ZXBJbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBJbmZvLnRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gQWN0aXZlIFN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgYm9yZGVyLWdyYXktMjAwIG92ZXJmbG93LWhpZGRlbiBsZzpib3JkZXItMFwiICpuZ0lmPVwic3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLkFjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBhcmlhLWN1cnJlbnQ9XCJzdGVwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgdy0xIGgtZnVsbCBiZy1ibHVlLTYwMCBsZzp3LWZ1bGwgbGc6aC0xIGxnOmJvdHRvbS0wIGxnOnRvcC1hdXRvXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicHgtNiBweS01IGZsZXggaXRlbXMtc3RhcnQgdGV4dC1zbSBmb250LW1lZGl1bSBsZzpwbC05XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZmxleC1zaHJpbmstMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ3LTEwIGgtMTAgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgYm9yZGVyLTIgYm9yZGVyLWJsdWUtNjAwIHJvdW5kZWQtZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ibHVlLTYwMFwiPnt7IHN0ZXAuaW5kZXggKyAxIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXQtMC41IG1sLTQgbWluLXctMCBmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgZm9udC1zZW1pYm9sZCB0ZXh0LWJsdWUtNjAwIHRyYWNraW5nLXdpZGUgdXBwZXJjYXNlXCIgKm5nSWY9XCJzdGVwLnN0ZXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwic3RlcC5zdGVwTGFiZWwudGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNTAwXCIgKm5nSWY9XCJzdGVwLnN0ZXBJbmZvXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBJbmZvLnRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gU2VwYXJhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhpZGRlbiBhYnNvbHV0ZSB0b3AtMCBsZWZ0LTAgdy0zIGluc2V0LTAgbGc6YmxvY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIiAqbmdJZj1cInN0ZXAuaW5kZXggIT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPVwiaC1mdWxsIHctZnVsbCB0ZXh0LWdyYXktMzAwXCIgdmlld0JveD1cIjAgMCAxMiA4MlwiIGZpbGw9XCJub25lXCIgcHJlc2VydmVBc3BlY3RSYXRpbz1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0wLjUgMFYzMUwxMC41IDQxTDAuNSA1MVY4MlwiIHN0cm9rZT1cImN1cnJlbnRjb2xvclwiIHZlY3Rvci1lZmZlY3Q9XCJub24tc2NhbGluZy1zdHJva2VcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8IS0tIFVwY29taW5nIFN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJib3JkZXIgYm9yZGVyLWdyYXktMjAwIG92ZXJmbG93LWhpZGRlbiBib3JkZXItdC0wIHJvdW5kZWQtYi1tZCBsZzpib3JkZXItMFwiICpuZ0lmPVwic3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLlVwY29taW5nXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImFic29sdXRlIHRvcC0wIGxlZnQtMCB3LTEgaC1mdWxsIGJnLXRyYW5zcGFyZW50IGdyb3VwLWhvdmVyOmJnLWdyYXktMjAwIGxnOnctZnVsbCBsZzpoLTEgbGc6Ym90dG9tLTAgbGc6dG9wLWF1dG9cIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJweC02IHB5LTUgZmxleCBpdGVtcy1zdGFydCB0ZXh0LXNtIGZvbnQtbWVkaXVtIGxnOnBsLTlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJmbGV4LXNocmluay0wXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInctMTAgaC0xMCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBib3JkZXItMiBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWdyYXktNTAwXCI+e3sgc3RlcC5pbmRleCArIDEgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtdC0wLjUgbWwtNCBtaW4tdy0wIGZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC14cyBmb250LXNlbWlib2xkIHRleHQtZ3JheS01MDAgdHJhY2tpbmctd2lkZSB1cHBlcmNhc2VcIiAqbmdJZj1cInN0ZXAuc3RlcExhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBMYWJlbC50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS01MDBcIiAqbmdJZj1cInN0ZXAuc3RlcEluZm9cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInN0ZXAuc3RlcEluZm8udGVtcGxhdGVcIj48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBTZXBhcmF0b3IgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIGFic29sdXRlIHRvcC0wIGxlZnQtMCB3LTMgaW5zZXQtMCBsZzpibG9ja1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiICpuZ0lmPVwic3RlcC5pbmRleCAhPT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9XCJoLWZ1bGwgdy1mdWxsIHRleHQtZ3JheS0zMDBcIiB2aWV3Qm94PVwiMCAwIDEyIDgyXCIgZmlsbD1cIm5vbmVcIiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTAuNSAwVjMxTDEwLjUgNDFMMC41IDUxVjgyXCIgc3Ryb2tlPVwiY3VycmVudGNvbG9yXCIgdmVjdG9yLWVmZmVjdD1cIm5vbi1zY2FsaW5nLXN0cm9rZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDwvb2w+XG4gICAgICAgIDwvbmF2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gUHJvZ3Jlc3MgLS0+XG4gICAgPGRpdiAqbmdTd2l0Y2hDYXNlPVwiU3RlcHBlclR5cGUuUHJvZ3Jlc3NcIj5cbiAgICAgICAgPCEtLSA8aDQgY2xhc3M9XCJzci1vbmx5XCI+U3RhdHVzPC9oND5cbiAgICAgICAgPHAgY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS05MDBcIj5NaWdyYXRpbmcgTXlTUUwgZGF0YWJhc2UuLi48L3A+IC0tPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXQtNlwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImJnLWdyYXktMjAwIHJvdW5kZWQtZnVsbCBvdmVyZmxvdy1oaWRkZW5cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0yIGJnLWJsdWUtNjAwIHJvdW5kZWQtZnVsbFwiIFtzdHlsZS53aWR0aF09XCIoKChjdXJyZW50U3RlcEluZGV4ICsgMSkgLyBzdGVwcy5sZW5ndGgpICogMTAwKSArICclJ1wiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaGlkZGVuIHNtOmdyaWQgZ3JpZC1jb2xzLTQgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNjAwIG10LTZcIj5cbiAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzXCIgKGNsaWNrKT1cIm9uU2VsZWN0U3RlcChzdGVwKVwiIGNsYXNzPVwidGV4dC1ibHVlLTYwMCBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RlcC5zdGVwTGFiZWxcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBMYWJlbC50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICAgIDwhLS0gU2ltcGxlIC0tPlxuICAgIDxuYXYgYXJpYS1sYWJlbD1cIlByb2dyZXNzXCIgKm5nU3dpdGNoQ2FzZT1cIlN0ZXBwZXJUeXBlLlNpbXBsZVwiPlxuICAgICAgICA8b2wgcm9sZT1cImxpc3RcIiBjbGFzcz1cInNwYWNlLXktNCBtZDpmbGV4IG1kOnNwYWNlLXktMCBtZDpzcGFjZS14LThcIj5cbiAgICAgICAgICAgIDxsaSAqbmdGb3I9XCJsZXQgc3RlcCBvZiBzdGVwc1wiIChjbGljayk9XCJvblNlbGVjdFN0ZXAoc3RlcClcIiBjbGFzcz1cIm1kOmZsZXgtMSBjdXJzb3ItcG9pbnRlclwiPlxuICAgICAgICAgICAgICAgIDwhLS0gQ29tcGxldGVkIFN0ZXAgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwIHBsLTQgcHktMiBmbGV4IGZsZXgtY29sIGJvcmRlci1sLTQgYm9yZGVyLWJsdWUtNjAwIGhvdmVyOmJvcmRlci1ibHVlLTgwMCBtZDpwbC0wIG1kOnB0LTQgbWQ6cGItMCBtZDpib3JkZXItbC0wIG1kOmJvcmRlci10LTRcIiAqbmdJZj1cInN0ZXAuc3RhdGUgPT09IFN0ZXBTdGF0ZS5Db21wbGV0ZWRcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtYmx1ZS02MDAgZm9udC1zZW1pYm9sZCB0cmFja2luZy13aWRlIHVwcGVyY2FzZSBncm91cC1ob3Zlcjp0ZXh0LWJsdWUtODAwXCI+U3RlcCB7eyBzdGVwLmluZGV4ICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCIgKm5nSWY9XCJzdGVwLnN0ZXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBMYWJlbC50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBBY3RpdmUgU3RlcCAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicGwtNCBweS0yIGZsZXggZmxleC1jb2wgYm9yZGVyLWwtNCBib3JkZXItYmx1ZS02MDAgbWQ6cGwtMCBtZDpwdC00IG1kOnBiLTAgbWQ6Ym9yZGVyLWwtMCBtZDpib3JkZXItdC00XCIgYXJpYS1jdXJyZW50PVwic3RlcFwiICpuZ0lmPVwic3RlcC5zdGF0ZSA9PT0gU3RlcFN0YXRlLkFjdGl2ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQteHMgdGV4dC1ibHVlLTYwMCBmb250LXNlbWlib2xkIHRyYWNraW5nLXdpZGUgdXBwZXJjYXNlXCI+U3RlcCB7eyBzdGVwLmluZGV4ICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCIgKm5nSWY9XCJzdGVwLnN0ZXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBMYWJlbC50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBVcGNvbWluZyBTdGVwIC0tPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cCBwbC00IHB5LTIgZmxleCBmbGV4LWNvbCBib3JkZXItbC00IGJvcmRlci1ncmF5LTIwMCBob3Zlcjpib3JkZXItZ3JheS0zMDAgbWQ6cGwtMCBtZDpwdC00IG1kOnBiLTAgbWQ6Ym9yZGVyLWwtMCBtZDpib3JkZXItdC00XCIgKm5nSWY9XCJzdGVwLnN0YXRlID09PSBTdGVwU3RhdGUuVXBjb21pbmdcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXhzIHRleHQtZ3JheS01MDAgZm9udC1zZW1pYm9sZCB0cmFja2luZy13aWRlIHVwcGVyY2FzZSBncm91cC1ob3Zlcjp0ZXh0LWdyYXktNzAwXCI+U3RlcCB7eyBzdGVwLmluZGV4ICsgMSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXNtIGZvbnQtbWVkaXVtXCIgKm5nSWY9XCJzdGVwLnN0ZXBMYWJlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLnN0ZXBMYWJlbC50ZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICA8L29sPlxuICAgIDwvbmF2PlxuPC9uZy1jb250YWluZXI+XG48bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBzdGVwIG9mIHN0ZXBzXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0ZXAuc3RhdGUgPT09IFN0ZXBTdGF0ZS5BY3RpdmVcIiBbbmdUZW1wbGF0ZU91dGxldF09XCJzdGVwLmNvbnRlbnRcIj48L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPiJdfQ==
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Change event emitted on step changes. */
|
|
2
|
+
export class StepSelectedEvent {
|
|
3
|
+
}
|
|
4
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcC1zZWxlY3RlZC1ldmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy9zdGVwcGVyL3R5cGVzL3N0ZXAtc2VsZWN0ZWQtZXZlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsNENBQTRDO0FBQzVDLE1BQU0sT0FBTyxpQkFBaUI7Q0FTN0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBMaWJTdGVwQ29tcG9uZW50IH0gZnJvbSAnLi4vbGliLXN0ZXAuY29tcG9uZW50JztcblxuLyoqIENoYW5nZSBldmVudCBlbWl0dGVkIG9uIHN0ZXAgY2hhbmdlcy4gKi9cbmV4cG9ydCBjbGFzcyBTdGVwU2VsZWN0ZWRFdmVudCB7XG4gICAgLyoqIEluZGV4IG9mIHRoZSBzdGVwIG5vdyBzZWxlY3RlZC4gKi9cbiAgICBwdWJsaWMgc2VsZWN0ZWRJbmRleCE6IG51bWJlcjtcbiAgICAvKiogSW5kZXggb2YgdGhlIHN0ZXAgcHJldmlvdXNseSBzZWxlY3RlZC4gKi9cbiAgICBwdWJsaWMgcHJldmlvdXNseVNlbGVjdGVkSW5kZXg6IG51bWJlciB8IHVuZGVmaW5lZDtcbiAgICAvKiogVGhlIHN0ZXAgaW5zdGFuY2Ugbm93IHNlbGVjdGVkLiAqL1xuICAgIHB1YmxpYyBzZWxlY3RlZFN0ZXAhOiBMaWJTdGVwQ29tcG9uZW50O1xuICAgIC8qKiBUaGUgc3RlcCBpbnN0YW5jZSBwcmV2aW91c2x5IHNlbGVjdGVkLiAqL1xuICAgIHB1YmxpYyBwcmV2aW91c2x5U2VsZWN0ZWRTdGVwOiBMaWJTdGVwQ29tcG9uZW50IHwgdW5kZWZpbmVkO1xufVxuIl19
|
|
@@ -9,4 +9,4 @@ export var StepperType;
|
|
|
9
9
|
StepperType["Progress"] = "Progress";
|
|
10
10
|
StepperType["Simple"] = "Simple";
|
|
11
11
|
})(StepperType || (StepperType = {}));
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RlcHBlci10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctY29tcG9uZW50cy9zcmMvbGliL2NvbnRyb2xzL3N0ZXBwZXIvdHlwZXMvc3RlcHBlci10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBTixJQUFZLFdBU1g7QUFURCxXQUFZLFdBQVc7SUFDbkIsa0NBQW1CLENBQUE7SUFDbkIsZ0RBQWlDLENBQUE7SUFDakMsa0NBQW1CLENBQUE7SUFDbkIsa0RBQW1DLENBQUE7SUFDbkMsZ0NBQWlCLENBQUE7SUFDakIsb0RBQXFDLENBQUE7SUFDckMsb0NBQXFCLENBQUE7SUFDckIsZ0NBQWlCLENBQUE7QUFDckIsQ0FBQyxFQVRXLFdBQVcsS0FBWCxXQUFXLFFBU3RCIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGVudW0gU3RlcHBlclR5cGUge1xuICAgIEJ1bGxldHMgPSAnQnVsbGV0cycsXG4gICAgQnVsbGV0c0FuZFRleHQgPSAnQnVsbGV0c0FuZFRleHQnLFxuICAgIENpcmNsZXMgPSAnQ2lyY2xlcycsXG4gICAgQ2lyY2xlc1dpdGhUZXh0ID0gJ0NpcmNsZXNXaXRoVGV4dCcsXG4gICAgUGFuZWxzID0gJ1BhbmVscycsXG4gICAgUGFuZWxzV2l0aEJvcmRlciA9ICdQYW5lbHNXaXRoQm9yZGVyJyxcbiAgICBQcm9ncmVzcyA9ICdQcm9ncmVzcycsXG4gICAgU2ltcGxlID0gJ1NpbXBsZSdcbn0iXX0=
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { Component, ContentChildren, EventEmitter, forwardRef, Output } from '@angular/core';
|
|
2
|
+
import { LIBTABGROUP_ACCESSOR } from '../../tokens';
|
|
3
|
+
import { LibTabComponent } from './lib-tab.component';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "@angular/common";
|
|
6
|
+
export class LibTabGroupComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
/** The inner tabs of the group. */
|
|
9
|
+
this.tabs = undefined;
|
|
10
|
+
/** Emmited when a step change occurs. */
|
|
11
|
+
this.tabChanged = new EventEmitter();
|
|
12
|
+
}
|
|
13
|
+
/** The current tab. */
|
|
14
|
+
get currentTab() {
|
|
15
|
+
return this.tabs?.find(x => x.isActive);
|
|
16
|
+
}
|
|
17
|
+
/** The index (starting from zero) of the current tab. */
|
|
18
|
+
get currentΤabIndex() {
|
|
19
|
+
return this.currentTab?.index || undefined;
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() { }
|
|
22
|
+
ngAfterContentInit() {
|
|
23
|
+
if (!this.tabs) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
ngAfterContentChecked() {
|
|
28
|
+
if (this.tabs && this.tabs.length > 0) {
|
|
29
|
+
const anyActive = this.tabs.filter(x => x.isActive).length > 0;
|
|
30
|
+
if (!anyActive) {
|
|
31
|
+
this.tabs.get(0).isActive = true;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
onTabChanged(selectedTab) {
|
|
36
|
+
this.tabs.forEach((tab) => tab.isActive = tab.id === selectedTab.id);
|
|
37
|
+
this.tabChanged.emit(selectedTab);
|
|
38
|
+
}
|
|
39
|
+
onTabSelectChanged(selectedTabIndex) {
|
|
40
|
+
this.tabs.forEach((tab, index) => tab.isActive = index === selectedTabIndex);
|
|
41
|
+
this.tabChanged.emit(this.tabs?.get(selectedTabIndex));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
LibTabGroupComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibTabGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
45
|
+
LibTabGroupComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: LibTabGroupComponent, selector: "lib-tab-group", outputs: { tabChanged: "tabChanged" }, providers: [
|
|
46
|
+
{ provide: LIBTABGROUP_ACCESSOR, useExisting: forwardRef(() => LibTabGroupComponent) }
|
|
47
|
+
], queries: [{ propertyName: "tabs", predicate: LibTabComponent, descendants: true }], ngImport: i0, template: "<div class=\"sm:hidden\">\n <label for=\"tabs\" class=\"sr-only\">Select a tab</label>\n <select id=\"tabs\" name=\"tabs\" (change)=\"onTabSelectChanged(+tabsSelect.value)\" class=\"tab-group-select\" #tabsSelect>\n <option [value]=\"i\" *ngFor=\"let tab of tabs; let i = index\">{{ tab.label }}</option>\n </select>\n</div>\n<div class=\"hidden sm:block\">\n <div class=\"tab-group-container\">\n <nav class=\"-mb-px flex space-x-8\" aria-label=\"Tabs\">\n <a *ngFor=\"let tab of tabs\" href=\"javascript:void(0)\" [class.tab]=\"!tab.isActive\" [class.tab-active]=\"tab.isActive\" (click)=\"onTabChanged(tab)\">\n {{ tab.label }}\n </a>\n </nav>\n </div>\n</div>\n<div *ngIf=\"currentTab?.content\">\n <ng-container [ngTemplateOutlet]=\"currentTab!.content\"></ng-container>\n</div>", dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }] });
|
|
48
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibTabGroupComponent, decorators: [{
|
|
49
|
+
type: Component,
|
|
50
|
+
args: [{ selector: 'lib-tab-group', providers: [
|
|
51
|
+
{ provide: LIBTABGROUP_ACCESSOR, useExisting: forwardRef(() => LibTabGroupComponent) }
|
|
52
|
+
], template: "<div class=\"sm:hidden\">\n <label for=\"tabs\" class=\"sr-only\">Select a tab</label>\n <select id=\"tabs\" name=\"tabs\" (change)=\"onTabSelectChanged(+tabsSelect.value)\" class=\"tab-group-select\" #tabsSelect>\n <option [value]=\"i\" *ngFor=\"let tab of tabs; let i = index\">{{ tab.label }}</option>\n </select>\n</div>\n<div class=\"hidden sm:block\">\n <div class=\"tab-group-container\">\n <nav class=\"-mb-px flex space-x-8\" aria-label=\"Tabs\">\n <a *ngFor=\"let tab of tabs\" href=\"javascript:void(0)\" [class.tab]=\"!tab.isActive\" [class.tab-active]=\"tab.isActive\" (click)=\"onTabChanged(tab)\">\n {{ tab.label }}\n </a>\n </nav>\n </div>\n</div>\n<div *ngIf=\"currentTab?.content\">\n <ng-container [ngTemplateOutlet]=\"currentTab!.content\"></ng-container>\n</div>" }]
|
|
53
|
+
}], ctorParameters: function () { return []; }, propDecorators: { tabs: [{
|
|
54
|
+
type: ContentChildren,
|
|
55
|
+
args: [LibTabComponent, { descendants: true }]
|
|
56
|
+
}], tabChanged: [{
|
|
57
|
+
type: Output
|
|
58
|
+
}] } });
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLXRhYi1ncm91cC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvdGFicy9saWItdGFiLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25nLWNvbXBvbmVudHMvc3JjL2xpYi9jb250cm9scy90YWJzL2xpYi10YWItZ3JvdXAuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUF5QyxTQUFTLEVBQUUsZUFBZSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBRXZKLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQVN0RCxNQUFNLE9BQU8sb0JBQW9CO0lBQzdCO1FBRUEsbUNBQW1DO1FBQzZCLFNBQUksR0FBMkMsU0FBUyxDQUFDO1FBQ3pILHlDQUF5QztRQUN4QixlQUFVLEdBQWtDLElBQUksWUFBWSxFQUFtQixDQUFDO0lBTGpGLENBQUM7SUFPakIsdUJBQXVCO0lBQ3ZCLElBQVcsVUFBVTtRQUNqQixPQUFPLElBQUksQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzVDLENBQUM7SUFFRCx5REFBeUQ7SUFDekQsSUFBVyxlQUFlO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLElBQUksU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFTSxRQUFRLEtBQVcsQ0FBQztJQUVwQixrQkFBa0I7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDWixPQUFPO1NBQ1Y7SUFDTCxDQUFDO0lBRU0scUJBQXFCO1FBQ3hCLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDbkMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvRCxJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNaLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBRSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7YUFDckM7U0FDSjtJQUNMLENBQUM7SUFFTSxZQUFZLENBQUMsV0FBNEI7UUFDNUMsSUFBSSxDQUFDLElBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFvQixFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEtBQUssV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZGLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFTSxrQkFBa0IsQ0FBQyxnQkFBd0I7UUFDOUMsSUFBSSxDQUFDLElBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFvQixFQUFFLEtBQWEsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxLQUFLLEtBQUssZ0JBQWdCLENBQUMsQ0FBQztRQUN2RyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7SUFDM0QsQ0FBQzs7aUhBM0NRLG9CQUFvQjtxR0FBcEIsb0JBQW9CLCtFQUpsQjtRQUNQLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsRUFBRTtLQUN6RiwrQ0FNZ0IsZUFBZSxnRENoQnBDLDYxQkFpQk07MkZETE8sb0JBQW9CO2tCQVBoQyxTQUFTOytCQUNJLGVBQWUsYUFFZDt3QkFDUCxFQUFFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxxQkFBcUIsQ0FBQyxFQUFFO3FCQUN6RjswRUFNK0QsSUFBSTtzQkFBbkUsZUFBZTt1QkFBQyxlQUFlLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFO2dCQUV0QyxVQUFVO3NCQUExQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJDb250ZW50SW5pdCwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGRyZW4sIEV2ZW50RW1pdHRlciwgZm9yd2FyZFJlZiwgT25Jbml0LCBPdXRwdXQsIFF1ZXJ5TGlzdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBMSUJUQUJHUk9VUF9BQ0NFU1NPUiB9IGZyb20gJy4uLy4uL3Rva2Vucyc7XG5pbXBvcnQgeyBMaWJUYWJDb21wb25lbnQgfSBmcm9tICcuL2xpYi10YWIuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItdGFiLWdyb3VwJyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vbGliLXRhYi1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHsgcHJvdmlkZTogTElCVEFCR1JPVVBfQUNDRVNTT1IsIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IExpYlRhYkdyb3VwQ29tcG9uZW50KSB9XG4gICAgXVxufSlcbmV4cG9ydCBjbGFzcyBMaWJUYWJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgQWZ0ZXJDb250ZW50Q2hlY2tlZCB7XG4gICAgY29uc3RydWN0b3IoKSB7IH1cblxuICAgIC8qKiBUaGUgaW5uZXIgdGFicyBvZiB0aGUgZ3JvdXAuICovXG4gICAgQENvbnRlbnRDaGlsZHJlbihMaWJUYWJDb21wb25lbnQsIHsgZGVzY2VuZGFudHM6IHRydWUgfSkgcHVibGljIHRhYnM6IFF1ZXJ5TGlzdDxMaWJUYWJDb21wb25lbnQ+IHwgdW5kZWZpbmVkID0gdW5kZWZpbmVkO1xuICAgIC8qKiBFbW1pdGVkIHdoZW4gYSBzdGVwIGNoYW5nZSBvY2N1cnMuICovXG4gICAgQE91dHB1dCgpIHB1YmxpYyB0YWJDaGFuZ2VkOiBFdmVudEVtaXR0ZXI8TGliVGFiQ29tcG9uZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8TGliVGFiQ29tcG9uZW50PigpO1xuXG4gICAgLyoqIFRoZSBjdXJyZW50IHRhYi4gKi9cbiAgICBwdWJsaWMgZ2V0IGN1cnJlbnRUYWIoKTogTGliVGFiQ29tcG9uZW50IHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudGFicz8uZmluZCh4ID0+IHguaXNBY3RpdmUpO1xuICAgIH1cblxuICAgIC8qKiBUaGUgaW5kZXggKHN0YXJ0aW5nIGZyb20gemVybykgb2YgdGhlIGN1cnJlbnQgdGFiLiAqL1xuICAgIHB1YmxpYyBnZXQgY3VycmVudM6kYWJJbmRleCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50VGFiPy5pbmRleCB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQgeyB9XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMudGFicykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMudGFicyAmJiB0aGlzLnRhYnMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY29uc3QgYW55QWN0aXZlID0gdGhpcy50YWJzLmZpbHRlcih4ID0+IHguaXNBY3RpdmUpLmxlbmd0aCA+IDA7XG4gICAgICAgICAgICBpZiAoIWFueUFjdGl2ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudGFicy5nZXQoMCkhLmlzQWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblRhYkNoYW5nZWQoc2VsZWN0ZWRUYWI6IExpYlRhYkNvbXBvbmVudCk6IHZvaWQge1xuICAgICAgICB0aGlzLnRhYnMhLmZvckVhY2goKHRhYjogTGliVGFiQ29tcG9uZW50KSA9PiB0YWIuaXNBY3RpdmUgPSB0YWIuaWQgPT09IHNlbGVjdGVkVGFiLmlkKTtcbiAgICAgICAgdGhpcy50YWJDaGFuZ2VkLmVtaXQoc2VsZWN0ZWRUYWIpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblRhYlNlbGVjdENoYW5nZWQoc2VsZWN0ZWRUYWJJbmRleDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIHRoaXMudGFicyEuZm9yRWFjaCgodGFiOiBMaWJUYWJDb21wb25lbnQsIGluZGV4OiBudW1iZXIpID0+IHRhYi5pc0FjdGl2ZSA9IGluZGV4ID09PSBzZWxlY3RlZFRhYkluZGV4KTtcbiAgICAgICAgdGhpcy50YWJDaGFuZ2VkLmVtaXQodGhpcy50YWJzPy5nZXQoc2VsZWN0ZWRUYWJJbmRleCkpO1xuICAgIH1cbn0iLCI8ZGl2IGNsYXNzPVwic206aGlkZGVuXCI+XG4gICAgPGxhYmVsIGZvcj1cInRhYnNcIiBjbGFzcz1cInNyLW9ubHlcIj5TZWxlY3QgYSB0YWI8L2xhYmVsPlxuICAgIDxzZWxlY3QgaWQ9XCJ0YWJzXCIgbmFtZT1cInRhYnNcIiAoY2hhbmdlKT1cIm9uVGFiU2VsZWN0Q2hhbmdlZCgrdGFic1NlbGVjdC52YWx1ZSlcIiBjbGFzcz1cInRhYi1ncm91cC1zZWxlY3RcIiAjdGFic1NlbGVjdD5cbiAgICAgICAgPG9wdGlvbiBbdmFsdWVdPVwiaVwiICpuZ0Zvcj1cImxldCB0YWIgb2YgdGFiczsgbGV0IGkgPSBpbmRleFwiPnt7IHRhYi5sYWJlbCB9fTwvb3B0aW9uPlxuICAgIDwvc2VsZWN0PlxuPC9kaXY+XG48ZGl2IGNsYXNzPVwiaGlkZGVuIHNtOmJsb2NrXCI+XG4gICAgPGRpdiBjbGFzcz1cInRhYi1ncm91cC1jb250YWluZXJcIj5cbiAgICAgICAgPG5hdiBjbGFzcz1cIi1tYi1weCBmbGV4IHNwYWNlLXgtOFwiIGFyaWEtbGFiZWw9XCJUYWJzXCI+XG4gICAgICAgICAgICA8YSAqbmdGb3I9XCJsZXQgdGFiIG9mIHRhYnNcIiBocmVmPVwiamF2YXNjcmlwdDp2b2lkKDApXCIgW2NsYXNzLnRhYl09XCIhdGFiLmlzQWN0aXZlXCIgW2NsYXNzLnRhYi1hY3RpdmVdPVwidGFiLmlzQWN0aXZlXCIgKGNsaWNrKT1cIm9uVGFiQ2hhbmdlZCh0YWIpXCI+XG4gICAgICAgICAgICAgICAge3sgdGFiLmxhYmVsIH19XG4gICAgICAgICAgICA8L2E+XG4gICAgICAgIDwvbmF2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG48ZGl2ICpuZ0lmPVwiY3VycmVudFRhYj8uY29udGVudFwiPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiY3VycmVudFRhYiEuY29udGVudFwiPjwvbmctY29udGFpbmVyPlxuPC9kaXY+Il19
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, Inject, Input, Optional, TemplateRef, ViewChild, ViewEncapsulation } from '@angular/core';
|
|
2
|
+
import * as uuid from 'uuid';
|
|
3
|
+
import { LIBTABGROUP_ACCESSOR } from '../../tokens';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class LibTabComponent {
|
|
6
|
+
constructor(_tabGroup) {
|
|
7
|
+
this._tabGroup = _tabGroup;
|
|
8
|
+
this._isActive = false;
|
|
9
|
+
}
|
|
10
|
+
/** Indicates the index of the tab. */
|
|
11
|
+
get index() {
|
|
12
|
+
return this._tabGroup?.tabs?.toArray().indexOf(this) || undefined;
|
|
13
|
+
}
|
|
14
|
+
/** Indicates whether the tab is active. */
|
|
15
|
+
get isActive() {
|
|
16
|
+
return this._isActive;
|
|
17
|
+
}
|
|
18
|
+
/** Setter for LibTabComponent isActive property. */
|
|
19
|
+
set isActive(isActive) {
|
|
20
|
+
this._isActive = isActive;
|
|
21
|
+
}
|
|
22
|
+
ngOnInit() {
|
|
23
|
+
this.id = this.id || uuid.v4();
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
LibTabComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibTabComponent, deps: [{ token: LIBTABGROUP_ACCESSOR, optional: true }], target: i0.ɵɵFactoryTarget.Component });
|
|
27
|
+
LibTabComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.0.0", type: LibTabComponent, selector: "lib-tab", inputs: { label: "label", id: "id" }, viewQueries: [{ propertyName: "content", first: true, predicate: TemplateRef, descendants: true, static: true }], ngImport: i0, template: `
|
|
28
|
+
<ng-template>
|
|
29
|
+
<ng-content></ng-content>
|
|
30
|
+
</ng-template>
|
|
31
|
+
`, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.0", ngImport: i0, type: LibTabComponent, decorators: [{
|
|
33
|
+
type: Component,
|
|
34
|
+
args: [{
|
|
35
|
+
selector: 'lib-tab',
|
|
36
|
+
template: `
|
|
37
|
+
<ng-template>
|
|
38
|
+
<ng-content></ng-content>
|
|
39
|
+
</ng-template>
|
|
40
|
+
`,
|
|
41
|
+
encapsulation: ViewEncapsulation.None,
|
|
42
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
43
|
+
}]
|
|
44
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
45
|
+
type: Optional
|
|
46
|
+
}, {
|
|
47
|
+
type: Inject,
|
|
48
|
+
args: [LIBTABGROUP_ACCESSOR]
|
|
49
|
+
}] }]; }, propDecorators: { content: [{
|
|
50
|
+
type: ViewChild,
|
|
51
|
+
args: [TemplateRef, { static: true }]
|
|
52
|
+
}], label: [{
|
|
53
|
+
type: Input
|
|
54
|
+
}], id: [{
|
|
55
|
+
type: Input
|
|
56
|
+
}] } });
|
|
57
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGliLXRhYi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZy1jb21wb25lbnRzL3NyYy9saWIvY29udHJvbHMvdGFicy9saWItdGFiLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsUUFBUSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0ksT0FBTyxLQUFLLElBQUksTUFBTSxNQUFNLENBQUM7QUFDN0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQVlwRCxNQUFNLE9BQU8sZUFBZTtJQUd4QixZQUM4RCxTQUFlO1FBQWYsY0FBUyxHQUFULFNBQVMsQ0FBTTtRQUhyRSxjQUFTLEdBQVksS0FBSyxDQUFDO0lBSS9CLENBQUM7SUFTTCxzQ0FBc0M7SUFDdEMsSUFBVyxLQUFLO1FBQ1osT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksU0FBUyxDQUFDO0lBQ3RFLENBQUM7SUFFRCwyQ0FBMkM7SUFDM0MsSUFBVyxRQUFRO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxvREFBb0Q7SUFDcEQsSUFBVyxRQUFRLENBQUMsUUFBaUI7UUFDakMsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7SUFDOUIsQ0FBQztJQUVNLFFBQVE7UUFDWCxJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLElBQUksSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO0lBQ25DLENBQUM7OzRHQS9CUSxlQUFlLGtCQUlBLG9CQUFvQjtnR0FKbkMsZUFBZSw4SEFRYixXQUFXLDhEQWhCWjs7OztLQUlUOzJGQUlRLGVBQWU7a0JBVjNCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLFNBQVM7b0JBQ25CLFFBQVEsRUFBRTs7OztLQUlUO29CQUNELGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO29CQUNyQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQ7OzBCQUtRLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsb0JBQW9COzRDQUlLLE9BQU87c0JBQXZELFNBQVM7dUJBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFFeEIsS0FBSztzQkFBcEIsS0FBSztnQkFFVSxFQUFFO3NCQUFqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPcHRpb25hbCwgVGVtcGxhdGVSZWYsIFZpZXdDaGlsZCwgVmlld0VuY2Fwc3VsYXRpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0ICogYXMgdXVpZCBmcm9tICd1dWlkJztcbmltcG9ydCB7IExJQlRBQkdST1VQX0FDQ0VTU09SIH0gZnJvbSAnLi4vLi4vdG9rZW5zJztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdsaWItdGFiJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8bmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgYCxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIExpYlRhYkNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gICAgcHJpdmF0ZSBfaXNBY3RpdmU6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBAT3B0aW9uYWwoKSBASW5qZWN0KExJQlRBQkdST1VQX0FDQ0VTU09SKSBwdWJsaWMgcmVhZG9ubHkgX3RhYkdyb3VwPzogYW55XG4gICAgKSB7IH1cblxuICAgIC8qKiBUaGUgY29udGVudCBwcm92aWRlZCBmb3IgdGhlIHRhYi4gKi9cbiAgICBAVmlld0NoaWxkKFRlbXBsYXRlUmVmLCB7IHN0YXRpYzogdHJ1ZSB9KSBwdWJsaWMgY29udGVudCE6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgLyoqIEEgbGFiZWwgZm9yIHRoZSB0YWIgaGVhZGVyLiAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBsYWJlbDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICAgIC8qKiBJbmRpY2F0ZXMgdGhlIHVuaXF1ZSBpZCBhc3NpZ25lZCBpbiB0aGUgdGFiLiAqL1xuICAgIEBJbnB1dCgpIHB1YmxpYyBpZCE6IHN0cmluZztcblxuICAgIC8qKiBJbmRpY2F0ZXMgdGhlIGluZGV4IG9mIHRoZSB0YWIuICovXG4gICAgcHVibGljIGdldCBpbmRleCgpOiBudW1iZXIgfCB1bmRlZmluZWQge1xuICAgICAgICByZXR1cm4gdGhpcy5fdGFiR3JvdXA/LnRhYnM/LnRvQXJyYXkoKS5pbmRleE9mKHRoaXMpIHx8IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKiogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHRhYiBpcyBhY3RpdmUuICovXG4gICAgcHVibGljIGdldCBpc0FjdGl2ZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQWN0aXZlO1xuICAgIH1cblxuICAgIC8qKiBTZXR0ZXIgZm9yIExpYlRhYkNvbXBvbmVudCBpc0FjdGl2ZSBwcm9wZXJ0eS4gKi9cbiAgICBwdWJsaWMgc2V0IGlzQWN0aXZlKGlzQWN0aXZlOiBib29sZWFuKSB7XG4gICAgICAgIHRoaXMuX2lzQWN0aXZlID0gaXNBY3RpdmU7XG4gICAgfVxuXG4gICAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLmlkID0gdGhpcy5pZCB8fCB1dWlkLnY0KCk7XG4gICAgfVxufSJdfQ==
|