@ptsecurity/mosaic 16.5.2 → 16.5.3
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/_theming.scss +17 -10
- package/core/common-behaviors/common-module.d.ts +15 -2
- package/core/error/error-options.d.ts +9 -0
- package/core/styles/theming/_theming.scss +0 -4
- package/datepicker/calendar-header.component.d.ts +11 -5
- package/datepicker/datepicker-input.directive.d.ts +10 -0
- package/esm2022/core/common-behaviors/common-module.mjs +17 -22
- package/esm2022/core/error/error-options.mjs +15 -1
- package/esm2022/core/version.mjs +2 -2
- package/esm2022/datepicker/calendar-header.component.mjs +40 -10
- package/esm2022/datepicker/datepicker-input.directive.mjs +103 -23
- package/esm2022/form-field/validate.directive.mjs +16 -7
- package/esm2022/toast/toast.component.mjs +4 -4
- package/esm2022/tree-select/tree-select.component.mjs +3 -3
- package/fesm2022/ptsecurity-mosaic-core.mjs +32 -23
- package/fesm2022/ptsecurity-mosaic-core.mjs.map +1 -1
- package/fesm2022/ptsecurity-mosaic-datepicker.mjs +141 -31
- package/fesm2022/ptsecurity-mosaic-datepicker.mjs.map +1 -1
- package/fesm2022/ptsecurity-mosaic-form-field.mjs +12 -4
- package/fesm2022/ptsecurity-mosaic-form-field.mjs.map +1 -1
- package/fesm2022/ptsecurity-mosaic-toast.mjs +3 -3
- package/fesm2022/ptsecurity-mosaic-toast.mjs.map +1 -1
- package/fesm2022/ptsecurity-mosaic-tree-select.mjs +2 -2
- package/fesm2022/ptsecurity-mosaic-tree-select.mjs.map +1 -1
- package/form-field/_form-field-theme.scss +9 -4
- package/form-field/validate.directive.d.ts +6 -3
- package/package.json +15 -15
- package/prebuilt-themes/dark-theme.css +1 -1
- package/prebuilt-themes/default-theme.css +1 -1
- package/select/_select-theme.scss +4 -1
- package/toast/toast.component.scss +4 -3
- package/tree-select/_tree-select-theme.scss +4 -1
package/_theming.scss
CHANGED
|
@@ -6064,10 +6064,6 @@ $backdrop-animation-timing-function: cubic-bezier(0.25, 0.8, 0.25, 1) !default;
|
|
|
6064
6064
|
color: mc-color($foreground, text);
|
|
6065
6065
|
}
|
|
6066
6066
|
|
|
6067
|
-
.mc-theme-loaded-marker {
|
|
6068
|
-
display: none;
|
|
6069
|
-
}
|
|
6070
|
-
|
|
6071
6067
|
.mc-primary {
|
|
6072
6068
|
color: mc-color(map-get($theme, primary));
|
|
6073
6069
|
}
|
|
@@ -8061,7 +8057,11 @@ $mc-datepicker-today-fade-amount: 0.2;
|
|
|
8061
8057
|
border-color: map-get($form-field, state-hover-border);
|
|
8062
8058
|
}
|
|
8063
8059
|
|
|
8064
|
-
|
|
8060
|
+
/* stylelint-disable no-descending-specificity */
|
|
8061
|
+
// Invalid by McValidateDirective
|
|
8062
|
+
&.mc-form-field_has-validate-directive.ng-invalid,
|
|
8063
|
+
// Invalid by control ErrorStateMatcher
|
|
8064
|
+
&.mc-form-field_invalid {
|
|
8065
8065
|
& .mc-form-field__container {
|
|
8066
8066
|
border-color: map-get($form-field, state-invalid-border);
|
|
8067
8067
|
background-color: map-get($form-field, state-invalid-background);
|
|
@@ -8074,17 +8074,18 @@ $mc-datepicker-today-fade-amount: 0.2;
|
|
|
8074
8074
|
}
|
|
8075
8075
|
|
|
8076
8076
|
&.cdk-focused {
|
|
8077
|
-
|
|
8077
|
+
&.mc-form-field_has-validate-directive:not(.ng-invalid) .mc-form-field__container,
|
|
8078
|
+
&:not(.mc-form-field_invalid) .mc-form-field__container {
|
|
8078
8079
|
border-color: map-get(map-get($theme, states), focused-color);
|
|
8079
8080
|
box-shadow: 0 0 0 1px map-get(map-get($theme, states), focused-color);
|
|
8080
8081
|
}
|
|
8081
8082
|
|
|
8082
|
-
&.ng-invalid .mc-form-field__container
|
|
8083
|
+
&.mc-form-field_has-validate-directive.ng-invalid .mc-form-field__container,
|
|
8084
|
+
&.mc-form-field_invalid .mc-form-field__container {
|
|
8083
8085
|
box-shadow: 0 0 0 1px mc-color($error);
|
|
8084
8086
|
}
|
|
8085
8087
|
}
|
|
8086
8088
|
|
|
8087
|
-
/* stylelint-disable no-descending-specificity */
|
|
8088
8089
|
&.mc-disabled .mc-form-field__container {
|
|
8089
8090
|
border-color: map-get($form-field, border);
|
|
8090
8091
|
|
|
@@ -9252,7 +9253,10 @@ button {
|
|
|
9252
9253
|
.mc-select {
|
|
9253
9254
|
color: map-get($foreground, text);
|
|
9254
9255
|
|
|
9255
|
-
|
|
9256
|
+
// Invalid by McValidateDirective
|
|
9257
|
+
&.mc-control_has-validate-directive.ng-invalid,
|
|
9258
|
+
// Invalid by control ErrorStateMatcher
|
|
9259
|
+
&.mc-invalid {
|
|
9256
9260
|
color: mc-color($error);
|
|
9257
9261
|
}
|
|
9258
9262
|
|
|
@@ -10202,7 +10206,10 @@ button {
|
|
|
10202
10206
|
.mc-tree-select {
|
|
10203
10207
|
color: map-get($foreground, text);
|
|
10204
10208
|
|
|
10205
|
-
|
|
10209
|
+
// Invalid by McValidateDirective
|
|
10210
|
+
&.mc-control_has-validate-directive.ng-invalid,
|
|
10211
|
+
// Invalid by control ErrorStateMatcher
|
|
10212
|
+
&.mc-invalid {
|
|
10206
10213
|
color: mc-color($error);
|
|
10207
10214
|
}
|
|
10208
10215
|
|
|
@@ -1,13 +1,27 @@
|
|
|
1
1
|
import { InjectionToken } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
3
|
import * as i1 from "@angular/cdk/bidi";
|
|
4
|
+
/**
|
|
5
|
+
* Injection token that configures whether the Mosaic sanity checks are enabled.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated No longer used and will be removed.
|
|
8
|
+
*
|
|
9
|
+
* @docs-private
|
|
10
|
+
*/
|
|
4
11
|
export declare const MC_SANITY_CHECKS: InjectionToken<boolean>;
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated No longer used and will be removed.
|
|
14
|
+
*
|
|
15
|
+
* @docs-private
|
|
16
|
+
*/
|
|
5
17
|
export declare function mcSanityChecksFactory(): boolean;
|
|
6
18
|
/**
|
|
7
19
|
* Module that captures anything that should be loaded and/or run for *all* Mosaic
|
|
8
20
|
* components. This includes Bidi, etc.
|
|
9
21
|
*
|
|
10
|
-
*
|
|
22
|
+
* @deprecated No longer used and will be removed.
|
|
23
|
+
*
|
|
24
|
+
* @docs-private
|
|
11
25
|
*/
|
|
12
26
|
export declare class McCommonModule {
|
|
13
27
|
private _sanityChecksEnabled;
|
|
@@ -18,7 +32,6 @@ export declare class McCommonModule {
|
|
|
18
32
|
private areChecksEnabled;
|
|
19
33
|
private isTestEnv;
|
|
20
34
|
private checkDoctypeIsDefined;
|
|
21
|
-
private checkThemeIsPresent;
|
|
22
35
|
static ɵfac: i0.ɵɵFactoryDeclaration<McCommonModule, [{ optional: true; }]>;
|
|
23
36
|
static ɵmod: i0.ɵɵNgModuleDeclaration<McCommonModule, never, [typeof i1.BidiModule], [typeof i1.BidiModule]>;
|
|
24
37
|
static ɵinj: i0.ɵɵInjectorDeclaration<McCommonModule>;
|
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
import { FormGroupDirective, NgForm, UntypedFormControl } from '@angular/forms';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Error state matcher that matches when a control is invalid and form is submitted.
|
|
5
|
+
* Requires use FormGroupDirective or NgForm.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ShowOnFormSubmitErrorStateMatcher implements ErrorStateMatcher {
|
|
8
|
+
isErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ShowOnFormSubmitErrorStateMatcher, never>;
|
|
10
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ShowOnFormSubmitErrorStateMatcher>;
|
|
11
|
+
}
|
|
3
12
|
/** Error state matcher that matches when a control is invalid and dirty. */
|
|
4
13
|
export declare class ShowOnDirtyErrorStateMatcher implements ErrorStateMatcher {
|
|
5
14
|
isErrorState(control: UntypedFormControl | null, form: FormGroupDirective | NgForm | null): boolean;
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
import { AfterContentInit, EventEmitter } from '@angular/core';
|
|
2
2
|
import { DateAdapter } from '@ptsecurity/mosaic/core';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
+
export type MonthName = {
|
|
5
|
+
name: string;
|
|
6
|
+
nameShort: string;
|
|
7
|
+
value: number;
|
|
8
|
+
disabled: boolean;
|
|
9
|
+
};
|
|
4
10
|
/** Default header for McCalendar */
|
|
5
11
|
export declare class McCalendarHeader<D> implements AfterContentInit {
|
|
6
12
|
private readonly adapter;
|
|
7
|
-
monthNames:
|
|
8
|
-
name: string;
|
|
9
|
-
value: number;
|
|
10
|
-
}[];
|
|
13
|
+
monthNames: MonthName[];
|
|
11
14
|
selectedMonth: number;
|
|
12
15
|
years: {
|
|
13
16
|
name: number;
|
|
@@ -27,6 +30,7 @@ export declare class McCalendarHeader<D> implements AfterContentInit {
|
|
|
27
30
|
set minDate(value: D | null);
|
|
28
31
|
private _minDate;
|
|
29
32
|
get previousDisabled(): boolean;
|
|
33
|
+
get currentDisabled(): boolean;
|
|
30
34
|
get nextDisabled(): boolean;
|
|
31
35
|
/** Emits when any date is activated. */
|
|
32
36
|
readonly activeDateChange: EventEmitter<D>;
|
|
@@ -45,7 +49,9 @@ export declare class McCalendarHeader<D> implements AfterContentInit {
|
|
|
45
49
|
selectNextMonth(): void;
|
|
46
50
|
private compareDate;
|
|
47
51
|
private updateSelectedValues;
|
|
48
|
-
private
|
|
52
|
+
private updateSelectionOptions;
|
|
53
|
+
private updateYearsOptions;
|
|
54
|
+
private updateMonthOptions;
|
|
49
55
|
static ɵfac: i0.ɵɵFactoryDeclaration<McCalendarHeader<any>, never>;
|
|
50
56
|
static ɵcmp: i0.ɵɵComponentDeclaration<McCalendarHeader<any>, "mc-calendar-header", ["mcCalendarHeader"], { "activeDate": { "alias": "activeDate"; "required": false; }; "maxDate": { "alias": "maxDate"; "required": false; }; "minDate": { "alias": "minDate"; "required": false; }; }, { "activeDateChange": "activeDateChange"; "monthSelected": "monthSelected"; "yearSelected": "yearSelected"; }, never, never, false, never>;
|
|
51
57
|
}
|
|
@@ -143,6 +143,16 @@ export declare class McDatepickerInput<D> implements McFormFieldControl<D>, Cont
|
|
|
143
143
|
private getDefaultValue;
|
|
144
144
|
private getTimeStringFromDate;
|
|
145
145
|
private getDateEditMetrics;
|
|
146
|
+
private isMaxMonth;
|
|
147
|
+
private isMinMonth;
|
|
148
|
+
private isMaxYear;
|
|
149
|
+
private isMinYear;
|
|
150
|
+
private getMaxDate;
|
|
151
|
+
private getMinDate;
|
|
152
|
+
private getMaxMonth;
|
|
153
|
+
private getMinMonth;
|
|
154
|
+
private getMaxYear;
|
|
155
|
+
private getMinYear;
|
|
146
156
|
private incrementDate;
|
|
147
157
|
private getLastDayFor;
|
|
148
158
|
private decrementDate;
|
|
@@ -1,11 +1,22 @@
|
|
|
1
1
|
import { BidiModule } from '@angular/cdk/bidi';
|
|
2
2
|
import { NgModule, InjectionToken, Optional, Inject, isDevMode } from '@angular/core';
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Injection token that configures whether the Mosaic sanity checks are enabled.
|
|
6
|
+
*
|
|
7
|
+
* @deprecated No longer used and will be removed.
|
|
8
|
+
*
|
|
9
|
+
* @docs-private
|
|
10
|
+
*/
|
|
5
11
|
export const MC_SANITY_CHECKS = new InjectionToken('mc-sanity-checks', {
|
|
6
12
|
providedIn: 'root',
|
|
7
13
|
factory: mcSanityChecksFactory
|
|
8
14
|
});
|
|
15
|
+
/**
|
|
16
|
+
* @deprecated No longer used and will be removed.
|
|
17
|
+
*
|
|
18
|
+
* @docs-private
|
|
19
|
+
*/
|
|
9
20
|
export function mcSanityChecksFactory() {
|
|
10
21
|
return true;
|
|
11
22
|
}
|
|
@@ -13,7 +24,9 @@ export function mcSanityChecksFactory() {
|
|
|
13
24
|
* Module that captures anything that should be loaded and/or run for *all* Mosaic
|
|
14
25
|
* components. This includes Bidi, etc.
|
|
15
26
|
*
|
|
16
|
-
*
|
|
27
|
+
* @deprecated No longer used and will be removed.
|
|
28
|
+
*
|
|
29
|
+
* @docs-private
|
|
17
30
|
*/
|
|
18
31
|
export class McCommonModule {
|
|
19
32
|
constructor(_sanityChecksEnabled) {
|
|
@@ -28,7 +41,6 @@ export class McCommonModule {
|
|
|
28
41
|
this._window = typeof window === 'object' && window ? window : null;
|
|
29
42
|
if (this.areChecksEnabled() && !this.hasDoneGlobalChecks) {
|
|
30
43
|
this.checkDoctypeIsDefined();
|
|
31
|
-
this.checkThemeIsPresent();
|
|
32
44
|
this.hasDoneGlobalChecks = true;
|
|
33
45
|
}
|
|
34
46
|
}
|
|
@@ -39,7 +51,7 @@ export class McCommonModule {
|
|
|
39
51
|
// Whether the code is running in tests.
|
|
40
52
|
isTestEnv() {
|
|
41
53
|
// tslint:disable-next-line
|
|
42
|
-
return this._window && (this._window['__karma__'] || this._window['jasmine']);
|
|
54
|
+
return this._window && (this._window['__karma__'] || this._window['jasmine'] || this._window['__jest__']);
|
|
43
55
|
}
|
|
44
56
|
checkDoctypeIsDefined() {
|
|
45
57
|
if (this._document && !this._document.doctype) {
|
|
@@ -47,23 +59,6 @@ export class McCommonModule {
|
|
|
47
59
|
'some Mosaic components not to behave as expected.');
|
|
48
60
|
}
|
|
49
61
|
}
|
|
50
|
-
checkThemeIsPresent() {
|
|
51
|
-
if (this._document && typeof getComputedStyle === 'function') {
|
|
52
|
-
const testElement = this._document.createElement('div');
|
|
53
|
-
testElement.classList.add('mc-theme-loaded-marker');
|
|
54
|
-
this._document.body.appendChild(testElement);
|
|
55
|
-
const computedStyle = getComputedStyle(testElement);
|
|
56
|
-
// In some situations, the computed style of the test element can be null. For example in
|
|
57
|
-
// Firefox, the computed style is null if an application is running inside of a hidden iframe.
|
|
58
|
-
// See: https://bugzilla.mozilla.org/show_bug.cgi?id=548397
|
|
59
|
-
if (computedStyle && computedStyle.display !== 'none') {
|
|
60
|
-
console.warn('Could not find Mosaic core theme. Most Mosaic ' +
|
|
61
|
-
'components may not work as expected. For more info refer ' +
|
|
62
|
-
'to the theming guide: link there');
|
|
63
|
-
}
|
|
64
|
-
this._document.body.removeChild(testElement);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
62
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: McCommonModule, deps: [{ token: MC_SANITY_CHECKS, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
68
63
|
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.5", ngImport: i0, type: McCommonModule, imports: [BidiModule], exports: [BidiModule] }); }
|
|
69
64
|
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: McCommonModule, imports: [BidiModule, BidiModule] }); }
|
|
@@ -80,4 +75,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
|
|
|
80
75
|
type: Inject,
|
|
81
76
|
args: [MC_SANITY_CHECKS]
|
|
82
77
|
}] }]; } });
|
|
83
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
78
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9jb3JlL2NvbW1vbi1iZWhhdmlvcnMvY29tbW9uLW1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBR3RGOzs7Ozs7R0FNRztBQUNILE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUFVLGtCQUFrQixFQUFFO0lBQzVFLFVBQVUsRUFBRSxNQUFNO0lBQ2xCLE9BQU8sRUFBRSxxQkFBcUI7Q0FDakMsQ0FBQyxDQUFDO0FBRUg7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxxQkFBcUI7SUFDakMsT0FBTyxJQUFJLENBQUM7QUFDaEIsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFLSCxNQUFNLE9BQU8sY0FBYztJQVl2QixZQUEwRCxvQkFBNkI7UUFBN0IseUJBQW9CLEdBQXBCLG9CQUFvQixDQUFTO1FBWHZGLDRGQUE0RjtRQUNwRix3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFFcEMsNkNBQTZDO1FBQzdDLHVEQUF1RDtRQUMvQyxjQUFTLEdBQUcsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFL0UsMkNBQTJDO1FBQzNDLHVEQUF1RDtRQUMvQyxZQUFPLEdBQUcsT0FBTyxNQUFNLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFHbkUsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUN0RCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1NBQ25DO0lBQ0wsQ0FBQztJQUVELHdDQUF3QztJQUNoQyxnQkFBZ0I7UUFDcEIsT0FBTyxJQUFJLENBQUMsb0JBQW9CLElBQUksU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDekUsQ0FBQztJQUVELHdDQUF3QztJQUNoQyxTQUFTO1FBQ2IsMkJBQTJCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7SUFDOUcsQ0FBQztJQUVPLHFCQUFxQjtRQUN6QixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRTtZQUMzQyxPQUFPLENBQUMsSUFBSSxDQUNSLDJEQUEyRDtnQkFDM0QsbURBQW1ELENBQ3RELENBQUM7U0FDTDtJQUNMLENBQUM7aUlBckNRLGNBQWMsa0JBWVMsZ0JBQWdCO2tJQVp2QyxjQUFjLFlBSGIsVUFBVSxhQUNWLFVBQVU7a0lBRVgsY0FBYyxZQUhiLFVBQVUsRUFDVixVQUFVOzsyRkFFWCxjQUFjO2tCQUoxQixRQUFRO21CQUFDO29CQUNOLE9BQU8sRUFBRSxDQUFDLFVBQVUsQ0FBQztvQkFDckIsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDO2lCQUN4Qjs7MEJBYWdCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsZ0JBQWdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQmlkaU1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9iaWRpJztcbmltcG9ydCB7IE5nTW9kdWxlLCBJbmplY3Rpb25Ub2tlbiwgT3B0aW9uYWwsIEluamVjdCwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cblxuLyoqXG4gKiBJbmplY3Rpb24gdG9rZW4gdGhhdCBjb25maWd1cmVzIHdoZXRoZXIgdGhlIE1vc2FpYyBzYW5pdHkgY2hlY2tzIGFyZSBlbmFibGVkLlxuICpcbiAqIEBkZXByZWNhdGVkIE5vIGxvbmdlciB1c2VkIGFuZCB3aWxsIGJlIHJlbW92ZWQuXG4gKlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgY29uc3QgTUNfU0FOSVRZX0NIRUNLUyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxib29sZWFuPignbWMtc2FuaXR5LWNoZWNrcycsIHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgZmFjdG9yeTogbWNTYW5pdHlDaGVja3NGYWN0b3J5XG59KTtcblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBObyBsb25nZXIgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkLlxuICpcbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1jU2FuaXR5Q2hlY2tzRmFjdG9yeSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuLyoqXG4gKiBNb2R1bGUgdGhhdCBjYXB0dXJlcyBhbnl0aGluZyB0aGF0IHNob3VsZCBiZSBsb2FkZWQgYW5kL29yIHJ1biBmb3IgKmFsbCogTW9zYWljXG4gKiBjb21wb25lbnRzLiBUaGlzIGluY2x1ZGVzIEJpZGksIGV0Yy5cbiAqXG4gKiBAZGVwcmVjYXRlZCBObyBsb25nZXIgdXNlZCBhbmQgd2lsbCBiZSByZW1vdmVkLlxuICpcbiAqIEBkb2NzLXByaXZhdGVcbiAqL1xuQE5nTW9kdWxlKHtcbiAgICBpbXBvcnRzOiBbQmlkaU1vZHVsZV0sXG4gICAgZXhwb3J0czogW0JpZGlNb2R1bGVdXG59KVxuZXhwb3J0IGNsYXNzIE1jQ29tbW9uTW9kdWxlIHtcbiAgICAvLyBXaGV0aGVyIHdlJ3ZlIGRvbmUgdGhlIGdsb2JhbCBzYW5pdHkgY2hlY2tzIChlLmcuIGEgdGhlbWUgaXMgbG9hZGVkLCB0aGVyZSBpcyBhIGRvY3R5cGUpLlxuICAgIHByaXZhdGUgaGFzRG9uZUdsb2JhbENoZWNrcyA9IGZhbHNlO1xuXG4gICAgLy8gUmVmZXJlbmNlIHRvIHRoZSBnbG9iYWwgYGRvY3VtZW50YCBvYmplY3QuXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBvcnRob2RveC1nZXR0ZXItYW5kLXNldHRlclxuICAgIHByaXZhdGUgX2RvY3VtZW50ID0gdHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0JyAmJiBkb2N1bWVudCA/IGRvY3VtZW50IDogbnVsbDtcblxuICAgIC8vIFJlZmVyZW5jZSB0byB0aGUgZ2xvYmFsICd3aW5kb3cnIG9iamVjdC5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IG9ydGhvZG94LWdldHRlci1hbmQtc2V0dGVyXG4gICAgcHJpdmF0ZSBfd2luZG93ID0gdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCcgJiYgd2luZG93ID8gd2luZG93IDogbnVsbDtcblxuICAgIGNvbnN0cnVjdG9yKEBPcHRpb25hbCgpIEBJbmplY3QoTUNfU0FOSVRZX0NIRUNLUykgcHJpdmF0ZSBfc2FuaXR5Q2hlY2tzRW5hYmxlZDogYm9vbGVhbikge1xuICAgICAgICBpZiAodGhpcy5hcmVDaGVja3NFbmFibGVkKCkgJiYgIXRoaXMuaGFzRG9uZUdsb2JhbENoZWNrcykge1xuICAgICAgICAgICAgdGhpcy5jaGVja0RvY3R5cGVJc0RlZmluZWQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFzRG9uZUdsb2JhbENoZWNrcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBXaGV0aGVyIGFueSBzYW5pdHkgY2hlY2tzIGFyZSBlbmFibGVkXG4gICAgcHJpdmF0ZSBhcmVDaGVja3NFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5fc2FuaXR5Q2hlY2tzRW5hYmxlZCAmJiBpc0Rldk1vZGUoKSAmJiAhdGhpcy5pc1Rlc3RFbnYoKTtcbiAgICB9XG5cbiAgICAvLyBXaGV0aGVyIHRoZSBjb2RlIGlzIHJ1bm5pbmcgaW4gdGVzdHMuXG4gICAgcHJpdmF0ZSBpc1Rlc3RFbnYoKSB7XG4gICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAgICAgICByZXR1cm4gdGhpcy5fd2luZG93ICYmICh0aGlzLl93aW5kb3dbJ19fa2FybWFfXyddIHx8IHRoaXMuX3dpbmRvd1snamFzbWluZSddIHx8IHRoaXMuX3dpbmRvd1snX19qZXN0X18nXSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjaGVja0RvY3R5cGVJc0RlZmluZWQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLl9kb2N1bWVudCAmJiAhdGhpcy5fZG9jdW1lbnQuZG9jdHlwZSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICdDdXJyZW50IGRvY3VtZW50IGRvZXMgbm90IGhhdmUgYSBkb2N0eXBlLiBUaGlzIG1heSBjYXVzZSAnICtcbiAgICAgICAgICAgICAgICAnc29tZSBNb3NhaWMgY29tcG9uZW50cyBub3QgdG8gYmVoYXZlIGFzIGV4cGVjdGVkLidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
2
|
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* Error state matcher that matches when a control is invalid and form is submitted.
|
|
5
|
+
* Requires use FormGroupDirective or NgForm.
|
|
6
|
+
*/
|
|
7
|
+
export class ShowOnFormSubmitErrorStateMatcher {
|
|
8
|
+
isErrorState(control, form) {
|
|
9
|
+
return !!(control?.invalid && form?.submitted);
|
|
10
|
+
}
|
|
11
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: ShowOnFormSubmitErrorStateMatcher, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
12
|
+
/** @nocollapse */ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: ShowOnFormSubmitErrorStateMatcher }); }
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: ShowOnFormSubmitErrorStateMatcher, decorators: [{
|
|
15
|
+
type: Injectable
|
|
16
|
+
}] });
|
|
3
17
|
/** Error state matcher that matches when a control is invalid and dirty. */
|
|
4
18
|
export class ShowOnDirtyErrorStateMatcher {
|
|
5
19
|
isErrorState(control, form) {
|
|
@@ -23,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
|
|
|
23
37
|
type: Injectable,
|
|
24
38
|
args: [{ providedIn: 'root' }]
|
|
25
39
|
}] });
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Itb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9jb3JlL2Vycm9yL2Vycm9yLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFJM0M7OztHQUdHO0FBRUgsTUFBTSxPQUFPLGlDQUFpQztJQUMxQyxZQUFZLENBQUMsT0FBa0MsRUFBRSxJQUF3QztRQUNyRixPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxPQUFPLElBQUksSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7aUlBSFEsaUNBQWlDO3FJQUFqQyxpQ0FBaUM7OzJGQUFqQyxpQ0FBaUM7a0JBRDdDLFVBQVU7O0FBT1gsNEVBQTRFO0FBRTVFLE1BQU0sT0FBTyw0QkFBNEI7SUFDckMsWUFBWSxDQUFDLE9BQWtDLEVBQUUsSUFBd0M7UUFDckYsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTyxDQUFDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN6RixDQUFDO2lJQUhRLDRCQUE0QjtxSUFBNUIsNEJBQTRCOzsyRkFBNUIsNEJBQTRCO2tCQUR4QyxVQUFVOztBQU9YLGdHQUFnRztBQUVoRyxNQUFNLE9BQU8saUJBQWlCO0lBQzFCLFlBQVksQ0FBQyxPQUFrQyxFQUFFLElBQXdDO1FBQ3JGLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDM0YsQ0FBQztpSUFIUSxpQkFBaUI7cUlBQWpCLGlCQUFpQixjQURKLE1BQU07OzJGQUNuQixpQkFBaUI7a0JBRDdCLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwRGlyZWN0aXZlLCBOZ0Zvcm0sIFVudHlwZWRGb3JtQ29udHJvbCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuXG4vKipcbiAqIEVycm9yIHN0YXRlIG1hdGNoZXIgdGhhdCBtYXRjaGVzIHdoZW4gYSBjb250cm9sIGlzIGludmFsaWQgYW5kIGZvcm0gaXMgc3VibWl0dGVkLlxuICogUmVxdWlyZXMgdXNlIEZvcm1Hcm91cERpcmVjdGl2ZSBvciBOZ0Zvcm0uXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaG93T25Gb3JtU3VibWl0RXJyb3JTdGF0ZU1hdGNoZXIgaW1wbGVtZW50cyBFcnJvclN0YXRlTWF0Y2hlciB7XG4gICAgaXNFcnJvclN0YXRlKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCB8IG51bGwsIGZvcm06IEZvcm1Hcm91cERpcmVjdGl2ZSB8IE5nRm9ybSB8IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhKGNvbnRyb2w/LmludmFsaWQgJiYgZm9ybT8uc3VibWl0dGVkKTtcbiAgICB9XG59XG5cbi8qKiBFcnJvciBzdGF0ZSBtYXRjaGVyIHRoYXQgbWF0Y2hlcyB3aGVuIGEgY29udHJvbCBpcyBpbnZhbGlkIGFuZCBkaXJ0eS4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBTaG93T25EaXJ0eUVycm9yU3RhdGVNYXRjaGVyIGltcGxlbWVudHMgRXJyb3JTdGF0ZU1hdGNoZXIge1xuICAgIGlzRXJyb3JTdGF0ZShjb250cm9sOiBVbnR5cGVkRm9ybUNvbnRyb2wgfCBudWxsLCBmb3JtOiBGb3JtR3JvdXBEaXJlY3RpdmUgfCBOZ0Zvcm0gfCBudWxsKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhIShjb250cm9sICYmIGNvbnRyb2wuaW52YWxpZCAmJiAoY29udHJvbC5kaXJ0eSB8fCAoZm9ybSAmJiBmb3JtLnN1Ym1pdHRlZCkpKTtcbiAgICB9XG59XG5cbi8qKiBQcm92aWRlciB0aGF0IGRlZmluZXMgaG93IGZvcm0gY29udHJvbHMgYmVoYXZlIHdpdGggcmVnYXJkcyB0byBkaXNwbGF5aW5nIGVycm9yIG1lc3NhZ2VzLiAqL1xuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBFcnJvclN0YXRlTWF0Y2hlciB7XG4gICAgaXNFcnJvclN0YXRlKGNvbnRyb2w6IFVudHlwZWRGb3JtQ29udHJvbCB8IG51bGwsIGZvcm06IEZvcm1Hcm91cERpcmVjdGl2ZSB8IE5nRm9ybSB8IG51bGwpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhKGNvbnRyb2wgJiYgY29udHJvbC5pbnZhbGlkICYmIChjb250cm9sLnRvdWNoZWQgfHwgKGZvcm0gJiYgZm9ybS5zdWJtaXR0ZWQpKSk7XG4gICAgfVxufVxuIl19
|
package/esm2022/core/version.mjs
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { Version } from '@angular/core';
|
|
2
|
-
export const VERSION = new Version('16.5.
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
export const VERSION = new Version('16.5.3+sha-63fa53d');
|
|
3
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmVyc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9jb3JlL3ZlcnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUd4QyxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFZlcnNpb24gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuXG5leHBvcnQgY29uc3QgVkVSU0lPTiA9IG5ldyBWZXJzaW9uKCcxNi41LjMrc2hhLTYzZmE1M2QnKTtcbiJdfQ==
|
|
@@ -17,6 +17,7 @@ export class McCalendarHeader {
|
|
|
17
17
|
set activeDate(value) {
|
|
18
18
|
this._activeDate = value;
|
|
19
19
|
this.updateSelectedValues();
|
|
20
|
+
this.updateSelectionOptions();
|
|
20
21
|
}
|
|
21
22
|
get maxDate() {
|
|
22
23
|
return this._maxDate;
|
|
@@ -26,7 +27,7 @@ export class McCalendarHeader {
|
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
29
|
this._maxDate = value;
|
|
29
|
-
this.
|
|
30
|
+
this.updateYearsOptions();
|
|
30
31
|
}
|
|
31
32
|
get minDate() {
|
|
32
33
|
return this._minDate;
|
|
@@ -36,10 +37,14 @@ export class McCalendarHeader {
|
|
|
36
37
|
return;
|
|
37
38
|
}
|
|
38
39
|
this._minDate = value;
|
|
39
|
-
this.
|
|
40
|
+
this.updateYearsOptions();
|
|
40
41
|
}
|
|
41
42
|
get previousDisabled() {
|
|
42
|
-
return this.compareDate(this.activeDate, this.minDate)
|
|
43
|
+
return this.compareDate(this.activeDate, this.minDate) <= 0;
|
|
44
|
+
}
|
|
45
|
+
get currentDisabled() {
|
|
46
|
+
const today = this.adapter.today();
|
|
47
|
+
return this.compareDate(today, this.minDate) < 0 || this.compareDate(today, this.maxDate) > 0;
|
|
43
48
|
}
|
|
44
49
|
get nextDisabled() {
|
|
45
50
|
return this.compareDate(this.activeDate, this.maxDate) >= 0;
|
|
@@ -54,11 +59,12 @@ export class McCalendarHeader {
|
|
|
54
59
|
this.activeDateChange = new EventEmitter();
|
|
55
60
|
this.monthSelected = new EventEmitter();
|
|
56
61
|
this.yearSelected = new EventEmitter();
|
|
57
|
-
this.monthNames = this.adapter.getMonthNames('long')
|
|
58
|
-
|
|
62
|
+
this.monthNames = this.adapter.getMonthNames('long').map((name, i) => {
|
|
63
|
+
return { name, nameShort: this.adapter.getMonthNames('short')[i], value: i, disabled: false };
|
|
64
|
+
});
|
|
59
65
|
}
|
|
60
66
|
ngAfterContentInit() {
|
|
61
|
-
this.
|
|
67
|
+
this.updateSelectionOptions();
|
|
62
68
|
this.updateSelectedValues();
|
|
63
69
|
}
|
|
64
70
|
/** Handles when a new month is selected. */
|
|
@@ -77,6 +83,7 @@ export class McCalendarHeader {
|
|
|
77
83
|
this.activeDate = this.adapter.createDate(year, month, Math.min(this.adapter.getDate(this.activeDate), daysInMonth));
|
|
78
84
|
this.yearSelected.emit(this.activeDate);
|
|
79
85
|
this.activeDateChange.emit(this.activeDate);
|
|
86
|
+
this.updateMonthOptions();
|
|
80
87
|
}
|
|
81
88
|
selectCurrentDate() {
|
|
82
89
|
this.activeDate = this.adapter.today();
|
|
@@ -103,7 +110,11 @@ export class McCalendarHeader {
|
|
|
103
110
|
this.selectedYear = this.years.find(({ name }) => name === year)
|
|
104
111
|
|| { name: year, value: this.adapter.getYearName(this.activeDate) };
|
|
105
112
|
}
|
|
106
|
-
|
|
113
|
+
updateSelectionOptions() {
|
|
114
|
+
this.updateYearsOptions();
|
|
115
|
+
this.updateMonthOptions();
|
|
116
|
+
}
|
|
117
|
+
updateYearsOptions() {
|
|
107
118
|
const minYear = this.adapter.getYear(this.minDate);
|
|
108
119
|
const maxYear = this.adapter.getYear(this.maxDate);
|
|
109
120
|
this.years = [];
|
|
@@ -111,14 +122,33 @@ export class McCalendarHeader {
|
|
|
111
122
|
this.years.push({ name: key, value: this.adapter.getYearName(this.adapter.createDate(key)) });
|
|
112
123
|
}
|
|
113
124
|
}
|
|
125
|
+
updateMonthOptions() {
|
|
126
|
+
if (!this._activeDate) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
const minYear = this.adapter.getYear(this.minDate);
|
|
130
|
+
const minMonth = this.adapter.getMonth(this.minDate);
|
|
131
|
+
const maxYear = this.adapter.getYear(this.maxDate);
|
|
132
|
+
const maxMonth = this.adapter.getMonth(this.maxDate);
|
|
133
|
+
const currentYear = this.adapter.getYear(this._activeDate);
|
|
134
|
+
if (currentYear === minYear && currentYear === maxYear) {
|
|
135
|
+
this.monthNames.forEach((month) => (month.disabled = month.value < minMonth || month.value > maxMonth));
|
|
136
|
+
}
|
|
137
|
+
else if (currentYear === minYear) {
|
|
138
|
+
this.monthNames.forEach((month) => (month.disabled = month.value < minMonth));
|
|
139
|
+
}
|
|
140
|
+
else if (currentYear === maxYear) {
|
|
141
|
+
this.monthNames.forEach((month) => (month.disabled = month.value > maxMonth));
|
|
142
|
+
}
|
|
143
|
+
}
|
|
114
144
|
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: McCalendarHeader, deps: [{ token: i1.DateAdapter }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
115
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: McCalendarHeader, selector: "mc-calendar-header", inputs: { activeDate: "activeDate", maxDate: "maxDate", minDate: "minDate" }, outputs: { activeDateChange: "activeDateChange", monthSelected: "monthSelected", yearSelected: "yearSelected" }, host: { classAttribute: "mc-calendar-header" }, exportAs: ["mcCalendarHeader"], ngImport: i0, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xxs layout-padding-left-s\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value.name)\">\n <button class=\"mc-button_transparent layout-padding-right-xxs layout-padding-left-s\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ this.selectedYear.value }}\n\n <i mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year.value }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i3.McButtonCssStyler, selector: "[mc-button]" }, { kind: "directive", type: i4.McValidateDirective, selector: " input[mcInput], input[mcInputPassword], input[mcTimepicker], input[mcDatepicker], textarea[mcTextarea], mc-select, mc-tree-select, mc-tag-list ", exportAs: ["McValidate"] }, { kind: "component", type: i5.McSelect, selector: "mc-select", inputs: ["disabled", "tabIndex", "hiddenItemsText", "panelClass", "backdropClass", "errorStateMatcher", "sortComparator", "hasBackdrop", "placeholder", "required", "multiple", "compareWith", "value", "id", "hiddenItemsTextFormatter"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["mcSelect"] }, { kind: "directive", type: i5.McSelectMatcher, selector: "mc-select-matcher, [mc-select-matcher]" }, { kind: "directive", type: i5.McOptionTooltip, selector: "mc-option" }, { kind: "component", type: i1.McOption, selector: "mc-option", inputs: ["value", "showCheckbox", "disabled"], outputs: ["onSelectionChange"], exportAs: ["mcOption"] }, { kind: "component", type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i6.McIconCSSStyler, selector: "[mc-icon]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
145
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.5", type: McCalendarHeader, selector: "mc-calendar-header", inputs: { activeDate: "activeDate", maxDate: "maxDate", minDate: "minDate" }, outputs: { activeDateChange: "activeDateChange", monthSelected: "monthSelected", yearSelected: "yearSelected" }, host: { classAttribute: "mc-calendar-header" }, exportAs: ["mcCalendarHeader"], ngImport: i0, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xxs layout-padding-left-s\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [disabled]=\"month.disabled\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value.name)\">\n <button class=\"mc-button_transparent layout-padding-right-xxs layout-padding-left-s\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ this.selectedYear.value }}\n\n <i mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year.value }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [disabled]=\"currentDisabled\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i3.McButton, selector: "[mc-button]", inputs: ["color", "tabIndex", "disabled"] }, { kind: "directive", type: i3.McButtonCssStyler, selector: "[mc-button]" }, { kind: "directive", type: i4.McValidateDirective, selector: " input[mcInput], input[mcInputPassword], input[mcTimepicker], input[mcDatepicker], textarea[mcTextarea], mc-select, mc-tree-select, mc-tag-list ", exportAs: ["McValidate"] }, { kind: "component", type: i5.McSelect, selector: "mc-select", inputs: ["disabled", "tabIndex", "hiddenItemsText", "panelClass", "backdropClass", "errorStateMatcher", "sortComparator", "hasBackdrop", "placeholder", "required", "multiple", "compareWith", "value", "id", "hiddenItemsTextFormatter"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["mcSelect"] }, { kind: "directive", type: i5.McSelectMatcher, selector: "mc-select-matcher, [mc-select-matcher]" }, { kind: "directive", type: i5.McOptionTooltip, selector: "mc-option" }, { kind: "component", type: i1.McOption, selector: "mc-option", inputs: ["value", "showCheckbox", "disabled"], outputs: ["onSelectionChange"], exportAs: ["mcOption"] }, { kind: "component", type: i6.McIcon, selector: "[mc-icon]", inputs: ["color"] }, { kind: "directive", type: i6.McIconCSSStyler, selector: "[mc-icon]" }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); }
|
|
116
146
|
}
|
|
117
147
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImport: i0, type: McCalendarHeader, decorators: [{
|
|
118
148
|
type: Component,
|
|
119
149
|
args: [{ selector: 'mc-calendar-header', exportAs: 'mcCalendarHeader', host: {
|
|
120
150
|
class: 'mc-calendar-header'
|
|
121
|
-
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xxs layout-padding-left-s\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value.name)\">\n <button class=\"mc-button_transparent layout-padding-right-xxs layout-padding-left-s\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ this.selectedYear.value }}\n\n <i mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year.value }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"] }]
|
|
151
|
+
}, encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mc-calendar-header__select-group\">\n <mc-select\n class=\"mc-calendar-header__select\"\n #monthSelect=\"mcSelect\"\n [value]=\"selectedMonth\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onMonthSelected($event.value)\">\n\n <button class=\"mc-button_transparent layout-padding-right-xxs layout-padding-left-s\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"monthSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ monthSelect.triggerValue }}\n\n <i mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let month of monthNames\"\n [mcTooltipDisabled]=\"true\"\n [disabled]=\"month.disabled\"\n [value]=\"month.value\">\n {{ month.name }}\n </mc-option>\n </mc-select>\n\n <mc-select\n #yearSelect=\"mcSelect\"\n [value]=\"selectedYear\"\n [panelClass]=\"'mc-calendar-select-panel'\"\n (selectionChange)=\"onYearSelected($event.value.name)\">\n <button class=\"mc-button_transparent layout-padding-right-xxs layout-padding-left-s\"\n mc-button\n mc-select-matcher\n [class.mc-active]=\"yearSelect.panelOpen\"\n [tabindex]=\"-1\">\n {{ this.selectedYear.value }}\n\n <i mc-icon=\"mc-angle-down-S_16\"></i>\n </button>\n\n <mc-option *ngFor=\"let year of years\"\n [mcTooltipDisabled]=\"true\"\n [value]=\"year\">\n {{ year.value }}\n </mc-option>\n </mc-select>\n</div>\n\n<div class=\"mc-calendar-header__button-group\">\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__previous-button\"\n [tabindex]=\"-1\"\n [disabled]=\"previousDisabled\"\n (click)=\"selectPreviousMonth()\">\n\n <i mc-icon=\"mc-angle-left-L_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent\"\n [disabled]=\"currentDisabled\"\n [tabindex]=\"-1\"\n (click)=\"selectCurrentDate()\">\n\n <i mc-icon=\"mc-circle-8_16\"></i>\n </button>\n\n <button mc-button\n class=\"mc-button_transparent mc-calendar-header__next-button\"\n [tabindex]=\"-1\"\n [disabled]=\"nextDisabled\"\n (click)=\"selectNextMonth()\">\n\n <i mc-icon=\"mc-angle-right-L_16\"></i>\n </button>\n</div>\n", styles: [".mc-calendar-header{display:flex;flex-direction:row;justify-content:space-between;padding:var(--mc-datepicker-calendar-size-padding-top, 16px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px) var(--mc-datepicker-calendar-size-padding-blocks, 12px) var(--mc-datepicker-calendar-size-padding-horizontal, 8px)}.mc-calendar-header__previous-button:after{border-left-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-prev-icon-transform, translateX(2px) rotate(-45deg))}.mc-calendar-header__next-button:after{border-right-width:var(--mc-datepicker-calendar-size-icon-border-width, 2px);transform:var(--mc-datepicker-calendar-size-icon-nex-icon-transform, translateX(-2px) rotate(45deg))}.mc-calendar-header__select{width:auto!important}.mc-calendar-header__button-group,.mc-calendar-header__select-group{display:flex;flex-direction:row}.mc-calendar-select-panel{margin-top:2px;min-width:98%!important}.mc-calendar-select-panel .mc-select__content{max-height:384px;overflow-x:hidden;scrollbar-gutter:stable}.mc-calendar-select-panel .mc-select__content .mc-option{min-width:65px}\n"] }]
|
|
122
152
|
}], ctorParameters: function () { return [{ type: i1.DateAdapter }]; }, propDecorators: { activeDate: [{
|
|
123
153
|
type: Input
|
|
124
154
|
}], maxDate: [{
|
|
@@ -132,4 +162,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.5", ngImpor
|
|
|
132
162
|
}], yearSelected: [{
|
|
133
163
|
type: Output
|
|
134
164
|
}] } });
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9kYXRlcGlja2VyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9tb3NhaWMvZGF0ZXBpY2tlci9jYWxlbmRhci1oZWFkZXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7OztBQUd0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBRTVCLG9DQUFvQztBQVlwQyxNQUFNLE9BQU8sZ0JBQWdCO0lBT3pCLElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBUTtRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV6QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztJQUNoQyxDQUFDO0lBSUQsSUFDSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFlO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFFdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFdEIsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDNUIsQ0FBQztJQUtELElBQ0ksT0FBTztRQUNQLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN6QixDQUFDO0lB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LENBQUMsQ0FBQztRQUVwRCxJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUVoQixLQUFLLElBQUksR0FBRyxHQUFXLE9BQU8sRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDakc7SUFDTCxDQUFDO2lJQTVKUSxnQkFBZ0I7cUhBQWhCLGdCQUFnQix5VUMzQjdCLGsrRUEyRUE7OzJGRGhEYSxnQkFBZ0I7a0JBWDVCLFNBQVM7K0JBQ0ksb0JBQW9CLFlBQ3BCLGtCQUFrQixRQUd0Qjt3QkFDRixLQUFLLEVBQUUsb0JBQW9CO3FCQUM5QixpQkFDYyxpQkFBaUIsQ0FBQyxJQUFJLG1CQUNwQix1QkFBdUIsQ0FBQyxNQUFNO2tHQVUzQyxVQUFVO3NCQURiLEtBQUs7Z0JBY0YsT0FBTztzQkFEVixLQUFLO2dCQWlCRixPQUFPO3NCQURWLEtBQUs7Z0JBd0JhLGdCQUFnQjtzQkFBbEMsTUFBTTtnQkFDWSxhQUFhO3NCQUEvQixNQUFNO2dCQUNZLFlBQVk7c0JBQTlCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIEFmdGVyQ29udGVudEluaXQsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPdXRwdXQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb25cbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEYXRlQWRhcHRlciB9IGZyb20gJ0BwdHNlY3VyaXR5L21vc2FpYy9jb3JlJztcblxuXG5jb25zdCBkZWZhdWx0TWluWWVhciA9IDE5MDA7XG5jb25zdCBkZWZhdWx0TWF4WWVhciA9IDIwOTk7XG5cbi8qKiBEZWZhdWx0IGhlYWRlciBmb3IgTWNDYWxlbmRhciAqL1xuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdtYy1jYWxlbmRhci1oZWFkZXInLFxuICAgIGV4cG9ydEFzOiAnbWNDYWxlbmRhckhlYWRlcicsXG4gICAgdGVtcGxhdGVVcmw6ICdjYWxlbmRhci1oZWFkZXIuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJ2NhbGVuZGFyLWhlYWRlci5zY3NzJ10sXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ21jLWNhbGVuZGFyLWhlYWRlcidcbiAgICB9LFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgTWNDYWxlbmRhckhlYWRlcjxEPiBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuICAgIG1vbnRoTmFtZXM6IHsgbmFtZTogc3RyaW5nOyB2YWx1ZTogbnVtYmVyIH1bXTtcbiAgICBzZWxlY3RlZE1vbnRoOiBudW1iZXI7XG5cbiAgICB5ZWFyczogeyBuYW1lOiBudW1iZXI7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gICAgc2VsZWN0ZWRZZWFyOiB7IG5hbWU6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9O1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgYWN0aXZlRGF0ZSgpOiBEIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZURhdGU7XG4gICAgfVxuXG4gICAgc2V0IGFjdGl2ZURhdGUodmFsdWU6IEQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9hY3RpdmVEYXRlOiBEO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbWF4RGF0ZSgpOiBEIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9tYXhEYXRlO1xuICAgIH1cblxuICAgIHNldCBtYXhEYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHRoaXMuX21heERhdGUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVllYXJzQXJyYXkoKTtcbiAgICB9XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbWFnaWMtbnVtYmVyc1xuICAgIHByaXZhdGUgX21heERhdGUgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShkZWZhdWx0TWF4WWVhciwgMTEpO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbWluRGF0ZSgpOiBEIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICAgIH1cblxuICAgIHNldCBtaW5EYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVllYXJzQXJyYXkoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9taW5EYXRlID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoZGVmYXVsdE1pblllYXIsIDEpO1xuXG4gICAgZ2V0IHByZXZpb3VzRGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVEYXRlKHRoaXMuYWN0aXZlRGF0ZSwgdGhpcy5taW5EYXRlISkgPCAwO1xuICAgIH1cblxuICAgIGdldCBuZXh0RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmVEYXRlKHRoaXMuYWN0aXZlRGF0ZSwgdGhpcy5tYXhEYXRlISkgPj0gMDtcbiAgICB9XG5cbiAgICAvKiogRW1pdHMgd2hlbiBhbnkgZGF0ZSBpcyBhY3RpdmF0ZWQuICovXG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IGFjdGl2ZURhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IG1vbnRoU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEQ+KCk7XG4gICAgQE91dHB1dCgpIHJlYWRvbmx5IHllYXJTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcblxuICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYWRhcHRlcjogRGF0ZUFkYXB0ZXI8RD4pIHtcbiAgICAgICAgdGhpcy5tb250aE5hbWVzID0gdGhpcy5hZGFwdGVyLmdldE1vbnRoTmFtZXMoJ2xvbmcnKVxuICAgICAgICAgICAgLm1hcCgobmFtZSwgaSkgPT4gKHsgbmFtZSwgdmFsdWU6IGkgfSkpO1xuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy51cGRhdGVZZWFyc0FycmF5KCk7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlcyB3aGVuIGEgbmV3IG1vbnRoIGlzIHNlbGVjdGVkLiAqL1xuICAgIG9uTW9udGhTZWxlY3RlZChtb250aDogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IHllYXIgPSB0aGlzLmFkYXB0ZXIuZ2V0WWVhcih0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRGF0ZSA9IHRoaXMuYWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIG1vbnRoKTtcbiAgICAgICAgY29uc3QgZGF5c0luTW9udGggPSB0aGlzLmFkYXB0ZXIuZ2V0TnVtRGF5c0luTW9udGgobm9ybWFsaXplZERhdGUpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuYWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgIG1vbnRoLFxuICAgICAgICAgICAgTWF0aC5taW4odGhpcy5hZGFwdGVyLmdldERhdGUodGhpcy5hY3RpdmVEYXRlKSwgZGF5c0luTW9udGgpXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5tb250aFNlbGVjdGVkLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICAvKiogSGFuZGxlcyB3aGVuIGEgbmV3IHllYXIgaXMgc2VsZWN0ZWQuICovXG4gICAgb25ZZWFyU2VsZWN0ZWQoeWVhcjogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IG1vbnRoID0gdGhpcy5hZGFwdGVyLmdldE1vbnRoKHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGhpcy5hZGFwdGVyLmdldE51bURheXNJbk1vbnRoKHRoaXMuYWRhcHRlci5jcmVhdGVEYXRlKHllYXIsIG1vbnRoKSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgICAgICAgeWVhcixcbiAgICAgICAgICAgICAgICBtb250aCxcbiAgICAgICAgICAgICAgICBNYXRoLm1pbih0aGlzLmFkYXB0ZXIuZ2V0RGF0ZSh0aGlzLmFjdGl2ZURhdGUpLCBkYXlzSW5Nb250aClcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgdGhpcy55ZWFyU2VsZWN0ZWQuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIHNlbGVjdEN1cnJlbnREYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFkYXB0ZXIudG9kYXkoKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIHVzZXIgY2xpY2tzIG9uIHRoZSBwcmV2aW91cyBidXR0b24uICovXG4gICAgc2VsZWN0UHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXMgdXNlciBjbGlja3Mgb24gdGhlIG5leHQgYnV0dG9uLiAqL1xuICAgIHNlbGVjdE5leHRNb250aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgMSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVEYXRlKGZpcnN0OiBELCBzZWNvbmQ6IEQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRmlyc3QgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRZZWFyKGZpcnN0KSxcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRNb250aChmaXJzdClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkU2Vjb25kID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0WWVhcihzZWNvbmQpLFxuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldE1vbnRoKHNlY29uZClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmNvbXBhcmVEYXRlKG5vcm1hbGl6ZWRGaXJzdCwgbm9ybWFsaXplZFNlY29uZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5tb250aE5hbWVzW3RoaXMuYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpXS52YWx1ZTtcblxuICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5hZGFwdGVyLmdldFllYXIodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFllYXIgPSB0aGlzLnllYXJzLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSB5ZWFyKVxuICAgICAgICAgICAgfHwgeyBuYW1lOiB5ZWFyLCB2YWx1ZTogdGhpcy5hZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuYWN0aXZlRGF0ZSkgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVllYXJzQXJyYXkoKSB7XG4gICAgICAgIGNvbnN0IG1pblllYXIgPSB0aGlzLmFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1pbkRhdGUhKTtcbiAgICAgICAgY29uc3QgbWF4WWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMubWF4RGF0ZSEpO1xuXG4gICAgICAgIHRoaXMueWVhcnMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBrZXk6IG51bWJlciA9IG1pblllYXI7IGtleSA8PSBtYXhZZWFyOyBrZXkrKykge1xuICAgICAgICAgICAgdGhpcy55ZWFycy5wdXNoKHsgbmFtZToga2V5LCB2YWx1ZTogdGhpcy5hZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuYWRhcHRlci5jcmVhdGVEYXRlKGtleSkpIH0pO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm1jLWNhbGVuZGFyLWhlYWRlcl9fc2VsZWN0LWdyb3VwXCI+XG4gICAgPG1jLXNlbGVjdFxuICAgICAgICBjbGFzcz1cIm1jLWNhbGVuZGFyLWhlYWRlcl9fc2VsZWN0XCJcbiAgICAgICAgI21vbnRoU2VsZWN0PVwibWNTZWxlY3RcIlxuICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRNb250aFwiXG4gICAgICAgIFtwYW5lbENsYXNzXT1cIidtYy1jYWxlbmRhci1zZWxlY3QtcGFuZWwnXCJcbiAgICAgICAgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbk1vbnRoU2VsZWN0ZWQoJGV2ZW50LnZhbHVlKVwiPlxuXG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtYy1idXR0b25fdHJhbnNwYXJlbnQgbGF5b3V0LXBhZGRpbmctcmlnaHQteHhzIGxheW91dC1wYWRkaW5nLWxlZnQtc1wiXG4gICAgICAgICAgICAgICAgbWMtYnV0dG9uXG4gICAgICAgICAgICAgICAgbWMtc2VsZWN0LW1hdGNoZXJcbiAgICAgICAgICAgICAgICBbY2xhc3MubWMtYWN0aXZlXT1cIm1vbnRoU2VsZWN0LnBhbmVsT3BlblwiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCI+XG4gICAgICAgICAgICB7eyBtb250aFNlbGVjdC50cmlnZ2VyVmFsdWUgfX1cblxuICAgICAgICAgICAgPGkgbWMtaWNvbj1cIm1jLWFuZ2xlLWRvd24tU18xNlwiPjwvaT5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPG1jLW9wdGlvbiAqbmdGb3I9XCJsZXQgbW9udGggb2YgbW9udGhOYW1lc1wiXG4gICAgICAgICAgICAgICAgICAgW21jVG9vbHRpcERpc2FibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJtb250aC52YWx1ZVwiPlxuICAgICAgICAgICAge3sgbW9udGgubmFtZSB9fVxuICAgICAgICA8L21jLW9wdGlvbj5cbiAgICA8L21jLXNlbGVjdD5cblxuICAgIDxtYy1zZWxlY3RcbiAgICAgICAgI3llYXJTZWxlY3Q9XCJtY1NlbGVjdFwiXG4gICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZFllYXJcIlxuICAgICAgICBbcGFuZWxDbGFzc109XCInbWMtY2FsZW5kYXItc2VsZWN0LXBhbmVsJ1wiXG4gICAgICAgIChzZWxlY3Rpb25DaGFuZ2UpPVwib25ZZWFyU2VsZWN0ZWQoJGV2ZW50LnZhbHVlLm5hbWUpXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJtYy1idXR0b25fdHJhbnNwYXJlbnQgbGF5b3V0LXBhZGRpbmctcmlnaHQteHhzIGxheW91dC1wYWRkaW5nLWxlZnQtc1wiXG4gICAgICAgICAgICAgICAgbWMtYnV0dG9uXG4gICAgICAgICAgICAgICAgbWMtc2VsZWN0LW1hdGNoZXJcbiAgICAgICAgICAgICAgICBbY2xhc3MubWMtYWN0aXZlXT1cInllYXJTZWxlY3QucGFuZWxPcGVuXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIj5cbiAgICAgICAgICAgIHt7IHRoaXMuc2VsZWN0ZWRZZWFyLnZhbHVlIH19XG5cbiAgICAgICAgICAgIDxpIG1jLWljb249XCJtYy1hbmdsZS1kb3duLVNfMTZcIj48L2k+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxtYy1vcHRpb24gKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhcnNcIlxuICAgICAgICAgICAgICAgICAgIFttY1Rvb2x0aXBEaXNhYmxlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwieWVhclwiPlxuICAgICAgICAgICAge3sgeWVhci52YWx1ZSB9fVxuICAgICAgICA8L21jLW9wdGlvbj5cbiAgICA8L21jLXNlbGVjdD5cbjwvZGl2PlxuXG48ZGl2IGNsYXNzPVwibWMtY2FsZW5kYXItaGVhZGVyX19idXR0b24tZ3JvdXBcIj5cbiAgICA8YnV0dG9uIG1jLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJtYy1idXR0b25fdHJhbnNwYXJlbnQgbWMtY2FsZW5kYXItaGVhZGVyX19wcmV2aW91cy1idXR0b25cIlxuICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwcmV2aW91c0Rpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQcmV2aW91c01vbnRoKClcIj5cblxuICAgICAgICA8aSBtYy1pY29uPVwibWMtYW5nbGUtbGVmdC1MXzE2XCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuXG4gICAgPGJ1dHRvbiBtYy1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwibWMtYnV0dG9uX3RyYW5zcGFyZW50XCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Q3VycmVudERhdGUoKVwiPlxuXG4gICAgICAgIDxpIG1jLWljb249XCJtYy1jaXJjbGUtOF8xNlwiPjwvaT5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWMtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1jLWJ1dHRvbl90cmFuc3BhcmVudCBtYy1jYWxlbmRhci1oZWFkZXJfX25leHQtYnV0dG9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibmV4dERpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3ROZXh0TW9udGgoKVwiPlxuXG4gICAgICAgIDxpIG1jLWljb249XCJtYy1hbmdsZS1yaWdodC1MXzE2XCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL21vc2FpYy9kYXRlcGlja2VyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wYWNrYWdlcy9tb3NhaWMvZGF0ZXBpY2tlci9jYWxlbmRhci1oZWFkZXIuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFDTixpQkFBaUIsRUFDcEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDOzs7Ozs7OztBQUd0RCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUM7QUFDNUIsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDO0FBUzVCLG9DQUFvQztBQVlwQyxNQUFNLE9BQU8sZ0JBQWdCO0lBT3pCLElBQ0ksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUM1QixDQUFDO0lBRUQsSUFBSSxVQUFVLENBQUMsS0FBUTtRQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUV6QixJQUFJLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztRQUM1QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztJQUNsQyxDQUFDO0lBSUQsSUFDSSxPQUFPO1FBQ1AsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFlO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEVBQUU7WUFBRSxPQUFPO1NBQUU7UUFFdkIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFFdEIsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUtELElBQ0ksT0FBTztRQUNQLE9BQU8s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a0ZBNkVBOzsyRkQzQ2EsZ0JBQWdCO2tCQVg1QixTQUFTOytCQUNJLG9CQUFvQixZQUNwQixrQkFBa0IsUUFHdEI7d0JBQ0YsS0FBSyxFQUFFLG9CQUFvQjtxQkFDOUIsaUJBQ2MsaUJBQWlCLENBQUMsSUFBSSxtQkFDcEIsdUJBQXVCLENBQUMsTUFBTTtrR0FVM0MsVUFBVTtzQkFEYixLQUFLO2dCQWVGLE9BQU87c0JBRFYsS0FBSztnQkFpQkYsT0FBTztzQkFEVixLQUFLO2dCQThCYSxnQkFBZ0I7c0JBQWxDLE1BQU07Z0JBQ1ksYUFBYTtzQkFBL0IsTUFBTTtnQkFDWSxZQUFZO3NCQUE5QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlckNvbnRlbnRJbml0LFxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICAgIENvbXBvbmVudCxcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSW5wdXQsXG4gICAgT3V0cHV0LFxuICAgIFZpZXdFbmNhcHN1bGF0aW9uXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRGF0ZUFkYXB0ZXIgfSBmcm9tICdAcHRzZWN1cml0eS9tb3NhaWMvY29yZSc7XG5cblxuY29uc3QgZGVmYXVsdE1pblllYXIgPSAxOTAwO1xuY29uc3QgZGVmYXVsdE1heFllYXIgPSAyMDk5O1xuXG5leHBvcnQgdHlwZSBNb250aE5hbWUgPSB7XG4gICAgbmFtZTogc3RyaW5nO1xuICAgIG5hbWVTaG9ydDogc3RyaW5nO1xuICAgIHZhbHVlOiBudW1iZXI7XG4gICAgZGlzYWJsZWQ6IGJvb2xlYW47XG59O1xuXG4vKiogRGVmYXVsdCBoZWFkZXIgZm9yIE1jQ2FsZW5kYXIgKi9cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnbWMtY2FsZW5kYXItaGVhZGVyJyxcbiAgICBleHBvcnRBczogJ21jQ2FsZW5kYXJIZWFkZXInLFxuICAgIHRlbXBsYXRlVXJsOiAnY2FsZW5kYXItaGVhZGVyLmh0bWwnLFxuICAgIHN0eWxlVXJsczogWydjYWxlbmRhci1oZWFkZXIuc2NzcyddLFxuICAgIGhvc3Q6IHtcbiAgICAgICAgY2xhc3M6ICdtYy1jYWxlbmRhci1oZWFkZXInXG4gICAgfSxcbiAgICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIE1jQ2FsZW5kYXJIZWFkZXI8RD4gaW1wbGVtZW50cyBBZnRlckNvbnRlbnRJbml0IHtcbiAgICBtb250aE5hbWVzOiBNb250aE5hbWVbXTtcbiAgICBzZWxlY3RlZE1vbnRoOiBudW1iZXI7XG5cbiAgICB5ZWFyczogeyBuYW1lOiBudW1iZXI7IHZhbHVlOiBzdHJpbmcgfVtdID0gW107XG4gICAgc2VsZWN0ZWRZZWFyOiB7IG5hbWU6IG51bWJlcjsgdmFsdWU6IHN0cmluZyB9O1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgYWN0aXZlRGF0ZSgpOiBEIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZURhdGU7XG4gICAgfVxuXG4gICAgc2V0IGFjdGl2ZURhdGUodmFsdWU6IEQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZlRGF0ZSA9IHZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZXMoKTtcbiAgICAgICAgdGhpcy51cGRhdGVTZWxlY3Rpb25PcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfYWN0aXZlRGF0ZTogRDtcblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IG1heERhdGUoKTogRCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5fbWF4RGF0ZTtcbiAgICB9XG5cbiAgICBzZXQgbWF4RGF0ZSh2YWx1ZTogRCB8IG51bGwpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkgeyByZXR1cm47IH1cblxuICAgICAgICB0aGlzLl9tYXhEYXRlID0gdmFsdWU7XG5cbiAgICAgICAgdGhpcy51cGRhdGVZZWFyc09wdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tbWFnaWMtbnVtYmVyc1xuICAgIHByaXZhdGUgX21heERhdGUgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShkZWZhdWx0TWF4WWVhciwgMTEpO1xuXG4gICAgQElucHV0KClcbiAgICBnZXQgbWluRGF0ZSgpOiBEIHwgbnVsbCB7XG4gICAgICAgIHJldHVybiB0aGlzLl9taW5EYXRlO1xuICAgIH1cblxuICAgIHNldCBtaW5EYXRlKHZhbHVlOiBEIHwgbnVsbCkge1xuICAgICAgICBpZiAoIXZhbHVlKSB7IHJldHVybjsgfVxuXG4gICAgICAgIHRoaXMuX21pbkRhdGUgPSB2YWx1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVllYXJzT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX21pbkRhdGUgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShkZWZhdWx0TWluWWVhciwgMSk7XG5cbiAgICBnZXQgcHJldmlvdXNEaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUodGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1pbkRhdGUhKSA8PSAwO1xuICAgIH1cblxuICAgIGdldCBjdXJyZW50RGlzYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHRvZGF5ID0gdGhpcy5hZGFwdGVyLnRvZGF5KCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUodG9kYXksIHRoaXMubWluRGF0ZSEpIDwgMCB8fCB0aGlzLmNvbXBhcmVEYXRlKHRvZGF5LCB0aGlzLm1heERhdGUhKSA+IDA7XG4gICAgfVxuXG4gICAgZ2V0IG5leHREaXNhYmxlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZURhdGUodGhpcy5hY3RpdmVEYXRlLCB0aGlzLm1heERhdGUhKSA+PSAwO1xuICAgIH1cblxuICAgIC8qKiBFbWl0cyB3aGVuIGFueSBkYXRlIGlzIGFjdGl2YXRlZC4gKi9cbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgYWN0aXZlRGF0ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgbW9udGhTZWxlY3RlZCA9IG5ldyBFdmVudEVtaXR0ZXI8RD4oKTtcbiAgICBAT3V0cHV0KCkgcmVhZG9ubHkgeWVhclNlbGVjdGVkID0gbmV3IEV2ZW50RW1pdHRlcjxEPigpO1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBhZGFwdGVyOiBEYXRlQWRhcHRlcjxEPikge1xuICAgICAgICB0aGlzLm1vbnRoTmFtZXMgPSB0aGlzLmFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnbG9uZycpLm1hcCgobmFtZSwgaSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHsgbmFtZSwgbmFtZVNob3J0OiB0aGlzLmFkYXB0ZXIuZ2V0TW9udGhOYW1lcygnc2hvcnQnKVtpXSwgdmFsdWU6IGksIGRpc2FibGVkOiBmYWxzZSB9O1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0aW9uT3B0aW9ucygpO1xuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWVzKCk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXMgd2hlbiBhIG5ldyBtb250aCBpcyBzZWxlY3RlZC4gKi9cbiAgICBvbk1vbnRoU2VsZWN0ZWQobW9udGg6IG51bWJlcikge1xuICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5hZGFwdGVyLmdldFllYXIodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgY29uc3Qgbm9ybWFsaXplZERhdGUgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCk7XG4gICAgICAgIGNvbnN0IGRheXNJbk1vbnRoID0gdGhpcy5hZGFwdGVyLmdldE51bURheXNJbk1vbnRoKG5vcm1hbGl6ZWREYXRlKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICBtb250aCxcbiAgICAgICAgICAgIE1hdGgubWluKHRoaXMuYWRhcHRlci5nZXREYXRlKHRoaXMuYWN0aXZlRGF0ZSksIGRheXNJbk1vbnRoKVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMubW9udGhTZWxlY3RlZC5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXMgd2hlbiBhIG5ldyB5ZWFyIGlzIHNlbGVjdGVkLiAqL1xuICAgIG9uWWVhclNlbGVjdGVkKHllYXI6IG51bWJlcikge1xuICAgICAgICBjb25zdCBtb250aCA9IHRoaXMuYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgICAgICBjb25zdCBkYXlzSW5Nb250aCA9IHRoaXMuYWRhcHRlci5nZXROdW1EYXlzSW5Nb250aCh0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZSh5ZWFyLCBtb250aCkpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZSA9IHRoaXMuYWRhcHRlci5jcmVhdGVEYXRlKFxuICAgICAgICAgICAgICAgIHllYXIsXG4gICAgICAgICAgICAgICAgbW9udGgsXG4gICAgICAgICAgICAgICAgTWF0aC5taW4odGhpcy5hZGFwdGVyLmdldERhdGUodGhpcy5hY3RpdmVEYXRlKSwgZGF5c0luTW9udGgpXG4gICAgICAgICAgICApO1xuXG4gICAgICAgIHRoaXMueWVhclNlbGVjdGVkLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcblxuICAgICAgICB0aGlzLnVwZGF0ZU1vbnRoT3B0aW9ucygpO1xuICAgIH1cblxuICAgIHNlbGVjdEN1cnJlbnREYXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2ZURhdGUgPSB0aGlzLmFkYXB0ZXIudG9kYXkoKTtcblxuICAgICAgICB0aGlzLmFjdGl2ZURhdGVDaGFuZ2UuZW1pdCh0aGlzLmFjdGl2ZURhdGUpO1xuICAgIH1cblxuICAgIC8qKiBIYW5kbGVzIHVzZXIgY2xpY2tzIG9uIHRoZSBwcmV2aW91cyBidXR0b24uICovXG4gICAgc2VsZWN0UHJldmlvdXNNb250aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgLTEpO1xuXG4gICAgICAgIHRoaXMuYWN0aXZlRGF0ZUNoYW5nZS5lbWl0KHRoaXMuYWN0aXZlRGF0ZSk7XG4gICAgfVxuXG4gICAgLyoqIEhhbmRsZXMgdXNlciBjbGlja3Mgb24gdGhlIG5leHQgYnV0dG9uLiAqL1xuICAgIHNlbGVjdE5leHRNb250aCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlID0gdGhpcy5hZGFwdGVyLmFkZENhbGVuZGFyTW9udGhzKHRoaXMuYWN0aXZlRGF0ZSwgMSk7XG5cbiAgICAgICAgdGhpcy5hY3RpdmVEYXRlQ2hhbmdlLmVtaXQodGhpcy5hY3RpdmVEYXRlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbXBhcmVEYXRlKGZpcnN0OiBELCBzZWNvbmQ6IEQpOiBudW1iZXIge1xuICAgICAgICBjb25zdCBub3JtYWxpemVkRmlyc3QgPSB0aGlzLmFkYXB0ZXIuY3JlYXRlRGF0ZShcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRZZWFyKGZpcnN0KSxcbiAgICAgICAgICAgIHRoaXMuYWRhcHRlci5nZXRNb250aChmaXJzdClcbiAgICAgICAgKTtcblxuICAgICAgICBjb25zdCBub3JtYWxpemVkU2Vjb25kID0gdGhpcy5hZGFwdGVyLmNyZWF0ZURhdGUoXG4gICAgICAgICAgICB0aGlzLmFkYXB0ZXIuZ2V0WWVhcihzZWNvbmQpLFxuICAgICAgICAgICAgdGhpcy5hZGFwdGVyLmdldE1vbnRoKHNlY29uZClcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmNvbXBhcmVEYXRlKG5vcm1hbGl6ZWRGaXJzdCwgbm9ybWFsaXplZFNlY29uZCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVTZWxlY3RlZFZhbHVlcygpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZE1vbnRoID0gdGhpcy5tb250aE5hbWVzW3RoaXMuYWRhcHRlci5nZXRNb250aCh0aGlzLmFjdGl2ZURhdGUpXS52YWx1ZTtcblxuICAgICAgICBjb25zdCB5ZWFyID0gdGhpcy5hZGFwdGVyLmdldFllYXIodGhpcy5hY3RpdmVEYXRlKTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZFllYXIgPSB0aGlzLnllYXJzLmZpbmQoKHsgbmFtZSB9KSA9PiBuYW1lID09PSB5ZWFyKVxuICAgICAgICAgICAgfHwgeyBuYW1lOiB5ZWFyLCB2YWx1ZTogdGhpcy5hZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuYWN0aXZlRGF0ZSkgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVNlbGVjdGlvbk9wdGlvbnMoKSB7XG4gICAgICAgIHRoaXMudXBkYXRlWWVhcnNPcHRpb25zKCk7XG4gICAgICAgIHRoaXMudXBkYXRlTW9udGhPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVZZWFyc09wdGlvbnMoKSB7XG4gICAgICAgIGNvbnN0IG1pblllYXIgPSB0aGlzLmFkYXB0ZXIuZ2V0WWVhcih0aGlzLm1pbkRhdGUhKTtcbiAgICAgICAgY29uc3QgbWF4WWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMubWF4RGF0ZSEpO1xuXG4gICAgICAgIHRoaXMueWVhcnMgPSBbXTtcblxuICAgICAgICBmb3IgKGxldCBrZXk6IG51bWJlciA9IG1pblllYXI7IGtleSA8PSBtYXhZZWFyOyBrZXkrKykge1xuICAgICAgICAgICAgdGhpcy55ZWFycy5wdXNoKHsgbmFtZToga2V5LCB2YWx1ZTogdGhpcy5hZGFwdGVyLmdldFllYXJOYW1lKHRoaXMuYWRhcHRlci5jcmVhdGVEYXRlKGtleSkpIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVNb250aE9wdGlvbnMoKSB7XG4gICAgICAgIGlmICghdGhpcy5fYWN0aXZlRGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbWluWWVhciA9IHRoaXMuYWRhcHRlci5nZXRZZWFyKHRoaXMubWluRGF0ZSEpO1xuICAgICAgICBjb25zdCBtaW5Nb250aCA9IHRoaXMuYWRhcHRlci5nZXRNb250aCh0aGlzLm1pbkRhdGUhKTtcblxuICAgICAgICBjb25zdCBtYXhZZWFyID0gdGhpcy5hZGFwdGVyLmdldFllYXIodGhpcy5tYXhEYXRlISk7XG4gICAgICAgIGNvbnN0IG1heE1vbnRoID0gdGhpcy5hZGFwdGVyLmdldE1vbnRoKHRoaXMubWF4RGF0ZSEpO1xuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRZZWFyID0gdGhpcy5hZGFwdGVyLmdldFllYXIodGhpcy5fYWN0aXZlRGF0ZSk7XG5cbiAgICAgICAgaWYgKGN1cnJlbnRZZWFyID09PSBtaW5ZZWFyICYmIGN1cnJlbnRZZWFyID09PSBtYXhZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoTmFtZXMuZm9yRWFjaCgobW9udGgpID0+IChtb250aC5kaXNhYmxlZCA9IG1vbnRoLnZhbHVlIDwgbWluTW9udGggfHwgbW9udGgudmFsdWUgPiBtYXhNb250aCkpO1xuICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRZZWFyID09PSBtaW5ZZWFyKSB7XG4gICAgICAgICAgICB0aGlzLm1vbnRoTmFtZXMuZm9yRWFjaCgobW9udGgpID0+IChtb250aC5kaXNhYmxlZCA9IG1vbnRoLnZhbHVlIDwgbWluTW9udGgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50WWVhciA9PT0gbWF4WWVhcikge1xuICAgICAgICAgICAgdGhpcy5tb250aE5hbWVzLmZvckVhY2goKG1vbnRoKSA9PiAobW9udGguZGlzYWJsZWQgPSBtb250aC52YWx1ZSA+IG1heE1vbnRoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwibWMtY2FsZW5kYXItaGVhZGVyX19zZWxlY3QtZ3JvdXBcIj5cbiAgICA8bWMtc2VsZWN0XG4gICAgICAgIGNsYXNzPVwibWMtY2FsZW5kYXItaGVhZGVyX19zZWxlY3RcIlxuICAgICAgICAjbW9udGhTZWxlY3Q9XCJtY1NlbGVjdFwiXG4gICAgICAgIFt2YWx1ZV09XCJzZWxlY3RlZE1vbnRoXCJcbiAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ21jLWNhbGVuZGFyLXNlbGVjdC1wYW5lbCdcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uTW9udGhTZWxlY3RlZCgkZXZlbnQudmFsdWUpXCI+XG5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cIm1jLWJ1dHRvbl90cmFuc3BhcmVudCBsYXlvdXQtcGFkZGluZy1yaWdodC14eHMgbGF5b3V0LXBhZGRpbmctbGVmdC1zXCJcbiAgICAgICAgICAgICAgICBtYy1idXR0b25cbiAgICAgICAgICAgICAgICBtYy1zZWxlY3QtbWF0Y2hlclxuICAgICAgICAgICAgICAgIFtjbGFzcy5tYy1hY3RpdmVdPVwibW9udGhTZWxlY3QucGFuZWxPcGVuXCJcbiAgICAgICAgICAgICAgICBbdGFiaW5kZXhdPVwiLTFcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoU2VsZWN0LnRyaWdnZXJWYWx1ZSB9fVxuXG4gICAgICAgICAgICA8aSBtYy1pY29uPVwibWMtYW5nbGUtZG93bi1TXzE2XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bWMtb3B0aW9uICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aE5hbWVzXCJcbiAgICAgICAgICAgICAgICAgICBbbWNUb29sdGlwRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIm1vbnRoLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwibW9udGgudmFsdWVcIj5cbiAgICAgICAgICAgIHt7IG1vbnRoLm5hbWUgfX1cbiAgICAgICAgPC9tYy1vcHRpb24+XG4gICAgPC9tYy1zZWxlY3Q+XG5cbiAgICA8bWMtc2VsZWN0XG4gICAgICAgICN5ZWFyU2VsZWN0PVwibWNTZWxlY3RcIlxuICAgICAgICBbdmFsdWVdPVwic2VsZWN0ZWRZZWFyXCJcbiAgICAgICAgW3BhbmVsQ2xhc3NdPVwiJ21jLWNhbGVuZGFyLXNlbGVjdC1wYW5lbCdcIlxuICAgICAgICAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uWWVhclNlbGVjdGVkKCRldmVudC52YWx1ZS5uYW1lKVwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwibWMtYnV0dG9uX3RyYW5zcGFyZW50IGxheW91dC1wYWRkaW5nLXJpZ2h0LXh4cyBsYXlvdXQtcGFkZGluZy1sZWZ0LXNcIlxuICAgICAgICAgICAgICAgIG1jLWJ1dHRvblxuICAgICAgICAgICAgICAgIG1jLXNlbGVjdC1tYXRjaGVyXG4gICAgICAgICAgICAgICAgW2NsYXNzLm1jLWFjdGl2ZV09XCJ5ZWFyU2VsZWN0LnBhbmVsT3BlblwiXG4gICAgICAgICAgICAgICAgW3RhYmluZGV4XT1cIi0xXCI+XG4gICAgICAgICAgICB7eyB0aGlzLnNlbGVjdGVkWWVhci52YWx1ZSB9fVxuXG4gICAgICAgICAgICA8aSBtYy1pY29uPVwibWMtYW5nbGUtZG93bi1TXzE2XCI+PC9pPlxuICAgICAgICA8L2J1dHRvbj5cblxuICAgICAgICA8bWMtb3B0aW9uICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJzXCJcbiAgICAgICAgICAgICAgICAgICBbbWNUb29sdGlwRGlzYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cInllYXJcIj5cbiAgICAgICAgICAgIHt7IHllYXIudmFsdWUgfX1cbiAgICAgICAgPC9tYy1vcHRpb24+XG4gICAgPC9tYy1zZWxlY3Q+XG48L2Rpdj5cblxuPGRpdiBjbGFzcz1cIm1jLWNhbGVuZGFyLWhlYWRlcl9fYnV0dG9uLWdyb3VwXCI+XG4gICAgPGJ1dHRvbiBtYy1idXR0b25cbiAgICAgICAgICAgIGNsYXNzPVwibWMtYnV0dG9uX3RyYW5zcGFyZW50IG1jLWNhbGVuZGFyLWhlYWRlcl9fcHJldmlvdXMtYnV0dG9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwicHJldmlvdXNEaXNhYmxlZFwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJldmlvdXNNb250aCgpXCI+XG5cbiAgICAgICAgPGkgbWMtaWNvbj1cIm1jLWFuZ2xlLWxlZnQtTF8xNlwiPjwvaT5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWMtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1jLWJ1dHRvbl90cmFuc3BhcmVudFwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiY3VycmVudERpc2FibGVkXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0Q3VycmVudERhdGUoKVwiPlxuXG4gICAgICAgIDxpIG1jLWljb249XCJtYy1jaXJjbGUtOF8xNlwiPjwvaT5cbiAgICA8L2J1dHRvbj5cblxuICAgIDxidXR0b24gbWMtYnV0dG9uXG4gICAgICAgICAgICBjbGFzcz1cIm1jLWJ1dHRvbl90cmFuc3BhcmVudCBtYy1jYWxlbmRhci1oZWFkZXJfX25leHQtYnV0dG9uXCJcbiAgICAgICAgICAgIFt0YWJpbmRleF09XCItMVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwibmV4dERpc2FibGVkXCJcbiAgICAgICAgICAgIChjbGljayk9XCJzZWxlY3ROZXh0TW9udGgoKVwiPlxuXG4gICAgICAgIDxpIG1jLWljb249XCJtYy1hbmdsZS1yaWdodC1MXzE2XCI+PC9pPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+XG4iXX0=
|