barsa-calendar 1.0.456 → 2.0.2
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/{esm2020 → esm2022}/barsa-calendar.mjs +4 -4
- package/esm2022/lib/barsa-calendar.module.mjs +117 -0
- package/esm2022/lib/calendar-container/calendar-container.component.mjs +230 -0
- package/esm2022/lib/calendar-header/calendar-header.component.mjs +66 -0
- package/esm2022/lib/calendar-list/calendar-list.component.mjs +18 -0
- package/esm2022/lib/calendar-list-container/calendar-list-container.component.mjs +29 -0
- package/{esm2020 → esm2022}/lib/calendar-list-item/calendar-list-item.component.mjs +14 -14
- package/esm2022/lib/calendar-month/calendar-month.component.mjs +246 -0
- package/esm2022/lib/calendar-selection-days/calendar-selection-days.component.mjs +196 -0
- package/esm2022/lib/calendar-week/calendar-week.component.mjs +252 -0
- package/{esm2020 → esm2022}/lib/constants.mjs +3 -3
- package/esm2022/lib/date-time-picker/date-time-picker.component.mjs +431 -0
- package/esm2022/lib/day-event-list/day-event-list.component.mjs +55 -0
- package/esm2022/lib/day-number-box/day-number-box.component.mjs +105 -0
- package/{esm2020 → esm2022}/lib/days-in-week.pipe.mjs +17 -17
- package/esm2022/lib/equal-date.pipe.mjs +23 -0
- package/esm2022/lib/event-button/event-button.component.mjs +97 -0
- package/esm2022/lib/event-button-end-arrow/event-button-end-arrow.component.mjs +29 -0
- package/esm2022/lib/event-button-start-arrow/event-button-start-arrow.component.mjs +29 -0
- package/esm2022/lib/event-date.pipe.mjs +24 -0
- package/esm2022/lib/event-preview/event-preview.component.mjs +79 -0
- package/{esm2020 → esm2022}/lib/event-time.pipe.mjs +22 -22
- package/{esm2020 → esm2022}/lib/from-to-time.pipe.mjs +23 -23
- package/esm2022/lib/models.mjs +14 -0
- package/esm2022/lib/month-days/month-days.component.mjs +222 -0
- package/esm2022/lib/services/calendar.service.mjs +645 -0
- package/{esm2020 → esm2022}/public-api.mjs +23 -23
- package/fesm2022/barsa-calendar.mjs +2816 -0
- package/fesm2022/barsa-calendar.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/barsa-calendar.module.d.ts +53 -53
- package/lib/calendar-container/calendar-container.component.d.ts +89 -89
- package/lib/calendar-header/calendar-header.component.d.ts +33 -33
- package/lib/calendar-list/calendar-list.component.d.ts +8 -8
- package/lib/calendar-list-container/calendar-list-container.component.d.ts +14 -14
- package/lib/calendar-list-item/calendar-list-item.component.d.ts +7 -7
- package/lib/calendar-month/calendar-month.component.d.ts +70 -70
- package/lib/calendar-selection-days/calendar-selection-days.component.d.ts +48 -48
- package/lib/calendar-week/calendar-week.component.d.ts +70 -70
- package/lib/constants.d.ts +1 -1
- package/lib/date-time-picker/date-time-picker.component.d.ts +113 -112
- package/lib/day-event-list/day-event-list.component.d.ts +20 -20
- package/lib/day-number-box/day-number-box.component.d.ts +30 -30
- package/lib/days-in-week.pipe.d.ts +9 -9
- package/lib/equal-date.pipe.d.ts +8 -8
- package/lib/event-button/event-button.component.d.ts +31 -31
- package/lib/event-button-end-arrow/event-button-end-arrow.component.d.ts +12 -12
- package/lib/event-button-start-arrow/event-button-start-arrow.component.d.ts +12 -12
- package/lib/event-date.pipe.d.ts +9 -9
- package/lib/event-preview/event-preview.component.d.ts +24 -24
- package/lib/event-time.pipe.d.ts +9 -9
- package/lib/from-to-time.pipe.d.ts +9 -9
- package/lib/models.d.ts +110 -110
- package/lib/month-days/month-days.component.d.ts +69 -69
- package/lib/services/calendar.service.d.ts +70 -70
- package/package.json +7 -13
- package/public-api.d.ts +19 -19
- package/esm2020/lib/barsa-calendar.module.mjs +0 -117
- package/esm2020/lib/calendar-container/calendar-container.component.mjs +0 -230
- package/esm2020/lib/calendar-header/calendar-header.component.mjs +0 -67
- package/esm2020/lib/calendar-list/calendar-list.component.mjs +0 -19
- package/esm2020/lib/calendar-list-container/calendar-list-container.component.mjs +0 -30
- package/esm2020/lib/calendar-month/calendar-month.component.mjs +0 -246
- package/esm2020/lib/calendar-selection-days/calendar-selection-days.component.mjs +0 -195
- package/esm2020/lib/calendar-week/calendar-week.component.mjs +0 -249
- package/esm2020/lib/date-time-picker/date-time-picker.component.mjs +0 -433
- package/esm2020/lib/day-event-list/day-event-list.component.mjs +0 -56
- package/esm2020/lib/day-number-box/day-number-box.component.mjs +0 -105
- package/esm2020/lib/equal-date.pipe.mjs +0 -23
- package/esm2020/lib/event-button/event-button.component.mjs +0 -97
- package/esm2020/lib/event-button-end-arrow/event-button-end-arrow.component.mjs +0 -29
- package/esm2020/lib/event-button-start-arrow/event-button-start-arrow.component.mjs +0 -29
- package/esm2020/lib/event-date.pipe.mjs +0 -24
- package/esm2020/lib/event-preview/event-preview.component.mjs +0 -79
- package/esm2020/lib/models.mjs +0 -14
- package/esm2020/lib/month-days/month-days.component.mjs +0 -222
- package/esm2020/lib/services/calendar.service.mjs +0 -645
- package/fesm2015/barsa-calendar.mjs +0 -2813
- package/fesm2015/barsa-calendar.mjs.map +0 -1
- package/fesm2020/barsa-calendar.mjs +0 -2817
- package/fesm2020/barsa-calendar.mjs.map +0 -1
|
@@ -1,230 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
-
import { BehaviorSubject, combineLatest, of } from 'rxjs';
|
|
3
|
-
import { map, switchMap, takeUntil } from 'rxjs/operators';
|
|
4
|
-
import { ReportViewBaseComponent, DateService, LogService, getDateService } from 'barsa-novin-ray-core';
|
|
5
|
-
import * as i0 from "@angular/core";
|
|
6
|
-
import * as i1 from "@angular/common";
|
|
7
|
-
import * as i2 from "barsa-novin-ray-core";
|
|
8
|
-
import * as i3 from "../services/calendar.service";
|
|
9
|
-
import * as i4 from "@angular/forms";
|
|
10
|
-
import * as i5 from "@fundamental-ngx/core/checkbox";
|
|
11
|
-
import * as i6 from "@fundamental-ngx/core/list";
|
|
12
|
-
import * as i7 from "../calendar-list-container/calendar-list-container.component";
|
|
13
|
-
import * as i8 from "../calendar-week/calendar-week.component";
|
|
14
|
-
import * as i9 from "../calendar-month/calendar-month.component";
|
|
15
|
-
import * as i10 from "../calendar-header/calendar-header.component";
|
|
16
|
-
import * as i11 from "../calendar-selection-days/calendar-selection-days.component";
|
|
17
|
-
export class CalendarContainerComponent extends ReportViewBaseComponent {
|
|
18
|
-
constructor(_titleCase, _bbbTranslate, _calendarService, _dateService, _el, _cdr, _renderer2, _findColumnByDbName, _ulvMainService, _portalService) {
|
|
19
|
-
super(_el, _cdr, _renderer2, _findColumnByDbName, _ulvMainService, _portalService);
|
|
20
|
-
this._titleCase = _titleCase;
|
|
21
|
-
this._bbbTranslate = _bbbTranslate;
|
|
22
|
-
this._calendarService = _calendarService;
|
|
23
|
-
this._dateService = _dateService;
|
|
24
|
-
this._el = _el;
|
|
25
|
-
this._cdr = _cdr;
|
|
26
|
-
this._renderer2 = _renderer2;
|
|
27
|
-
this._findColumnByDbName = _findColumnByDbName;
|
|
28
|
-
this._ulvMainService = _ulvMainService;
|
|
29
|
-
this._portalService = _portalService;
|
|
30
|
-
this.deleteTask = new EventEmitter();
|
|
31
|
-
this.editTask = new EventEmitter();
|
|
32
|
-
this.rangeSelect = new EventEmitter();
|
|
33
|
-
this.daySelect = new EventEmitter();
|
|
34
|
-
this.loadData = new EventEmitter();
|
|
35
|
-
this.todayIndex = -1;
|
|
36
|
-
this.eventMoDataList$ = new BehaviorSubject([]);
|
|
37
|
-
}
|
|
38
|
-
ngOnInit() {
|
|
39
|
-
this.calendarFields = this.contextSetting.View.CalendarFields;
|
|
40
|
-
if (this.viewSetting?.CalendarColorField) {
|
|
41
|
-
this.calendarFields.Color = this.viewSetting.CalendarColorField;
|
|
42
|
-
}
|
|
43
|
-
this.userCalendars = this.contextSetting.View.UserCalendars;
|
|
44
|
-
super.ngOnInit();
|
|
45
|
-
this.prepare();
|
|
46
|
-
this._setWidthAndHeight();
|
|
47
|
-
this.prepareMoDataList(this.moDataList);
|
|
48
|
-
this.selectedMonth$.pipe(takeUntil(this._onDestroy$)).subscribe((month) => {
|
|
49
|
-
this.loadData.emit({
|
|
50
|
-
start: month.days[0].date,
|
|
51
|
-
end: month.days[month.days.length - 1].date
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
// this.setTasks(this.calendars, this.moDataList, this.calendarFields);
|
|
55
|
-
}
|
|
56
|
-
ngOnChanges(changes) {
|
|
57
|
-
super.ngOnChanges(changes);
|
|
58
|
-
const { moDataList, deviceSize } = changes;
|
|
59
|
-
if (moDataList && !moDataList.firstChange) {
|
|
60
|
-
this.prepareMoDataList(changes.moDataList.currentValue);
|
|
61
|
-
this._cdr.detectChanges();
|
|
62
|
-
}
|
|
63
|
-
if (deviceSize && !deviceSize.firstChange) {
|
|
64
|
-
this._setWidthAndHeight();
|
|
65
|
-
this._cdr.detectChanges();
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
onCalendarCheckChange(calendar) {
|
|
69
|
-
this._handleUserCalendarsChecked();
|
|
70
|
-
}
|
|
71
|
-
onDayClick(day) {
|
|
72
|
-
this._calendarService.setMode('day', day);
|
|
73
|
-
}
|
|
74
|
-
onShowTask() { }
|
|
75
|
-
onSlideChange(selected) {
|
|
76
|
-
this._calendarService.setSelected(selected);
|
|
77
|
-
}
|
|
78
|
-
onMonthCarouselLoaded({ object }) {
|
|
79
|
-
object.selectedPage = 1;
|
|
80
|
-
}
|
|
81
|
-
onToday() {
|
|
82
|
-
this._calendarService.gotoToday();
|
|
83
|
-
}
|
|
84
|
-
onModeChange(mode) {
|
|
85
|
-
this._calendarService.setMode(mode);
|
|
86
|
-
}
|
|
87
|
-
onRangeChange(e) {
|
|
88
|
-
this._calendarService.rangeSelect(e.startDay, e.endDay, e.monthInfo);
|
|
89
|
-
}
|
|
90
|
-
onPrevTap() {
|
|
91
|
-
// this.gotoPage(this.monthCarouselView.nativeElement.selectedPage - 1);
|
|
92
|
-
this._calendarService.loadPrevious();
|
|
93
|
-
}
|
|
94
|
-
onNextTap() {
|
|
95
|
-
this._calendarService.loadNext();
|
|
96
|
-
// this.gotoPage(this.monthCarouselView.nativeElement.selectedPage + 1);
|
|
97
|
-
}
|
|
98
|
-
onSelectedChange(day) {
|
|
99
|
-
this.selectedDay = { ...day };
|
|
100
|
-
}
|
|
101
|
-
onRangeSelect({ startDate, endDate }) {
|
|
102
|
-
const x = { [this.calendarFields.StartDate]: startDate, [this.calendarFields.EndDate]: endDate };
|
|
103
|
-
this.rangeSelect.emit(x);
|
|
104
|
-
}
|
|
105
|
-
prepareMoDataList(moDataList) {
|
|
106
|
-
this.eventMoDataList$.next(moDataList.map((event) => ({
|
|
107
|
-
...event,
|
|
108
|
-
id: event.Id,
|
|
109
|
-
$StartDateInfo: this._dateService.getDateInfo(event[this.calendarFields.StartDate]),
|
|
110
|
-
$EndDateInfo: this._dateService.getDateInfo(event[this.calendarFields.EndDate])
|
|
111
|
-
})));
|
|
112
|
-
}
|
|
113
|
-
addTd(table, tr, event, colSpan) {
|
|
114
|
-
const colSpanCount = tr.length > 0 ? tr.map((c) => c.colSpan).reduce((a, b) => a + b) > 6 : 0;
|
|
115
|
-
if (colSpanCount) {
|
|
116
|
-
table.push(tr);
|
|
117
|
-
tr = [];
|
|
118
|
-
}
|
|
119
|
-
tr.push({ type: 'td', colSpan, event });
|
|
120
|
-
}
|
|
121
|
-
_handleUserCalendarsChecked() {
|
|
122
|
-
const userCalendars = this.userCalendars?.Data?.MoDataList;
|
|
123
|
-
if (!userCalendars?.length) {
|
|
124
|
-
return;
|
|
125
|
-
}
|
|
126
|
-
const calendars = userCalendars.filter((c) => c.$IsChecked).map((c) => c.Id);
|
|
127
|
-
let moList = this.moDataList;
|
|
128
|
-
if (calendars.length > 0) {
|
|
129
|
-
moList = this.moDataList.filter((c) => c[this.calendarFields.Calendar] && calendars.indexOf(c[this.calendarFields.Calendar].Id) > -1);
|
|
130
|
-
}
|
|
131
|
-
this.prepareMoDataList(moList);
|
|
132
|
-
}
|
|
133
|
-
prepare() {
|
|
134
|
-
this.weekDaysMin = this._calendarService.weekDaysMin();
|
|
135
|
-
this.weekDays = this._calendarService.weekDays();
|
|
136
|
-
this.selectedMonth$ = this._calendarService.selected$;
|
|
137
|
-
this.days$ = this._calendarService.days$;
|
|
138
|
-
this.today = this._calendarService.today;
|
|
139
|
-
this.mode$ = this._calendarService.mode$;
|
|
140
|
-
this.monthWeeksCount$ = this.mode$.pipe(map((mode) => {
|
|
141
|
-
if (mode === 'month') {
|
|
142
|
-
return this._calendarService.selectedMonth.weeksCount;
|
|
143
|
-
}
|
|
144
|
-
return 0;
|
|
145
|
-
}));
|
|
146
|
-
this.modeTitle$ = combineLatest([this.days$, this.mode$]).pipe(takeUntil(this._onDestroy$), switchMap(([, mode]) => {
|
|
147
|
-
if (mode === 'customMonth') {
|
|
148
|
-
return of(`${this._calendarService.weeksCount} ${this._bbbTranslate.transform('Week')}`);
|
|
149
|
-
}
|
|
150
|
-
return of(this._bbbTranslate.transform(this._titleCase.transform(mode)));
|
|
151
|
-
}));
|
|
152
|
-
this.weekModeDays$ = this._calendarService.weekModeDays$;
|
|
153
|
-
this._calendarService.calendars$.pipe(takeUntil(this._onDestroy$)).subscribe((calendars) => {
|
|
154
|
-
const eventCalendars = [...calendars];
|
|
155
|
-
// eventCalendars = eventCalendars.splice(this.selectedIndex, 3);
|
|
156
|
-
this.calendars = eventCalendars;
|
|
157
|
-
// if (this.monthCarouselView) {
|
|
158
|
-
// this.monthCarouselView.nativeElement.selectedPage = 1;
|
|
159
|
-
// }
|
|
160
|
-
});
|
|
161
|
-
// .pipe(takeUntil(this._onDestroy$))
|
|
162
|
-
// .subscribe((todayIndex) => {
|
|
163
|
-
// this.selectedIndex = this.todayIndex = todayIndex;
|
|
164
|
-
// this.gotoPage(this.todayIndex);
|
|
165
|
-
// });
|
|
166
|
-
this.title$ = combineLatest([this.weekModeDays$, this.selectedMonth$, this.days$, this.mode$]).pipe(takeUntil(this._onDestroy$), switchMap(([weekModeDays, monthInfo, days, mode]) => {
|
|
167
|
-
let monthName = monthInfo.dateInfo.monthName;
|
|
168
|
-
const year = monthInfo.dateInfo.strYear;
|
|
169
|
-
if (mode !== 'month') {
|
|
170
|
-
let firstDayInfo;
|
|
171
|
-
let lastDayInfo;
|
|
172
|
-
const daysTemp = mode === 'customMonth' ? days : weekModeDays;
|
|
173
|
-
if (daysTemp.length > 0) {
|
|
174
|
-
firstDayInfo = daysTemp[0];
|
|
175
|
-
lastDayInfo = daysTemp[daysTemp.length - 1];
|
|
176
|
-
monthName = firstDayInfo.monthName;
|
|
177
|
-
if (firstDayInfo.month !== lastDayInfo.month) {
|
|
178
|
-
monthName = `${firstDayInfo.monthName} -
|
|
179
|
-
${lastDayInfo.monthName}`;
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
return of(`${monthName} ${year}`);
|
|
184
|
-
}));
|
|
185
|
-
}
|
|
186
|
-
_setWidthAndHeight() {
|
|
187
|
-
// const divRef= this._el.nativeElement;
|
|
188
|
-
const divRef = this._divRef.nativeElement;
|
|
189
|
-
this.width = divRef.offsetWidth;
|
|
190
|
-
this.height = divRef.offsetHeight - 45;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
CalendarContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarContainerComponent, deps: [{ token: i1.TitleCasePipe }, { token: i2.BbbTranslatePipe }, { token: i3.CalendarService }, { token: i2.DateService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.FindColumnByDbNamePipe }, { token: i2.UlvMainService }, { token: i2.PortalService }], target: i0.ɵɵFactoryTarget.Component });
|
|
194
|
-
CalendarContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarContainerComponent, selector: "bc-calendar-container", inputs: { calendarFields: "calendarFields", userCalendars: "userCalendars", viewSetting: "viewSetting" }, outputs: { deleteTask: "deleteTask", editTask: "editTask", rangeSelect: "rangeSelect", daySelect: "daySelect", loadData: "loadData" }, providers: [
|
|
195
|
-
{
|
|
196
|
-
provide: DateService,
|
|
197
|
-
useFactory: getDateService,
|
|
198
|
-
deps: [LogService]
|
|
199
|
-
}
|
|
200
|
-
], viewQueries: [{ propertyName: "_divRef", first: true, predicate: ["divRef"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div style=\"display: flex; width: 100%; height: 100%; flex-direction: row\">\r\n <div style=\"width: 320px; height: 100%\" *ngIf=\"deviceSize !== 's' && deviceSize !== 'm'\">\r\n <bc-calendar-selection-days\r\n [inline]=\"true\"\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n <div style=\"height: 1px; background: #ccc\"></div>\r\n <div *ngIf=\"userCalendars?.Data?.MoDataList?.length\">\r\n <h4>\u062A\u0642\u0648\u06CC\u0645\u200C\u0647\u0627\u06CC\u200C\u0645\u0646</h4>\r\n <ng-container *ngFor=\"let calendar of userCalendars.Data.MoDataList\">\r\n <ul fd-list>\r\n <li fd-list-item style=\"padding: 0\" class=\"user-calendar\">\r\n <span\r\n [style.background]=\"calendar.Color ? calendar.Color : null\"\r\n style=\"width: 5px; height: 100%; position: absolute\"\r\n ></span>\r\n <fd-checkbox\r\n [(ngModel)]=\"calendar.$IsChecked\"\r\n (change)=\"onCalendarCheckChange(calendar)\"\r\n ></fd-checkbox>\r\n <span fd-list-title>{{ calendar.$Caption }}</span>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div style=\"flex: 1\" #divRef>\r\n <bc-calendar-header\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n [weekModeDays]=\"(weekModeDays$ | async)!!\"\r\n [rtl]=\"rtl\"\r\n [deviceSize]=\"deviceSize\"\r\n [mode]=\"(mode$ | async)!!\"\r\n [modeTitle]=\"(modeTitle$ | async)!!\"\r\n [title]=\"(title$ | async)!!\"\r\n (modeChange)=\"onModeChange($event)\"\r\n (prevTap)=\"onPrevTap()\"\r\n (nextTap)=\"onNextTap()\"\r\n (today)=\"onToday()\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n >\r\n </bc-calendar-header>\r\n <ng-container [ngSwitch]=\"mode$ | async\">\r\n <ng-container *ngSwitchCase=\"'week'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekCalendar;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n weekModeDays: weekModeDays$ | async,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekCalendar;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n weekModeDays: weekModeDays$ | async,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'list'\"></ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthCalendar;\r\n context: {\r\n $implicit: days$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n monthWeeksCount: monthWeeksCount$ | async,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<ng-template\r\n #monthCalendar\r\n let-days\r\n let-moDataList=\"moDataList\"\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-calendarFields=\"calendarFields\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-monthWeeksCount=\"monthWeeksCount\"\r\n let-access=\"access\"\r\n>\r\n <bc-calendar-month\r\n [style.width]=\"width\"\r\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\r\n [containerWidth]=\"width\"\r\n [calendarFields]=\"calendarFields\"\r\n [moDataList]=\"moDataList\"\r\n [monthWeeksCount]=\"monthWeeksCount\"\r\n [rtl]=\"rtl\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [showEvents]=\"showEvents\"\r\n [days]=\"days\"\r\n [canAdd]=\"access.Add\"\r\n [canEdit]=\"access.Edit\"\r\n [canDelete]=\"access.Delete\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event)\"\r\n (showEvent)=\"onShowTask()\"\r\n (deleteEvent)=\"deleteTask.emit($event)\"\r\n (editEvent)=\"editTask.emit($event)\"\r\n (daySelect)=\"daySelect.emit($event)\"\r\n ></bc-calendar-month>\r\n</ng-template>\r\n\r\n<ng-template #listCalendar>\r\n <bc-calendar-list-container\r\n [showEvents]=\"showEvents\"\r\n [selectedDay]=\"selectedDay\"\r\n [calendarFields]=\"calendarFields\"\r\n (showEventsTap)=\"showEvents = !showEvents\"\r\n ></bc-calendar-list-container>\r\n</ng-template>\r\n\r\n<ng-template\r\n #weekCalendar\r\n let-selectedMonth\r\n let-moDataList=\"moDataList\"\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-calendarFields=\"calendarFields\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-weekModeDays=\"weekModeDays\"\r\n let-access=\"access\"\r\n>\r\n <bc-calendar-week\r\n [style.width]=\"width\"\r\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\r\n [containerWidth]=\"width\"\r\n [inDialog]=\"inDialog\"\r\n [calendarFields]=\"calendarFields\"\r\n [moDataList]=\"moDataList\"\r\n [rtl]=\"rtl\"\r\n [canAdd]=\"access.Add\"\r\n [canEdit]=\"access.Edit\"\r\n [canDelete]=\"access.Delete\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [showEvents]=\"showEvents\"\r\n [days]=\"weekModeDays\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event)\"\r\n (showEvent)=\"onShowTask()\"\r\n (deleteEvent)=\"deleteTask.emit($event)\"\r\n (editEvent)=\"editTask.emit($event)\"\r\n (daySelect)=\"daySelect.emit($event)\"\r\n (rangeSelect)=\"onRangeSelect($event)\"\r\n ></bc-calendar-week>\r\n</ng-template>\r\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep li.user-calendar .fd-list__form-item{padding:.5rem}\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"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i1.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.CheckboxComponent, selector: "fd-checkbox", inputs: ["ariaLabel", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "tristate", "tristateSelectable", "labelClass", "required", "values"], outputs: ["focusChange"] }, { kind: "component", type: i6.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { kind: "component", type: i6.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "directive", type: i6.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "component", type: i7.CalendarListContainerComponent, selector: "bc-calendar-list-container", inputs: ["view", "reportItemComponentName", "showEvents", "selectedDay", "calendarFields"], outputs: ["showEventsTap"] }, { kind: "component", type: i8.CalendarWeekComponent, selector: "bc-calendar-week", inputs: ["weekDays", "weekDaysMin", "today", "containerHeight", "calendarFields", "rtl", "inDialog", "deviceSize", "moDataList", "days", "canDelete", "canAdd", "canEdit"], outputs: ["editEvent", "deleteEvent", "showEvent", "rangeSelect", "daySelect", "dayClick"] }, { kind: "component", type: i9.CalendarMonthComponent, selector: "bc-calendar-month", inputs: ["monthWeeksCount", "weekDays", "weekDaysMin", "today", "containerHeight", "days", "calendarFields", "rtl", "deviceSize", "moDataList", "datePicker", "rangePicker", "canDelete", "canAdd", "canEdit", "selectedDate", "startSelectedDayIndex", "endSelectedDayIndex"], outputs: ["editEvent", "deleteEvent", "daySelect", "dayClick", "dayMouseMove", "dayMouseUp", "dayMouseDown", "showEvent"] }, { kind: "component", type: i10.CalendarHeaderComponent, selector: "bc-calendar-header", inputs: ["monthInfo", "weekModeDays", "hideMode", "modeTitle", "title", "deviceSize", "rtl", "mode"], outputs: ["prevTap", "nextTap", "modeChange", "rangeChange", "today"] }, { kind: "component", type: i11.CalendarSelectionDaysComponent, selector: "bc-calendar-selection-days", inputs: ["startSelectedDayIndex", "endSelectedDayIndex", "monthInfo", "inline"], outputs: ["rangeChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
201
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarContainerComponent, decorators: [{
|
|
202
|
-
type: Component,
|
|
203
|
-
args: [{ selector: 'bc-calendar-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
|
|
204
|
-
{
|
|
205
|
-
provide: DateService,
|
|
206
|
-
useFactory: getDateService,
|
|
207
|
-
deps: [LogService]
|
|
208
|
-
}
|
|
209
|
-
], template: "<div style=\"display: flex; width: 100%; height: 100%; flex-direction: row\">\r\n <div style=\"width: 320px; height: 100%\" *ngIf=\"deviceSize !== 's' && deviceSize !== 'm'\">\r\n <bc-calendar-selection-days\r\n [inline]=\"true\"\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n <div style=\"height: 1px; background: #ccc\"></div>\r\n <div *ngIf=\"userCalendars?.Data?.MoDataList?.length\">\r\n <h4>\u062A\u0642\u0648\u06CC\u0645\u200C\u0647\u0627\u06CC\u200C\u0645\u0646</h4>\r\n <ng-container *ngFor=\"let calendar of userCalendars.Data.MoDataList\">\r\n <ul fd-list>\r\n <li fd-list-item style=\"padding: 0\" class=\"user-calendar\">\r\n <span\r\n [style.background]=\"calendar.Color ? calendar.Color : null\"\r\n style=\"width: 5px; height: 100%; position: absolute\"\r\n ></span>\r\n <fd-checkbox\r\n [(ngModel)]=\"calendar.$IsChecked\"\r\n (change)=\"onCalendarCheckChange(calendar)\"\r\n ></fd-checkbox>\r\n <span fd-list-title>{{ calendar.$Caption }}</span>\r\n </li>\r\n </ul>\r\n </ng-container>\r\n </div>\r\n </div>\r\n <div style=\"flex: 1\" #divRef>\r\n <bc-calendar-header\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n [weekModeDays]=\"(weekModeDays$ | async)!!\"\r\n [rtl]=\"rtl\"\r\n [deviceSize]=\"deviceSize\"\r\n [mode]=\"(mode$ | async)!!\"\r\n [modeTitle]=\"(modeTitle$ | async)!!\"\r\n [title]=\"(title$ | async)!!\"\r\n (modeChange)=\"onModeChange($event)\"\r\n (prevTap)=\"onPrevTap()\"\r\n (nextTap)=\"onNextTap()\"\r\n (today)=\"onToday()\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n >\r\n </bc-calendar-header>\r\n <ng-container [ngSwitch]=\"mode$ | async\">\r\n <ng-container *ngSwitchCase=\"'week'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekCalendar;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n weekModeDays: weekModeDays$ | async,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'day'\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekCalendar;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n weekModeDays: weekModeDays$ | async,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n <ng-container *ngSwitchCase=\"'list'\"></ng-container>\r\n <ng-container *ngSwitchDefault>\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthCalendar;\r\n context: {\r\n $implicit: days$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n monthWeeksCount: monthWeeksCount$ | async,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n</div>\r\n<ng-template\r\n #monthCalendar\r\n let-days\r\n let-moDataList=\"moDataList\"\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-calendarFields=\"calendarFields\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-monthWeeksCount=\"monthWeeksCount\"\r\n let-access=\"access\"\r\n>\r\n <bc-calendar-month\r\n [style.width]=\"width\"\r\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\r\n [containerWidth]=\"width\"\r\n [calendarFields]=\"calendarFields\"\r\n [moDataList]=\"moDataList\"\r\n [monthWeeksCount]=\"monthWeeksCount\"\r\n [rtl]=\"rtl\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [showEvents]=\"showEvents\"\r\n [days]=\"days\"\r\n [canAdd]=\"access.Add\"\r\n [canEdit]=\"access.Edit\"\r\n [canDelete]=\"access.Delete\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event)\"\r\n (showEvent)=\"onShowTask()\"\r\n (deleteEvent)=\"deleteTask.emit($event)\"\r\n (editEvent)=\"editTask.emit($event)\"\r\n (daySelect)=\"daySelect.emit($event)\"\r\n ></bc-calendar-month>\r\n</ng-template>\r\n\r\n<ng-template #listCalendar>\r\n <bc-calendar-list-container\r\n [showEvents]=\"showEvents\"\r\n [selectedDay]=\"selectedDay\"\r\n [calendarFields]=\"calendarFields\"\r\n (showEventsTap)=\"showEvents = !showEvents\"\r\n ></bc-calendar-list-container>\r\n</ng-template>\r\n\r\n<ng-template\r\n #weekCalendar\r\n let-selectedMonth\r\n let-moDataList=\"moDataList\"\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-calendarFields=\"calendarFields\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-weekModeDays=\"weekModeDays\"\r\n let-access=\"access\"\r\n>\r\n <bc-calendar-week\r\n [style.width]=\"width\"\r\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\r\n [containerWidth]=\"width\"\r\n [inDialog]=\"inDialog\"\r\n [calendarFields]=\"calendarFields\"\r\n [moDataList]=\"moDataList\"\r\n [rtl]=\"rtl\"\r\n [canAdd]=\"access.Add\"\r\n [canEdit]=\"access.Edit\"\r\n [canDelete]=\"access.Delete\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [showEvents]=\"showEvents\"\r\n [days]=\"weekModeDays\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event)\"\r\n (showEvent)=\"onShowTask()\"\r\n (deleteEvent)=\"deleteTask.emit($event)\"\r\n (editEvent)=\"editTask.emit($event)\"\r\n (daySelect)=\"daySelect.emit($event)\"\r\n (rangeSelect)=\"onRangeSelect($event)\"\r\n ></bc-calendar-week>\r\n</ng-template>\r\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep li.user-calendar .fd-list__form-item{padding:.5rem}\n"] }]
|
|
210
|
-
}], ctorParameters: function () { return [{ type: i1.TitleCasePipe }, { type: i2.BbbTranslatePipe }, { type: i3.CalendarService }, { type: i2.DateService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.FindColumnByDbNamePipe }, { type: i2.UlvMainService }, { type: i2.PortalService }]; }, propDecorators: { _divRef: [{
|
|
211
|
-
type: ViewChild,
|
|
212
|
-
args: ['divRef', { static: true }]
|
|
213
|
-
}], calendarFields: [{
|
|
214
|
-
type: Input
|
|
215
|
-
}], userCalendars: [{
|
|
216
|
-
type: Input
|
|
217
|
-
}], viewSetting: [{
|
|
218
|
-
type: Input
|
|
219
|
-
}], deleteTask: [{
|
|
220
|
-
type: Output
|
|
221
|
-
}], editTask: [{
|
|
222
|
-
type: Output
|
|
223
|
-
}], rangeSelect: [{
|
|
224
|
-
type: Output
|
|
225
|
-
}], daySelect: [{
|
|
226
|
-
type: Output
|
|
227
|
-
}], loadData: [{
|
|
228
|
-
type: Output
|
|
229
|
-
}] } });
|
|
230
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWNhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXItY29udGFpbmVyL2NhbGVuZGFyLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLWNvbnRhaW5lci9jYWxlbmRhci1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUV2QixTQUFTLEVBRVQsWUFBWSxFQUNaLEtBQUssRUFHTCxNQUFNLEVBR04sU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsYUFBYSxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0RSxPQUFPLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRCxPQUFPLEVBRUgsdUJBQXVCLEVBQ3ZCLFdBQVcsRUFDWCxVQUFVLEVBQ1YsY0FBYyxFQU9qQixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7Ozs7O0FBaUI5QixNQUFNLE9BQU8sMEJBQ1QsU0FBUSx1QkFBZ0Q7SUFpQ3hELFlBQ1ksVUFBeUIsRUFDekIsYUFBK0IsRUFDL0IsZ0JBQWlDLEVBQ2pDLFlBQXlCLEVBQ3ZCLEdBQWUsRUFDZixJQUF1QixFQUN2QixVQUFxQixFQUNyQixtQkFBMkMsRUFDM0MsZUFBK0IsRUFDL0IsY0FBNkI7UUFFdkMsS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQVgzRSxlQUFVLEdBQVYsVUFBVSxDQUFlO1FBQ3pCLGtCQUFhLEdBQWIs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SztnQkFDRyxXQUFXO3NCQUFuQixLQUFLO2dCQUNJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcclxuICAgIENoYW5nZURldGVjdG9yUmVmLFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgUmVuZGVyZXIyLFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUaXRsZUNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgY29tYmluZUxhdGVzdCwgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgbWFwLCBzd2l0Y2hNYXAsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbmltcG9ydCB7XHJcbiAgICBVaVJlcG9ydFZpZXdCYXNlU2V0dGluZyxcclxuICAgIFJlcG9ydFZpZXdCYXNlQ29tcG9uZW50LFxyXG4gICAgRGF0ZVNlcnZpY2UsXHJcbiAgICBMb2dTZXJ2aWNlLFxyXG4gICAgZ2V0RGF0ZVNlcnZpY2UsXHJcbiAgICBNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgQ2FsZW5kYXJNZXRhb2JqZWN0RGF0YU1vZGVsLFxyXG4gICAgQmJiVHJhbnNsYXRlUGlwZSxcclxuICAgIEZpbmRDb2x1bW5CeURiTmFtZVBpcGUsXHJcbiAgICBVbHZNYWluU2VydmljZSxcclxuICAgIFBvcnRhbFNlcnZpY2VcclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IENhbGVuZGFyTW9kZSwgQ2FsZW5kYXJNb250aEluZm8sIERheSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JjLWNhbGVuZGFyLWNvbnRhaW5lcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IERhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBnZXREYXRlU2VydmljZSxcclxuICAgICAgICAgICAgZGVwczogW0xvZ1NlcnZpY2VdXHJcbiAgICAgICAgfVxyXG4gICAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJDb250YWluZXJDb21wb25lbnRcclxuICAgIGV4dGVuZHMgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQ8VWlSZXBvcnRWaWV3QmFzZVNldHRpbmc+XHJcbiAgICBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzXHJcbntcclxuICAgIEBWaWV3Q2hpbGQoJ2RpdlJlZicsIHsgc3RhdGljOiB0cnVlIH0pIF9kaXZSZWY6IEVsZW1lbnRSZWY7XHJcbiAgICBASW5wdXQoKSBjYWxlbmRhckZpZWxkcztcclxuICAgIEBJbnB1dCgpIHVzZXJDYWxlbmRhcnM7XHJcbiAgICBASW5wdXQoKSB2aWV3U2V0dGluZzogVWlDYWxlbmRhclNldHRpbmc7XHJcbiAgICBAT3V0cHV0KCkgZGVsZXRlVGFzayA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIEBPdXRwdXQoKSBlZGl0VGFzayA9IG5ldyBFdmVudEVtaXR0ZXI8TWV0YW9iamVjdERhdGFNb2RlbD4oKTtcclxuICAgIEBPdXRwdXQoKSByYW5nZVNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBba2V5OiBzdHJpbmddOiBEYXRlIH0+KCk7XHJcbiAgICBAT3V0cHV0KCkgZGF5U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG4gICAgQE91dHB1dCgpIGxvYWREYXRhID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0YXJ0OiBEYXRlOyBlbmQ6IGFueSB9PigpO1xyXG4gICAgc2VsZWN0ZWREYXk6IERheTtcclxuICAgIHRvZGF5SW5kZXggPSAtMTtcclxuICAgIHNlbGVjdGVkSW5kZXg6IGFueTtcclxuICAgIGNhbGVuZGFyczogQ2FsZW5kYXJNb250aEluZm9bXTtcclxuICAgIHNob3dFdmVudHM6IGJvb2xlYW47XHJcbiAgICB3aWR0aDogbnVtYmVyO1xyXG4gICAgaGVpZ2h0OiBudW1iZXI7XHJcbiAgICBzZWxlY3RlZE1vbnRoJDogT2JzZXJ2YWJsZTxDYWxlbmRhck1vbnRoSW5mbz47XHJcbiAgICB0b2RheTogRGF0ZTtcclxuICAgIHdlZWtEYXlzTWluOiBzdHJpbmdbXTtcclxuICAgIHdlZWtEYXlzOiBzdHJpbmdbXTtcclxuICAgIG1vZGUkOiBPYnNlcnZhYmxlPENhbGVuZGFyTW9kZT47XHJcbiAgICBzZWxlY3RlZFdlZWskOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICB3ZWVrTW9kZURheXMkOiBPYnNlcnZhYmxlPERheVtdPjtcclxuICAgIGRheXMkOiBPYnNlcnZhYmxlPERheVtdPjtcclxuICAgIHdlZWtzQ291bnQ6IG51bWJlcjtcclxuICAgIGZpcnN0V2Vla0luZGV4OiBudW1iZXI7XHJcbiAgICBtb250aFdlZWtzQ291bnQkOiBPYnNlcnZhYmxlPG51bWJlcj47XHJcbiAgICBtb2RlVGl0bGUkOiBPYnNlcnZhYmxlPHN0cmluZz47XHJcbiAgICB0aXRsZSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIGV2ZW50TW9EYXRhTGlzdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE1ldGFvYmplY3REYXRhTW9kZWxbXT4oW10pO1xyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBfdGl0bGVDYXNlOiBUaXRsZUNhc2VQaXBlLFxyXG4gICAgICAgIHByaXZhdGUgX2JiYlRyYW5zbGF0ZTogQmJiVHJhbnNsYXRlUGlwZSxcclxuICAgICAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2U6IENhbGVuZGFyU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIF9kYXRlU2VydmljZTogRGF0ZVNlcnZpY2UsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9lbDogRWxlbWVudFJlZixcclxuICAgICAgICBwcm90ZWN0ZWQgX2NkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgICAgICAgcHJvdGVjdGVkIF9yZW5kZXJlcjI6IFJlbmRlcmVyMixcclxuICAgICAgICBwcm90ZWN0ZWQgX2ZpbmRDb2x1bW5CeURiTmFtZTogRmluZENvbHVtbkJ5RGJOYW1lUGlwZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3Vsdk1haW5TZXJ2aWNlOiBVbHZNYWluU2VydmljZSxcclxuICAgICAgICBwcm90ZWN0ZWQgX3BvcnRhbFNlcnZpY2U6IFBvcnRhbFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9lbCwgX2NkciwgX3JlbmRlcmVyMiwgX2ZpbmRDb2x1bW5CeURiTmFtZSwgX3Vsdk1haW5TZXJ2aWNlLCBfcG9ydGFsU2VydmljZSk7XHJcbiAgICB9XHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRmllbGRzID0gdGhpcy5jb250ZXh0U2V0dGluZy5WaWV3LkNhbGVuZGFyRmllbGRzO1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdTZXR0aW5nPy5DYWxlbmRhckNvbG9yRmllbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxlbmRhckZpZWxkcy5Db2xvciA9IHRoaXMudmlld1NldHRpbmcuQ2FsZW5kYXJDb2xvckZpZWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVzZXJDYWxlbmRhcnMgPSB0aGlzLmNvbnRleHRTZXR0aW5nLlZpZXcuVXNlckNhbGVuZGFycztcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xyXG4gICAgICAgIHRoaXMuX3NldFdpZHRoQW5kSGVpZ2h0KCk7XHJcbiAgICAgICAgdGhpcy5wcmVwYXJlTW9EYXRhTGlzdCh0aGlzLm1vRGF0YUxpc3QpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgobW9udGg6IENhbGVuZGFyTW9udGhJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogbW9udGguZGF5c1swXS5kYXRlLFxyXG4gICAgICAgICAgICAgICAgZW5kOiBtb250aC5kYXlzW21vbnRoLmRheXMubGVuZ3RoIC0gMV0uZGF0ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5zZXRUYXNrcyh0aGlzLmNhbGVuZGFycywgdGhpcy5tb0RhdGFMaXN0LCB0aGlzLmNhbGVuZGFyRmllbGRzKTtcclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBjb25zdCB7IG1vRGF0YUxpc3QsIGRldmljZVNpemUgfSA9IGNoYW5nZXM7XHJcbiAgICAgICAgaWYgKG1vRGF0YUxpc3QgJiYgIW1vRGF0YUxpc3QuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlTW9EYXRhTGlzdChjaGFuZ2VzLm1vRGF0YUxpc3QuY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRldmljZVNpemUgJiYgIWRldmljZVNpemUuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0V2lkdGhBbmRIZWlnaHQoKTtcclxuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbkNhbGVuZGFyQ2hlY2tDaGFuZ2UoY2FsZW5kYXI6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVVc2VyQ2FsZW5kYXJzQ2hlY2tlZCgpO1xyXG4gICAgfVxyXG4gICAgb25EYXlDbGljayhkYXk6IERheSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZXRNb2RlKCdkYXknLCBkYXkpO1xyXG4gICAgfVxyXG4gICAgb25TaG93VGFzaygpOiB2b2lkIHt9XHJcbiAgICBvblNsaWRlQ2hhbmdlKHNlbGVjdGVkOiBDYWxlbmRhck1vbnRoSW5mbyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZXRTZWxlY3RlZChzZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgICBvbk1vbnRoQ2Fyb3VzZWxMb2FkZWQoeyBvYmplY3QgfSk6IHZvaWQge1xyXG4gICAgICAgIG9iamVjdC5zZWxlY3RlZFBhZ2UgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9kYXkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmdvdG9Ub2RheSgpO1xyXG4gICAgfVxyXG4gICAgb25Nb2RlQ2hhbmdlKG1vZGU6IENhbGVuZGFyTW9kZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZXRNb2RlKG1vZGUpO1xyXG4gICAgfVxyXG4gICAgb25SYW5nZUNoYW5nZShlOiB7IHN0YXJ0RGF5OiBEYXk7IGVuZERheTogRGF5OyBtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UucmFuZ2VTZWxlY3QoZS5zdGFydERheSwgZS5lbmREYXksIGUubW9udGhJbmZvKTtcclxuICAgIH1cclxuICAgIG9uUHJldlRhcCgpOiB2b2lkIHtcclxuICAgICAgICAvLyAgIHRoaXMuZ290b1BhZ2UodGhpcy5tb250aENhcm91c2VsVmlldy5uYXRpdmVFbGVtZW50LnNlbGVjdGVkUGFnZSAtIDEpO1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sb2FkUHJldmlvdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk5leHRUYXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxvYWROZXh0KCk7XHJcbiAgICAgICAgLy8gdGhpcy5nb3RvUGFnZSh0aGlzLm1vbnRoQ2Fyb3VzZWxWaWV3Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0ZWRQYWdlICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RlZENoYW5nZShkYXk6IERheSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXkgPSB7IC4uLmRheSB9O1xyXG4gICAgfVxyXG4gICAgb25SYW5nZVNlbGVjdCh7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeCA9IHsgW3RoaXMuY2FsZW5kYXJGaWVsZHMuU3RhcnREYXRlXTogc3RhcnREYXRlLCBbdGhpcy5jYWxlbmRhckZpZWxkcy5FbmREYXRlXTogZW5kRGF0ZSB9O1xyXG4gICAgICAgIHRoaXMucmFuZ2VTZWxlY3QuZW1pdCh4KTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVwYXJlTW9EYXRhTGlzdChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmV2ZW50TW9EYXRhTGlzdCQubmV4dChcclxuICAgICAgICAgICAgbW9EYXRhTGlzdC5tYXAoKGV2ZW50KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgLi4uZXZlbnQsXHJcbiAgICAgICAgICAgICAgICBpZDogZXZlbnQuSWQsIC8vIGJlY2F1c2UgaW4gY29yZS5qcyBjYWxlbmRhciBzZWxlY3Rpb24gYWRhcHRlciByZWFkIGlkIHdpdGggbG93ZXJjYXNlXHJcbiAgICAgICAgICAgICAgICAkU3RhcnREYXRlSW5mbzogdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0RGF0ZUluZm8oZXZlbnRbdGhpcy5jYWxlbmRhckZpZWxkcy5TdGFydERhdGVdKSxcclxuICAgICAgICAgICAgICAgICRFbmREYXRlSW5mbzogdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0RGF0ZUluZm8oZXZlbnRbdGhpcy5jYWxlbmRhckZpZWxkcy5FbmREYXRlXSlcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUZCh0YWJsZTogYW55W10sIHRyOiBhbnlbXSwgZXZlbnQ6IENhbGVuZGFyTWV0YW9iamVjdERhdGFNb2RlbCwgY29sU3BhbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY29sU3BhbkNvdW50ID0gdHIubGVuZ3RoID4gMCA/IHRyLm1hcCgoYykgPT4gYy5jb2xTcGFuKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKSA+IDYgOiAwO1xyXG4gICAgICAgIGlmIChjb2xTcGFuQ291bnQpIHtcclxuICAgICAgICAgICAgdGFibGUucHVzaCh0cik7XHJcbiAgICAgICAgICAgIHRyID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyLnB1c2goeyB0eXBlOiAndGQnLCBjb2xTcGFuLCBldmVudCB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2hhbmRsZVVzZXJDYWxlbmRhcnNDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHVzZXJDYWxlbmRhcnMgPSB0aGlzLnVzZXJDYWxlbmRhcnM/LkRhdGE/Lk1vRGF0YUxpc3Q7XHJcbiAgICAgICAgaWYgKCF1c2VyQ2FsZW5kYXJzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjYWxlbmRhcnMgPSB1c2VyQ2FsZW5kYXJzLmZpbHRlcigoYykgPT4gYy4kSXNDaGVja2VkKS5tYXAoKGMpID0+IGMuSWQpO1xyXG4gICAgICAgIGxldCBtb0xpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XHJcblxyXG4gICAgICAgIGlmIChjYWxlbmRhcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBtb0xpc3QgPSB0aGlzLm1vRGF0YUxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGMpID0+IGNbdGhpcy5jYWxlbmRhckZpZWxkcy5DYWxlbmRhcl0gJiYgY2FsZW5kYXJzLmluZGV4T2YoY1t0aGlzLmNhbGVuZGFyRmllbGRzLkNhbGVuZGFyXS5JZCkgPiAtMVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByZXBhcmVNb0RhdGFMaXN0KG1vTGlzdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHByZXBhcmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy53ZWVrRGF5c01pbiA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS53ZWVrRGF5c01pbigpO1xyXG4gICAgICAgIHRoaXMud2Vla0RheXMgPSB0aGlzLl9jYWxlbmRhclNlcnZpY2Uud2Vla0RheXMoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTW9udGgkID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnNlbGVjdGVkJDtcclxuICAgICAgICB0aGlzLmRheXMkID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmRheXMkO1xyXG4gICAgICAgIHRoaXMudG9kYXkgPSB0aGlzLl9jYWxlbmRhclNlcnZpY2UudG9kYXk7XHJcbiAgICAgICAgdGhpcy5tb2RlJCA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS5tb2RlJDtcclxuXHJcbiAgICAgICAgdGhpcy5tb250aFdlZWtzQ291bnQkID0gdGhpcy5tb2RlJC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKG1vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnbW9udGgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZWxlY3RlZE1vbnRoLndlZWtzQ291bnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMubW9kZVRpdGxlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF5cyQsIHRoaXMubW9kZSRdKS5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoWywgbW9kZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnY3VzdG9tTW9udGgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGAke3RoaXMuX2NhbGVuZGFyU2VydmljZS53ZWVrc0NvdW50fSAgJHt0aGlzLl9iYmJUcmFuc2xhdGUudHJhbnNmb3JtKCdXZWVrJyl9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5fYmJiVHJhbnNsYXRlLnRyYW5zZm9ybSh0aGlzLl90aXRsZUNhc2UudHJhbnNmb3JtKG1vZGUpKSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy53ZWVrTW9kZURheXMkID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLndlZWtNb2RlRGF5cyQ7XHJcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFycyQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoY2FsZW5kYXJzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50Q2FsZW5kYXJzID0gWy4uLmNhbGVuZGFyc107XHJcbiAgICAgICAgICAgIC8vIGV2ZW50Q2FsZW5kYXJzID0gZXZlbnRDYWxlbmRhcnMuc3BsaWNlKHRoaXMuc2VsZWN0ZWRJbmRleCwgMyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzID0gZXZlbnRDYWxlbmRhcnM7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLm1vbnRoQ2Fyb3VzZWxWaWV3KSB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5tb250aENhcm91c2VsVmlldy5uYXRpdmVFbGVtZW50LnNlbGVjdGVkUGFnZSA9IDE7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxyXG4gICAgICAgIC8vICAgLnN1YnNjcmliZSgodG9kYXlJbmRleCkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnRvZGF5SW5kZXggPSB0b2RheUluZGV4O1xyXG4gICAgICAgIC8vICAgICB0aGlzLmdvdG9QYWdlKHRoaXMudG9kYXlJbmRleCk7XHJcbiAgICAgICAgLy8gICB9KTtcclxuICAgICAgICB0aGlzLnRpdGxlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2Vla01vZGVEYXlzJCwgdGhpcy5zZWxlY3RlZE1vbnRoJCwgdGhpcy5kYXlzJCwgdGhpcy5tb2RlJF0pLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKChbd2Vla01vZGVEYXlzLCBtb250aEluZm8sIGRheXMsIG1vZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbW9udGhOYW1lID0gbW9udGhJbmZvLmRhdGVJbmZvLm1vbnRoTmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSBtb250aEluZm8uZGF0ZUluZm8uc3RyWWVhcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kZSAhPT0gJ21vbnRoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdERheUluZm86IERheTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdERheUluZm86IERheTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzVGVtcCA9IG1vZGUgPT09ICdjdXN0b21Nb250aCcgPyBkYXlzIDogd2Vla01vZGVEYXlzO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXlzVGVtcC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF5SW5mbyA9IGRheXNUZW1wWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0RGF5SW5mbyA9IGRheXNUZW1wW2RheXNUZW1wLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aE5hbWUgPSBmaXJzdERheUluZm8ubW9udGhOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3REYXlJbmZvLm1vbnRoICE9PSBsYXN0RGF5SW5mby5tb250aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOYW1lID0gYCR7Zmlyc3REYXlJbmZvLm1vbnRoTmFtZX0gLVxyXG4gICAgICAgICAgICAgICR7bGFzdERheUluZm8ubW9udGhOYW1lfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoYCR7bW9udGhOYW1lfSAgJHt5ZWFyfWApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0V2lkdGhBbmRIZWlnaHQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gY29uc3QgZGl2UmVmPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGRpdlJlZiA9IHRoaXMuX2RpdlJlZi5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gZGl2UmVmLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gZGl2UmVmLm9mZnNldEhlaWdodCAtIDQ1O1xyXG4gICAgfVxyXG59XHJcbmludGVyZmFjZSBVaUNhbGVuZGFyU2V0dGluZyBleHRlbmRzIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nIHtcclxuICAgIENhbGVuZGFyQ29sb3JGaWVsZDogc3RyaW5nO1xyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBmbGV4LWRpcmVjdGlvbjogcm93XCI+XHJcbiAgICA8ZGl2IHN0eWxlPVwid2lkdGg6IDMyMHB4OyBoZWlnaHQ6IDEwMCVcIiAqbmdJZj1cImRldmljZVNpemUgIT09ICdzJyAmJiBkZXZpY2VTaXplICE9PSAnbSdcIj5cclxuICAgICAgICA8YmMtY2FsZW5kYXItc2VsZWN0aW9uLWRheXNcclxuICAgICAgICAgICAgW2lubGluZV09XCJ0cnVlXCJcclxuICAgICAgICAgICAgW21vbnRoSW5mb109XCIoc2VsZWN0ZWRNb250aCQgfCBhc3luYykhIVwiXHJcbiAgICAgICAgICAgIChyYW5nZUNoYW5nZSk9XCJvblJhbmdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID48L2JjLWNhbGVuZGFyLXNlbGVjdGlvbi1kYXlzPlxyXG4gICAgICAgIDxkaXYgc3R5bGU9XCJoZWlnaHQ6IDFweDsgYmFja2dyb3VuZDogI2NjY1wiPjwvZGl2PlxyXG4gICAgICAgIDxkaXYgKm5nSWY9XCJ1c2VyQ2FsZW5kYXJzPy5EYXRhPy5Nb0RhdGFMaXN0Py5sZW5ndGhcIj5cclxuICAgICAgICAgICAgPGg0Ptiq2YLZiNuM2YXigIzZh9in24zigIzZhdmGPC9oND5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2FsZW5kYXIgb2YgdXNlckNhbGVuZGFycy5EYXRhLk1vRGF0YUxpc3RcIj5cclxuICAgICAgICAgICAgICAgIDx1bCBmZC1saXN0PlxyXG4gICAgICAgICAgICAgICAgICAgIDxsaSBmZC1saXN0LWl0ZW0gc3R5bGU9XCJwYWRkaW5nOiAwXCIgY2xhc3M9XCJ1c2VyLWNhbGVuZGFyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc3R5bGUuYmFja2dyb3VuZF09XCJjYWxlbmRhci5Db2xvciA/IGNhbGVuZGFyLkNvbG9yIDogbnVsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZT1cIndpZHRoOiA1cHg7IGhlaWdodDogMTAwJTsgcG9zaXRpb246IGFic29sdXRlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGZkLWNoZWNrYm94XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImNhbGVuZGFyLiRJc0NoZWNrZWRcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNhbGVuZGFyQ2hlY2tDaGFuZ2UoY2FsZW5kYXIpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgPjwvZmQtY2hlY2tib3g+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLWxpc3QtdGl0bGU+e3sgY2FsZW5kYXIuJENhcHRpb24gfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2IHN0eWxlPVwiZmxleDogMVwiICNkaXZSZWY+XHJcbiAgICAgICAgPGJjLWNhbGVuZGFyLWhlYWRlclxyXG4gICAgICAgICAgICBbbW9udGhJbmZvXT1cIihzZWxlY3RlZE1vbnRoJCB8IGFzeW5jKSEhXCJcclxuICAgICAgICAgICAgW3dlZWtNb2RlRGF5c109XCIod2Vla01vZGVEYXlzJCB8IGFzeW5jKSEhXCJcclxuICAgICAgICAgICAgW3J0bF09XCJydGxcIlxyXG4gICAgICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICAgICAgW21vZGVdPVwiKG1vZGUkIHwgYXN5bmMpISFcIlxyXG4gICAgICAgICAgICBbbW9kZVRpdGxlXT1cIihtb2RlVGl0bGUkIHwgYXN5bmMpISFcIlxyXG4gICAgICAgICAgICBbdGl0bGVdPVwiKHRpdGxlJCB8IGFzeW5jKSEhXCJcclxuICAgICAgICAgICAgKG1vZGVDaGFuZ2UpPVwib25Nb2RlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAocHJldlRhcCk9XCJvblByZXZUYXAoKVwiXHJcbiAgICAgICAgICAgIChuZXh0VGFwKT1cIm9uTmV4dFRhcCgpXCJcclxuICAgICAgICAgICAgKHRvZGF5KT1cIm9uVG9kYXkoKVwiXHJcbiAgICAgICAgICAgIChyYW5nZUNoYW5nZSk9XCJvblJhbmdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgID5cclxuICAgICAgICA8L2JjLWNhbGVuZGFyLWhlYWRlcj5cclxuICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJtb2RlJCB8IGFzeW5jXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIid3ZWVrJ1wiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtDYWxlbmRhcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJGltcGxpY2l0OiBzZWxlY3RlZE1vbnRoJCB8IGFzeW5jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9EYXRhTGlzdDogZXZlbnRNb0RhdGFMaXN0JCB8IGFzeW5jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBydGw6IHJ0bCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNob3dFdmVudHM6IHNob3dFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3ZWVrTW9kZURheXM6IHdlZWtNb2RlRGF5cyQgfCBhc3luYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZGF5OiB0b2RheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZVNpemU6IGRldmljZVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhckZpZWxkczogY2FsZW5kYXJGaWVsZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY2Nlc3M6IGFjY2Vzc1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIidkYXknXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgd2Vla0NhbGVuZGFyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IHNlbGVjdGVkTW9udGgkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb0RhdGFMaXN0OiBldmVudE1vRGF0YUxpc3QkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0bDogcnRsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0V2ZW50czogc2hvd0V2ZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlZWtNb2RlRGF5czogd2Vla01vZGVEYXlzJCB8IGFzeW5jLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9kYXk6IHRvZGF5LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlU2l6ZTogZGV2aWNlU2l6ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGVuZGFyRmllbGRzOiBjYWxlbmRhckZpZWxkcyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzczogYWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiJ2xpc3QnXCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXJcclxuICAgICAgICAgICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aENhbGVuZGFyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaW1wbGljaXQ6IGRheXMkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb0RhdGFMaXN0OiBldmVudE1vRGF0YUxpc3QkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogd2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ0bDogcnRsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0V2ZW50czogc2hvd0V2ZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvZGF5OiB0b2RheSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZVNpemU6IGRldmljZVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxlbmRhckZpZWxkczogY2FsZW5kYXJGaWVsZHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb250aFdlZWtzQ291bnQ6IG1vbnRoV2Vla3NDb3VudCQgfCBhc3luYyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VzczogYWNjZXNzXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvZGl2PlxyXG48L2Rpdj5cclxuPG5nLXRlbXBsYXRlXHJcbiAgICAjbW9udGhDYWxlbmRhclxyXG4gICAgbGV0LWRheXNcclxuICAgIGxldC1tb0RhdGFMaXN0PVwibW9EYXRhTGlzdFwiXHJcbiAgICBsZXQtd2lkdGg9XCJ3aWR0aFwiXHJcbiAgICBsZXQtaGVpZ2h0PVwiaGVpZ2h0XCJcclxuICAgIGxldC1jYWxlbmRhckZpZWxkcz1cImNhbGVuZGFyRmllbGRzXCJcclxuICAgIGxldC1ydGw9XCJydGxcIlxyXG4gICAgbGV0LXRvZGF5PVwidG9kYXlcIlxyXG4gICAgbGV0LXNob3dFdmVudHM9XCJzaG93RXZlbnRzXCJcclxuICAgIGxldC1kZXZpY2VTaXplPVwiZGV2aWNlU2l6ZVwiXHJcbiAgICBsZXQtbW9udGhXZWVrc0NvdW50PVwibW9udGhXZWVrc0NvdW50XCJcclxuICAgIGxldC1hY2Nlc3M9XCJhY2Nlc3NcIlxyXG4+XHJcbiAgICA8YmMtY2FsZW5kYXItbW9udGhcclxuICAgICAgICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxyXG4gICAgICAgIFtjb250YWluZXJIZWlnaHRdPVwicGFyZW50SGVpZ2h0ICE9PSAwID8gcGFyZW50SGVpZ2h0IDogaGVpZ2h0XCJcclxuICAgICAgICBbY29udGFpbmVyV2lkdGhdPVwid2lkdGhcIlxyXG4gICAgICAgIFtjYWxlbmRhckZpZWxkc109XCJjYWxlbmRhckZpZWxkc1wiXHJcbiAgICAgICAgW21vRGF0YUxpc3RdPVwibW9EYXRhTGlzdFwiXHJcbiAgICAgICAgW21vbnRoV2Vla3NDb3VudF09XCJtb250aFdlZWtzQ291bnRcIlxyXG4gICAgICAgIFtydGxdPVwicnRsXCJcclxuICAgICAgICBbd2Vla0RheXNdPVwid2Vla0RheXNcIlxyXG4gICAgICAgIFt3ZWVrRGF5c01pbl09XCJ3ZWVrRGF5c01pblwiXHJcbiAgICAgICAgW3RvZGF5XT1cInRvZGF5XCJcclxuICAgICAgICBbc2hvd0V2ZW50c109XCJzaG93RXZlbnRzXCJcclxuICAgICAgICBbZGF5c109XCJkYXlzXCJcclxuICAgICAgICBbY2FuQWRkXT1cImFjY2Vzcy5BZGRcIlxyXG4gICAgICAgIFtjYW5FZGl0XT1cImFjY2Vzcy5FZGl0XCJcclxuICAgICAgICBbY2FuRGVsZXRlXT1cImFjY2Vzcy5EZWxldGVcIlxyXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgIChkYXlDbGljayk9XCJvbkRheUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChzaG93RXZlbnQpPVwib25TaG93VGFzaygpXCJcclxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwiZGVsZXRlVGFzay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChlZGl0RXZlbnQpPVwiZWRpdFRhc2suZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAoZGF5U2VsZWN0KT1cImRheVNlbGVjdC5lbWl0KCRldmVudClcIlxyXG4gICAgPjwvYmMtY2FsZW5kYXItbW9udGg+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2xpc3RDYWxlbmRhcj5cclxuICAgIDxiYy1jYWxlbmRhci1saXN0LWNvbnRhaW5lclxyXG4gICAgICAgIFtzaG93RXZlbnRzXT1cInNob3dFdmVudHNcIlxyXG4gICAgICAgIFtzZWxlY3RlZERheV09XCJzZWxlY3RlZERheVwiXHJcbiAgICAgICAgW2NhbGVuZGFyRmllbGRzXT1cImNhbGVuZGFyRmllbGRzXCJcclxuICAgICAgICAoc2hvd0V2ZW50c1RhcCk9XCJzaG93RXZlbnRzID0gIXNob3dFdmVudHNcIlxyXG4gICAgPjwvYmMtY2FsZW5kYXItbGlzdC1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGVcclxuICAgICN3ZWVrQ2FsZW5kYXJcclxuICAgIGxldC1zZWxlY3RlZE1vbnRoXHJcbiAgICBsZXQtbW9EYXRhTGlzdD1cIm1vRGF0YUxpc3RcIlxyXG4gICAgbGV0LXdpZHRoPVwid2lkdGhcIlxyXG4gICAgbGV0LWhlaWdodD1cImhlaWdodFwiXHJcbiAgICBsZXQtY2FsZW5kYXJGaWVsZHM9XCJjYWxlbmRhckZpZWxkc1wiXHJcbiAgICBsZXQtcnRsPVwicnRsXCJcclxuICAgIGxldC10b2RheT1cInRvZGF5XCJcclxuICAgIGxldC1zaG93RXZlbnRzPVwic2hvd0V2ZW50c1wiXHJcbiAgICBsZXQtZGV2aWNlU2l6ZT1cImRldmljZVNpemVcIlxyXG4gICAgbGV0LXdlZWtNb2RlRGF5cz1cIndlZWtNb2RlRGF5c1wiXHJcbiAgICBsZXQtYWNjZXNzPVwiYWNjZXNzXCJcclxuPlxyXG4gICAgPGJjLWNhbGVuZGFyLXdlZWtcclxuICAgICAgICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxyXG4gICAgICAgIFtjb250YWluZXJIZWlnaHRdPVwicGFyZW50SGVpZ2h0ICE9PSAwID8gcGFyZW50SGVpZ2h0IDogaGVpZ2h0XCJcclxuICAgICAgICBbY29udGFpbmVyV2lkdGhdPVwid2lkdGhcIlxyXG4gICAgICAgIFtpbkRpYWxvZ109XCJpbkRpYWxvZ1wiXHJcbiAgICAgICAgW2NhbGVuZGFyRmllbGRzXT1cImNhbGVuZGFyRmllbGRzXCJcclxuICAgICAgICBbbW9EYXRhTGlzdF09XCJtb0RhdGFMaXN0XCJcclxuICAgICAgICBbcnRsXT1cInJ0bFwiXHJcbiAgICAgICAgW2NhbkFkZF09XCJhY2Nlc3MuQWRkXCJcclxuICAgICAgICBbY2FuRWRpdF09XCJhY2Nlc3MuRWRpdFwiXHJcbiAgICAgICAgW2NhbkRlbGV0ZV09XCJhY2Nlc3MuRGVsZXRlXCJcclxuICAgICAgICBbd2Vla0RheXNdPVwid2Vla0RheXNcIlxyXG4gICAgICAgIFt3ZWVrRGF5c01pbl09XCJ3ZWVrRGF5c01pblwiXHJcbiAgICAgICAgW3RvZGF5XT1cInRvZGF5XCJcclxuICAgICAgICBbc2hvd0V2ZW50c109XCJzaG93RXZlbnRzXCJcclxuICAgICAgICBbZGF5c109XCJ3ZWVrTW9kZURheXNcIlxyXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgIChkYXlDbGljayk9XCJvbkRheUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChzaG93RXZlbnQpPVwib25TaG93VGFzaygpXCJcclxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwiZGVsZXRlVGFzay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChlZGl0RXZlbnQpPVwiZWRpdFRhc2suZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAoZGF5U2VsZWN0KT1cImRheVNlbGVjdC5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChyYW5nZVNlbGVjdCk9XCJvblJhbmdlU2VsZWN0KCRldmVudClcIlxyXG4gICAgPjwvYmMtY2FsZW5kYXItd2Vlaz5cclxuPC9uZy10ZW1wbGF0ZT5cclxuIl19
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { BaseComponent } from 'barsa-novin-ray-core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
import * as i2 from "barsa-novin-ray-core";
|
|
6
|
-
import * as i3 from "@fundamental-ngx/core/button";
|
|
7
|
-
import * as i4 from "@fundamental-ngx/core/menu";
|
|
8
|
-
import * as i5 from "@fundamental-ngx/core/title";
|
|
9
|
-
import * as i6 from "@fundamental-ngx/core/split-button";
|
|
10
|
-
import * as i7 from "@fundamental-ngx/core/toolbar";
|
|
11
|
-
import * as i8 from "../calendar-selection-days/calendar-selection-days.component";
|
|
12
|
-
export class CalendarHeaderComponent extends BaseComponent {
|
|
13
|
-
constructor() {
|
|
14
|
-
super(...arguments);
|
|
15
|
-
this.hideMode = false;
|
|
16
|
-
this.prevTap = new EventEmitter();
|
|
17
|
-
this.nextTap = new EventEmitter();
|
|
18
|
-
this.modeChange = new EventEmitter();
|
|
19
|
-
this.rangeChange = new EventEmitter();
|
|
20
|
-
this.today = new EventEmitter();
|
|
21
|
-
this.monthName = '';
|
|
22
|
-
}
|
|
23
|
-
/**
|
|
24
|
-
*
|
|
25
|
-
*/
|
|
26
|
-
onModeChange(menu, mode) {
|
|
27
|
-
menu.close();
|
|
28
|
-
this.modeChange.emit(mode);
|
|
29
|
-
}
|
|
30
|
-
onRangeChange(range) {
|
|
31
|
-
this.rangeChange.emit(range);
|
|
32
|
-
}
|
|
33
|
-
onPrint() { }
|
|
34
|
-
}
|
|
35
|
-
CalendarHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarHeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
36
|
-
CalendarHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarHeaderComponent, selector: "bc-calendar-header", inputs: { monthInfo: "monthInfo", weekModeDays: "weekModeDays", hideMode: "hideMode", modeTitle: "modeTitle", title: "title", deviceSize: "deviceSize", rtl: "rtl", mode: "mode" }, outputs: { prevTap: "prevTap", nextTap: "nextTap", modeChange: "modeChange", rangeChange: "rangeChange", today: "today" }, usesInheritance: true, ngImport: i0, template: "<fd-toolbar [shouldOverflow]=\"true\" [fdType]=\"'transparent'\" [class.rtl]=\"rtl\">\r\n <button fd-button fd-toolbar-item [label]=\"'DateR_Today' | bbbTranslate\" (click)=\"today.emit()\"></button>\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n fd-toolbar-item\r\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\r\n (click)=\"prevTap.emit()\"\r\n ></button>\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n fd-toolbar-item\r\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\r\n (click)=\"nextTap.emit()\"\r\n ></button>\r\n <h3 fd-title fd-toolbar-item>{{ title }}</h3>\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <!-- <button fd-button fd-toolbar-item glyph=\"print\" (click)=\"onPrint()\" fdType=\"transparent\"></button> -->\r\n <bc-calendar-selection-days\r\n *ngIf=\"deviceSize === 's' || deviceSize === 'm'\"\r\n fd-toolbar-item\r\n [monthInfo]=\"monthInfo\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n\r\n <fd-split-button\r\n *ngIf=\"!hideMode\"\r\n fd-toolbar-item\r\n [fixedWidth]=\"false\"\r\n [mainAction]=\"{\r\n mainActionTitle: modeTitle,\r\n keepMainAction: true\r\n }\"\r\n >\r\n <fd-menu #menu>\r\n <li fd-menu-item (click)=\"onModeChange(menu, 'day')\" bodyClick>\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Day' | bbbTranslate }}</span>\r\n </div>\r\n </li>\r\n <li fd-menu-item (click)=\"onModeChange(menu, 'week')\" bodyClick>\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Week' | bbbTranslate }} </span>\r\n </div>\r\n </li>\r\n <li fd-menu-item (click)=\"onModeChange(menu, 'month')\" bodyClick>\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Month' | bbbTranslate }}</span>\r\n </div>\r\n </li>\r\n <!-- <li fd-menu-item (click)=\"onModeChange('year')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ \"Year\" | bbbTranslate }}</span>\r\n </div>\r\n </li> -->\r\n </fd-menu>\r\n </fd-split-button>\r\n</fd-toolbar>\r\n", styles: [":host{display:block;background-color:var(--sapList_Background, #fff)}:host ::ng-deep span.fd-toolbar__spacer{display:none}:host ::ng-deep fd-toolbar .fd-toolbar{border:none;border-left:1px solid var(--sapList_BorderColor, #e5e5e5)}:host ::ng-deep fd-toolbar.rtl .fd-toolbar{border-left:none;border-right:1px solid var(--sapList_BorderColor, #e5e5e5)}\n"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.BodyClickDirective, selector: "[bodyClick]", inputs: ["disableBodyClick"] }, { kind: "component", type: i3.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i4.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i4.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "directive", type: i4.MenuInteractiveDirective, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i4.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "component", type: i5.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i6.SplitButtonComponent, selector: "fd-split-button", inputs: ["glyph", "disabled", "mainActionTitle", "fdType", "expandButtonAriaLabel", "expandButtonTitle", "selected", "fixedWidth", "mainAction", "arialLabel"], outputs: ["primaryButtonClicked"] }, { kind: "component", type: i7.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i7.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i7.ToolbarSpacerComponent, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i8.CalendarSelectionDaysComponent, selector: "bc-calendar-selection-days", inputs: ["startSelectedDayIndex", "endSelectedDayIndex", "monthInfo", "inline"], outputs: ["rangeChange"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
37
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarHeaderComponent, decorators: [{
|
|
38
|
-
type: Component,
|
|
39
|
-
args: [{ selector: 'bc-calendar-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-toolbar [shouldOverflow]=\"true\" [fdType]=\"'transparent'\" [class.rtl]=\"rtl\">\r\n <button fd-button fd-toolbar-item [label]=\"'DateR_Today' | bbbTranslate\" (click)=\"today.emit()\"></button>\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n fd-toolbar-item\r\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\r\n (click)=\"prevTap.emit()\"\r\n ></button>\r\n <button\r\n fd-button\r\n fdType=\"transparent\"\r\n fd-toolbar-item\r\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\r\n (click)=\"nextTap.emit()\"\r\n ></button>\r\n <h3 fd-title fd-toolbar-item>{{ title }}</h3>\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <!-- <button fd-button fd-toolbar-item glyph=\"print\" (click)=\"onPrint()\" fdType=\"transparent\"></button> -->\r\n <bc-calendar-selection-days\r\n *ngIf=\"deviceSize === 's' || deviceSize === 'm'\"\r\n fd-toolbar-item\r\n [monthInfo]=\"monthInfo\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n\r\n <fd-split-button\r\n *ngIf=\"!hideMode\"\r\n fd-toolbar-item\r\n [fixedWidth]=\"false\"\r\n [mainAction]=\"{\r\n mainActionTitle: modeTitle,\r\n keepMainAction: true\r\n }\"\r\n >\r\n <fd-menu #menu>\r\n <li fd-menu-item (click)=\"onModeChange(menu, 'day')\" bodyClick>\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Day' | bbbTranslate }}</span>\r\n </div>\r\n </li>\r\n <li fd-menu-item (click)=\"onModeChange(menu, 'week')\" bodyClick>\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Week' | bbbTranslate }} </span>\r\n </div>\r\n </li>\r\n <li fd-menu-item (click)=\"onModeChange(menu, 'month')\" bodyClick>\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Month' | bbbTranslate }}</span>\r\n </div>\r\n </li>\r\n <!-- <li fd-menu-item (click)=\"onModeChange('year')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ \"Year\" | bbbTranslate }}</span>\r\n </div>\r\n </li> -->\r\n </fd-menu>\r\n </fd-split-button>\r\n</fd-toolbar>\r\n", styles: [":host{display:block;background-color:var(--sapList_Background, #fff)}:host ::ng-deep span.fd-toolbar__spacer{display:none}:host ::ng-deep fd-toolbar .fd-toolbar{border:none;border-left:1px solid var(--sapList_BorderColor, #e5e5e5)}:host ::ng-deep fd-toolbar.rtl .fd-toolbar{border-left:none;border-right:1px solid var(--sapList_BorderColor, #e5e5e5)}\n"] }]
|
|
40
|
-
}], propDecorators: { monthInfo: [{
|
|
41
|
-
type: Input
|
|
42
|
-
}], weekModeDays: [{
|
|
43
|
-
type: Input
|
|
44
|
-
}], hideMode: [{
|
|
45
|
-
type: Input
|
|
46
|
-
}], modeTitle: [{
|
|
47
|
-
type: Input
|
|
48
|
-
}], title: [{
|
|
49
|
-
type: Input
|
|
50
|
-
}], deviceSize: [{
|
|
51
|
-
type: Input
|
|
52
|
-
}], rtl: [{
|
|
53
|
-
type: Input
|
|
54
|
-
}], mode: [{
|
|
55
|
-
type: Input
|
|
56
|
-
}], prevTap: [{
|
|
57
|
-
type: Output
|
|
58
|
-
}], nextTap: [{
|
|
59
|
-
type: Output
|
|
60
|
-
}], modeChange: [{
|
|
61
|
-
type: Output
|
|
62
|
-
}], rangeChange: [{
|
|
63
|
-
type: Output
|
|
64
|
-
}], today: [{
|
|
65
|
-
type: Output
|
|
66
|
-
}] } });
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWNhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXItaGVhZGVyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLWhlYWRlci9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVoRyxPQUFPLEVBQUUsYUFBYSxFQUF5QixNQUFNLHNCQUFzQixDQUFDOzs7Ozs7Ozs7O0FBTzVFLE1BQU0sT0FBTyx1QkFBd0IsU0FBUSxhQUFhO0lBTjFEOztRQVNhLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFNaEIsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0IsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0IsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFnQixDQUFDO1FBQzlDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBSXBDLENBQUM7UUFDSyxVQUFLLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUVyQyxjQUFTLEdBQUcsRUFBRSxDQUFDO0tBY2xCO0lBWkc7O09BRUc7SUFFSCxZQUFZLENBQUMsSUFBSSxFQUFFLElBQWtCO1FBQ2pDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9CLENBQUM7SUFDRCxhQUFhLENBQUMsS0FBSztRQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pDLENBQUM7SUFDRCxPQUFPLEtBQVUsQ0FBQzs7b0hBaENULHVCQUF1Qjt3R0FBdkIsdUJBQXVCLGdZQ1RwQyw0NUVBMkRBOzJGRGxEYSx1QkFBdUI7a0JBTm5DLFNBQVM7K0JBQ0ksb0JBQW9CLG1CQUdiLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLFNBQVM7c0JBQWpCLEtBQUs7Z0JBQ0csS0FBSztzQkFBYixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csR0FBRztzQkFBWCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDSSxPQUFPO3NCQUFoQixNQUFNO2dCQUNHLE9BQU87c0JBQWhCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUtHLEtBQUs7c0JBQWQsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYWxlbmRhck1vZGUsIENhbGVuZGFyTW9udGhJbmZvLCBEYXkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBCYXNlQ29tcG9uZW50LCBBYmJyZXZhdGlvbkRldmljZVNpemUgfSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6ICdiYy1jYWxlbmRhci1oZWFkZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci1oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcclxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckhlYWRlckNvbXBvbmVudCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xyXG4gICAgQElucHV0KCkgbW9udGhJbmZvOiBDYWxlbmRhck1vbnRoSW5mbztcclxuICAgIEBJbnB1dCgpIHdlZWtNb2RlRGF5czogRGF5W107XHJcbiAgICBASW5wdXQoKSBoaWRlTW9kZSA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgbW9kZVRpdGxlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSB0aXRsZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgZGV2aWNlU2l6ZTogQWJicmV2YXRpb25EZXZpY2VTaXplO1xyXG4gICAgQElucHV0KCkgcnRsOiBib29sZWFuO1xyXG4gICAgQElucHV0KCkgbW9kZTogQ2FsZW5kYXJNb2RlO1xyXG4gICAgQE91dHB1dCgpIHByZXZUYXAgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgICBAT3V0cHV0KCkgbmV4dFRhcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICAgIEBPdXRwdXQoKSBtb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxDYWxlbmRhck1vZGU+KCk7XHJcbiAgICBAT3V0cHV0KCkgcmFuZ2VDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgICAgICBzdGFydERheTogRGF5O1xyXG4gICAgICAgIGVuZERheTogRGF5O1xyXG4gICAgICAgIG1vbnRoSW5mbzogQ2FsZW5kYXJNb250aEluZm87XHJcbiAgICB9PigpO1xyXG4gICAgQE91dHB1dCgpIHRvZGF5ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gICAgeWVhcjogc3RyaW5nO1xyXG4gICAgbW9udGhOYW1lID0gJyc7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICovXHJcblxyXG4gICAgb25Nb2RlQ2hhbmdlKG1lbnUsIG1vZGU6IENhbGVuZGFyTW9kZSk6IHZvaWQge1xyXG4gICAgICAgIG1lbnUuY2xvc2UoKTtcclxuICAgICAgICB0aGlzLm1vZGVDaGFuZ2UuZW1pdChtb2RlKTtcclxuICAgIH1cclxuICAgIG9uUmFuZ2VDaGFuZ2UocmFuZ2UpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnJhbmdlQ2hhbmdlLmVtaXQocmFuZ2UpO1xyXG4gICAgfVxyXG4gICAgb25QcmludCgpOiB2b2lkIHt9XHJcbn1cclxuIiwiPGZkLXRvb2xiYXIgW3Nob3VsZE92ZXJmbG93XT1cInRydWVcIiBbZmRUeXBlXT1cIid0cmFuc3BhcmVudCdcIiBbY2xhc3MucnRsXT1cInJ0bFwiPlxyXG4gICAgPGJ1dHRvbiBmZC1idXR0b24gZmQtdG9vbGJhci1pdGVtIFtsYWJlbF09XCInRGF0ZVJfVG9kYXknIHwgYmJiVHJhbnNsYXRlXCIgKGNsaWNrKT1cInRvZGF5LmVtaXQoKVwiPjwvYnV0dG9uPlxyXG4gICAgPGJ1dHRvblxyXG4gICAgICAgIGZkLWJ1dHRvblxyXG4gICAgICAgIGZkVHlwZT1cInRyYW5zcGFyZW50XCJcclxuICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICBbZ2x5cGhdPVwicnRsID8gJ25hdmlnYXRpb24tcmlnaHQtYXJyb3cnIDogJ25hdmlnYXRpb24tbGVmdC1hcnJvdydcIlxyXG4gICAgICAgIChjbGljayk9XCJwcmV2VGFwLmVtaXQoKVwiXHJcbiAgICA+PC9idXR0b24+XHJcbiAgICA8YnV0dG9uXHJcbiAgICAgICAgZmQtYnV0dG9uXHJcbiAgICAgICAgZmRUeXBlPVwidHJhbnNwYXJlbnRcIlxyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIFtnbHlwaF09XCJydGwgPyAnbmF2aWdhdGlvbi1sZWZ0LWFycm93JyA6ICduYXZpZ2F0aW9uLXJpZ2h0LWFycm93J1wiXHJcbiAgICAgICAgKGNsaWNrKT1cIm5leHRUYXAuZW1pdCgpXCJcclxuICAgID48L2J1dHRvbj5cclxuICAgIDxoMyBmZC10aXRsZSBmZC10b29sYmFyLWl0ZW0+e3sgdGl0bGUgfX08L2gzPlxyXG4gICAgPGZkLXRvb2xiYXItc3BhY2VyPjwvZmQtdG9vbGJhci1zcGFjZXI+XHJcbiAgICA8IS0tIDxidXR0b24gZmQtYnV0dG9uIGZkLXRvb2xiYXItaXRlbSBnbHlwaD1cInByaW50XCIgKGNsaWNrKT1cIm9uUHJpbnQoKVwiIGZkVHlwZT1cInRyYW5zcGFyZW50XCI+PC9idXR0b24+IC0tPlxyXG4gICAgPGJjLWNhbGVuZGFyLXNlbGVjdGlvbi1kYXlzXHJcbiAgICAgICAgKm5nSWY9XCJkZXZpY2VTaXplID09PSAncycgfHwgZGV2aWNlU2l6ZSA9PT0gJ20nXCJcclxuICAgICAgICBmZC10b29sYmFyLWl0ZW1cclxuICAgICAgICBbbW9udGhJbmZvXT1cIm1vbnRoSW5mb1wiXHJcbiAgICAgICAgKHJhbmdlQ2hhbmdlKT1cIm9uUmFuZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICA+PC9iYy1jYWxlbmRhci1zZWxlY3Rpb24tZGF5cz5cclxuXHJcbiAgICA8ZmQtc3BsaXQtYnV0dG9uXHJcbiAgICAgICAgKm5nSWY9XCIhaGlkZU1vZGVcIlxyXG4gICAgICAgIGZkLXRvb2xiYXItaXRlbVxyXG4gICAgICAgIFtmaXhlZFdpZHRoXT1cImZhbHNlXCJcclxuICAgICAgICBbbWFpbkFjdGlvbl09XCJ7XHJcbiAgICAgICAgICAgIG1haW5BY3Rpb25UaXRsZTogbW9kZVRpdGxlLFxyXG4gICAgICAgICAgICBrZWVwTWFpbkFjdGlvbjogdHJ1ZVxyXG4gICAgICAgIH1cIlxyXG4gICAgPlxyXG4gICAgICAgIDxmZC1tZW51ICNtZW51PlxyXG4gICAgICAgICAgICA8bGkgZmQtbWVudS1pdGVtIChjbGljayk9XCJvbk1vZGVDaGFuZ2UobWVudSwgJ2RheScpXCIgYm9keUNsaWNrPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBmZC1tZW51LWludGVyYWN0aXZlPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+e3sgJ0RheScgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPGxpIGZkLW1lbnUtaXRlbSAoY2xpY2spPVwib25Nb2RlQ2hhbmdlKG1lbnUsICd3ZWVrJylcIiBib2R5Q2xpY2s+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGZkLW1lbnUtaW50ZXJhY3RpdmU+XHJcbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gZmQtbWVudS10aXRsZT57eyAnV2VlaycgfCBiYmJUcmFuc2xhdGUgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDxsaSBmZC1tZW51LWl0ZW0gKGNsaWNrKT1cIm9uTW9kZUNoYW5nZShtZW51LCAnbW9udGgnKVwiIGJvZHlDbGljaz5cclxuICAgICAgICAgICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZT5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1tZW51LXRpdGxlPnt7ICdNb250aCcgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPCEtLSA8bGkgZmQtbWVudS1pdGVtIChjbGljayk9XCJvbk1vZGVDaGFuZ2UoJ3llYXInKVwiPlxyXG4gICAgICAgIDxkaXYgZmQtbWVudS1pbnRlcmFjdGl2ZT5cclxuICAgICAgICAgIDxzcGFuIGZkLW1lbnUtdGl0bGU+e3sgXCJZZWFyXCIgfCBiYmJUcmFuc2xhdGUgfX08L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvbGk+IC0tPlxyXG4gICAgICAgIDwvZmQtbWVudT5cclxuICAgIDwvZmQtc3BsaXQtYnV0dG9uPlxyXG48L2ZkLXRvb2xiYXI+XHJcbiJdfQ==
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, Input } from '@angular/core';
|
|
2
|
-
import { BaseComponent } from 'barsa-novin-ray-core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
import * as i2 from "../calendar-list-item/calendar-list-item.component";
|
|
6
|
-
export class CalendarListComponent extends BaseComponent {
|
|
7
|
-
trackById(index, item) {
|
|
8
|
-
return item.Id;
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
CalendarListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
12
|
-
CalendarListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarListComponent, selector: "bc-calendar-list", inputs: { moDataList: "moDataList" }, usesInheritance: true, ngImport: i0, template: "<bc-calendar-list-item *ngFor=\"let item of moDataList; trackBy: trackById\" [mo]=\"item\"> </bc-calendar-list-item>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: i2.CalendarListItemComponent, selector: "bc-calendar-list-item", inputs: ["mo"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
13
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListComponent, decorators: [{
|
|
14
|
-
type: Component,
|
|
15
|
-
args: [{ selector: 'bc-calendar-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bc-calendar-list-item *ngFor=\"let item of moDataList; trackBy: trackById\" [mo]=\"item\"> </bc-calendar-list-item>\r\n" }]
|
|
16
|
-
}], propDecorators: { moDataList: [{
|
|
17
|
-
type: Input
|
|
18
|
-
}] } });
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLWxpc3QvY2FsZW5kYXItbGlzdC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLWxpc3QvY2FsZW5kYXItbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUxRSxPQUFPLEVBQUUsYUFBYSxFQUFvRCxNQUFNLHNCQUFzQixDQUFDOzs7O0FBT3ZHLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxhQUFhO0lBRTdDLFNBQVMsQ0FBQyxLQUFhLEVBQUUsSUFBeUI7UUFDckQsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0lBQ25CLENBQUM7O2tIQUpRLHFCQUFxQjtzR0FBckIscUJBQXFCLHFIQ1RsQywwSEFDQTsyRkRRYSxxQkFBcUI7a0JBTmpDLFNBQVM7K0JBQ0ksa0JBQWtCLG1CQUdYLHVCQUF1QixDQUFDLE1BQU07OEJBR3RDLFVBQVU7c0JBQWxCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQmFzZUNvbXBvbmVudCwgTWV0YW9iamVjdERhdGFNb2RlbCwgQ2FsZW5kYXJNZXRhb2JqZWN0RGF0YU1vZGVsIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmMtY2FsZW5kYXItbGlzdCcsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci1saXN0LmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJMaXN0Q29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSBtb0RhdGFMaXN0OiBDYWxlbmRhck1ldGFvYmplY3REYXRhTW9kZWxbXTtcclxuICAgIHB1YmxpYyB0cmFja0J5SWQoaW5kZXg6IG51bWJlciwgaXRlbTogTWV0YW9iamVjdERhdGFNb2RlbCk6IHN0cmluZyB7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW0uSWQ7XHJcbiAgICB9XHJcbn1cclxuIiwiPGJjLWNhbGVuZGFyLWxpc3QtaXRlbSAqbmdGb3I9XCJsZXQgaXRlbSBvZiBtb0RhdGFMaXN0OyB0cmFja0J5OiB0cmFja0J5SWRcIiBbbW9dPVwiaXRlbVwiPiA8L2JjLWNhbGVuZGFyLWxpc3QtaXRlbT5cclxuIl19
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
-
import { BaseComponent } from 'barsa-novin-ray-core';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
import * as i1 from "@angular/common";
|
|
5
|
-
import * as i2 from "../calendar-list/calendar-list.component";
|
|
6
|
-
export class CalendarListContainerComponent extends BaseComponent {
|
|
7
|
-
constructor() {
|
|
8
|
-
super(...arguments);
|
|
9
|
-
this.showEventsTap = new EventEmitter();
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
CalendarListContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
|
|
13
|
-
CalendarListContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarListContainerComponent, selector: "bc-calendar-list-container", inputs: { view: "view", reportItemComponentName: "reportItemComponentName", showEvents: "showEvents", selectedDay: "selectedDay", calendarFields: "calendarFields" }, outputs: { showEventsTap: "showEventsTap" }, usesInheritance: true, ngImport: i0, template: "<bc-calendar-list *ngIf=\"selectedDay\" [moDataList]=\"selectedDay.tasks\"></bc-calendar-list>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalendarListComponent, selector: "bc-calendar-list", inputs: ["moDataList"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
14
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListContainerComponent, decorators: [{
|
|
15
|
-
type: Component,
|
|
16
|
-
args: [{ selector: 'bc-calendar-list-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bc-calendar-list *ngIf=\"selectedDay\" [moDataList]=\"selectedDay.tasks\"></bc-calendar-list>\r\n" }]
|
|
17
|
-
}], propDecorators: { view: [{
|
|
18
|
-
type: Input
|
|
19
|
-
}], reportItemComponentName: [{
|
|
20
|
-
type: Input
|
|
21
|
-
}], showEvents: [{
|
|
22
|
-
type: Input
|
|
23
|
-
}], selectedDay: [{
|
|
24
|
-
type: Input
|
|
25
|
-
}], calendarFields: [{
|
|
26
|
-
type: Input
|
|
27
|
-
}], showEventsTap: [{
|
|
28
|
-
type: Output
|
|
29
|
-
}] } });
|
|
30
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbGlzdC1jb250YWluZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtY2FsZW5kYXIvc3JjL2xpYi9jYWxlbmRhci1saXN0LWNvbnRhaW5lci9jYWxlbmRhci1saXN0LWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLWxpc3QtY29udGFpbmVyL2NhbGVuZGFyLWxpc3QtY29udGFpbmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFaEcsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSxzQkFBc0IsQ0FBQzs7OztBQVFyRSxNQUFNLE9BQU8sOEJBQStCLFNBQVEsYUFBYTtJQU5qRTs7UUFZYyxrQkFBYSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7S0FDaEQ7OzJIQVBZLDhCQUE4QjsrR0FBOUIsOEJBQThCLDRTQ1YzQyxvR0FDQTsyRkRTYSw4QkFBOEI7a0JBTjFDLFNBQVM7K0JBQ0ksNEJBQTRCLG1CQUdyQix1QkFBdUIsQ0FBQyxNQUFNOzhCQUd0QyxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLFVBQVU7c0JBQWxCLEtBQUs7Z0JBQ0csV0FBVztzQkFBbkIsS0FBSztnQkFDRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNJLGFBQWE7c0JBQXRCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbmltcG9ydCB7IEJhc2VDb21wb25lbnQsIENhbGVuZGFyRmllbGRzIH0gZnJvbSAnYmFyc2Etbm92aW4tcmF5LWNvcmUnO1xyXG5pbXBvcnQgeyBEYXkgfSBmcm9tICcuLi9tb2RlbHMnO1xyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnYmMtY2FsZW5kYXItbGlzdC1jb250YWluZXInLFxyXG4gICAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLWxpc3QtY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLWxpc3QtY29udGFpbmVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ2FsZW5kYXJMaXN0Q29udGFpbmVyQ29tcG9uZW50IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKSB2aWV3OiBhbnk7XHJcbiAgICBASW5wdXQoKSByZXBvcnRJdGVtQ29tcG9uZW50TmFtZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgc2hvd0V2ZW50czogYm9vbGVhbjtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGVkRGF5OiBEYXk7XHJcbiAgICBASW5wdXQoKSBjYWxlbmRhckZpZWxkczogQ2FsZW5kYXJGaWVsZHM7XHJcbiAgICBAT3V0cHV0KCkgc2hvd0V2ZW50c1RhcCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxufVxyXG4iLCI8YmMtY2FsZW5kYXItbGlzdCAqbmdJZj1cInNlbGVjdGVkRGF5XCIgW21vRGF0YUxpc3RdPVwic2VsZWN0ZWREYXkudGFza3NcIj48L2JjLWNhbGVuZGFyLWxpc3Q+XHJcbiJdfQ==
|