@progressio_resources/gravity-design-system 3.6.7 → 3.6.9
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-next → gravity-date-picker}/components/day-calendar/day-calendar.component.mjs +3 -3
- package/esm2022/lib/components/gravity-date-picker/components/day-calendar/range-days-calendar.utils.mjs +224 -0
- package/esm2022/lib/components/gravity-date-picker/components/month-calendar/month-calendar.component.mjs +110 -0
- package/esm2022/lib/components/gravity-date-picker/components/year-calendar/year-calendar.component.mjs +111 -0
- package/esm2022/lib/components/gravity-date-picker/gravity-date-picker.component.mjs +85 -0
- package/esm2022/lib/components/gravity-date-picker/shared/date-picker.constants.mjs +61 -0
- package/esm2022/lib/components/gravity-date-picker/shared/date-picker.modal.mjs +2 -0
- package/esm2022/lib/components/gravity-date-picker/shared/date-picker.utils.mjs +111 -0
- package/esm2022/lib/gravity-design-system.module.mjs +9 -9
- package/esm2022/public-api.mjs +2 -2
- package/fesm2022/progressio_resources-gravity-design-system.mjs +27 -29
- package/fesm2022/progressio_resources-gravity-design-system.mjs.map +1 -1
- package/lib/components/{gravity-calendar-next → gravity-date-picker}/components/day-calendar/day-calendar.component.d.ts +4 -4
- package/lib/components/{gravity-calendar-next → gravity-date-picker}/components/day-calendar/range-days-calendar.utils.d.ts +1 -1
- package/lib/components/{gravity-calendar-next → gravity-date-picker}/components/month-calendar/month-calendar.component.d.ts +6 -6
- package/lib/components/{gravity-calendar-next → gravity-date-picker}/components/year-calendar/year-calendar.component.d.ts +7 -7
- package/lib/components/{gravity-calendar-next/gravity-calendar-next.component.d.ts → gravity-date-picker/gravity-date-picker.component.d.ts} +10 -10
- package/lib/components/{gravity-calendar-next/shared/calendar.modal.d.ts → gravity-date-picker/shared/date-picker.modal.d.ts} +6 -6
- package/lib/components/{gravity-calendar-next/shared/calendar.utils.d.ts → gravity-date-picker/shared/date-picker.utils.d.ts} +1 -1
- package/lib/gravity-design-system.module.d.ts +5 -5
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2022/lib/components/gravity-calendar-next/components/day-calendar/range-days-calendar.utils.mjs +0 -224
- package/esm2022/lib/components/gravity-calendar-next/components/month-calendar/month-calendar.component.mjs +0 -111
- package/esm2022/lib/components/gravity-calendar-next/components/year-calendar/year-calendar.component.mjs +0 -112
- package/esm2022/lib/components/gravity-calendar-next/gravity-calendar-next.component.mjs +0 -85
- package/esm2022/lib/components/gravity-calendar-next/shared/calendar.constants.mjs +0 -61
- package/esm2022/lib/components/gravity-calendar-next/shared/calendar.modal.mjs +0 -2
- package/esm2022/lib/components/gravity-calendar-next/shared/calendar.utils.mjs +0 -111
- /package/lib/components/{gravity-calendar-next/shared/calendar.constants.d.ts → gravity-date-picker/shared/date-picker.constants.d.ts} +0 -0
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { DatePickerAppearance, DatePickerConfig, CalendarDate } from "../../shared/date-picker.modal";
|
|
2
2
|
import { GravityTextFieldComponent } from "../../../gravity-text-field/gravity-text-field.component";
|
|
3
3
|
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
4
|
-
import { changeDate, calendarDateToDate, isPeriodAvailable } from '../../shared/
|
|
4
|
+
import { changeDate, calendarDateToDate, isPeriodAvailable } from '../../shared/date-picker.utils';
|
|
5
5
|
import { isPreview, onClearHover, onDateKeyup, onHoverDay, searchDate } from "./range-days-calendar.utils";
|
|
6
6
|
import * as i0 from "@angular/core";
|
|
7
7
|
export declare class DayCalendarComponent implements OnChanges {
|
|
8
8
|
initYear: Date;
|
|
9
9
|
initMonth: Date;
|
|
10
|
-
config:
|
|
10
|
+
config: DatePickerConfig;
|
|
11
11
|
range: boolean;
|
|
12
12
|
restart: boolean;
|
|
13
13
|
appyOnClose: boolean;
|
|
14
14
|
currentDate: Date;
|
|
15
|
-
appearance:
|
|
15
|
+
appearance: DatePickerAppearance;
|
|
16
16
|
navType: 'prev' | 'next' | 'both' | 'none';
|
|
17
17
|
clearHover: EventEmitter<void>;
|
|
18
18
|
clearSelection: EventEmitter<void>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CalendarDate } from "../../shared/
|
|
1
|
+
import { CalendarDate } from "../../shared/date-picker.modal";
|
|
2
2
|
import { DayCalendarComponent } from "./day-calendar.component";
|
|
3
3
|
export declare function isPreview(component: DayCalendarComponent, day: CalendarDate): boolean;
|
|
4
4
|
export declare function processPreselectedRangeDate(component: DayCalendarComponent): void;
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { changeDate, isPeriodAvailable } from "../../shared/
|
|
1
|
+
import { DatePickerAppearance, DatePickerConfig, CalendarPeriod } from "../../shared/date-picker.modal";
|
|
2
|
+
import { changeDate, isPeriodAvailable } from "../../shared/date-picker.utils";
|
|
3
3
|
import { EventEmitter, OnChanges, SimpleChanges } from '@angular/core';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class MonthCalendarComponent implements OnChanges {
|
|
6
|
-
config:
|
|
6
|
+
config: DatePickerConfig;
|
|
7
7
|
initDate: Date | Date[];
|
|
8
8
|
restart: boolean;
|
|
9
|
-
appearance:
|
|
9
|
+
appearance: DatePickerAppearance;
|
|
10
10
|
integratedMode: boolean;
|
|
11
11
|
clearSelection: EventEmitter<void>;
|
|
12
|
-
|
|
12
|
+
response: EventEmitter<Date[] | Date>;
|
|
13
13
|
currentDate: Date;
|
|
14
14
|
selectedMonth: CalendarPeriod;
|
|
15
15
|
get i18n(): {
|
|
@@ -67,5 +67,5 @@ export declare class MonthCalendarComponent implements OnChanges {
|
|
|
67
67
|
protected readonly changeDate: typeof changeDate;
|
|
68
68
|
protected readonly isPeriodAvailable: typeof isPeriodAvailable;
|
|
69
69
|
static ɵfac: i0.ɵɵFactoryDeclaration<MonthCalendarComponent, never>;
|
|
70
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<MonthCalendarComponent, "month-calendar", never, { "config": { "alias": "config"; "required": false; }; "initDate": { "alias": "initDate"; "required": false; }; "restart": { "alias": "restart"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "integratedMode": { "alias": "integratedMode"; "required": false; }; }, { "clearSelection": "clearSelection"; "
|
|
70
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<MonthCalendarComponent, "month-calendar", never, { "config": { "alias": "config"; "required": false; }; "initDate": { "alias": "initDate"; "required": false; }; "restart": { "alias": "restart"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "integratedMode": { "alias": "integratedMode"; "required": false; }; }, { "clearSelection": "clearSelection"; "response": "response"; }, never, never, false, never>;
|
|
71
71
|
}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { changeDate, isPeriodAvailable } from "../../shared/
|
|
2
|
-
import {
|
|
1
|
+
import { changeDate, isPeriodAvailable } from "../../shared/date-picker.utils";
|
|
2
|
+
import { DatePickerAppearance, DatePickerConfig } from "../../shared/date-picker.modal";
|
|
3
3
|
import { EventEmitter, OnChanges, OnInit, SimpleChanges } from '@angular/core';
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export declare class YearCalendarComponent implements OnChanges, OnInit {
|
|
6
|
-
config:
|
|
6
|
+
config: DatePickerConfig;
|
|
7
7
|
initDate: Date | Date[];
|
|
8
8
|
restart: boolean;
|
|
9
|
-
appearance:
|
|
9
|
+
appearance: DatePickerAppearance;
|
|
10
10
|
integratedMode: boolean;
|
|
11
11
|
clearSelection: EventEmitter<void>;
|
|
12
|
-
|
|
13
|
-
startYear: number;
|
|
12
|
+
response: EventEmitter<Date[] | Date>;
|
|
14
13
|
selectedYear: number;
|
|
15
14
|
currentDate: Date;
|
|
15
|
+
startYear: number;
|
|
16
16
|
get i18n(): {
|
|
17
17
|
readonly apply: "Apply";
|
|
18
18
|
readonly date_placeholder: "mm/dd/yyyy";
|
|
@@ -68,5 +68,5 @@ export declare class YearCalendarComponent implements OnChanges, OnInit {
|
|
|
68
68
|
protected readonly changeDate: typeof changeDate;
|
|
69
69
|
protected readonly isPeriodAvailable: typeof isPeriodAvailable;
|
|
70
70
|
static ɵfac: i0.ɵɵFactoryDeclaration<YearCalendarComponent, never>;
|
|
71
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<YearCalendarComponent, "year-calendar", never, { "config": { "alias": "config"; "required": false; }; "initDate": { "alias": "initDate"; "required": false; }; "restart": { "alias": "restart"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "integratedMode": { "alias": "integratedMode"; "required": false; }; }, { "clearSelection": "clearSelection"; "
|
|
71
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<YearCalendarComponent, "year-calendar", never, { "config": { "alias": "config"; "required": false; }; "initDate": { "alias": "initDate"; "required": false; }; "restart": { "alias": "restart"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; "integratedMode": { "alias": "integratedMode"; "required": false; }; }, { "clearSelection": "clearSelection"; "response": "response"; }, never, never, false, never>;
|
|
72
72
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { EventEmitter } from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { DatePickerAppearance, DatePickerConfig, DatePickerResponse } from "./shared/date-picker.modal";
|
|
3
3
|
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class
|
|
4
|
+
export declare class GravityDatePickerComponent {
|
|
5
5
|
cypressTag: string;
|
|
6
|
-
|
|
6
|
+
datePickerType: 'day' | 'range' | 'month' | 'year';
|
|
7
7
|
private _config;
|
|
8
8
|
private _appearance;
|
|
9
9
|
get i18n(): {
|
|
@@ -47,17 +47,17 @@ export declare class GravityCalendarNextComponent {
|
|
|
47
47
|
readonly start_date: "Fecha inicial";
|
|
48
48
|
readonly no_date_applied: "Fechas seleccionadas pendientes de aplicar.";
|
|
49
49
|
};
|
|
50
|
-
set config(value:
|
|
51
|
-
get config():
|
|
52
|
-
set appearance(value:
|
|
53
|
-
get appearance():
|
|
50
|
+
set config(value: DatePickerConfig);
|
|
51
|
+
get config(): DatePickerConfig;
|
|
52
|
+
set appearance(value: DatePickerAppearance);
|
|
53
|
+
get appearance(): DatePickerAppearance;
|
|
54
54
|
clear: EventEmitter<void>;
|
|
55
55
|
close: EventEmitter<void>;
|
|
56
|
-
response: EventEmitter<
|
|
56
|
+
response: EventEmitter<DatePickerResponse>;
|
|
57
57
|
handleClear(): void;
|
|
58
58
|
handleResponse(value: Date[] | Date): void;
|
|
59
59
|
handleCloseButton(): void;
|
|
60
60
|
applyOnClose(): boolean;
|
|
61
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<
|
|
62
|
-
static ɵcmp: i0.ɵɵComponentDeclaration<
|
|
61
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<GravityDatePickerComponent, never>;
|
|
62
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<GravityDatePickerComponent, "gravity-date-picker", never, { "cypressTag": { "alias": "cypressTag"; "required": false; }; "datePickerType": { "alias": "datePickerType"; "required": false; }; "config": { "alias": "config"; "required": false; }; "appearance": { "alias": "appearance"; "required": false; }; }, { "clear": "clear"; "close": "close"; "response": "response"; }, never, never, false, never>;
|
|
63
63
|
}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
|
-
export interface
|
|
1
|
+
export interface DatePickerConfig {
|
|
2
2
|
maxDate?: Date | null;
|
|
3
3
|
minDate?: Date | null;
|
|
4
4
|
initDate?: Date | Date[] | null;
|
|
5
5
|
}
|
|
6
|
-
export interface
|
|
6
|
+
export interface DatePickerAppearance {
|
|
7
7
|
actions?: boolean;
|
|
8
8
|
isMobile?: boolean;
|
|
9
9
|
language?: 'es' | 'en';
|
|
10
10
|
state?: 'active' | 'hidden' | 'disabled' | 'destroy';
|
|
11
11
|
}
|
|
12
|
+
export interface DatePickerResponse {
|
|
13
|
+
dates: Date | Date[];
|
|
14
|
+
formatedDate?: string;
|
|
15
|
+
}
|
|
12
16
|
export interface CalendarDate {
|
|
13
17
|
day: number;
|
|
14
18
|
weekDay: number;
|
|
@@ -20,7 +24,3 @@ export interface CalendarPeriod {
|
|
|
20
24
|
year: number;
|
|
21
25
|
month: number;
|
|
22
26
|
}
|
|
23
|
-
export interface CalendarResponse {
|
|
24
|
-
dates: Date | Date[];
|
|
25
|
-
formatedDate?: string;
|
|
26
|
-
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CalendarDate } from "./
|
|
1
|
+
import { CalendarDate } from "./date-picker.modal";
|
|
2
2
|
export declare function getStartDate(date: Date): Date;
|
|
3
3
|
export declare function changeDate(offset: number, currentDate: Date, isMonth: boolean): Date;
|
|
4
4
|
export declare function isPeriodAvailable(currentDate: Date, limitDate: Date, period: 'month' | 'year', direction: 'prev' | 'next', startYearBlock?: number): boolean;
|
|
@@ -61,10 +61,10 @@ import * as i59 from "./components/gravity-dropdown-label/gravity-dropdown-label
|
|
|
61
61
|
import * as i60 from "./components/gravity-navigation-card/gravity-navigation-card.component";
|
|
62
62
|
import * as i61 from "./components/gravity-generic-avatar-secondary/gravity-generic-avatar-secondary.component";
|
|
63
63
|
import * as i62 from "./components/gravity-backdrop/gravity-backdrop.component";
|
|
64
|
-
import * as i63 from "./components/gravity-
|
|
65
|
-
import * as i64 from "./components/gravity-
|
|
66
|
-
import * as i65 from "./components/gravity-
|
|
67
|
-
import * as i66 from "./components/gravity-
|
|
64
|
+
import * as i63 from "./components/gravity-date-picker/gravity-date-picker.component";
|
|
65
|
+
import * as i64 from "./components/gravity-date-picker/components/day-calendar/day-calendar.component";
|
|
66
|
+
import * as i65 from "./components/gravity-date-picker/components/month-calendar/month-calendar.component";
|
|
67
|
+
import * as i66 from "./components/gravity-date-picker/components/year-calendar/year-calendar.component";
|
|
68
68
|
import * as i67 from "./components/gravity-segmented-button/gravity-segmented-button.component";
|
|
69
69
|
import * as i68 from "./components/gravity-currency-display-v2/gravity-currency-display-v2.component";
|
|
70
70
|
import * as i69 from "./layout/gravity-header/gravity-header.component";
|
|
@@ -80,6 +80,6 @@ import * as i78 from "@ng-bootstrap/ng-bootstrap";
|
|
|
80
80
|
import * as i79 from "@angular/router";
|
|
81
81
|
export declare class GravityDesignSystemModule {
|
|
82
82
|
static ɵfac: i0.ɵɵFactoryDeclaration<GravityDesignSystemModule, never>;
|
|
83
|
-
static ɵmod: i0.ɵɵNgModuleDeclaration<GravityDesignSystemModule, [typeof i1.GravityAttachFileComponent, typeof i2.GravityAvatarStackComponent, typeof i3.GravityGenericAvatarComponent, typeof i4.GravityButtonComponent, typeof i5.GravityCalendarComponent, typeof i6.GravityCalendarV2Component, typeof i7.GravityCardListComponent, typeof i8.GravityCheckboxComponent, typeof i9.GravityCurrencyComponent, typeof i10.GravityCurrencyDisplayComponent, typeof i11.GravityDataViewComponent, typeof i12.GravityDataViewsV2Component, typeof i13.GravityDialogComponent, typeof i14.GravityDetailContainerComponent, typeof i15.GravityDropdownListComponent, typeof i16.GravityDropdownListDisplayComponent, typeof i17.GravityIconButtonComponent, typeof i18.GravityIconComponent, typeof i19.GravityMultiLanguageComponent, typeof i20.GravityNetworkPillComponent, typeof i21.GravityNotificationComponent, typeof i22.GravityNotificationInstantContainerComponent, typeof i23.GravityRadioButtonComponent, typeof i24.GravityStatusIndicatorComponent, typeof i25.GravityStepperComponent, typeof i26.GravitySwitchComponent, typeof i27.GravityTableComponent, typeof i28.GravityTablesV2Component, typeof i29.GravityTextFieldComponent, typeof i30.GravityTextFieldNumberOnlyComponent, typeof i31.GravityTreeViewComponent, typeof i32.NodeComponent, typeof i33.NodeToggleComponent, typeof i34.NodeCheckboxComponent, typeof i35.NodeNameComponent, typeof i36.FilterByPipe, typeof i37.DateAbbreviationPipe, typeof i38.BsDatepickerDayDecoratorComponent, typeof i39.BsDatepickerNavigationViewComponent, typeof i40.BsDaysCalendarViewComponent, typeof i41.BsMonthCalendarViewComponent, typeof i42.BsYearsCalendarViewComponent, typeof i43.BsDatepickerContainerComponent, typeof i44.BsDatepickerDirective, typeof i45.BsDatepickerInlineContainerComponent, typeof i46.BsDatepickerInlineDirective, typeof i47.BsDaterangepickerContainerComponent, typeof i48.BsDaterangepickerDirective, typeof i49.BsDaterangepickerInlineContainerComponent, typeof i50.BsDaterangepickerInlineDirective, typeof i51.GravityModalComponent, typeof i52.GravityLinkComponent, typeof i53.GravityTabPrimaryComponent, typeof i54.GravityTabSecondaryComponent, typeof i55.GravityChipComponent, typeof i56.GravityChipGroupComponent, typeof i57.GravityEditableInputComponent, typeof i58.GravityCardButtonComponent, typeof i59.GravityDropdownLabelComponent, typeof i60.GravityNavigationCardComponent, typeof i61.GravityGenericAvatarSecondaryComponent, typeof i62.GravityBackdropComponent, typeof i63.
|
|
83
|
+
static ɵmod: i0.ɵɵNgModuleDeclaration<GravityDesignSystemModule, [typeof i1.GravityAttachFileComponent, typeof i2.GravityAvatarStackComponent, typeof i3.GravityGenericAvatarComponent, typeof i4.GravityButtonComponent, typeof i5.GravityCalendarComponent, typeof i6.GravityCalendarV2Component, typeof i7.GravityCardListComponent, typeof i8.GravityCheckboxComponent, typeof i9.GravityCurrencyComponent, typeof i10.GravityCurrencyDisplayComponent, typeof i11.GravityDataViewComponent, typeof i12.GravityDataViewsV2Component, typeof i13.GravityDialogComponent, typeof i14.GravityDetailContainerComponent, typeof i15.GravityDropdownListComponent, typeof i16.GravityDropdownListDisplayComponent, typeof i17.GravityIconButtonComponent, typeof i18.GravityIconComponent, typeof i19.GravityMultiLanguageComponent, typeof i20.GravityNetworkPillComponent, typeof i21.GravityNotificationComponent, typeof i22.GravityNotificationInstantContainerComponent, typeof i23.GravityRadioButtonComponent, typeof i24.GravityStatusIndicatorComponent, typeof i25.GravityStepperComponent, typeof i26.GravitySwitchComponent, typeof i27.GravityTableComponent, typeof i28.GravityTablesV2Component, typeof i29.GravityTextFieldComponent, typeof i30.GravityTextFieldNumberOnlyComponent, typeof i31.GravityTreeViewComponent, typeof i32.NodeComponent, typeof i33.NodeToggleComponent, typeof i34.NodeCheckboxComponent, typeof i35.NodeNameComponent, typeof i36.FilterByPipe, typeof i37.DateAbbreviationPipe, typeof i38.BsDatepickerDayDecoratorComponent, typeof i39.BsDatepickerNavigationViewComponent, typeof i40.BsDaysCalendarViewComponent, typeof i41.BsMonthCalendarViewComponent, typeof i42.BsYearsCalendarViewComponent, typeof i43.BsDatepickerContainerComponent, typeof i44.BsDatepickerDirective, typeof i45.BsDatepickerInlineContainerComponent, typeof i46.BsDatepickerInlineDirective, typeof i47.BsDaterangepickerContainerComponent, typeof i48.BsDaterangepickerDirective, typeof i49.BsDaterangepickerInlineContainerComponent, typeof i50.BsDaterangepickerInlineDirective, typeof i51.GravityModalComponent, typeof i52.GravityLinkComponent, typeof i53.GravityTabPrimaryComponent, typeof i54.GravityTabSecondaryComponent, typeof i55.GravityChipComponent, typeof i56.GravityChipGroupComponent, typeof i57.GravityEditableInputComponent, typeof i58.GravityCardButtonComponent, typeof i59.GravityDropdownLabelComponent, typeof i60.GravityNavigationCardComponent, typeof i61.GravityGenericAvatarSecondaryComponent, typeof i62.GravityBackdropComponent, typeof i63.GravityDatePickerComponent, typeof i64.DayCalendarComponent, typeof i65.MonthCalendarComponent, typeof i66.YearCalendarComponent, typeof i67.GravitySegmentedButtonComponent, typeof i68.GravityCurrencyDisplayV2Component, typeof i69.GravityHeaderComponent, typeof i70.GravityPushNotificationsComponent, typeof i71.GravityMenuComponent], [typeof i72.AngularSvgIconModule, typeof i73.AngularSvgIconPreloaderModule, typeof i74.BsDatepickerModule, typeof i75.CommonModule, typeof i76.FormsModule, typeof i77.GravityTooltipModule, typeof i78.NgbDatepickerModule, typeof i78.NgbOffcanvasModule, typeof i78.NgbProgressbarModule, typeof i78.NgbToastModule, typeof i76.ReactiveFormsModule, typeof i79.RouterLink], [typeof i1.GravityAttachFileComponent, typeof i2.GravityAvatarStackComponent, typeof i3.GravityGenericAvatarComponent, typeof i4.GravityButtonComponent, typeof i5.GravityCalendarComponent, typeof i6.GravityCalendarV2Component, typeof i7.GravityCardListComponent, typeof i8.GravityCheckboxComponent, typeof i9.GravityCurrencyComponent, typeof i10.GravityCurrencyDisplayComponent, typeof i68.GravityCurrencyDisplayV2Component, typeof i11.GravityDataViewComponent, typeof i12.GravityDataViewsV2Component, typeof i13.GravityDialogComponent, typeof i14.GravityDetailContainerComponent, typeof i15.GravityDropdownListComponent, typeof i16.GravityDropdownListDisplayComponent, typeof i17.GravityIconButtonComponent, typeof i18.GravityIconComponent, typeof i19.GravityMultiLanguageComponent, typeof i20.GravityNetworkPillComponent, typeof i22.GravityNotificationInstantContainerComponent, typeof i23.GravityRadioButtonComponent, typeof i24.GravityStatusIndicatorComponent, typeof i25.GravityStepperComponent, typeof i26.GravitySwitchComponent, typeof i27.GravityTableComponent, typeof i28.GravityTablesV2Component, typeof i29.GravityTextFieldComponent, typeof i30.GravityTextFieldNumberOnlyComponent, typeof i77.GravityTooltipModule, typeof i31.GravityTreeViewComponent, typeof i51.GravityModalComponent, typeof i52.GravityLinkComponent, typeof i53.GravityTabPrimaryComponent, typeof i54.GravityTabSecondaryComponent, typeof i55.GravityChipComponent, typeof i56.GravityChipGroupComponent, typeof i57.GravityEditableInputComponent, typeof i58.GravityCardButtonComponent, typeof i60.GravityNavigationCardComponent, typeof i61.GravityGenericAvatarSecondaryComponent, typeof i62.GravityBackdropComponent, typeof i63.GravityDatePickerComponent, typeof i67.GravitySegmentedButtonComponent, typeof i69.GravityHeaderComponent, typeof i70.GravityPushNotificationsComponent, typeof i71.GravityMenuComponent]>;
|
|
84
84
|
static ɵinj: i0.ɵɵInjectorDeclaration<GravityDesignSystemModule>;
|
|
85
85
|
}
|
package/package.json
CHANGED
package/public-api.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export * from './lib/components/gravity-avatar-stack/gravity-avatar-stack.compon
|
|
|
4
4
|
export * from './lib/components/gravity-button/gravity-button.component';
|
|
5
5
|
export * from './lib/components/gravity-calendar/gravity-calendar.component';
|
|
6
6
|
export * from './lib/components/gravity-calendar-v2/gravity-calendar-v2.component';
|
|
7
|
-
export * from './lib/components/gravity-
|
|
7
|
+
export * from './lib/components/gravity-date-picker/gravity-date-picker.component';
|
|
8
8
|
export * from './lib/components/gravity-card-list/gravity-card-list.component';
|
|
9
9
|
export * from './lib/components/gravity-checkbox/gravity-checkbox.component';
|
|
10
10
|
export * from './lib/components/gravity-currency/gravity-currency.component';
|
|
@@ -1,224 +0,0 @@
|
|
|
1
|
-
import { calendarDateToDate, dateToString, getStartDate, stringToCalendarDate, stringToDate, dateToCalendarDay } from "../../shared/calendar.utils";
|
|
2
|
-
export function isPreview(component, day) {
|
|
3
|
-
const current = calendarDateToDate(day);
|
|
4
|
-
if (component.selectedRangeStart && !component.selectedRangeEnd && component.hoveredDay) {
|
|
5
|
-
const start = calendarDateToDate(component.selectedRangeStart);
|
|
6
|
-
const hover = calendarDateToDate(component.hoveredDay);
|
|
7
|
-
if (hover <= start)
|
|
8
|
-
return false;
|
|
9
|
-
return current > start && current <= hover;
|
|
10
|
-
}
|
|
11
|
-
if (!component.selectedRangeStart && component.selectedRangeEnd && component.hoveredDay) {
|
|
12
|
-
const end = calendarDateToDate(component.selectedRangeEnd);
|
|
13
|
-
const hover = calendarDateToDate(component.hoveredDay);
|
|
14
|
-
if (hover >= end)
|
|
15
|
-
return false;
|
|
16
|
-
return current < end && current >= hover;
|
|
17
|
-
}
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
export function processPreselectedRangeDate(component) {
|
|
21
|
-
let end = null;
|
|
22
|
-
let start = null;
|
|
23
|
-
component.startDateField.focus();
|
|
24
|
-
if (Array.isArray(component.config.initDate)) {
|
|
25
|
-
[start, end] = component.config.initDate;
|
|
26
|
-
}
|
|
27
|
-
if (start instanceof Date) {
|
|
28
|
-
component.selectedRangeStart = dateToCalendarDay(start);
|
|
29
|
-
setTimeout(() => {
|
|
30
|
-
component.endDateField.focus();
|
|
31
|
-
component.startDateField.inputValue = dateToString(start, component.appearance.language);
|
|
32
|
-
}, 0);
|
|
33
|
-
}
|
|
34
|
-
if (end instanceof Date) {
|
|
35
|
-
component.currentDate = getStartDate(end);
|
|
36
|
-
component.selectedRangeEnd = dateToCalendarDay(end);
|
|
37
|
-
setTimeout(() => {
|
|
38
|
-
component.startDateField.focus();
|
|
39
|
-
component.endDateField.inputValue = dateToString(end, component.appearance.language);
|
|
40
|
-
}, 0);
|
|
41
|
-
}
|
|
42
|
-
else if (start instanceof Date) {
|
|
43
|
-
component.currentDate = getStartDate(start);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
export function getRangeSelectionClass(component, day) {
|
|
47
|
-
const current = calendarDateToDate(day);
|
|
48
|
-
const start = component.selectedRangeStart ? calendarDateToDate(component.selectedRangeStart) : null;
|
|
49
|
-
const end = component.selectedRangeEnd ? calendarDateToDate(component.selectedRangeEnd) : null;
|
|
50
|
-
if (!start && !end) {
|
|
51
|
-
return component.focused === 'start' ? 'nsl-start' : 'nsl-end';
|
|
52
|
-
}
|
|
53
|
-
if (start && !end) {
|
|
54
|
-
if (current.getTime() === start.getTime())
|
|
55
|
-
return 'sl start';
|
|
56
|
-
if (current.getTime() < start.getTime())
|
|
57
|
-
return 'nsl-start';
|
|
58
|
-
return 'in-slt nsl-end';
|
|
59
|
-
}
|
|
60
|
-
if (!start && end) {
|
|
61
|
-
if (current.getTime() === end.getTime())
|
|
62
|
-
return 'sl end';
|
|
63
|
-
if (current.getTime() > end.getTime())
|
|
64
|
-
return 'nsl-end';
|
|
65
|
-
return 'in-slt nsl-start';
|
|
66
|
-
}
|
|
67
|
-
if (start && end) {
|
|
68
|
-
if (current.getTime() === start.getTime() &&
|
|
69
|
-
start.getTime() === end.getTime())
|
|
70
|
-
return 'start sl same-sln';
|
|
71
|
-
if (current.getTime() === start.getTime())
|
|
72
|
-
return 'sl start';
|
|
73
|
-
if (current.getTime() < start.getTime())
|
|
74
|
-
return 'nsl-start';
|
|
75
|
-
if (current.getTime() === end.getTime())
|
|
76
|
-
return 'sl end';
|
|
77
|
-
if (current.getTime() > end.getTime())
|
|
78
|
-
return 'nsl-end';
|
|
79
|
-
if (current > start && current < end)
|
|
80
|
-
return 'sl range';
|
|
81
|
-
return 'default';
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
export function onSelectDaysRange(component, day) {
|
|
85
|
-
const selected = calendarDateToDate(day);
|
|
86
|
-
const hasEnd = !!component.selectedRangeEnd;
|
|
87
|
-
const hasStart = !!component.selectedRangeStart;
|
|
88
|
-
const language = component.appearance.language;
|
|
89
|
-
const endDate = hasEnd ? calendarDateToDate(component.selectedRangeEnd) : null;
|
|
90
|
-
const startDate = hasStart ? calendarDateToDate(component.selectedRangeStart) : null;
|
|
91
|
-
Object.assign(component, {
|
|
92
|
-
notification: null,
|
|
93
|
-
endDateError: '', startDateError: '',
|
|
94
|
-
endFieldDisabled: false, startFieldDisabled: false,
|
|
95
|
-
});
|
|
96
|
-
const updateField = (field) => {
|
|
97
|
-
component[`selectedRange${field === 'start' ? 'Start' : 'End'}`] = day;
|
|
98
|
-
component[`${field}DateField`].inputValue = dateToString(selected, language);
|
|
99
|
-
setTimeout(() => {
|
|
100
|
-
const focusField = field === 'start' ?
|
|
101
|
-
(component.selectedRangeEnd ? 'start' : 'end') :
|
|
102
|
-
(component.selectedRangeStart ? 'end' : 'start');
|
|
103
|
-
component[`${focusField}DateField`].focus();
|
|
104
|
-
component[`${focusField}DateField`].inputElement.nativeElement.setSelectionRange(10, 10);
|
|
105
|
-
}, 100);
|
|
106
|
-
};
|
|
107
|
-
if (!hasStart && !hasEnd) {
|
|
108
|
-
updateField(component.focused);
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
if (hasStart && !hasEnd) {
|
|
112
|
-
selected >= startDate ? updateField('end') : updateField('start');
|
|
113
|
-
return;
|
|
114
|
-
}
|
|
115
|
-
if (!hasStart && hasEnd) {
|
|
116
|
-
selected < endDate ? updateField('start') : updateField('end');
|
|
117
|
-
return;
|
|
118
|
-
}
|
|
119
|
-
if (hasStart && hasEnd) {
|
|
120
|
-
selected < startDate ? updateField('start') : updateField('end');
|
|
121
|
-
return;
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
export function onApplyRageDate(component) {
|
|
125
|
-
const start = calendarDateToDate(component.selectedRangeStart);
|
|
126
|
-
const end = calendarDateToDate(component.selectedRangeEnd);
|
|
127
|
-
component.calendarResponse.emit([start, end]);
|
|
128
|
-
}
|
|
129
|
-
export function onHoverDay(component, day) {
|
|
130
|
-
const startSelected = !!component.selectedRangeStart && !component.selectedRangeEnd;
|
|
131
|
-
const endSelected = !!component.selectedRangeEnd && !component.selectedRangeStart;
|
|
132
|
-
if (startSelected || endSelected) {
|
|
133
|
-
component.hoveredDay = day;
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
export function onClearHover(component) {
|
|
137
|
-
component.hoveredDay = null;
|
|
138
|
-
}
|
|
139
|
-
export function searchDate(component, dateStr, target) {
|
|
140
|
-
const i18n = component.i18n;
|
|
141
|
-
const date = stringToDate(dateStr, component.appearance.language);
|
|
142
|
-
const calendarDate = stringToCalendarDate(dateStr, component.appearance.language);
|
|
143
|
-
const errorProp = target === 'start' ? 'startDateError' : 'endDateError';
|
|
144
|
-
const field = target === 'start' ? component.startDateField : component.endDateField;
|
|
145
|
-
const oppositeDisabled = target === 'start' ? 'endFieldDisabled' : 'startFieldDisabled';
|
|
146
|
-
if (!dateStr) {
|
|
147
|
-
component[oppositeDisabled] = false;
|
|
148
|
-
return;
|
|
149
|
-
}
|
|
150
|
-
if (!calendarDate) {
|
|
151
|
-
field.focus();
|
|
152
|
-
component[oppositeDisabled] = true;
|
|
153
|
-
component[errorProp] = i18n.invalid_date;
|
|
154
|
-
component.notification = { text: i18n.select_valid_date, error: true };
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
if (!validateDateLimits(component, date, target)) {
|
|
158
|
-
component[oppositeDisabled] = true;
|
|
159
|
-
return;
|
|
160
|
-
}
|
|
161
|
-
const otherCalendarDate = target === 'start' ? component.selectedRangeEnd : component.selectedRangeStart;
|
|
162
|
-
const otherDate = otherCalendarDate ? calendarDateToDate(otherCalendarDate) : null;
|
|
163
|
-
if ((target === 'start' && otherDate && date > otherDate) ||
|
|
164
|
-
(target === 'end' && otherDate && date < otherDate)) {
|
|
165
|
-
field.focus();
|
|
166
|
-
component[oppositeDisabled] = true;
|
|
167
|
-
component[errorProp] = i18n.invalid_date;
|
|
168
|
-
component.notification = { text: target === 'start' ? i18n.start_before_end : i18n.end_after_start, error: true };
|
|
169
|
-
return;
|
|
170
|
-
}
|
|
171
|
-
if (target === 'start') {
|
|
172
|
-
component.selectedRangeStart = calendarDate;
|
|
173
|
-
if (!component.selectedRangeEnd)
|
|
174
|
-
setTimeout(() => component.endDateField.focus(), 100);
|
|
175
|
-
}
|
|
176
|
-
else {
|
|
177
|
-
component.selectedRangeEnd = calendarDate;
|
|
178
|
-
if (!component.selectedRangeStart)
|
|
179
|
-
setTimeout(() => component.startDateField.focus(), 100);
|
|
180
|
-
}
|
|
181
|
-
component[errorProp] = null;
|
|
182
|
-
component.currentDate = date;
|
|
183
|
-
component.notification = null;
|
|
184
|
-
component[oppositeDisabled] = false;
|
|
185
|
-
}
|
|
186
|
-
export function validateDateLimits(component, date, target) {
|
|
187
|
-
if (component.config.minDate && date < component.config.minDate) {
|
|
188
|
-
component.notification = { text: component.i18n.date_unavailable, error: true };
|
|
189
|
-
target === 'start' ? component.startDateError = component.i18n.invalid_date : component.endDateError = component.i18n.invalid_date;
|
|
190
|
-
return false;
|
|
191
|
-
}
|
|
192
|
-
if (component.config.maxDate && date > component.config.maxDate) {
|
|
193
|
-
component.notification = { text: component.i18n.date_unavailable, error: true };
|
|
194
|
-
target === 'start' ? component.startDateError = component.i18n.invalid_date : component.endDateError = component.i18n.invalid_date;
|
|
195
|
-
return false;
|
|
196
|
-
}
|
|
197
|
-
return true;
|
|
198
|
-
}
|
|
199
|
-
export function onDateKeyup(component, event, target) {
|
|
200
|
-
const ignoredKeys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Enter', ' ', 'Spacebar'];
|
|
201
|
-
if (ignoredKeys.includes(event.key)) {
|
|
202
|
-
return;
|
|
203
|
-
}
|
|
204
|
-
const errorProp = target === 'start' ? 'startDateError' : 'endDateError';
|
|
205
|
-
const disabled = target === 'start' ? 'endFieldDisabled' : 'startFieldDisabled';
|
|
206
|
-
const dateInput = target === 'start' ? component.startDateField : component.endDateField;
|
|
207
|
-
const selectedRangeProp = target === 'start' ? 'selectedRangeStart' : 'selectedRangeEnd';
|
|
208
|
-
const value = dateInput?.inputValue ?? '';
|
|
209
|
-
if (value.length < 10) {
|
|
210
|
-
component[selectedRangeProp] = null;
|
|
211
|
-
if (!component.notification?.error) {
|
|
212
|
-
component.notification = null;
|
|
213
|
-
}
|
|
214
|
-
if (value.length < 1) {
|
|
215
|
-
component[errorProp] = '';
|
|
216
|
-
component[disabled] = false;
|
|
217
|
-
component.notification = null;
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
if (value.length > 9) {
|
|
221
|
-
searchDate(this, value, target);
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFuZ2UtZGF5cy1jYWxlbmRhci51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyYXZpdHktZGVzaWduLXN5c3RlbS9zcmMvbGliL2NvbXBvbmVudHMvZ3Jhdml0eS1jYWxlbmRhci1uZXh0L2NvbXBvbmVudHMvZGF5LWNhbGVuZGFyL3JhbmdlLWRheXMtY2FsZW5kYXIudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLGtCQUFrQixFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsWUFBWSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFFbEosTUFBTSxVQUFVLFNBQVMsQ0FBQyxTQUErQixFQUFFLEdBQWlCO0lBQzNFLE1BQU0sT0FBTyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhDLElBQUksU0FBUyxDQUFDLGtCQUFrQixJQUFJLENBQUMsU0FBUyxDQUFDLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUU7UUFDeEYsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDL0QsTUFBTSxLQUFLLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZELElBQUksS0FBSyxJQUFJLEtBQUs7WUFBRSxPQUFPLEtBQUssQ0FBQztRQUNqQyxPQUFPLE9BQU8sR0FBRyxLQUFLLElBQUksT0FBTyxJQUFJLEtBQUssQ0FBQztLQUMzQztJQUVELElBQUksQ0FBQyxTQUFTLENBQUMsa0JBQWtCLElBQUksU0FBUyxDQUFDLGdCQUFnQixJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUU7UUFDeEYsTUFBTSxHQUFHLEdBQUcsa0JBQWtCLENBQUMsU0FBUyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFDM0QsTUFBTSxLQUFLLEdB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aW1wb3J0IHtDYWxlbmRhckRhdGV9IGZyb20gXCIuLi8uLi9zaGFyZWQvY2FsZW5kYXIubW9kYWxcIjtcbmltcG9ydCB7RGF5Q2FsZW5kYXJDb21wb25lbnR9IGZyb20gXCIuL2RheS1jYWxlbmRhci5jb21wb25lbnRcIjtcbmltcG9ydCB7Y2FsZW5kYXJEYXRlVG9EYXRlLCBkYXRlVG9TdHJpbmcsIGdldFN0YXJ0RGF0ZSwgc3RyaW5nVG9DYWxlbmRhckRhdGUsIHN0cmluZ1RvRGF0ZSwgZGF0ZVRvQ2FsZW5kYXJEYXl9IGZyb20gXCIuLi8uLi9zaGFyZWQvY2FsZW5kYXIudXRpbHNcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzUHJldmlldyhjb21wb25lbnQ6IERheUNhbGVuZGFyQ29tcG9uZW50LCBkYXk6IENhbGVuZGFyRGF0ZSk6IGJvb2xlYW4ge1xuXHRjb25zdCBjdXJyZW50ID0gY2FsZW5kYXJEYXRlVG9EYXRlKGRheSk7XG5cblx0aWYgKGNvbXBvbmVudC5zZWxlY3RlZFJhbmdlU3RhcnQgJiYgIWNvbXBvbmVudC5zZWxlY3RlZFJhbmdlRW5kICYmIGNvbXBvbmVudC5ob3ZlcmVkRGF5KSB7XG5cdFx0Y29uc3Qgc3RhcnQgPSBjYWxlbmRhckRhdGVUb0RhdGUoY29tcG9uZW50LnNlbGVjdGVkUmFuZ2VTdGFydCk7XG5cdFx0Y29uc3QgaG92ZXIgPSBjYWxlbmRhckRhdGVUb0RhdGUoY29tcG9uZW50LmhvdmVyZWREYXkpO1xuXHRcdGlmIChob3ZlciA8PSBzdGFydCkgcmV0dXJuIGZhbHNlO1xuXHRcdHJldHVybiBjdXJyZW50ID4gc3RhcnQgJiYgY3VycmVudCA8PSBob3Zlcjtcblx0fVxuXG5cdGlmICghY29tcG9uZW50LnNlbGVjdGVkUmFuZ2VTdGFydCAmJiBjb21wb25lbnQuc2VsZWN0ZWRSYW5nZUVuZCAmJiBjb21wb25lbnQuaG92ZXJlZERheSkge1xuXHRcdGNvbnN0IGVuZCA9IGNhbGVuZGFyRGF0ZVRvRGF0ZShjb21wb25lbnQuc2VsZWN0ZWRSYW5nZUVuZCk7XG5cdFx0Y29uc3QgaG92ZXIgPSBjYWxlbmRhckRhdGVUb0RhdGUoY29tcG9uZW50LmhvdmVyZWREYXkpO1xuXHRcdGlmIChob3ZlciA+PSBlbmQpIHJldHVybiBmYWxzZTtcblx0XHRyZXR1cm4gY3VycmVudCA8IGVuZCAmJiBjdXJyZW50ID49IGhvdmVyO1xuXHR9XG5cblx0cmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvY2Vzc1ByZXNlbGVjdGVkUmFuZ2VEYXRlKGNvbXBvbmVudDogRGF5Q2FsZW5kYXJDb21wb25lbnQpIHtcblx0bGV0IGVuZDogRGF0ZSB8IG51bGwgPSBudWxsO1xuXHRsZXQgc3RhcnQ6IERhdGUgfCBudWxsID0gbnVsbDtcblxuXHRjb21wb25lbnQuc3RhcnREYXRlRmllbGQuZm9jdXMoKTtcblxuXHRpZiAoQXJyYXkuaXNBcnJheShjb21wb25lbnQuY29uZmlnLmluaXREYXRlKSkge1tzdGFydCwgZW5kXSA9IGNvbXBvbmVudC5jb25maWcuaW5pdERhdGU7fVxuXG4gIGlmIChzdGFydCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBjb21wb25lbnQuc2VsZWN0ZWRSYW5nZVN0YXJ0ID0gZGF0ZVRvQ2FsZW5kYXJEYXkoc3RhcnQpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuXHQgICAgY29tcG9uZW50LmVuZERhdGVGaWVsZC5mb2N1cygpO1xuXHRcdFx0Y29tcG9uZW50LnN0YXJ0RGF0ZUZpZWxkLmlucHV0VmFsdWUgPSBkYXRlVG9TdHJpbmcoc3RhcnQsIGNvbXBvbmVudC5hcHBlYXJhbmNlLmxhbmd1YWdlKTtcblx0XHR9LCAwKTtcbiAgfVxuXG4gIGlmIChlbmQgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgY29tcG9uZW50LmN1cnJlbnREYXRlID0gZ2V0U3RhcnREYXRlKGVuZCk7XG4gICAgY29tcG9uZW50LnNlbGVjdGVkUmFuZ2VFbmQgPSBkYXRlVG9DYWxlbmRhckRheShlbmQpO1xuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0Y29tcG9uZW50LnN0YXJ0RGF0ZUZpZWxkLmZvY3VzKCk7XG5cdFx0XHRjb21wb25lbnQuZW5kRGF0ZUZpZWxkLmlucHV0VmFsdWUgPSBkYXRlVG9TdHJpbmcoZW5kLCBjb21wb25lbnQuYXBwZWFyYW5jZS5sYW5ndWFnZSk7XG5cdFx0fSwgMCk7XG5cbiAgfSBlbHNlIGlmIChzdGFydCBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICBjb21wb25lbnQuY3VycmVudERhdGUgPSBnZXRTdGFydERhdGUoc3RhcnQpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRSYW5nZVNlbGVjdGlvbkNsYXNzKGNvbXBvbmVudDogRGF5Q2FsZW5kYXJDb21wb25lbnQsIGRheTogQ2FsZW5kYXJEYXRlKTogc3RyaW5nIHtcblx0Y29uc3QgY3VycmVudCA9IGNhbGVuZGFyRGF0ZVRvRGF0ZShkYXkpO1xuXHRjb25zdCBzdGFydCA9IGNvbXBvbmVudC5zZWxlY3RlZFJhbmdlU3RhcnQgPyBjYWxlbmRhckRhdGVUb0RhdGUoY29tcG9uZW50LnNlbGVjdGVkUmFuZ2VTdGFydCkgOiBudWxsO1xuXHRjb25zdCBlbmQgPSBjb21wb25lbnQuc2VsZWN0ZWRSYW5nZUVuZCA/IGNhbGVuZGFyRGF0ZVRvRGF0ZShjb21wb25lbnQuc2VsZWN0ZWRSYW5nZUVuZCkgOiBudWxsO1xuXG5cdGlmICghc3RhcnQgJiYgIWVuZCkge1xuXHRcdHJldHVybiBjb21wb25lbnQuZm9jdXNlZCA9PT0gJ3N0YXJ0JyA/ICduc2wtc3RhcnQnIDogJ25zbC1lbmQnO1xuXHR9XG5cblx0aWYgKHN0YXJ0ICYmICFlbmQpIHtcblx0XHRpZiAoY3VycmVudC5nZXRUaW1lKCkgPT09IHN0YXJ0LmdldFRpbWUoKSkgcmV0dXJuICdzbCBzdGFydCc7XG5cdFx0aWYgKGN1cnJlbnQuZ2V0VGltZSgpIDwgc3RhcnQuZ2V0VGltZSgpKSByZXR1cm4gJ25zbC1zdGFydCc7XG5cdFx0cmV0dXJuICdpbi1zbHQgbnNsLWVuZCc7XG5cdH1cblxuXHRpZiAoIXN0YXJ0ICYmIGVuZCkge1xuXHRcdGlmIChjdXJyZW50LmdldFRpbWUoKSA9PT0gZW5kLmdldFRpbWUoKSkgcmV0dXJuICdzbCBlbmQnO1xuXHRcdGlmIChjdXJyZW50LmdldFRpbWUoKSA+IGVuZC5nZXRUaW1lKCkpIHJldHVybiAnbnNsLWVuZCc7XG5cdFx0cmV0dXJuICdpbi1zbHQgbnNsLXN0YXJ0Jztcblx0fVxuXG5cdGlmIChzdGFydCAmJiBlbmQpIHtcblx0XHRpZihjdXJyZW50LmdldFRpbWUoKSA9PT0gc3RhcnQuZ2V0VGltZSgpICYmXG5cdFx0XHQgc3RhcnQuZ2V0VGltZSgpID09PSBlbmQuZ2V0VGltZSgpKVxuXHRcdFx0XHRyZXR1cm4gJ3N0YXJ0IHNsIHNhbWUtc2xuJztcblxuXHRcdGlmIChjdXJyZW50LmdldFRpbWUoKSA9PT0gc3RhcnQuZ2V0VGltZSgpKSByZXR1cm4gJ3NsIHN0YXJ0Jztcblx0XHRpZiAoY3VycmVudC5nZXRUaW1lKCkgPCBzdGFydC5nZXRUaW1lKCkpIHJldHVybiAnbnNsLXN0YXJ0Jztcblx0XHRpZiAoY3VycmVudC5nZXRUaW1lKCkgPT09IGVuZC5nZXRUaW1lKCkpIHJldHVybiAnc2wgZW5kJztcblx0XHRpZiAoY3VycmVudC5nZXRUaW1lKCkgPiBlbmQuZ2V0VGltZSgpKSByZXR1cm4gJ25zbC1lbmQnO1xuXHRcdGlmIChjdXJyZW50ID4gc3RhcnQgJiYgY3VycmVudCA8IGVuZCkgcmV0dXJuICdzbCByYW5nZSc7XG5cdFx0cmV0dXJuICdkZWZhdWx0Jztcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25TZWxlY3REYXlzUmFuZ2UoY29tcG9uZW50OiBEYXlDYWxlbmRhckNvbXBvbmVudCwgZGF5OiBDYWxlbmRhckRhdGUpOiB2b2lkIHtcblx0Y29uc3Qgc2VsZWN0ZWQgPSBjYWxlbmRhckRhdGVUb0RhdGUoZGF5KTtcblx0Y29uc3QgaGFzRW5kID0gISFjb21wb25lbnQuc2VsZWN0ZWRSYW5nZUVuZDtcblx0Y29uc3QgaGFzU3RhcnQgPSAhIWNvbXBvbmVudC5zZWxlY3RlZFJhbmdlU3RhcnQ7XG5cdGNvbnN0IGxhbmd1YWdlID0gY29tcG9uZW50LmFwcGVhcmFuY2UubGFuZ3VhZ2U7XG5cdGNvbnN0IGVuZERhdGUgPSBoYXNFbmQgPyBjYWxlbmRhckRhdGVUb0RhdGUoY29tcG9uZW50LnNlbGVjdGVkUmFuZ2VFbmQpIDogbnVsbDtcblx0Y29uc3Qgc3RhcnREYXRlID0gaGFzU3RhcnQgPyBjYWxlbmRhckRhdGVUb0RhdGUoY29tcG9uZW50LnNlbGVjdGVkUmFuZ2VTdGFydCkgOiBudWxsO1xuXG5cdE9iamVjdC5hc3NpZ24oY29tcG9uZW50LCB7XG5cdFx0bm90aWZpY2F0aW9uOiBudWxsLFxuXHRcdGVuZERhdGVFcnJvcjogJycsIHN0YXJ0RGF0ZUVycm9yOiAnJyxcblx0XHRlbmRGaWVsZERpc2FibGVkOiBmYWxzZSwgc3RhcnRGaWVsZERpc2FibGVkOiBmYWxzZSxcblx0fSk7XG5cblx0Y29uc3QgdXBkYXRlRmllbGQgPSAoZmllbGQ6ICdzdGFydCcgfCAnZW5kJykgPT4ge1xuXHRcdGNvbXBvbmVudFtgc2VsZWN0ZWRSYW5nZSR7ZmllbGQgPT09ICdzdGFydCcgPyAnU3RhcnQnIDogJ0VuZCd9YF0gPSBkYXk7XG5cdFx0Y29tcG9uZW50W2Ake2ZpZWxkfURhdGVGaWVsZGBdLmlucHV0VmFsdWUgPSBkYXRlVG9TdHJpbmcoc2VsZWN0ZWQsIGxhbmd1YWdlKTtcblxuXHRcdHNldFRpbWVvdXQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZm9jdXNGaWVsZCA9IGZpZWxkID09PSAnc3RhcnQnID9cblx0XHRcdFx0KGNvbXBvbmVudC5zZWxlY3RlZFJhbmdlRW5kID8gJ3N0YXJ0JyA6ICdlbmQnKSA6XG5cdFx0XHRcdChjb21wb25lbnQuc2VsZWN0ZWRSYW5nZVN0YXJ0ID8gJ2VuZCcgOiAnc3RhcnQnKTtcblxuXHRcdFx0Y29tcG9uZW50W2Ake2ZvY3VzRmllbGR9RGF0ZUZpZWxkYF0uZm9jdXMoKTtcblx0XHRcdGNvbXBvbmVudFtgJHtmb2N1c0ZpZWxkfURhdGVGaWVsZGBdLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldFNlbGVjdGlvblJhbmdlKDEwLCAxMCk7XG5cdFx0fSwgMTAwKTtcblx0fTtcblxuXHRpZiAoIWhhc1N0YXJ0ICYmICFoYXNFbmQpIHtcblx0XHR1cGRhdGVGaWVsZChjb21wb25lbnQuZm9jdXNlZCk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGhhc1N0YXJ0ICYmICFoYXNFbmQpIHtcblx0XHRzZWxlY3RlZCA+PSBzdGFydERhdGUhID8gdXBkYXRlRmllbGQoJ2VuZCcpIDogdXBkYXRlRmllbGQoJ3N0YXJ0Jyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKCFoYXNTdGFydCAmJiBoYXNFbmQpIHtcblx0XHRzZWxlY3RlZCA8IGVuZERhdGUhID8gdXBkYXRlRmllbGQoJ3N0YXJ0JykgOiB1cGRhdGVGaWVsZCgnZW5kJyk7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aWYgKGhhc1N0YXJ0ICYmIGhhc0VuZCkge1xuXHRcdHNlbGVjdGVkIDwgc3RhcnREYXRlISA/IHVwZGF0ZUZpZWxkKCdzdGFydCcpIDogdXBkYXRlRmllbGQoJ2VuZCcpO1xuXHRcdHJldHVybjtcblx0fVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25BcHBseVJhZ2VEYXRlKGNvbXBvbmVudDogRGF5Q2FsZW5kYXJDb21wb25lbnQpe1xuICAgIGNvbnN0IHN0YXJ0ID0gY2FsZW5kYXJEYXRlVG9EYXRlKGNvbXBvbmVudC5zZWxlY3RlZFJhbmdlU3RhcnQpO1xuICAgIGNvbnN0IGVuZCA9IGNhbGVuZGFyRGF0ZVRvRGF0ZShjb21wb25lbnQuc2VsZWN0ZWRSYW5nZUVuZCk7XG4gICAgY29tcG9uZW50LmNhbGVuZGFyUmVzcG9uc2UuZW1pdChbc3RhcnQsIGVuZF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25Ib3ZlckRheShjb21wb25lbnQ6IERheUNhbGVuZGFyQ29tcG9uZW50LCBkYXk6IENhbGVuZGFyRGF0ZSk6IHZvaWQge1xuXHRjb25zdCBzdGFydFNlbGVjdGVkID0gISFjb21wb25lbnQuc2VsZWN0ZWRSYW5nZVN0YXJ0ICYmICFjb21wb25lbnQuc2VsZWN0ZWRSYW5nZUVuZDtcblx0Y29uc3QgZW5kU2VsZWN0ZWQgPSAhIWNvbXBvbmVudC5zZWxlY3RlZFJhbmdlRW5kICYmICFjb21wb25lbnQuc2VsZWN0ZWRSYW5nZVN0YXJ0O1xuXHRpZiAoc3RhcnRTZWxlY3RlZCB8fCBlbmRTZWxlY3RlZCkgeyBjb21wb25lbnQuaG92ZXJlZERheSA9IGRheTsgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gb25DbGVhckhvdmVyKGNvbXBvbmVudDogRGF5Q2FsZW5kYXJDb21wb25lbnQpOiB2b2lkIHtcblx0Y29tcG9uZW50LmhvdmVyZWREYXkgPSBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VhcmNoRGF0ZShjb21wb25lbnQ6IERheUNhbGVuZGFyQ29tcG9uZW50LCBkYXRlU3RyOiBzdHJpbmcsIHRhcmdldDogJ3N0YXJ0JyB8ICdlbmQnKTogdm9pZCB7XG5cdGNvbnN0IGkxOG4gPSBjb21wb25lbnQuaTE4bjtcblx0Y29uc3QgZGF0ZSA9IHN0cmluZ1RvRGF0ZShkYXRlU3RyLCBjb21wb25lbnQuYXBwZWFyYW5jZS5sYW5ndWFnZSk7XG5cdGNvbnN0IGNhbGVuZGFyRGF0ZSA9IHN0cmluZ1RvQ2FsZW5kYXJEYXRlKGRhdGVTdHIsIGNvbXBvbmVudC5hcHBlYXJhbmNlLmxhbmd1YWdlKTtcblx0Y29uc3QgZXJyb3JQcm9wID0gdGFyZ2V0ID09PSAnc3RhcnQnID8gJ3N0YXJ0RGF0ZUVycm9yJyA6ICdlbmREYXRlRXJyb3InO1xuXHRjb25zdCBmaWVsZCA9IHRhcmdldCA9PT0gJ3N0YXJ0JyA/IGNvbXBvbmVudC5zdGFydERhdGVGaWVsZCA6IGNvbXBvbmVudC5lbmREYXRlRmllbGQ7XG5cdGNvbnN0IG9wcG9zaXRlRGlzYWJsZWQgPSB0YXJnZXQgPT09ICdzdGFydCcgPyAnZW5kRmllbGREaXNhYmxlZCcgOiAnc3RhcnRGaWVsZERpc2FibGVkJztcblxuXHRpZiAoIWRhdGVTdHIpIHsgY29tcG9uZW50W29wcG9zaXRlRGlzYWJsZWRdID0gZmFsc2U7IHJldHVybjsgfVxuXG5cdGlmICghY2FsZW5kYXJEYXRlKSB7XG5cdFx0ZmllbGQuZm9jdXMoKTtcblx0XHRjb21wb25lbnRbb3Bwb3NpdGVEaXNhYmxlZF0gPSB0cnVlO1xuXHRcdGNvbXBvbmVudFtlcnJvclByb3BdID0gaTE4bi5pbnZhbGlkX2RhdGU7XG5cdFx0Y29tcG9uZW50Lm5vdGlmaWNhdGlvbiA9IHsgdGV4dDogaTE4bi5zZWxlY3RfdmFsaWRfZGF0ZSwgZXJyb3I6IHRydWUgfTtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpZiAoIXZhbGlkYXRlRGF0ZUxpbWl0cyhjb21wb25lbnQsIGRhdGUsIHRhcmdldCkpIHtcblx0XHRjb21wb25lbnRbb3Bwb3NpdGVEaXNhYmxlZF0gPSB0cnVlO1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGNvbnN0IG90aGVyQ2FsZW5kYXJEYXRlID0gdGFyZ2V0ID09PSAnc3RhcnQnID8gY29tcG9uZW50LnNlbGVjdGVkUmFuZ2VFbmQgOiBjb21wb25lbnQuc2VsZWN0ZWRSYW5nZVN0YXJ0O1xuXHRjb25zdCBvdGhlckRhdGUgPSBvdGhlckNhbGVuZGFyRGF0ZSA/IGNhbGVuZGFyRGF0ZVRvRGF0ZShvdGhlckNhbGVuZGFyRGF0ZSkgOiBudWxsO1xuXG5cdGlmICgodGFyZ2V0ID09PSAnc3RhcnQnICYmIG90aGVyRGF0ZSAmJiBkYXRlID4gb3RoZXJEYXRlKSB8fFxuXHRcdCh0YXJnZXQgPT09ICdlbmQnICYmIG90aGVyRGF0ZSAmJiBkYXRlIDwgb3RoZXJEYXRlKSkge1xuXHRcdGZpZWxkLmZvY3VzKCk7XG5cdFx0Y29tcG9uZW50W29wcG9zaXRlRGlzYWJsZWRdID0gdHJ1ZTtcblx0XHRjb21wb25lbnRbZXJyb3JQcm9wXSA9IGkxOG4uaW52YWxpZF9kYXRlO1xuXHRcdGNvbXBvbmVudC5ub3RpZmljYXRpb24gPSB7IHRleHQ6IHRhcmdldCA9PT0gJ3N0YXJ0JyA/IGkxOG4uc3RhcnRfYmVmb3JlX2VuZCA6IGkxOG4uZW5kX2FmdGVyX3N0YXJ0LCBlcnJvcjogdHJ1ZSB9O1xuXHRcdHJldHVybjtcblx0fVxuXG5cdGlmICh0YXJnZXQgPT09ICdzdGFydCcpIHtcblx0XHRjb21wb25lbnQuc2VsZWN0ZWRSYW5nZVN0YXJ0ID0gY2FsZW5kYXJEYXRlO1xuXHRcdGlmICghY29tcG9uZW50LnNlbGVjdGVkUmFuZ2VFbmQpIHNldFRpbWVvdXQoKCkgPT4gY29tcG9uZW50LmVuZERhdGVGaWVsZC5mb2N1cygpLCAxMDApO1xuXHR9IGVsc2Uge1xuXHRcdGNvbXBvbmVudC5zZWxlY3RlZFJhbmdlRW5kID0gY2FsZW5kYXJEYXRlO1xuXHRcdGlmICghY29tcG9uZW50LnNlbGVjdGVkUmFuZ2VTdGFydCkgc2V0VGltZW91dCgoKSA9PiBjb21wb25lbnQuc3RhcnREYXRlRmllbGQuZm9jdXMoKSwgMTAwKTtcblx0fVxuXG5cdGNvbXBvbmVudFtlcnJvclByb3BdID0gbnVsbDtcblx0Y29tcG9uZW50LmN1cnJlbnREYXRlID0gZGF0ZTtcblx0Y29tcG9uZW50Lm5vdGlmaWNhdGlvbiA9IG51bGw7XG5cdGNvbXBvbmVudFtvcHBvc2l0ZURpc2FibGVkXSA9IGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdmFsaWRhdGVEYXRlTGltaXRzKGNvbXBvbmVudDogRGF5Q2FsZW5kYXJDb21wb25lbnQsIGRhdGU6IERhdGUsIHRhcmdldDogJ3N0YXJ0JyB8ICdlbmQnKSA6IGJvb2xlYW4ge1xuXHRpZiAoY29tcG9uZW50LmNvbmZpZy5taW5EYXRlICYmIGRhdGUgPCBjb21wb25lbnQuY29uZmlnLm1pbkRhdGUpIHtcblx0XHRjb21wb25lbnQubm90aWZpY2F0aW9uID0geyB0ZXh0OiBjb21wb25lbnQuaTE4bi5kYXRlX3VuYXZhaWxhYmxlLCBlcnJvcjogdHJ1ZSB9O1xuXHRcdHRhcmdldCA9PT0gJ3N0YXJ0JyA/IGNvbXBvbmVudC5zdGFydERhdGVFcnJvciA9IGNvbXBvbmVudC5pMThuLmludmFsaWRfZGF0ZSA6IGNvbXBvbmVudC5lbmREYXRlRXJyb3IgPSBjb21wb25lbnQuaTE4bi5pbnZhbGlkX2RhdGU7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0aWYgKGNvbXBvbmVudC5jb25maWcubWF4RGF0ZSAmJiBkYXRlID4gY29tcG9uZW50LmNvbmZpZy5tYXhEYXRlKSB7XG5cdFx0Y29tcG9uZW50Lm5vdGlmaWNhdGlvbiA9IHsgdGV4dDogY29tcG9uZW50LmkxOG4uZGF0ZV91bmF2YWlsYWJsZSwgZXJyb3I6IHRydWUgfTtcblx0XHR0YXJnZXQgPT09ICdzdGFydCcgPyBjb21wb25lbnQuc3RhcnREYXRlRXJyb3IgPSBjb21wb25lbnQuaTE4bi5pbnZhbGlkX2RhdGUgOiBjb21wb25lbnQuZW5kRGF0ZUVycm9yID0gY29tcG9uZW50LmkxOG4uaW52YWxpZF9kYXRlO1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gb25EYXRlS2V5dXAoY29tcG9uZW50OiBEYXlDYWxlbmRhckNvbXBvbmVudCwgZXZlbnQ6IEtleWJvYXJkRXZlbnQsIHRhcmdldDogJ3N0YXJ0JyB8ICdlbmQnKTogdm9pZCB7XG5cdGNvbnN0IGlnbm9yZWRLZXlzID0gWydBcnJvd1VwJywgJ0Fycm93RG93bicsICdBcnJvd0xlZnQnLCAnQXJyb3dSaWdodCcsICdFbnRlcicsICcgJywgJ1NwYWNlYmFyJ107XG5cdGlmIChpZ25vcmVkS2V5cy5pbmNsdWRlcyhldmVudC5rZXkpKSB7IHJldHVybjsgfVxuXG5cdGNvbnN0IGVycm9yUHJvcCA9IHRhcmdldCA9PT0gJ3N0YXJ0JyA/ICdzdGFydERhdGVFcnJvcicgOiAnZW5kRGF0ZUVycm9yJztcblx0Y29uc3QgZGlzYWJsZWQgPSB0YXJnZXQgPT09ICdzdGFydCcgPyAnZW5kRmllbGREaXNhYmxlZCcgOiAnc3RhcnRGaWVsZERpc2FibGVkJztcblx0Y29uc3QgZGF0ZUlucHV0ID0gdGFyZ2V0ID09PSAnc3RhcnQnID8gY29tcG9uZW50LnN0YXJ0RGF0ZUZpZWxkIDogY29tcG9uZW50LmVuZERhdGVGaWVsZDtcblx0Y29uc3Qgc2VsZWN0ZWRSYW5nZVByb3AgPSB0YXJnZXQgPT09ICdzdGFydCcgPyAnc2VsZWN0ZWRSYW5nZVN0YXJ0JyA6ICdzZWxlY3RlZFJhbmdlRW5kJztcblxuXHRjb25zdCB2YWx1ZSA9IGRhdGVJbnB1dD8uaW5wdXRWYWx1ZSA/PyAnJztcblxuXHRpZiAodmFsdWUubGVuZ3RoIDwgMTApIHtcblx0XHRjb21wb25lbnRbc2VsZWN0ZWRSYW5nZVByb3BdID0gbnVsbDtcblxuXHRcdGlmKCFjb21wb25lbnQubm90aWZpY2F0aW9uPy5lcnJvcikge1xuXHRcdFx0Y29tcG9uZW50Lm5vdGlmaWNhdGlvbiA9IG51bGw7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbHVlLmxlbmd0aCA8IDEpIHtcblx0XHRcdGNvbXBvbmVudFtlcnJvclByb3BdID0gJyc7XG5cdFx0XHRjb21wb25lbnRbZGlzYWJsZWRdID0gZmFsc2U7XG5cdFx0XHRjb21wb25lbnQubm90aWZpY2F0aW9uID0gbnVsbDtcblx0XHR9XG5cdH1cblxuXHRpZiAodmFsdWUubGVuZ3RoID4gOSkge1xuXHRcdHNlYXJjaERhdGUodGhpcywgdmFsdWUsIHRhcmdldCk7XG5cdH1cblxufVxuIl19
|