@progressio_resources/gravity-design-system 2.3.3 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/gravity-calendar/gravity-calendar.component.mjs +31 -103
- package/esm2022/lib/components/gravity-checkbox/gravity-checkbox.component.mjs +20 -10
- package/esm2022/lib/components/gravity-stepper/gravity-stepper.component.mjs +2 -2
- package/esm2022/lib/components/gravity-switch/gravity-switch.component.mjs +13 -6
- package/esm2022/lib/gravity-design-system.module.mjs +6 -5
- package/fesm2022/progressio_resources-gravity-design-system.mjs +67 -250
- package/fesm2022/progressio_resources-gravity-design-system.mjs.map +1 -1
- package/lib/components/gravity-calendar/gravity-calendar.component.d.ts +16 -30
- package/lib/components/gravity-checkbox/gravity-checkbox.component.d.ts +13 -8
- package/lib/components/gravity-switch/gravity-switch.component.d.ts +5 -4
- package/lib/gravity-design-system.module.d.ts +16 -16
- package/package.json +2 -1
- package/src/lib/styles/components/_datepicker.scss +122 -70
- package/esm2022/lib/components/gravity-calendar/gravity-month-picker/gravity-month-picker.component.mjs +0 -136
- package/lib/components/gravity-calendar/gravity-month-picker/gravity-month-picker.component.d.ts +0 -40
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { NgbDate, NgbDateStruct } from "@ng-bootstrap/ng-bootstrap";
|
|
3
|
-
import { GravityMonthPickerDate } from "./gravity-month-picker/gravity-month-picker.component";
|
|
1
|
+
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
4
2
|
import * as i0 from "@angular/core";
|
|
5
|
-
export declare class GravityCalendarComponent implements OnChanges
|
|
3
|
+
export declare class GravityCalendarComponent implements OnChanges {
|
|
6
4
|
calendarResponse: EventEmitter<Date>;
|
|
7
|
-
calendarType: '
|
|
5
|
+
calendarType: 'day' | 'month' | 'year';
|
|
8
6
|
currentLang: string;
|
|
9
7
|
cypressTag: string;
|
|
10
8
|
datesConfig: {
|
|
@@ -14,38 +12,26 @@ export declare class GravityCalendarComponent implements OnChanges, AfterViewIni
|
|
|
14
12
|
minDate?: Date;
|
|
15
13
|
};
|
|
16
14
|
label: string;
|
|
17
|
-
monthConfig: {
|
|
18
|
-
customMonthDate?: GravityMonthPickerDate;
|
|
19
|
-
maxMonthDate?: GravityMonthPickerDate;
|
|
20
|
-
minMonthDate?: GravityMonthPickerDate;
|
|
21
|
-
};
|
|
22
15
|
required: boolean;
|
|
23
16
|
state: 'readonly' | 'disabled' | 'enabled';
|
|
24
17
|
supportTextContent: string;
|
|
25
18
|
supportTextType: 'neutro' | 'negative' | 'positive';
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
19
|
+
bsDatepickerConfig: {
|
|
20
|
+
containerClass: string;
|
|
21
|
+
isAnimated: boolean;
|
|
22
|
+
selectFromOtherMonth: boolean;
|
|
23
|
+
showWeekNumbers: boolean;
|
|
24
|
+
};
|
|
25
|
+
readonly elementId: string;
|
|
30
26
|
focusInput: boolean;
|
|
31
|
-
maxDate:
|
|
32
|
-
minDate:
|
|
27
|
+
maxDate: Date;
|
|
28
|
+
minDate: Date;
|
|
33
29
|
selectedDate: Date;
|
|
34
|
-
|
|
35
|
-
private customDateFlag;
|
|
30
|
+
constructor();
|
|
36
31
|
ngOnChanges(changes: SimpleChanges): void;
|
|
37
|
-
|
|
38
|
-
updateSelectedDate($event: NgbDate): void;
|
|
39
|
-
focusCustomDate(customDate: Date): void;
|
|
32
|
+
updateSelectedDate($event: Date): void;
|
|
40
33
|
resetCalendar(newDate: Date): void;
|
|
41
|
-
|
|
42
|
-
private static formatNgbDate;
|
|
43
|
-
private static formatMonthDate;
|
|
44
|
-
private static formatTSDate;
|
|
45
|
-
private static formatDateToNgbDateStruct;
|
|
46
|
-
private static convertNgbDateToDate;
|
|
47
|
-
private static convertMonthDateToDate;
|
|
48
|
-
handleMonthPickerResponse(response: GravityMonthPickerDate): void;
|
|
34
|
+
getBsDatepickerContainer(): string;
|
|
49
35
|
static ɵfac: i0.ɵɵFactoryDeclaration<GravityCalendarComponent, never>;
|
|
50
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GravityCalendarComponent, "gravity-calendar", never, { "calendarType": { "alias": "calendarType"; "required": false; }; "currentLang": { "alias": "currentLang"; "required": false; }; "cypressTag": { "alias": "cypressTag"; "required": false; }; "datesConfig": { "alias": "datesConfig"; "required": false; }; "label": { "alias": "label"; "required": false; }; "
|
|
36
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GravityCalendarComponent, "gravity-calendar", never, { "calendarType": { "alias": "calendarType"; "required": false; }; "currentLang": { "alias": "currentLang"; "required": false; }; "cypressTag": { "alias": "cypressTag"; "required": false; }; "datesConfig": { "alias": "datesConfig"; "required": false; }; "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "state": { "alias": "state"; "required": false; }; "supportTextContent": { "alias": "supportTextContent"; "required": false; }; "supportTextType": { "alias": "supportTextType"; "required": false; }; }, { "calendarResponse": "response"; }, never, never, false, never>;
|
|
51
37
|
}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
2
|
-
import { PrettyRadioChange } from "ngx-pretty-checkbox";
|
|
1
|
+
import { AfterViewInit, EventEmitter } from '@angular/core';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class GravityCheckboxComponent {
|
|
5
|
-
value: any;
|
|
6
|
-
disabled: boolean;
|
|
3
|
+
export declare class GravityCheckboxComponent implements AfterViewInit {
|
|
7
4
|
checked: boolean;
|
|
8
|
-
|
|
9
|
-
|
|
5
|
+
disabled: boolean;
|
|
6
|
+
name: string;
|
|
7
|
+
value: string;
|
|
8
|
+
change: EventEmitter<{
|
|
9
|
+
value: string;
|
|
10
|
+
checked: boolean;
|
|
11
|
+
}>;
|
|
12
|
+
isCheckboxActive: boolean;
|
|
13
|
+
ngAfterViewInit(): void;
|
|
14
|
+
toggleCheckbox(): void;
|
|
10
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<GravityCheckboxComponent, never>;
|
|
11
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<GravityCheckboxComponent, "gravity-checkbox", never, { "
|
|
16
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GravityCheckboxComponent, "gravity-checkbox", never, { "checked": { "alias": "checked"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "name": { "alias": "name"; "required": false; }; "value": { "alias": "value"; "required": false; }; }, { "change": "change"; }, never, ["*"], false, never>;
|
|
12
17
|
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { EventEmitter } from '@angular/core';
|
|
2
|
-
import { PrettyCheckBoxChange } from "ngx-pretty-checkbox/lib/model";
|
|
1
|
+
import { AfterViewInit, EventEmitter } from '@angular/core';
|
|
3
2
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class GravitySwitchComponent {
|
|
3
|
+
export declare class GravitySwitchComponent implements AfterViewInit {
|
|
5
4
|
currentLang: string;
|
|
6
5
|
customCheck: boolean;
|
|
7
6
|
cypressTag: string;
|
|
@@ -10,7 +9,9 @@ export declare class GravitySwitchComponent {
|
|
|
10
9
|
state: 'readonly' | 'disabled' | 'enabled';
|
|
11
10
|
toggleOptions: string[];
|
|
12
11
|
switchResponse: EventEmitter<boolean>;
|
|
13
|
-
|
|
12
|
+
isSwitchActive: boolean;
|
|
13
|
+
ngAfterViewInit(): void;
|
|
14
|
+
toggleSwitch(): void;
|
|
14
15
|
static ɵfac: i0.ɵɵFactoryDeclaration<GravitySwitchComponent, never>;
|
|
15
16
|
static ɵcmp: i0.ɵɵComponentDeclaration<GravitySwitchComponent, "gravity-switch", never, { "currentLang": { "alias": "currentLang"; "required": false; }; "customCheck": { "alias": "customCheck"; "required": false; }; "cypressTag": { "alias": "cypressTag"; "required": false; }; "label": { "alias": "label"; "required": false; }; "required": { "alias": "required"; "required": false; }; "state": { "alias": "state"; "required": false; }; "toggleOptions": { "alias": "toggleOptions"; "required": false; }; }, { "switchResponse": "response"; }, never, never, false, never>;
|
|
16
17
|
}
|
|
@@ -6,21 +6,21 @@ import * as i4 from "./components/gravity-checkbox/gravity-checkbox.component";
|
|
|
6
6
|
import * as i5 from "./components/gravity-dialog/gravity-dialog.component";
|
|
7
7
|
import * as i6 from "./components/gravity-dropdown-list/gravity-dropdown-list.component";
|
|
8
8
|
import * as i7 from "./components/gravity-icon/gravity-icon.component";
|
|
9
|
-
import * as i8 from "./components/gravity-
|
|
10
|
-
import * as i9 from "./components/gravity-notification/gravity-notification.component";
|
|
11
|
-
import * as i10 from "./components/gravity-
|
|
12
|
-
import * as i11 from "./components/gravity-
|
|
13
|
-
import * as i12 from "./components/gravity-
|
|
14
|
-
import * as i13 from "./components/gravity-
|
|
15
|
-
import * as i14 from "./components/gravity-
|
|
16
|
-
import * as i15 from "./components/gravity-
|
|
17
|
-
import * as i16 from "./components/gravity-tree-view/
|
|
18
|
-
import * as i17 from "./components/gravity-tree-view/node/node.component";
|
|
19
|
-
import * as i18 from "./components/gravity-tree-view/node/node-
|
|
20
|
-
import * as i19 from "./components/gravity-tree-view/node/node-
|
|
21
|
-
import * as i20 from "
|
|
22
|
-
import * as i21 from "angular-svg-icon";
|
|
23
|
-
import * as i22 from "
|
|
9
|
+
import * as i8 from "./components/gravity-notification/gravity-notification.component";
|
|
10
|
+
import * as i9 from "./components/gravity-notification-instant/gravity-notification-instant-container.component";
|
|
11
|
+
import * as i10 from "./components/gravity-radio-button/gravity-radio-button.component";
|
|
12
|
+
import * as i11 from "./components/gravity-stepper/gravity-stepper.component";
|
|
13
|
+
import * as i12 from "./components/gravity-switch/gravity-switch.component";
|
|
14
|
+
import * as i13 from "./components/gravity-table/gravity-table.component";
|
|
15
|
+
import * as i14 from "./components/gravity-text-field/gravity-text-field.component";
|
|
16
|
+
import * as i15 from "./components/gravity-tree-view/gravity-tree-view.component";
|
|
17
|
+
import * as i16 from "./components/gravity-tree-view/node/node.component";
|
|
18
|
+
import * as i17 from "./components/gravity-tree-view/node/node-toggle/node-toggle.component";
|
|
19
|
+
import * as i18 from "./components/gravity-tree-view/node/node-checkbox/node-checkbox.component";
|
|
20
|
+
import * as i19 from "./components/gravity-tree-view/node/node-name/node-name.component";
|
|
21
|
+
import * as i20 from "angular-svg-icon";
|
|
22
|
+
import * as i21 from "angular-svg-icon-preloader";
|
|
23
|
+
import * as i22 from "ngx-bootstrap/datepicker";
|
|
24
24
|
import * as i23 from "@angular/common";
|
|
25
25
|
import * as i24 from "@angular/forms";
|
|
26
26
|
import * as i25 from "./vendor/gravity-tooltip/gravity-tooltip.module";
|
|
@@ -29,6 +29,6 @@ import * as i27 from "@ng-select/ng-select";
|
|
|
29
29
|
import * as i28 from "ngx-pretty-checkbox";
|
|
30
30
|
export declare class GravityDesignSystemModule {
|
|
31
31
|
static ɵfac: i0.ɵɵFactoryDeclaration<GravityDesignSystemModule, never>;
|
|
32
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<GravityDesignSystemModule, [typeof i1.GravityAttachFileComponent, typeof i2.GravityButtonComponent, typeof i3.GravityCalendarComponent, typeof i4.GravityCheckboxComponent, typeof i5.GravityDialogComponent, typeof i6.GravityDropdownListComponent, typeof i7.GravityIconComponent, typeof i8.
|
|
32
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<GravityDesignSystemModule, [typeof i1.GravityAttachFileComponent, typeof i2.GravityButtonComponent, typeof i3.GravityCalendarComponent, typeof i4.GravityCheckboxComponent, typeof i5.GravityDialogComponent, typeof i6.GravityDropdownListComponent, typeof i7.GravityIconComponent, typeof i8.GravityNotificationComponent, typeof i9.GravityNotificationInstantContainerComponent, typeof i10.GravityRadioButtonComponent, typeof i11.GravityStepperComponent, typeof i12.GravitySwitchComponent, typeof i13.GravityTableComponent, typeof i14.GravityTextFieldComponent, typeof i15.GravityTreeViewComponent, typeof i16.NodeComponent, typeof i17.NodeToggleComponent, typeof i18.NodeCheckboxComponent, typeof i19.NodeNameComponent], [typeof i20.AngularSvgIconModule, typeof i21.AngularSvgIconPreloaderModule, typeof i22.BsDatepickerModule, typeof i23.CommonModule, typeof i24.FormsModule, typeof i25.GravityTooltipModule, typeof i26.NgbDatepickerModule, typeof i26.NgbProgressbarModule, typeof i26.NgbToastModule, typeof i27.NgSelectModule, typeof i28.NgxPrettyCheckboxModule, typeof i24.ReactiveFormsModule], [typeof i1.GravityAttachFileComponent, typeof i2.GravityButtonComponent, typeof i3.GravityCalendarComponent, typeof i4.GravityCheckboxComponent, typeof i5.GravityDialogComponent, typeof i6.GravityDropdownListComponent, typeof i7.GravityIconComponent, typeof i9.GravityNotificationInstantContainerComponent, typeof i10.GravityRadioButtonComponent, typeof i11.GravityStepperComponent, typeof i12.GravitySwitchComponent, typeof i13.GravityTableComponent, typeof i14.GravityTextFieldComponent, typeof i25.GravityTooltipModule, typeof i15.GravityTreeViewComponent]>;
|
|
33
33
|
static ɵinj: i0.ɵɵInjectorDeclaration<GravityDesignSystemModule>;
|
|
34
34
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@progressio_resources/gravity-design-system",
|
|
3
3
|
"description": "Gravity Design System",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.4.0",
|
|
5
5
|
"license": "SEE LICENSE IN LIBRARY-LICENSE",
|
|
6
6
|
"peerDependencies": {
|
|
7
7
|
"@angular/common": "^16.2.12",
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
"@popperjs/core": "^2.11.8",
|
|
13
13
|
"angular-svg-icon": "^16.1.0",
|
|
14
14
|
"angular-svg-icon-preloader": "^6.0.0",
|
|
15
|
+
"ngx-bootstrap": "^12.0.0",
|
|
15
16
|
"ngx-pretty-checkbox": "^16.0.0",
|
|
16
17
|
"pretty-checkbox": "^3.0.3"
|
|
17
18
|
},
|
|
@@ -1,117 +1,169 @@
|
|
|
1
1
|
@import "../foundations/typography/hero.typography";
|
|
2
|
+
@import "../foundations/spacing/spacing";
|
|
2
3
|
@import "../foundations/border-radius/hero.border-radius";
|
|
3
4
|
@import "../shared";
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
$datepicker-min-width: 15rem;
|
|
7
|
+
|
|
8
|
+
bs-datepicker-container {
|
|
9
|
+
z-index: 1;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.gravity-datepicker-dialog {
|
|
6
13
|
background-color: var(--bg-calender-primary);
|
|
7
14
|
border-radius: $border-radius-md;
|
|
8
15
|
box-shadow: 0 0 10px #AAA;
|
|
9
16
|
color: var(--on-bg-calender-primary);
|
|
10
17
|
|
|
11
|
-
.
|
|
18
|
+
.bs-datepicker-head {
|
|
12
19
|
background-color: var(--bg-calendar-nav-primary);
|
|
13
20
|
border-top-left-radius: $border-radius-md;
|
|
14
21
|
border-top-right-radius: $border-radius-md;
|
|
15
22
|
color: var(--on-bg-calendar-nav-primary);
|
|
16
23
|
height: 3.125rem;
|
|
17
|
-
min-width:
|
|
24
|
+
min-width: $datepicker-min-width;
|
|
18
25
|
padding: 0.625rem;
|
|
19
26
|
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
27
|
+
bs-datepicker-navigation-view {
|
|
28
|
+
align-items: center;
|
|
29
|
+
display: flex;
|
|
30
|
+
justify-content: space-between;
|
|
24
31
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
&:not([disabled]):hover {
|
|
47
|
-
background-color: var(--bg-arrow-calendar-hover-primary);
|
|
48
|
-
color: var(--arrow-calendar-hover-primary);
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
&[disabled] {
|
|
52
|
-
color: var(--arrow-calendar-disabled-primary);
|
|
53
|
-
cursor: not-allowed;
|
|
54
|
-
}
|
|
32
|
+
.previous,
|
|
33
|
+
.next {
|
|
34
|
+
@extend .hr-label, .sm-regular;
|
|
35
|
+
|
|
36
|
+
background-color: var(--bg-calendar-nav-primary);
|
|
37
|
+
border: none;
|
|
38
|
+
border-radius: $border-radius-rounded;
|
|
39
|
+
color: var(--arrow-calendar-active-primary);
|
|
40
|
+
cursor: pointer;
|
|
41
|
+
height: 2rem;
|
|
42
|
+
outline: none;
|
|
43
|
+
width: 2rem;
|
|
44
|
+
|
|
45
|
+
span {
|
|
46
|
+
border: none;
|
|
47
|
+
display: inline-block;
|
|
48
|
+
font-size: 1.75rem;
|
|
49
|
+
height: 100%;
|
|
50
|
+
line-height: 1;
|
|
51
|
+
width: 100%;
|
|
55
52
|
}
|
|
56
53
|
|
|
57
|
-
|
|
58
|
-
|
|
54
|
+
&:not([disabled]):hover {
|
|
55
|
+
background-color: var(--bg-arrow-calendar-hover-primary);
|
|
56
|
+
color: var(--arrow-calendar-hover-primary);
|
|
59
57
|
}
|
|
60
58
|
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
&[disabled] {
|
|
60
|
+
color: var(--arrow-calendar-disabled-primary);
|
|
61
|
+
cursor: not-allowed;
|
|
63
62
|
}
|
|
64
63
|
}
|
|
65
64
|
|
|
66
|
-
.
|
|
65
|
+
.current {
|
|
67
66
|
@extend .hr-label, .md-regular;
|
|
67
|
+
|
|
68
68
|
background-color: var(--bg-calendar-nav-primary);
|
|
69
|
+
border: none;
|
|
70
|
+
border-radius: $border-radius-rounded;
|
|
71
|
+
color: var(--on-bg-calendar-nav-primary);
|
|
72
|
+
cursor: pointer;
|
|
73
|
+
height: 2rem;
|
|
74
|
+
outline: none;
|
|
75
|
+
padding-inline: map-get($spacing-values, sm);
|
|
76
|
+
|
|
77
|
+
&:not([disabled]):hover {
|
|
78
|
+
background-color: var(--bg-arrow-calendar-hover-primary);
|
|
79
|
+
color: var(--arrow-calendar-hover-primary);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
&[disabled] {
|
|
83
|
+
color: var(--arrow-calendar-disabled-primary);
|
|
84
|
+
cursor: not-allowed;
|
|
85
|
+
}
|
|
69
86
|
}
|
|
70
87
|
}
|
|
71
88
|
}
|
|
72
89
|
|
|
73
|
-
.
|
|
90
|
+
.bs-datepicker-body {
|
|
74
91
|
@extend .hr-label, .sm-regular;
|
|
75
92
|
|
|
76
|
-
min-width:
|
|
93
|
+
min-width: $datepicker-min-width;
|
|
77
94
|
padding: 0.625rem;
|
|
78
95
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
border: none;
|
|
96
|
+
table {
|
|
97
|
+
width: 100%;
|
|
82
98
|
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
color: var(--
|
|
99
|
+
td {
|
|
100
|
+
border-radius: $border-radius-rounded;
|
|
101
|
+
color: var(--number-calender-active-primary);
|
|
102
|
+
cursor: pointer;
|
|
103
|
+
height: 2rem;
|
|
104
|
+
outline: none;
|
|
105
|
+
text-align: center;
|
|
106
|
+
|
|
107
|
+
span {
|
|
108
|
+
display: block;
|
|
109
|
+
height: 2rem;
|
|
110
|
+
line-height: 2rem;
|
|
111
|
+
}
|
|
86
112
|
}
|
|
87
113
|
}
|
|
114
|
+
}
|
|
88
115
|
|
|
89
|
-
|
|
90
|
-
|
|
116
|
+
bs-days-calendar-view .bs-datepicker-body table {
|
|
117
|
+
th {
|
|
118
|
+
font-style: italic;
|
|
119
|
+
height: 2rem;
|
|
120
|
+
width: 2rem;
|
|
91
121
|
}
|
|
92
122
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
color: var(--number-calender-active-primary);
|
|
96
|
-
outline: none;
|
|
123
|
+
td {
|
|
124
|
+
width: 2rem;
|
|
97
125
|
|
|
98
|
-
.
|
|
99
|
-
|
|
100
|
-
|
|
126
|
+
&:not(:has(span.is-other-month)):not(:has(span.selected)):not(:has(span.disabled)):hover {
|
|
127
|
+
background-color: var(--bg-number-calendar-hover-primary);
|
|
128
|
+
color: var(--number-calendar-hover-primary);
|
|
129
|
+
}
|
|
101
130
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
131
|
+
&:has(span.selected) {
|
|
132
|
+
background-color: var(--bg-number-calendar-pressed-primary);
|
|
133
|
+
color: var(--number-calendar-pressed-primary);
|
|
134
|
+
}
|
|
106
135
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
136
|
+
&:has(span.is-other-month) {
|
|
137
|
+
color: var(--number-calendar-disabled-primary);
|
|
138
|
+
}
|
|
110
139
|
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
140
|
+
&:has(span.disabled) {
|
|
141
|
+
color: var(--number-calendar-disabled-primary);
|
|
142
|
+
cursor: not-allowed;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
span {
|
|
146
|
+
width: 2rem;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
bs-month-calendar-view,
|
|
152
|
+
bs-years-calendar-view {
|
|
153
|
+
.bs-datepicker-body table td {
|
|
154
|
+
&:not(.disabled):hover {
|
|
155
|
+
background-color: var(--bg-number-calendar-hover-primary);
|
|
156
|
+
color: var(--number-calendar-hover-primary);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
&.disabled {
|
|
160
|
+
color: var(--number-calendar-disabled-primary);
|
|
161
|
+
cursor: not-allowed;
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
&.selected {
|
|
165
|
+
background-color: var(--bg-number-calendar-pressed-primary);
|
|
166
|
+
color: var(--number-calendar-pressed-primary);
|
|
115
167
|
}
|
|
116
168
|
}
|
|
117
169
|
}
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
import { Component, EventEmitter, HostListener, Input, Output } from '@angular/core';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
import * as i1 from "@angular/common";
|
|
4
|
-
export class GravityMonthPickerComponent {
|
|
5
|
-
constructor() {
|
|
6
|
-
this.closeCalendar = new EventEmitter();
|
|
7
|
-
this.monthSelected = new EventEmitter();
|
|
8
|
-
this.currentLang = 'en';
|
|
9
|
-
this.monthsEn = ["Jan", "Feb", "Mar", "Apr", "May", "June", "July", "Aug", "Sept", "Oct", "Nov", "Dec"];
|
|
10
|
-
this.monthsEs = ["En", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ag", "Set", "Oct", "Nov", "Dic"];
|
|
11
|
-
this.isShowingCalendar = false;
|
|
12
|
-
this.isShowingMonths = true;
|
|
13
|
-
this.monthPickerData = {};
|
|
14
|
-
this.monthIndex = new Date().getUTCMonth();
|
|
15
|
-
this.yearDisplayed = new Date().getUTCFullYear();
|
|
16
|
-
this.yearBase = GravityMonthPickerComponent.getYearsRangeBase(this.yearDisplayed);
|
|
17
|
-
}
|
|
18
|
-
ngOnInit() {
|
|
19
|
-
if (this.monthConfig?.customMonthDate) {
|
|
20
|
-
this.monthPickerData.month = this.monthConfig.customMonthDate.month;
|
|
21
|
-
this.monthPickerData.year = this.monthConfig.customMonthDate.year;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
showCalendar() {
|
|
25
|
-
this.isShowingCalendar = true;
|
|
26
|
-
}
|
|
27
|
-
hideCalendar() {
|
|
28
|
-
this.isShowingCalendar = false;
|
|
29
|
-
}
|
|
30
|
-
updateYear(changeRange, newYear) {
|
|
31
|
-
if (changeRange) {
|
|
32
|
-
this.yearDisplayed += changeRange;
|
|
33
|
-
}
|
|
34
|
-
else if (newYear) {
|
|
35
|
-
this.yearDisplayed = newYear;
|
|
36
|
-
}
|
|
37
|
-
this.yearBase = GravityMonthPickerComponent.getYearsRangeBase(this.yearDisplayed);
|
|
38
|
-
}
|
|
39
|
-
addYear() {
|
|
40
|
-
this.updateYear(this.isShowingMonths ? 1 : 10);
|
|
41
|
-
}
|
|
42
|
-
subtractYear() {
|
|
43
|
-
this.updateYear(this.isShowingMonths ? -1 : -10);
|
|
44
|
-
}
|
|
45
|
-
changeYear(newYear, disabled) {
|
|
46
|
-
if (!disabled) {
|
|
47
|
-
this.updateYear(null, newYear);
|
|
48
|
-
this.isShowingMonths = true;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
static getYearsRangeBase(year) {
|
|
52
|
-
return (year - year % 10) - 1;
|
|
53
|
-
}
|
|
54
|
-
changeMonth(monthIndex, disabled) {
|
|
55
|
-
if (!disabled) {
|
|
56
|
-
this.monthPickerData.month = monthIndex + 1;
|
|
57
|
-
this.monthPickerData.year = this.yearDisplayed;
|
|
58
|
-
this.isShowingCalendar = false;
|
|
59
|
-
this.closeCalendar.emit(false);
|
|
60
|
-
this.monthSelected.emit(this.monthPickerData);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
getMonths() {
|
|
64
|
-
switch (this.currentLang) {
|
|
65
|
-
case 'es':
|
|
66
|
-
return this.monthsEs;
|
|
67
|
-
default:
|
|
68
|
-
return this.monthsEn;
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
getDisabled(currentIndex) {
|
|
72
|
-
let minMonthDisabled = false;
|
|
73
|
-
if (this.monthConfig?.minMonthDate) {
|
|
74
|
-
if (this.isShowingMonths) {
|
|
75
|
-
minMonthDisabled = this.yearDisplayed < this.monthConfig.minMonthDate.year || (this.yearDisplayed == this.monthConfig.minMonthDate.year && currentIndex + 1 < this.monthConfig.minMonthDate.month);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
minMonthDisabled = this.yearBase + currentIndex < this.monthConfig.minMonthDate.year;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
let maxMonthDisabled = false;
|
|
82
|
-
if (this.monthConfig?.maxMonthDate) {
|
|
83
|
-
if (this.isShowingMonths) {
|
|
84
|
-
maxMonthDisabled = this.yearDisplayed > this.monthConfig.maxMonthDate.year || (this.yearDisplayed == this.monthConfig.maxMonthDate.year && currentIndex + 1 > this.monthConfig.maxMonthDate.month);
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
maxMonthDisabled = this.yearBase + currentIndex > this.monthConfig.maxMonthDate.year;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
return minMonthDisabled || maxMonthDisabled;
|
|
91
|
-
}
|
|
92
|
-
getArrowDisabled(arrow) {
|
|
93
|
-
if (arrow == 'left' && this.monthConfig?.minMonthDate) {
|
|
94
|
-
if (this.isShowingMonths) {
|
|
95
|
-
return this.yearDisplayed <= this.monthConfig.minMonthDate.year;
|
|
96
|
-
}
|
|
97
|
-
else {
|
|
98
|
-
return this.yearBase < this.monthConfig.minMonthDate.year;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
if (arrow == 'right' && this.monthConfig?.maxMonthDate) {
|
|
102
|
-
if (this.isShowingMonths) {
|
|
103
|
-
return this.yearDisplayed >= this.monthConfig.maxMonthDate.year;
|
|
104
|
-
}
|
|
105
|
-
else {
|
|
106
|
-
return this.yearBase + 12 > this.monthConfig.maxMonthDate.year;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
onDocumentClick() {
|
|
111
|
-
if (this.isShowingCalendar) {
|
|
112
|
-
this.isShowingCalendar = false;
|
|
113
|
-
this.closeCalendar.emit(false);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GravityMonthPickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
117
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: GravityMonthPickerComponent, selector: "gravity-month-picker", inputs: { currentLang: "currentLang", monthConfig: "monthConfig" }, outputs: { closeCalendar: "closeCalendar", monthSelected: "monthSelected" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, ngImport: i0, template: "<ng-container *ngIf=\"isShowingCalendar\">\n <div class=\"calendar-header\">\n <div class=\"month-picker-arrow month-picker-arrow-previous\">\n <button class=\"hr-label sm-regular\" [disabled]=\"getArrowDisabled('left')\" (click)=\"subtractYear()\">\n <span></span>\n </button>\n </div>\n <div class=\"hr-label md-regular month-picker-year\">\n <span (click)=\"$event.stopPropagation(); isShowingMonths = false\" *ngIf=\"isShowingMonths\">\n {{yearDisplayed}}\n </span>\n <span (click)=\"$event.stopPropagation(); isShowingMonths = true\" *ngIf=\"!isShowingMonths\">\n {{yearBase + 1}} - {{yearBase + 10}}\n </span>\n </div>\n <div class=\"month-picker-arrow month-picker-arrow-next\">\n <button class=\"hr-label sm-regular\" [disabled]=\"getArrowDisabled('right')\" (click)=\"addYear()\">\n <span></span>\n </button>\n </div>\n </div>\n <div class=\"calendar-body hr-label sm-regular\">\n <article [class.active]=\"(isShowingMonths && monthPickerData.month == i + 1 && monthPickerData.year == yearDisplayed) || (!isShowingMonths && monthPickerData.year == i + yearBase)\"\n [class.disabled]=\"getDisabled(i)\"\n (click)=\"isShowingMonths ? changeMonth(i, getDisabled(i)) : changeYear(i + yearBase, getDisabled(i))\"\n *ngFor=\"let month of getMonths(); let i = index\">\n <span *ngIf=\"isShowingMonths\">{{month}}</span>\n <span *ngIf=\"!isShowingMonths\">{{i + yearBase}}</span>\n </article>\n </div>\n</ng-container>\n", styles: ["@charset \"UTF-8\";.border-radius-none{border-radius:0}.border-radius-xs{border-radius:.0625rem}.border-radius-sm{border-radius:.3125rem}.border-radius-md{border-radius:.625rem}.border-radius-lg{border-radius:.9375rem}.border-radius-xl{border-radius:1.25rem}.border-radius-xxl{border-radius:2rem}.border-radius-rounded{border-radius:6.25rem}:host{background-color:var(--bg-calender-primary);border-radius:.625rem;box-shadow:0 0 10px #aaa;color:var(--on-bg-calender-primary);left:2.6rem;position:absolute;top:77%;width:15rem;z-index:1055}.calendar-header{align-items:center;background-color:var(--bg-calendar-nav-primary);border-top-left-radius:.625rem;border-top-right-radius:.625rem;color:var(--on-bg-calendar-nav-primary);display:flex;height:3.125rem;min-width:15rem;padding:.625rem}.month-picker-arrow{display:flex;flex:1 1 auto;height:2rem;margin:0;padding-left:0;padding-right:0;width:2rem}.month-picker-arrow button{background-color:var(--bg-calendar-nav-primary);border:none;border-radius:50%;color:var(--arrow-calendar-active-primary);cursor:pointer;height:2rem;margin:0;outline:none;padding:0;width:2rem}.month-picker-arrow button span{border:none;display:inline-block;font-size:1.75rem;height:100%;line-height:1;margin:0;position:relative;transform:none;width:100%}.month-picker-arrow button:not([disabled]):hover{background-color:var(--bg-arrow-calendar-hover-primary);color:var(--arrow-calendar-hover-primary)}.month-picker-arrow button[disabled]{color:var(--arrow-calendar-disabled-primary);cursor:not-allowed}.month-picker-arrow.month-picker-arrow-previous button span:before{content:\"\\2039\"}.month-picker-arrow.month-picker-arrow-next button span:after{content:\"\\203a\"}.month-picker-year{cursor:pointer}.month-picker-arrow-next{justify-content:flex-end}.calendar-body{display:flex;flex-wrap:wrap;justify-content:space-between;min-width:15rem;padding:.625rem;text-align:center}.calendar-body article{align-items:center;border-radius:50%;cursor:pointer;display:flex;height:2.5rem;justify-content:center;margin-inline:.25rem;width:2.5rem}.calendar-body article:not(.disabled):hover{background-color:var(--bg-number-calendar-hover-primary);color:var(--number-calendar-hover-primary)}.calendar-body article.active{background-color:var(--bg-number-calendar-pressed-primary)!important;color:var(--number-calendar-pressed-primary)!important}.calendar-body article.disabled{color:var(--number-calendar-disabled-primary);cursor:default}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
|
|
118
|
-
}
|
|
119
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: GravityMonthPickerComponent, decorators: [{
|
|
120
|
-
type: Component,
|
|
121
|
-
args: [{ selector: 'gravity-month-picker', template: "<ng-container *ngIf=\"isShowingCalendar\">\n <div class=\"calendar-header\">\n <div class=\"month-picker-arrow month-picker-arrow-previous\">\n <button class=\"hr-label sm-regular\" [disabled]=\"getArrowDisabled('left')\" (click)=\"subtractYear()\">\n <span></span>\n </button>\n </div>\n <div class=\"hr-label md-regular month-picker-year\">\n <span (click)=\"$event.stopPropagation(); isShowingMonths = false\" *ngIf=\"isShowingMonths\">\n {{yearDisplayed}}\n </span>\n <span (click)=\"$event.stopPropagation(); isShowingMonths = true\" *ngIf=\"!isShowingMonths\">\n {{yearBase + 1}} - {{yearBase + 10}}\n </span>\n </div>\n <div class=\"month-picker-arrow month-picker-arrow-next\">\n <button class=\"hr-label sm-regular\" [disabled]=\"getArrowDisabled('right')\" (click)=\"addYear()\">\n <span></span>\n </button>\n </div>\n </div>\n <div class=\"calendar-body hr-label sm-regular\">\n <article [class.active]=\"(isShowingMonths && monthPickerData.month == i + 1 && monthPickerData.year == yearDisplayed) || (!isShowingMonths && monthPickerData.year == i + yearBase)\"\n [class.disabled]=\"getDisabled(i)\"\n (click)=\"isShowingMonths ? changeMonth(i, getDisabled(i)) : changeYear(i + yearBase, getDisabled(i))\"\n *ngFor=\"let month of getMonths(); let i = index\">\n <span *ngIf=\"isShowingMonths\">{{month}}</span>\n <span *ngIf=\"!isShowingMonths\">{{i + yearBase}}</span>\n </article>\n </div>\n</ng-container>\n", styles: ["@charset \"UTF-8\";.border-radius-none{border-radius:0}.border-radius-xs{border-radius:.0625rem}.border-radius-sm{border-radius:.3125rem}.border-radius-md{border-radius:.625rem}.border-radius-lg{border-radius:.9375rem}.border-radius-xl{border-radius:1.25rem}.border-radius-xxl{border-radius:2rem}.border-radius-rounded{border-radius:6.25rem}:host{background-color:var(--bg-calender-primary);border-radius:.625rem;box-shadow:0 0 10px #aaa;color:var(--on-bg-calender-primary);left:2.6rem;position:absolute;top:77%;width:15rem;z-index:1055}.calendar-header{align-items:center;background-color:var(--bg-calendar-nav-primary);border-top-left-radius:.625rem;border-top-right-radius:.625rem;color:var(--on-bg-calendar-nav-primary);display:flex;height:3.125rem;min-width:15rem;padding:.625rem}.month-picker-arrow{display:flex;flex:1 1 auto;height:2rem;margin:0;padding-left:0;padding-right:0;width:2rem}.month-picker-arrow button{background-color:var(--bg-calendar-nav-primary);border:none;border-radius:50%;color:var(--arrow-calendar-active-primary);cursor:pointer;height:2rem;margin:0;outline:none;padding:0;width:2rem}.month-picker-arrow button span{border:none;display:inline-block;font-size:1.75rem;height:100%;line-height:1;margin:0;position:relative;transform:none;width:100%}.month-picker-arrow button:not([disabled]):hover{background-color:var(--bg-arrow-calendar-hover-primary);color:var(--arrow-calendar-hover-primary)}.month-picker-arrow button[disabled]{color:var(--arrow-calendar-disabled-primary);cursor:not-allowed}.month-picker-arrow.month-picker-arrow-previous button span:before{content:\"\\2039\"}.month-picker-arrow.month-picker-arrow-next button span:after{content:\"\\203a\"}.month-picker-year{cursor:pointer}.month-picker-arrow-next{justify-content:flex-end}.calendar-body{display:flex;flex-wrap:wrap;justify-content:space-between;min-width:15rem;padding:.625rem;text-align:center}.calendar-body article{align-items:center;border-radius:50%;cursor:pointer;display:flex;height:2.5rem;justify-content:center;margin-inline:.25rem;width:2.5rem}.calendar-body article:not(.disabled):hover{background-color:var(--bg-number-calendar-hover-primary);color:var(--number-calendar-hover-primary)}.calendar-body article.active{background-color:var(--bg-number-calendar-pressed-primary)!important;color:var(--number-calendar-pressed-primary)!important}.calendar-body article.disabled{color:var(--number-calendar-disabled-primary);cursor:default}\n"] }]
|
|
122
|
-
}], ctorParameters: function () { return []; }, propDecorators: { closeCalendar: [{
|
|
123
|
-
type: Output,
|
|
124
|
-
args: ['closeCalendar']
|
|
125
|
-
}], monthSelected: [{
|
|
126
|
-
type: Output,
|
|
127
|
-
args: ['monthSelected']
|
|
128
|
-
}], currentLang: [{
|
|
129
|
-
type: Input
|
|
130
|
-
}], monthConfig: [{
|
|
131
|
-
type: Input
|
|
132
|
-
}], onDocumentClick: [{
|
|
133
|
-
type: HostListener,
|
|
134
|
-
args: ['document:click', ['$event']]
|
|
135
|
-
}] } });
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3Jhdml0eS1tb250aC1waWNrZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvZ3Jhdml0eS1kZXNpZ24tc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9ncmF2aXR5LWNhbGVuZGFyL2dyYXZpdHktbW9udGgtcGlja2VyL2dyYXZpdHktbW9udGgtcGlja2VyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyYXZpdHktZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvZ3Jhdml0eS1jYWxlbmRhci9ncmF2aXR5LW1vbnRoLXBpY2tlci9ncmF2aXR5LW1vbnRoLXBpY2tlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQzs7O0FBTzNGLE1BQU0sT0FBTywyQkFBMkI7SUFxQnRDO1FBcEJnQyxrQkFBYSxHQUEwQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzFELGtCQUFhLEdBQXlDLElBQUksWUFBWSxFQUFFLENBQUM7UUFFekYsZ0JBQVcsR0FBVyxJQUFJLENBQUM7UUFPM0IsYUFBUSxHQUFhLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3RyxhQUFRLEdBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRWpILHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNuQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyxvQkFBZSxHQUEyQixFQUE0QixDQUFDO1FBTTVFLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsYUFBYSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRywyQkFBMkIsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDcEYsQ0FBQztJQUVELFFBQVE7UUFDTixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsZUFBZSxFQUFFO1lBQ3JDLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQztZQUNwRSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7U0FDbkU7SUFDSCxDQUFDO0lBRU0sWUFBWTtRQUNqQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDO0lBQ2hDLENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxLQUFLLENBQUM7SUFDakMsQ0FBQztJQUVPLFVBQVUsQ0FBQyxXQUFvQixFQUFFLE9BQWdCO1FBQ3ZELElBQUksV0FBVyxFQUFFO1lBQ2YsSUFBSSxDQUFDLGFBQWEsSUFBSSxXQUFXLENBQUM7U0FDbkM7YUFBTSxJQUFJLE9BQU8sRUFBRTtZQUNsQixJQUFJLENBQUMsYUFBYSxHQUFHLE9BQU8sQ0FBQztTQUM5QjtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsMkJBQTJCLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ3BGLENBQUM7SUFFTSxPQUFPO1FBQ1osSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTSxZQUFZO1FBQ2pCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDbkQsQ0FBQztJQUVNLFVBQVUsQ0FBQyxPQUFlLEVBQUUsUUFBaUI7UUFDbEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO1NBQzdCO0lBQ0gsQ0FBQztJQUVPLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxJQUFZO1FBQzNDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sV0FBVyxDQUFDLFVBQWtCLEVBQUUsUUFBaUI7UUFDdEQsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNiLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUM7WUFDNUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUMvQyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUMvQztJQUNILENBQUM7SUFFTSxTQUFTO1FBQ2QsUUFBUSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3hCLEtBQUssSUFBSTtnQkFDUCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFdkI7Z0JBQ0UsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQ3hCO0lBQ0gsQ0FBQztJQUVNLFdBQVcsQ0FBQyxZQUFvQjtRQUNyQyxJQUFJLGdCQUFnQixHQUFZLEtBQUssQ0FBQztRQUN0QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFO1lBQ2xDLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxZQUFZLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO2FBQ3BNO2lCQUFNO2dCQUNMLGdCQUFnQixHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzthQUN0RjtTQUNGO1FBRUQsSUFBSSxnQkFBZ0IsR0FBWSxLQUFLLENBQUM7UUFDdEMsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRTtZQUNsQyxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3hCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksWUFBWSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNwTTtpQkFBTTtnQkFDTCxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDdEY7U0FDRjtRQUVELE9BQU8sZ0JBQWdCLElBQUksZ0JBQWdCLENBQUM7SUFDOUMsQ0FBQztJQUVNLGdCQUFnQixDQUFDLEtBQXVCO1FBQzdDLElBQUksS0FBSyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLFlBQVksRUFBRTtZQUNyRCxJQUFJLElBQUksQ0FBQyxlQUFlLEVBQUU7Z0JBQ3hCLE9BQU8sSUFBSSxDQUFDLGFBQWEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUM7YUFDakU7aUJBQU07Z0JBQ0wsT0FBTyxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzthQUMzRDtTQUNGO1FBRUQsSUFBSSxLQUFLLElBQUksT0FBTyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsWUFBWSxFQUFFO1lBQ3RELElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzthQUNqRTtpQkFBTTtnQkFDTCxPQUFPLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQzthQUNoRTtTQUNGO0lBQ0gsQ0FBQztJQUdELGVBQWU7UUFDYixJQUFJLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtZQUMxQixJQUFJLENBQUMsaUJBQWlCLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1NBQ2hDO0lBQ0gsQ0FBQzsrR0F6SVUsMkJBQTJCO21HQUEzQiwyQkFBMkIsbVJDUHhDLDZoREErQkE7OzRGRHhCYSwyQkFBMkI7a0JBTHZDLFNBQVM7K0JBQ0Usc0JBQXNCOzBFQUtBLGFBQWE7c0JBQTVDLE1BQU07dUJBQUMsZUFBZTtnQkFDUyxhQUFhO3NCQUE1QyxNQUFNO3VCQUFDLGVBQWU7Z0JBRVAsV0FBVztzQkFBMUIsS0FBSztnQkFDVSxXQUFXO3NCQUExQixLQUFLO2dCQStITixlQUFlO3NCQURkLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2dyYXZpdHktbW9udGgtcGlja2VyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dyYXZpdHktbW9udGgtcGlja2VyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZ3Jhdml0eS1tb250aC1waWNrZXIuY29tcG9uZW50LnNjc3MnXVxufSlcbmV4cG9ydCBjbGFzcyBHcmF2aXR5TW9udGhQaWNrZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBAT3V0cHV0KCdjbG9zZUNhbGVuZGFyJykgcHVibGljIGNsb3NlQ2FsZW5kYXI6IEV2ZW50RW1pdHRlcjxib29sZWFuPiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQE91dHB1dCgnbW9udGhTZWxlY3RlZCcpIHB1YmxpYyBtb250aFNlbGVjdGVkOiBFdmVudEVtaXR0ZXI8R3Jhdml0eU1vbnRoUGlja2VyRGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgQElucHV0KCkgcHVibGljIGN1cnJlbnRMYW5nOiBzdHJpbmcgPSAnZW4nO1xuICBASW5wdXQoKSBwdWJsaWMgbW9udGhDb25maWc6IHtcbiAgICBjdXN0b21Nb250aERhdGU/OiBHcmF2aXR5TW9udGhQaWNrZXJEYXRlO1xuICAgIG1heE1vbnRoRGF0ZT86IEdyYXZpdHlNb250aFBpY2tlckRhdGU7XG4gICAgbWluTW9udGhEYXRlPzogR3Jhdml0eU1vbnRoUGlja2VyRGF0ZTtcbiAgfTtcblxuICBwdWJsaWMgcmVhZG9ubHkgbW9udGhzRW46IHN0cmluZ1tdID0gW1wiSmFuXCIsIFwiRmViXCIsIFwiTWFyXCIsIFwiQXByXCIsIFwiTWF5XCIsIFwiSnVuZVwiLCBcIkp1bHlcIiwgXCJBdWdcIiwgXCJTZXB0XCIsIFwiT2N0XCIsIFwiTm92XCIsIFwiRGVjXCJdO1xuICBwdWJsaWMgcmVhZG9ubHkgbW9udGhzRXM6IHN0cmluZ1tdID0gW1wiRW5cIiwgXCJGZWJcIiwgXCJNYXJcIiwgXCJBYnJcIiwgXCJNYXlcIiwgXCJKdW5cIiwgXCJKdWxcIiwgXCJBZ1wiLCBcIlNldFwiLCBcIk9jdFwiLCBcIk5vdlwiLCBcIkRpY1wiXTtcblxuICBwdWJsaWMgaXNTaG93aW5nQ2FsZW5kYXI6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHVibGljIGlzU2hvd2luZ01vbnRoczogYm9vbGVhbiA9IHRydWU7XG4gIHB1YmxpYyBtb250aFBpY2tlckRhdGE6IEdyYXZpdHlNb250aFBpY2tlckRhdGUgPSB7fSBhcyBHcmF2aXR5TW9udGhQaWNrZXJEYXRlO1xuICBwdWJsaWMgbW9udGhJbmRleDogbnVtYmVyO1xuICBwdWJsaWMgeWVhckJhc2U6IG51bWJlcjtcbiAgcHVibGljIHllYXJEaXNwbGF5ZWQ6IG51bWJlcjtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLm1vbnRoSW5kZXggPSBuZXcgRGF0ZSgpLmdldFVUQ01vbnRoKCk7XG4gICAgdGhpcy55ZWFyRGlzcGxheWVkID0gbmV3IERhdGUoKS5nZXRVVENGdWxsWWVhcigpO1xuICAgIHRoaXMueWVhckJhc2UgPSBHcmF2aXR5TW9udGhQaWNrZXJDb21wb25lbnQuZ2V0WWVhcnNSYW5nZUJhc2UodGhpcy55ZWFyRGlzcGxheWVkKTtcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIGlmICh0aGlzLm1vbnRoQ29uZmlnPy5jdXN0b21Nb250aERhdGUpIHtcbiAgICAgIHRoaXMubW9udGhQaWNrZXJEYXRhLm1vbnRoID0gdGhpcy5tb250aENvbmZpZy5jdXN0b21Nb250aERhdGUubW9udGg7XG4gICAgICB0aGlzLm1vbnRoUGlja2VyRGF0YS55ZWFyID0gdGhpcy5tb250aENvbmZpZy5jdXN0b21Nb250aERhdGUueWVhcjtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc2hvd0NhbGVuZGFyKCk6IHZvaWQge1xuICAgIHRoaXMuaXNTaG93aW5nQ2FsZW5kYXIgPSB0cnVlO1xuICB9XG5cbiAgcHVibGljIGhpZGVDYWxlbmRhcigpOiB2b2lkIHtcbiAgICB0aGlzLmlzU2hvd2luZ0NhbGVuZGFyID0gZmFsc2U7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVllYXIoY2hhbmdlUmFuZ2U/OiBudW1iZXIsIG5ld1llYXI/OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlUmFuZ2UpIHtcbiAgICAgIHRoaXMueWVhckRpc3BsYXllZCArPSBjaGFuZ2VSYW5nZTtcbiAgICB9IGVsc2UgaWYgKG5ld1llYXIpIHtcbiAgICAgIHRoaXMueWVhckRpc3BsYXllZCA9IG5ld1llYXI7XG4gICAgfVxuXG4gICAgdGhpcy55ZWFyQmFzZSA9IEdyYXZpdHlNb250aFBpY2tlckNvbXBvbmVudC5nZXRZZWFyc1JhbmdlQmFzZSh0aGlzLnllYXJEaXNwbGF5ZWQpO1xuICB9XG5cbiAgcHVibGljIGFkZFllYXIoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVZZWFyKHRoaXMuaXNTaG93aW5nTW9udGhzID8gMSA6IDEwKTtcbiAgfVxuXG4gIHB1YmxpYyBzdWJ0cmFjdFllYXIoKTogdm9pZCB7XG4gICAgdGhpcy51cGRhdGVZZWFyKHRoaXMuaXNTaG93aW5nTW9udGhzID8gLTEgOiAtMTApO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZVllYXIobmV3WWVhcjogbnVtYmVyLCBkaXNhYmxlZDogYm9vbGVhbikge1xuICAgIGlmICghZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMudXBkYXRlWWVhcihudWxsLCBuZXdZZWFyKTtcbiAgICAgIHRoaXMuaXNTaG93aW5nTW9udGhzID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHN0YXRpYyBnZXRZZWFyc1JhbmdlQmFzZSh5ZWFyOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAoeWVhciAtIHllYXIgJSAxMCkgLSAxO1xuICB9XG5cbiAgcHVibGljIGNoYW5nZU1vbnRoKG1vbnRoSW5kZXg6IG51bWJlciwgZGlzYWJsZWQ6IGJvb2xlYW4pIHtcbiAgICBpZiAoIWRpc2FibGVkKSB7XG4gICAgICB0aGlzLm1vbnRoUGlja2VyRGF0YS5tb250aCA9IG1vbnRoSW5kZXggKyAxO1xuICAgICAgdGhpcy5tb250aFBpY2tlckRhdGEueWVhciA9IHRoaXMueWVhckRpc3BsYXllZDtcbiAgICAgIHRoaXMuaXNTaG93aW5nQ2FsZW5kYXIgPSBmYWxzZTtcbiAgICAgIHRoaXMuY2xvc2VDYWxlbmRhci5lbWl0KGZhbHNlKTtcbiAgICAgIHRoaXMubW9udGhTZWxlY3RlZC5lbWl0KHRoaXMubW9udGhQaWNrZXJEYXRhKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0TW9udGhzKCk6IHN0cmluZ1tdIHtcbiAgICBzd2l0Y2ggKHRoaXMuY3VycmVudExhbmcpIHtcbiAgICAgIGNhc2UgJ2VzJzpcbiAgICAgICAgcmV0dXJuIHRoaXMubW9udGhzRXM7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiB0aGlzLm1vbnRoc0VuO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBnZXREaXNhYmxlZChjdXJyZW50SW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuICAgIGxldCBtaW5Nb250aERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubW9udGhDb25maWc/Lm1pbk1vbnRoRGF0ZSkge1xuICAgICAgaWYgKHRoaXMuaXNTaG93aW5nTW9udGhzKSB7XG4gICAgICAgIG1pbk1vbnRoRGlzYWJsZWQgPSB0aGlzLnllYXJEaXNwbGF5ZWQgPCB0aGlzLm1vbnRoQ29uZmlnLm1pbk1vbnRoRGF0ZS55ZWFyIHx8ICh0aGlzLnllYXJEaXNwbGF5ZWQgPT0gdGhpcy5tb250aENvbmZpZy5taW5Nb250aERhdGUueWVhciAmJiBjdXJyZW50SW5kZXggKyAxIDwgdGhpcy5tb250aENvbmZpZy5taW5Nb250aERhdGUubW9udGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWluTW9udGhEaXNhYmxlZCA9IHRoaXMueWVhckJhc2UgKyBjdXJyZW50SW5kZXggPCB0aGlzLm1vbnRoQ29uZmlnLm1pbk1vbnRoRGF0ZS55ZWFyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxldCBtYXhNb250aERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubW9udGhDb25maWc/Lm1heE1vbnRoRGF0ZSkge1xuICAgICAgaWYgKHRoaXMuaXNTaG93aW5nTW9udGhzKSB7XG4gICAgICAgIG1heE1vbnRoRGlzYWJsZWQgPSB0aGlzLnllYXJEaXNwbGF5ZWQgPiB0aGlzLm1vbnRoQ29uZmlnLm1heE1vbnRoRGF0ZS55ZWFyIHx8ICh0aGlzLnllYXJEaXNwbGF5ZWQgPT0gdGhpcy5tb250aENvbmZpZy5tYXhNb250aERhdGUueWVhciAmJiBjdXJyZW50SW5kZXggKyAxID4gdGhpcy5tb250aENvbmZpZy5tYXhNb250aERhdGUubW9udGgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbWF4TW9udGhEaXNhYmxlZCA9IHRoaXMueWVhckJhc2UgKyBjdXJyZW50SW5kZXggPiB0aGlzLm1vbnRoQ29uZmlnLm1heE1vbnRoRGF0ZS55ZWFyO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtaW5Nb250aERpc2FibGVkIHx8IG1heE1vbnRoRGlzYWJsZWQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXJyb3dEaXNhYmxlZChhcnJvdzogJ2xlZnQnIHwgJ3JpZ2h0Jyk6IGJvb2xlYW4ge1xuICAgIGlmIChhcnJvdyA9PSAnbGVmdCcgJiYgdGhpcy5tb250aENvbmZpZz8ubWluTW9udGhEYXRlKSB7XG4gICAgICBpZiAodGhpcy5pc1Nob3dpbmdNb250aHMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhckRpc3BsYXllZCA8PSB0aGlzLm1vbnRoQ29uZmlnLm1pbk1vbnRoRGF0ZS55ZWFyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHRoaXMueWVhckJhc2UgPCB0aGlzLm1vbnRoQ29uZmlnLm1pbk1vbnRoRGF0ZS55ZWFyO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChhcnJvdyA9PSAncmlnaHQnICYmIHRoaXMubW9udGhDb25maWc/Lm1heE1vbnRoRGF0ZSkge1xuICAgICAgaWYgKHRoaXMuaXNTaG93aW5nTW9udGhzKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXJEaXNwbGF5ZWQgPj0gdGhpcy5tb250aENvbmZpZy5tYXhNb250aERhdGUueWVhcjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB0aGlzLnllYXJCYXNlICsgMTIgPiB0aGlzLm1vbnRoQ29uZmlnLm1heE1vbnRoRGF0ZS55ZWFyO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIEBIb3N0TGlzdGVuZXIoJ2RvY3VtZW50OmNsaWNrJywgWyckZXZlbnQnXSlcbiAgb25Eb2N1bWVudENsaWNrKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzU2hvd2luZ0NhbGVuZGFyKSB7XG4gICAgICB0aGlzLmlzU2hvd2luZ0NhbGVuZGFyID0gZmFsc2U7XG4gICAgICB0aGlzLmNsb3NlQ2FsZW5kYXIuZW1pdChmYWxzZSk7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgR3Jhdml0eU1vbnRoUGlja2VyRGF0ZSB7XG4gIG1vbnRoOiBudW1iZXI7XG4gIHllYXI6IG51bWJlcjtcbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJpc1Nob3dpbmdDYWxlbmRhclwiPlxuICA8ZGl2IGNsYXNzPVwiY2FsZW5kYXItaGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm1vbnRoLXBpY2tlci1hcnJvdyBtb250aC1waWNrZXItYXJyb3ctcHJldmlvdXNcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJoci1sYWJlbCBzbS1yZWd1bGFyXCIgW2Rpc2FibGVkXT1cImdldEFycm93RGlzYWJsZWQoJ2xlZnQnKVwiIChjbGljayk9XCJzdWJ0cmFjdFllYXIoKVwiPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiaHItbGFiZWwgbWQtcmVndWxhciBtb250aC1waWNrZXIteWVhclwiPlxuICAgICAgPHNwYW4gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgaXNTaG93aW5nTW9udGhzID0gZmFsc2VcIiAqbmdJZj1cImlzU2hvd2luZ01vbnRoc1wiPlxuICAgICAgICB7e3llYXJEaXNwbGF5ZWR9fVxuICAgICAgPC9zcGFuPlxuICAgICAgPHNwYW4gKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKTsgaXNTaG93aW5nTW9udGhzID0gdHJ1ZVwiICpuZ0lmPVwiIWlzU2hvd2luZ01vbnRoc1wiPlxuICAgICAgICB7e3llYXJCYXNlICsgMX19IC0ge3t5ZWFyQmFzZSArIDEwfX1cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwibW9udGgtcGlja2VyLWFycm93IG1vbnRoLXBpY2tlci1hcnJvdy1uZXh0XCI+XG4gICAgICA8YnV0dG9uIGNsYXNzPVwiaHItbGFiZWwgc20tcmVndWxhclwiIFtkaXNhYmxlZF09XCJnZXRBcnJvd0Rpc2FibGVkKCdyaWdodCcpXCIgKGNsaWNrKT1cImFkZFllYXIoKVwiPlxuICAgICAgICA8c3Bhbj48L3NwYW4+XG4gICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG4gIDxkaXYgY2xhc3M9XCJjYWxlbmRhci1ib2R5IGhyLWxhYmVsIHNtLXJlZ3VsYXJcIj5cbiAgICA8YXJ0aWNsZSBbY2xhc3MuYWN0aXZlXT1cIihpc1Nob3dpbmdNb250aHMgJiYgbW9udGhQaWNrZXJEYXRhLm1vbnRoID09IGkgKyAxICYmIG1vbnRoUGlja2VyRGF0YS55ZWFyID09IHllYXJEaXNwbGF5ZWQpIHx8ICghaXNTaG93aW5nTW9udGhzICYmIG1vbnRoUGlja2VyRGF0YS55ZWFyID09IGkgKyB5ZWFyQmFzZSlcIlxuICAgICAgICAgICAgIFtjbGFzcy5kaXNhYmxlZF09XCJnZXREaXNhYmxlZChpKVwiXG4gICAgICAgICAgICAgKGNsaWNrKT1cImlzU2hvd2luZ01vbnRocyA/IGNoYW5nZU1vbnRoKGksIGdldERpc2FibGVkKGkpKSA6IGNoYW5nZVllYXIoaSArIHllYXJCYXNlLCBnZXREaXNhYmxlZChpKSlcIlxuICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBtb250aCBvZiBnZXRNb250aHMoKTsgbGV0IGkgPSBpbmRleFwiPlxuICAgICAgPHNwYW4gKm5nSWY9XCJpc1Nob3dpbmdNb250aHNcIj57e21vbnRofX08L3NwYW4+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFpc1Nob3dpbmdNb250aHNcIj57e2kgKyB5ZWFyQmFzZX19PC9zcGFuPlxuICAgIDwvYXJ0aWNsZT5cbiAgPC9kaXY+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|