@colijnit/sharedcomponents 1.0.27 → 1.0.28

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.
Files changed (133) hide show
  1. package/bundles/colijnit-sharedcomponents.umd.js +2713 -73
  2. package/bundles/colijnit-sharedcomponents.umd.js.map +1 -1
  3. package/colijnit-sharedcomponents.d.ts +24 -0
  4. package/colijnit-sharedcomponents.metadata.json +1 -1
  5. package/esm2015/colijnit-sharedcomponents.js +25 -1
  6. package/esm2015/lib/components/circular-gauge/co-circular-gauge.component.js +6 -5
  7. package/esm2015/lib/components/date-planning/component/agenda/agenda-base-view.component.js +61 -0
  8. package/esm2015/lib/components/date-planning/component/agenda/agenda-day-view.component.js +32 -0
  9. package/esm2015/lib/components/date-planning/component/agenda/agenda-event.component.js +54 -0
  10. package/esm2015/lib/components/date-planning/component/agenda/agenda-events.component.js +43 -0
  11. package/esm2015/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.js +68 -0
  12. package/esm2015/lib/components/date-planning/component/agenda/agenda-header.component.js +232 -0
  13. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-cell.component.js +36 -0
  14. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.js +50 -0
  15. package/esm2015/lib/components/date-planning/component/agenda/agenda-hour-view.component.js +46 -0
  16. package/esm2015/lib/components/date-planning/component/agenda/agenda-month-view.component.js +61 -0
  17. package/esm2015/lib/components/date-planning/component/agenda/agenda-select-event.component.js +39 -0
  18. package/esm2015/lib/components/date-planning/component/agenda/agenda-view.component.js +35 -0
  19. package/esm2015/lib/components/date-planning/component/agenda/agenda-week-select-view.component.js +64 -0
  20. package/esm2015/lib/components/date-planning/component/agenda/agenda-week-view.component.js +48 -0
  21. package/esm2015/lib/components/date-planning/component/agenda/view-select.component.js +42 -0
  22. package/esm2015/lib/components/date-planning/component/calendar/calendar-all-months.component.js +34 -0
  23. package/esm2015/lib/components/date-planning/component/calendar/calendar-all-years.component.js +48 -0
  24. package/esm2015/lib/components/date-planning/component/calendar/calendar-header.component.js +107 -0
  25. package/esm2015/lib/components/date-planning/component/calendar/calendar-view.component.js +178 -0
  26. package/esm2015/lib/components/date-planning/component/calendar/calendar.component.js +34 -0
  27. package/esm2015/lib/components/date-planning/date-planning.component.js +106 -0
  28. package/esm2015/lib/components/date-planning/date-planning.module.js +63 -0
  29. package/esm2015/lib/components/send-method-dialog/send-method-dialog.component.js +83 -54
  30. package/esm2015/lib/components/send-method-dialog/send-method-dialog.module.js +6 -3
  31. package/esm2015/lib/components/send-method-dialog/send-method-params.interface.js +2 -0
  32. package/esm2015/lib/components/statusbar/statusbar.component.js +2 -2
  33. package/esm2015/lib/components/stock/stock-information-grid/stock-information-grid.component.js +7 -4
  34. package/esm2015/lib/enum/calendar-view.enum.js +8 -0
  35. package/esm2015/lib/enum/icon.enum.js +6 -1
  36. package/esm2015/lib/enum/month.enum.js +17 -0
  37. package/esm2015/lib/enum/thumb-three-way-state.js +19 -0
  38. package/esm2015/lib/enum/time-period.enum.js +11 -0
  39. package/esm2015/lib/model/agenda-event-per-day.model.js +6 -0
  40. package/esm2015/lib/model/agenda-event.model.js +8 -0
  41. package/esm2015/lib/model/agenda-null-objects.js +11 -0
  42. package/esm2015/lib/model/constant/all-months.js +17 -0
  43. package/esm2015/lib/model/date-range.js +5 -0
  44. package/esm2015/lib/model/day.model.js +7 -0
  45. package/esm2015/lib/model/icon-svg.js +6 -1
  46. package/esm2015/lib/model/month.model.js +11 -0
  47. package/esm2015/lib/model/time-window.bo.js +26 -0
  48. package/esm2015/lib/model/week.model.js +6 -0
  49. package/esm2015/lib/model/weekday.model.js +10 -0
  50. package/esm2015/lib/pipe/array-number.pipe.js +15 -0
  51. package/esm2015/lib/pipe/master-pipes.js +7 -0
  52. package/esm2015/lib/pipe/ucfirst.pipe.js +16 -0
  53. package/esm2015/lib/service/shared-connector.service.js +49 -1
  54. package/esm2015/lib/service/stock.service.js +16 -5
  55. package/esm2015/lib/utils/array-utils.js +24 -5
  56. package/esm2015/lib/utils/calendar.utils.js +69 -0
  57. package/esm2015/lib/utils/check-precision-and-scale-result.js +2 -0
  58. package/esm2015/lib/utils/check-within-stepped-bounds-result.js +2 -0
  59. package/esm2015/lib/utils/date-utils.js +264 -0
  60. package/esm2015/lib/utils/function/not-nill.function.js +5 -0
  61. package/esm2015/lib/utils/map-utils.js +41 -0
  62. package/esm2015/lib/utils/number-utils.js +390 -0
  63. package/esm2015/lib/utils/object-utils.js +278 -0
  64. package/esm2015/public-api.js +3 -1
  65. package/fesm2015/colijnit-sharedcomponents.js +2792 -99
  66. package/fesm2015/colijnit-sharedcomponents.js.map +1 -1
  67. package/lib/components/circular-gauge/style/_layout.scss +3 -6
  68. package/lib/components/date-planning/component/agenda/agenda-base-view.component.d.ts +21 -0
  69. package/lib/components/date-planning/component/agenda/agenda-day-view.component.d.ts +6 -0
  70. package/lib/components/date-planning/component/agenda/agenda-event.component.d.ts +17 -0
  71. package/lib/components/date-planning/component/agenda/agenda-events.component.d.ts +12 -0
  72. package/lib/components/date-planning/component/agenda/agenda-half-hour-cell.component.d.ts +18 -0
  73. package/lib/components/date-planning/component/agenda/agenda-header.component.d.ts +47 -0
  74. package/lib/components/date-planning/component/agenda/agenda-hour-cell.component.d.ts +9 -0
  75. package/lib/components/date-planning/component/agenda/agenda-hour-view-labels.component.d.ts +8 -0
  76. package/lib/components/date-planning/component/agenda/agenda-hour-view.component.d.ts +7 -0
  77. package/lib/components/date-planning/component/agenda/agenda-month-view.component.d.ts +10 -0
  78. package/lib/components/date-planning/component/agenda/agenda-select-event.component.d.ts +12 -0
  79. package/lib/components/date-planning/component/agenda/agenda-view.component.d.ts +11 -0
  80. package/lib/components/date-planning/component/agenda/agenda-week-select-view.component.d.ts +10 -0
  81. package/lib/components/date-planning/component/agenda/agenda-week-view.component.d.ts +8 -0
  82. package/lib/components/date-planning/component/agenda/view-select.component.d.ts +11 -0
  83. package/lib/components/date-planning/component/calendar/calendar-all-months.component.d.ts +9 -0
  84. package/lib/components/date-planning/component/calendar/calendar-all-years.component.d.ts +9 -0
  85. package/lib/components/date-planning/component/calendar/calendar-header.component.d.ts +23 -0
  86. package/lib/components/date-planning/component/calendar/calendar-view.component.d.ts +31 -0
  87. package/lib/components/date-planning/component/calendar/calendar.component.d.ts +10 -0
  88. package/lib/components/date-planning/date-planning.component.d.ts +25 -0
  89. package/lib/components/date-planning/date-planning.module.d.ts +2 -0
  90. package/lib/components/send-method-dialog/send-method-dialog.component.d.ts +24 -7
  91. package/lib/components/send-method-dialog/send-method-params.interface.d.ts +13 -0
  92. package/lib/components/send-method-dialog/style/_layout.scss +5 -0
  93. package/lib/components/statusbar/statusbar.component.d.ts +1 -0
  94. package/lib/components/tags/component/style/_layout.scss +67 -0
  95. package/lib/components/tags/component/style/_material-definition.scss +1 -0
  96. package/lib/components/tags/component/style/_theme.scss +8 -0
  97. package/lib/components/tags/component/style/material.scss +3 -0
  98. package/lib/components/tags/component/tag-join-label/style/_layout.scss +97 -0
  99. package/lib/components/tags/component/tag-join-label/style/_material-definition.scss +4 -0
  100. package/lib/components/tags/component/tag-join-label/style/_theme.scss +8 -0
  101. package/lib/components/tags/component/tag-join-label/style/material.scss +3 -0
  102. package/lib/enum/calendar-view.enum.d.ts +6 -0
  103. package/lib/enum/icon.enum.d.ts +5 -0
  104. package/lib/enum/month.enum.d.ts +14 -0
  105. package/lib/enum/thumb-three-way-state.d.ts +6 -0
  106. package/lib/enum/time-period.enum.d.ts +8 -0
  107. package/lib/model/agenda-event-per-day.model.d.ts +5 -0
  108. package/lib/model/agenda-event.model.d.ts +16 -0
  109. package/lib/model/agenda-null-objects.d.ts +10 -0
  110. package/lib/model/constant/all-months.d.ts +2 -0
  111. package/lib/model/date-range.d.ts +7 -0
  112. package/lib/model/day.model.d.ts +8 -0
  113. package/lib/model/month.model.d.ts +5 -0
  114. package/lib/model/time-window.bo.d.ts +13 -0
  115. package/lib/model/week.model.d.ts +4 -0
  116. package/lib/model/weekday.model.d.ts +16 -0
  117. package/lib/pipe/array-number.pipe.d.ts +4 -0
  118. package/lib/pipe/master-pipes.d.ts +1 -0
  119. package/lib/pipe/ucfirst.pipe.d.ts +4 -0
  120. package/lib/service/shared-connector.service.d.ts +4 -0
  121. package/lib/service/stock.service.d.ts +6 -2
  122. package/lib/style/_mixin.scss +5 -0
  123. package/lib/utils/array-utils.d.ts +6 -0
  124. package/lib/utils/calendar.utils.d.ts +10 -0
  125. package/lib/utils/check-precision-and-scale-result.d.ts +4 -0
  126. package/lib/utils/check-within-stepped-bounds-result.d.ts +8 -0
  127. package/lib/utils/date-utils.d.ts +44 -0
  128. package/lib/utils/function/not-nill.function.d.ts +1 -0
  129. package/lib/utils/map-utils.d.ts +16 -0
  130. package/lib/utils/number-utils.d.ts +125 -0
  131. package/lib/utils/object-utils.d.ts +40 -0
  132. package/package.json +1 -1
  133. package/public-api.d.ts +2 -0
@@ -0,0 +1,232 @@
1
+ import { __awaiter } from "tslib";
2
+ import { Component, ElementRef, EventEmitter, Inject, Input, LOCALE_ID, NgZone, Output, Renderer2, ViewEncapsulation } from "@angular/core";
3
+ import { CalendarView } from "../../../../enum/calendar-view.enum";
4
+ import { LanguageCode } from "../../../../enum/language-code.enum";
5
+ import { CalendarUtils } from "../../../../utils/calendar.utils";
6
+ import { NULL_DAY } from "../../../../model/agenda-null-objects";
7
+ import { Day } from "../../../../model/day.model";
8
+ import { Icon } from "../../../../enum/icon.enum";
9
+ import { DateUtils } from "../../../../utils/date-utils";
10
+ import { IconCacheService } from "../../../../service/icon-cache.service";
11
+ export class AgendaHeaderComponent {
12
+ constructor(_locale, _elementRef, _renderer, _ngZone, iconCacheService) {
13
+ this._locale = _locale;
14
+ this._elementRef = _elementRef;
15
+ this._renderer = _renderer;
16
+ this._ngZone = _ngZone;
17
+ this.iconCacheService = iconCacheService;
18
+ this.icons = Icon;
19
+ this.viewTypes = CalendarView;
20
+ this.scrollbarWidth = 15;
21
+ this.view = CalendarView.WeekSelectView;
22
+ this.viewChange = new EventEmitter();
23
+ this.selectedDateChange = new EventEmitter();
24
+ this.rangeChange = new EventEmitter();
25
+ this.weekDays = [];
26
+ this.day = NULL_DAY;
27
+ this.showBackButton = true;
28
+ this._eventsPerDay = [];
29
+ this._onResize = () => __awaiter(this, void 0, void 0, function* () {
30
+ this._resizeHost();
31
+ });
32
+ }
33
+ set selectedDate(value) {
34
+ this._selectedDate = new Date(value);
35
+ this._prepareHeaderData();
36
+ }
37
+ get selectedDate() {
38
+ return this._selectedDate;
39
+ }
40
+ set firstAvailableDate(value) {
41
+ if (value) {
42
+ this._firstAvailableDate = new Date(value);
43
+ this._prepareHeaderData();
44
+ }
45
+ }
46
+ get firstAvailableDate() {
47
+ return this._firstAvailableDate;
48
+ }
49
+ set eventsPerDay(value) {
50
+ this._eventsPerDay = value;
51
+ this._prepareHeaderData();
52
+ }
53
+ ngOnDestroy() {
54
+ window.removeEventListener("resize", this._onResize);
55
+ this._elementRef = undefined;
56
+ }
57
+ ngOnInit() {
58
+ this._ngZone.runOutsideAngular(() => {
59
+ window.addEventListener("resize", this._onResize);
60
+ });
61
+ }
62
+ ngAfterContentChecked() {
63
+ this._resizeHost();
64
+ }
65
+ subUnit() {
66
+ if (this.selectedDate) {
67
+ const newDate = new Date(this.selectedDate);
68
+ switch (this.view) {
69
+ case CalendarView.DayView:
70
+ newDate.setDate(this.selectedDate.getDate() - 1);
71
+ break;
72
+ case CalendarView.WeekView:
73
+ newDate.setDate(this.selectedDate.getDate() - 7);
74
+ break;
75
+ case CalendarView.WeekSelectView:
76
+ newDate.setDate(this.selectedDate.getDate() - 7);
77
+ break;
78
+ case CalendarView.MonthView:
79
+ newDate.setMonth(this.selectedDate.getMonth() - 1);
80
+ break;
81
+ }
82
+ this.selectedDate = newDate;
83
+ this.rangeChange.emit(this.selectedDate);
84
+ }
85
+ }
86
+ addUnit() {
87
+ if (this.selectedDate) {
88
+ const newDate = new Date(this.selectedDate);
89
+ switch (this.view) {
90
+ case CalendarView.DayView:
91
+ newDate.setDate(this.selectedDate.getDate() + 1);
92
+ break;
93
+ case CalendarView.WeekView:
94
+ newDate.setDate(this.selectedDate.getDate() + 7);
95
+ break;
96
+ case CalendarView.WeekSelectView:
97
+ newDate.setDate(this.selectedDate.getDate() + 7);
98
+ break;
99
+ case CalendarView.MonthView:
100
+ newDate.setMonth(this.selectedDate.getMonth() + 1);
101
+ break;
102
+ }
103
+ this.selectedDate = newDate;
104
+ this.rangeChange.emit(this.selectedDate);
105
+ }
106
+ }
107
+ setUnit(weekDay) {
108
+ this.selectedDate = weekDay.date;
109
+ this.selectedDateChange.emit(this.selectedDate);
110
+ }
111
+ changeTheView(view) {
112
+ this.view = view;
113
+ this.viewChange.emit(view);
114
+ this._prepareHeaderData();
115
+ }
116
+ /**
117
+ * Need to resize the host component to size it's fixed positioned child through css
118
+ */
119
+ _resizeHost() {
120
+ if (this._elementRef) {
121
+ this._renderer.setStyle(this._elementRef.nativeElement, "width", this._elementRef.nativeElement.parentElement.clientWidth - this.scrollbarWidth + "px");
122
+ }
123
+ }
124
+ _prepareHeaderData() {
125
+ if (this.selectedDate) {
126
+ switch (this.view) {
127
+ case CalendarView.DayView:
128
+ const day = new Day();
129
+ day.date = new Date(this.selectedDate);
130
+ const options = { year: "numeric", month: "long", day: "numeric" };
131
+ day.description = this.selectedDate.toLocaleDateString(this._locale, options);
132
+ this.day = day;
133
+ break;
134
+ case CalendarView.WeekView:
135
+ const weekView = CalendarUtils.GetDaysOfWeek(this.selectedDate);
136
+ this.weekDays = weekView.weekDays;
137
+ if (this.firstAvailableDate) {
138
+ this.showBackButton = this.weekDays.find(wd => DateUtils.DatesEqual(this.firstAvailableDate, wd.date)) === undefined;
139
+ }
140
+ break;
141
+ case CalendarView.WeekSelectView:
142
+ const weekSelectView = CalendarUtils.GetDaysOfWeek(this.selectedDate);
143
+ this.weekDays = weekSelectView.weekDays;
144
+ this.weekDays.forEach((wd) => {
145
+ const evPerDay = this._eventsPerDay && this._eventsPerDay.length > 0 ? this._eventsPerDay.find(e => DateUtils.DatesEqual(e.date, wd.date)) : null;
146
+ if (evPerDay) {
147
+ wd.events = evPerDay.events;
148
+ }
149
+ else {
150
+ wd.weekdaySelected = false;
151
+ }
152
+ });
153
+ if (this.firstAvailableDate) {
154
+ this.showBackButton = this.weekDays.find(wd => DateUtils.DatesEqual(this.firstAvailableDate, wd.date)) === undefined;
155
+ }
156
+ break;
157
+ case CalendarView.MonthView:
158
+ const weekOfMonth = CalendarUtils.GetDaysOfWeek(this.selectedDate);
159
+ this.weekDays = weekOfMonth.weekDays;
160
+ if (this.firstAvailableDate) {
161
+ this.showBackButton = this.weekDays.find(wd => DateUtils.DatesEqual(this.firstAvailableDate, wd.date)) === undefined;
162
+ }
163
+ break;
164
+ }
165
+ }
166
+ }
167
+ }
168
+ AgendaHeaderComponent.decorators = [
169
+ { type: Component, args: [{
170
+ selector: "agenda-header",
171
+ template: `
172
+ <div class="agenda-header-wrapper" *ngIf="view === viewTypes.DayView">
173
+ <div class="hour-label-placeholder">
174
+ <view-select [selectedView]="view" (selectedViewChange)="changeTheView($event)"></view-select>
175
+ </div>
176
+ <div class="week-day-label">
177
+ <co-icon class="pointer-hover no-user-select sub-unit-icon dark" [iconData]="iconCacheService.getIcon(icons.ArrowPointLeft)" (click)="subUnit()"></co-icon>
178
+ <div class="day-description" [textContent]="day.description"></div>
179
+ <co-icon class="pointer-hover no-user-select add-unit-icon dark" [iconData]="iconCacheService.getIcon(icons.ArrowPointRight)" (click)="addUnit()"></co-icon>
180
+ </div>
181
+ </div>
182
+ <div class="agenda-header-wrapper" *ngIf="view === viewTypes.WeekView">
183
+ <div class="hour-label-placeholder">
184
+ <view-select [selectedView]="view" (selectedViewChange)="changeTheView($event)"></view-select>
185
+ </div>
186
+ <div class="week-day-label" *ngFor="let weekDay of weekDays; let index = index" [class.selected]="weekDay.weekdaySelected" (click)="setUnit(weekDay)">
187
+ <co-icon *ngIf="index === 0 && showBackButton" class="pointer-hover no-user-select sub-unit-icon dark" [iconData]="iconCacheService.getIcon(icons.ArrowPointLeft)" (click)="subUnit()"></co-icon>
188
+ <div *ngIf="weekDay.newMonth" [textContent]="weekDay.weekdayMonthLong + ' ' + weekDay.weekdayYear" class="month-description"></div>
189
+ <div class="weekday-value" [textContent]="weekDay.weekdayDay"></div>
190
+ <div class="weekday-description" [textContent]="weekDay.weekdayShort"></div>
191
+ <co-icon *ngIf="index === 6" class="pointer-hover no-user-select add-unit-icon dark" [iconData]="iconCacheService.getIcon(icons.ArrowPointRight)" (click)="addUnit()"></co-icon>
192
+ </div>
193
+ </div>
194
+ <div class="agenda-header-wrapper" *ngIf="view === viewTypes.WeekSelectView">
195
+ <div class="week-day-label" *ngFor="let weekDay of weekDays; let index = index"
196
+ [class.selected]="weekDay.weekdaySelected"
197
+ [class.selectable]="weekDay.events && weekDay.events.length > 0"
198
+ (click)="setUnit(weekDay)">
199
+ <co-icon *ngIf="index === 0 && showBackButton" class="pointer-hover no-user-select sub-unit-icon dark" [iconData]="iconCacheService.getIcon(icons.ArrowPointLeft)" (click)="subUnit()"></co-icon>
200
+ <div class="weekday-description" [textContent]="weekDay.weekdayShort"></div>
201
+ <div class="weekday-value" [textContent]="weekDay.weekdayDay + ' ' + weekDay.weekdayMonthShort"></div>
202
+ <co-icon *ngIf="index === 6" class="pointer-hover no-user-select add-unit-icon dark" [iconData]="iconCacheService.getIcon(icons.ArrowPointRight)" (click)="addUnit()"></co-icon>
203
+ </div>
204
+ </div>
205
+ <div class="agenda-header-wrapper" *ngIf="view === viewTypes.MonthView">
206
+ <div class="week-day-label" *ngFor="let weekDay of weekDays; let index = index">
207
+ <co-icon *ngIf="index === 0 && showBackButton" class="pointer-hover no-user-select sub-unit-icon dark" [iconData]="iconCacheService.getIcon(icons.ArrowPointLeft)" (click)="subUnit()"></co-icon>
208
+ <div class="weekday-description" [textContent]="weekDay.weekdayShort"></div>
209
+ <co-icon *ngIf="index === 6" class="pointer-hover no-user-select add-unit-icon dark" [iconData]="iconCacheService.getIcon(icons.ArrowPointRight)" (click)="addUnit()"></co-icon>
210
+ </div>
211
+ </div>
212
+ `,
213
+ encapsulation: ViewEncapsulation.None
214
+ },] }
215
+ ];
216
+ AgendaHeaderComponent.ctorParameters = () => [
217
+ { type: LanguageCode, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },
218
+ { type: ElementRef },
219
+ { type: Renderer2 },
220
+ { type: NgZone },
221
+ { type: IconCacheService }
222
+ ];
223
+ AgendaHeaderComponent.propDecorators = {
224
+ selectedDate: [{ type: Input }],
225
+ view: [{ type: Input }],
226
+ firstAvailableDate: [{ type: Input }],
227
+ eventsPerDay: [{ type: Input }],
228
+ viewChange: [{ type: Output }],
229
+ selectedDateChange: [{ type: Output }],
230
+ rangeChange: [{ type: Output }]
231
+ };
232
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbmRhLWhlYWRlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBsYW5uaW5nL2NvbXBvbmVudC9hZ2VuZGEvYWdlbmRhLWhlYWRlci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCxTQUFTLEVBQ1QsVUFBVSxFQUNWLFlBQVksRUFDWixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsRUFDVCxNQUFNLEVBR04sTUFBTSxFQUNOLFNBQVMsRUFBRSxpQkFBaUIsRUFDN0IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pFLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUdqRSxPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sa0NBQWtDLENBQUM7QUFDL0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLHVDQUF1QyxDQUFDO0FBQy9ELE9BQU8sRUFBQyxHQUFHLEVBQUMsTUFBTSw2QkFBNkIsQ0FBQTtBQUMvQyxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFFaEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLHdDQUF3QyxDQUFDO0FBZ0R4RSxNQUFNLE9BQU8scUJBQXFCO0lBc0Q5QixZQUN3QyxPQUFxQixFQUNqRCxXQUF1QixFQUN2QixTQUFvQixFQUNwQixPQUFlLEVBQ2hCLGdCQUFrQztRQUpMLFlBQU8sR0FBUCxPQUFPLENBQWM7UUFDakQsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFDdkIsY0FBUyxHQUFULFNBQVMsQ0FBVztRQUNwQixZQUFPLEdBQVAsT0FBTyxD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QkEsZ0JBQWdCOzs7MkJBc0RuQixLQUFLO21CQVVMLEtBQUs7aUNBR0wsS0FBSzsyQkFZTCxLQUFLO3lCQU1MLE1BQU07aUNBR04sTUFBTTswQkFHTixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBBZnRlckNvbnRlbnRDaGVja2VkLFxyXG4gIENvbXBvbmVudCxcclxuICBFbGVtZW50UmVmLFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBJbmplY3QsXHJcbiAgSW5wdXQsXHJcbiAgTE9DQUxFX0lELFxyXG4gIE5nWm9uZSxcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBSZW5kZXJlcjIsIFZpZXdFbmNhcHN1bGF0aW9uXHJcbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtDYWxlbmRhclZpZXd9IGZyb20gXCIuLi8uLi8uLi8uLi9lbnVtL2NhbGVuZGFyLXZpZXcuZW51bVwiO1xyXG5pbXBvcnQge0xhbmd1YWdlQ29kZX0gZnJvbSBcIi4uLy4uLy4uLy4uL2VudW0vbGFuZ3VhZ2UtY29kZS5lbnVtXCI7XHJcbmltcG9ydCB7V2Vla2RheX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL3dlZWtkYXkubW9kZWxcIjtcclxuaW1wb3J0IHtXZWVrfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvd2Vlay5tb2RlbFwiO1xyXG5pbXBvcnQge0NhbGVuZGFyVXRpbHN9IGZyb20gXCIuLi8uLi8uLi8uLi91dGlscy9jYWxlbmRhci51dGlsc1wiO1xyXG5pbXBvcnQge05VTExfREFZfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvYWdlbmRhLW51bGwtb2JqZWN0c1wiO1xyXG5pbXBvcnQge0RheX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2RheS5tb2RlbFwiXHJcbmltcG9ydCB7SWNvbn0gZnJvbSBcIi4uLy4uLy4uLy4uL2VudW0vaWNvbi5lbnVtXCI7XHJcbmltcG9ydCB7QWdlbmRhRXZlbnRQZXJEYXl9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9hZ2VuZGEtZXZlbnQtcGVyLWRheS5tb2RlbFwiO1xyXG5pbXBvcnQge0RhdGVVdGlsc30gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWxzL2RhdGUtdXRpbHNcIjtcclxuaW1wb3J0IHtJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZS9pY29uLWNhY2hlLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiYWdlbmRhLWhlYWRlclwiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWdlbmRhLWhlYWRlci13cmFwcGVyXCIgKm5nSWY9XCJ2aWV3ID09PSB2aWV3VHlwZXMuRGF5Vmlld1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaG91ci1sYWJlbC1wbGFjZWhvbGRlclwiPlxyXG4gICAgICAgICAgICAgICAgPHZpZXctc2VsZWN0IFtzZWxlY3RlZFZpZXddPVwidmlld1wiIChzZWxlY3RlZFZpZXdDaGFuZ2UpPVwiY2hhbmdlVGhlVmlldygkZXZlbnQpXCI+PC92aWV3LXNlbGVjdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrLWRheS1sYWJlbFwiPlxyXG4gICAgICAgICAgICAgICAgPGNvLWljb24gY2xhc3M9XCJwb2ludGVyLWhvdmVyIG5vLXVzZXItc2VsZWN0IHN1Yi11bml0LWljb24gZGFya1wiIFtpY29uRGF0YV09XCJpY29uQ2FjaGVTZXJ2aWNlLmdldEljb24oaWNvbnMuQXJyb3dQb2ludExlZnQpXCIgKGNsaWNrKT1cInN1YlVuaXQoKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXktZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwiZGF5LmRlc2NyaXB0aW9uXCI+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8Y28taWNvbiBjbGFzcz1cInBvaW50ZXItaG92ZXIgbm8tdXNlci1zZWxlY3QgYWRkLXVuaXQtaWNvbiBkYXJrXCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5BcnJvd1BvaW50UmlnaHQpXCIgKGNsaWNrKT1cImFkZFVuaXQoKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFnZW5kYS1oZWFkZXItd3JhcHBlclwiICpuZ0lmPVwidmlldyA9PT0gdmlld1R5cGVzLldlZWtWaWV3XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJob3VyLWxhYmVsLXBsYWNlaG9sZGVyXCI+XHJcbiAgICAgICAgICAgICAgICA8dmlldy1zZWxlY3QgW3NlbGVjdGVkVmlld109XCJ2aWV3XCIgKHNlbGVjdGVkVmlld0NoYW5nZSk9XCJjaGFuZ2VUaGVWaWV3KCRldmVudClcIj48L3ZpZXctc2VsZWN0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWstZGF5LWxhYmVsXCIgKm5nRm9yPVwibGV0IHdlZWtEYXkgb2Ygd2Vla0RheXM7IGxldCBpbmRleCA9IGluZGV4XCIgW2NsYXNzLnNlbGVjdGVkXT1cIndlZWtEYXkud2Vla2RheVNlbGVjdGVkXCIgKGNsaWNrKT1cInNldFVuaXQod2Vla0RheSlcIj5cclxuICAgICAgICAgICAgICAgIDxjby1pY29uICpuZ0lmPVwiaW5kZXggPT09IDAgJiYgc2hvd0JhY2tCdXR0b25cIiBjbGFzcz1cInBvaW50ZXItaG92ZXIgbm8tdXNlci1zZWxlY3Qgc3ViLXVuaXQtaWNvbiBkYXJrXCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5BcnJvd1BvaW50TGVmdClcIiAoY2xpY2spPVwic3ViVW5pdCgpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cIndlZWtEYXkubmV3TW9udGhcIiBbdGV4dENvbnRlbnRdPVwid2Vla0RheS53ZWVrZGF5TW9udGhMb25nICsgJyAnICsgd2Vla0RheS53ZWVrZGF5WWVhclwiIGNsYXNzPVwibW9udGgtZGVzY3JpcHRpb25cIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrZGF5LXZhbHVlXCIgW3RleHRDb250ZW50XT1cIndlZWtEYXkud2Vla2RheURheVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWtkYXktZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwid2Vla0RheS53ZWVrZGF5U2hvcnRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxjby1pY29uICpuZ0lmPVwiaW5kZXggPT09IDZcIiBjbGFzcz1cInBvaW50ZXItaG92ZXIgbm8tdXNlci1zZWxlY3QgYWRkLXVuaXQtaWNvbiBkYXJrXCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5BcnJvd1BvaW50UmlnaHQpXCIgKGNsaWNrKT1cImFkZFVuaXQoKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImFnZW5kYS1oZWFkZXItd3JhcHBlclwiICpuZ0lmPVwidmlldyA9PT0gdmlld1R5cGVzLldlZWtTZWxlY3RWaWV3XCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrLWRheS1sYWJlbFwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWtEYXlzOyBsZXQgaW5kZXggPSBpbmRleFwiXHJcbiAgICAgICAgICAgICAgICAgW2NsYXNzLnNlbGVjdGVkXT1cIndlZWtEYXkud2Vla2RheVNlbGVjdGVkXCJcclxuICAgICAgICAgICAgICAgICBbY2xhc3Muc2VsZWN0YWJsZV09XCJ3ZWVrRGF5LmV2ZW50cyAmJiB3ZWVrRGF5LmV2ZW50cy5sZW5ndGggPiAwXCJcclxuICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VW5pdCh3ZWVrRGF5KVwiPlxyXG4gICAgICAgICAgICAgICAgPGNvLWljb24gKm5nSWY9XCJpbmRleCA9PT0gMCAmJiBzaG93QmFja0J1dHRvblwiIGNsYXNzPVwicG9pbnRlci1ob3ZlciBuby11c2VyLXNlbGVjdCBzdWItdW5pdC1pY29uIGRhcmtcIiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb25zLkFycm93UG9pbnRMZWZ0KVwiIChjbGljayk9XCJzdWJVbml0KClcIj48L2NvLWljb24+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Vla2RheS1kZXNjcmlwdGlvblwiIFt0ZXh0Q29udGVudF09XCJ3ZWVrRGF5LndlZWtkYXlTaG9ydFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWtkYXktdmFsdWVcIiBbdGV4dENvbnRlbnRdPVwid2Vla0RheS53ZWVrZGF5RGF5ICsgJyAnICsgd2Vla0RheS53ZWVrZGF5TW9udGhTaG9ydFwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPGNvLWljb24gKm5nSWY9XCJpbmRleCA9PT0gNlwiIGNsYXNzPVwicG9pbnRlci1ob3ZlciBuby11c2VyLXNlbGVjdCBhZGQtdW5pdC1pY29uIGRhcmtcIiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb25zLkFycm93UG9pbnRSaWdodClcIiAoY2xpY2spPVwiYWRkVW5pdCgpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiYWdlbmRhLWhlYWRlci13cmFwcGVyXCIgKm5nSWY9XCJ2aWV3ID09PSB2aWV3VHlwZXMuTW9udGhWaWV3XCI+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Vlay1kYXktbGFiZWxcIiAqbmdGb3I9XCJsZXQgd2Vla0RheSBvZiB3ZWVrRGF5czsgbGV0IGluZGV4ID0gaW5kZXhcIj5cclxuICAgICAgICAgICAgICAgIDxjby1pY29uICpuZ0lmPVwiaW5kZXggPT09IDAgJiYgc2hvd0JhY2tCdXR0b25cIiBjbGFzcz1cInBvaW50ZXItaG92ZXIgbm8tdXNlci1zZWxlY3Qgc3ViLXVuaXQtaWNvbiBkYXJrXCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5BcnJvd1BvaW50TGVmdClcIiAoY2xpY2spPVwic3ViVW5pdCgpXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndlZWtkYXktZGVzY3JpcHRpb25cIiBbdGV4dENvbnRlbnRdPVwid2Vla0RheS53ZWVrZGF5U2hvcnRcIj48L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxjby1pY29uICpuZ0lmPVwiaW5kZXggPT09IDZcIiBjbGFzcz1cInBvaW50ZXItaG92ZXIgbm8tdXNlci1zZWxlY3QgYWRkLXVuaXQtaWNvbiBkYXJrXCIgW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5BcnJvd1BvaW50UmlnaHQpXCIgKGNsaWNrKT1cImFkZFVuaXQoKVwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICBgLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIEFnZW5kYUhlYWRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95LCBBZnRlckNvbnRlbnRDaGVja2VkIHtcclxuICAgIHB1YmxpYyByZWFkb25seSBpY29uczogdHlwZW9mIEljb24gPSBJY29uO1xyXG4gICAgcHVibGljIHJlYWRvbmx5IHZpZXdUeXBlczogdHlwZW9mIENhbGVuZGFyVmlldyA9IENhbGVuZGFyVmlldztcclxuXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHNjcm9sbGJhcldpZHRoOiBudW1iZXIgPSAxNTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBzZWxlY3RlZERhdGUodmFsdWU6IERhdGUpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUhlYWRlckRhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IHNlbGVjdGVkRGF0ZSgpOiBEYXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fc2VsZWN0ZWREYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgdmlldzogQ2FsZW5kYXJWaWV3ID0gQ2FsZW5kYXJWaWV3LldlZWtTZWxlY3RWaWV3O1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IGZpcnN0QXZhaWxhYmxlRGF0ZSh2YWx1ZTogRGF0ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9maXJzdEF2YWlsYWJsZURhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuX3ByZXBhcmVIZWFkZXJEYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXQgZmlyc3RBdmFpbGFibGVEYXRlKCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9maXJzdEF2YWlsYWJsZURhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgZXZlbnRzUGVyRGF5KHZhbHVlOiBBZ2VuZGFFdmVudFBlckRheVtdKSB7XHJcbiAgICAgICAgdGhpcy5fZXZlbnRzUGVyRGF5ID0gdmFsdWU7XHJcbiAgICAgICAgdGhpcy5fcHJlcGFyZUhlYWRlckRhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyB2aWV3Q2hhbmdlOiBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJWaWV3PiA9IG5ldyBFdmVudEVtaXR0ZXI8Q2FsZW5kYXJWaWV3PigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHNlbGVjdGVkRGF0ZUNoYW5nZTogRXZlbnRFbWl0dGVyPERhdGU+ID0gbmV3IEV2ZW50RW1pdHRlcjxEYXRlPigpO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIHJhbmdlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XHJcblxyXG4gICAgcHVibGljIHdlZWtEYXlzOiBXZWVrZGF5W10gPSBbXTtcclxuICAgIHB1YmxpYyBkYXk6IERheSA9IE5VTExfREFZO1xyXG4gICAgcHVibGljIHNob3dCYWNrQnV0dG9uOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICBwcml2YXRlIF9zZWxlY3RlZERhdGU6IERhdGU7XHJcbiAgICBwcml2YXRlIF9maXJzdEF2YWlsYWJsZURhdGU6IERhdGU7XHJcbiAgICBwcml2YXRlIF9ldmVudHNQZXJEYXk6IEFnZW5kYUV2ZW50UGVyRGF5W10gPSBbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KExPQ0FMRV9JRCkgcHJpdmF0ZSByZWFkb25seSBfbG9jYWxlOiBMYW5ndWFnZUNvZGUsXHJcbiAgICAgICAgcHJpdmF0ZSBfZWxlbWVudFJlZjogRWxlbWVudFJlZixcclxuICAgICAgICBwcml2YXRlIF9yZW5kZXJlcjogUmVuZGVyZXIyLFxyXG4gICAgICAgIHByaXZhdGUgX25nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHB1YmxpYyBpY29uQ2FjaGVTZXJ2aWNlOiBJY29uQ2FjaGVTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLl9vblJlc2l6ZSk7XHJcbiAgICAgICAgdGhpcy5fZWxlbWVudFJlZiA9IHVuZGVmaW5lZDtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xyXG4gICAgICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCB0aGlzLl9vblJlc2l6ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX3Jlc2l6ZUhvc3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc3ViVW5pdCgpOiB2b2lkIHtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZERhdGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRoaXMuc2VsZWN0ZWREYXRlKTtcclxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnZpZXcpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LkRheVZpZXc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3RGF0ZS5zZXREYXRlKHRoaXMuc2VsZWN0ZWREYXRlLmdldERhdGUoKSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXcuV2Vla1ZpZXc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3RGF0ZS5zZXREYXRlKHRoaXMuc2VsZWN0ZWREYXRlLmdldERhdGUoKSAtIDcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXcuV2Vla1NlbGVjdFZpZXc6XHJcbiAgICAgICAgICAgICAgICAgICAgbmV3RGF0ZS5zZXREYXRlKHRoaXMuc2VsZWN0ZWREYXRlLmdldERhdGUoKSAtIDcpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXcuTW9udGhWaWV3OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGUuc2V0TW9udGgodGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKSAtIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbmV3RGF0ZTtcclxuICAgICAgICAgICAgdGhpcy5yYW5nZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZFVuaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0RhdGU6IERhdGUgPSBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZSk7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy52aWV3KSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIENhbGVuZGFyVmlldy5EYXlWaWV3OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGUuc2V0RGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LldlZWtWaWV3OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGUuc2V0RGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCkgKyA3KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3LldlZWtTZWxlY3RWaWV3OlxyXG4gICAgICAgICAgICAgICAgICAgIG5ld0RhdGUuc2V0RGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCkgKyA3KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3Lk1vbnRoVmlldzpcclxuICAgICAgICAgICAgICAgICAgICBuZXdEYXRlLnNldE1vbnRoKHRoaXMuc2VsZWN0ZWREYXRlLmdldE1vbnRoKCkgKyAxKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ld0RhdGU7XHJcbiAgICAgICAgICAgIHRoaXMucmFuZ2VDaGFuZ2UuZW1pdCh0aGlzLnNlbGVjdGVkRGF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzZXRVbml0KHdlZWtEYXk6IFdlZWtkYXkpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHdlZWtEYXkuZGF0ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZUNoYW5nZS5lbWl0KHRoaXMuc2VsZWN0ZWREYXRlKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hhbmdlVGhlVmlldyh2aWV3OiBDYWxlbmRhclZpZXcpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnZpZXcgPSB2aWV3O1xyXG4gICAgICAgIHRoaXMudmlld0NoYW5nZS5lbWl0KHZpZXcpO1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVIZWFkZXJEYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfb25SZXNpemU6IEV2ZW50TGlzdGVuZXIgPSBhc3luYyAoKTogUHJvbWlzZTx2b2lkPiA9PiB7XHJcbiAgICAgICAgdGhpcy5fcmVzaXplSG9zdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmVlZCB0byByZXNpemUgdGhlIGhvc3QgY29tcG9uZW50IHRvIHNpemUgaXQncyBmaXhlZCBwb3NpdGlvbmVkIGNoaWxkIHRocm91Z2ggY3NzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgX3Jlc2l6ZUhvc3QoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2VsZW1lbnRSZWYpIHtcclxuICAgICAgICAgICAgdGhpcy5fcmVuZGVyZXIuc2V0U3R5bGUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsIFwid2lkdGhcIiwgdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQuY2xpZW50V2lkdGggLSB0aGlzLnNjcm9sbGJhcldpZHRoICsgXCJweFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJlcGFyZUhlYWRlckRhdGEoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy52aWV3KSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIENhbGVuZGFyVmlldy5EYXlWaWV3OlxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRheTogRGF5ID0gbmV3IERheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIGRheS5kYXRlID0gbmV3IERhdGUodGhpcy5zZWxlY3RlZERhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnM6IGFueSA9IHsgeWVhcjogXCJudW1lcmljXCIsIG1vbnRoOiBcImxvbmdcIiwgZGF5OiBcIm51bWVyaWNcIiB9O1xyXG4gICAgICAgICAgICAgICAgICAgIGRheS5kZXNjcmlwdGlvbiA9IHRoaXMuc2VsZWN0ZWREYXRlLnRvTG9jYWxlRGF0ZVN0cmluZyh0aGlzLl9sb2NhbGUsIG9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGF5ID0gZGF5O1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXcuV2Vla1ZpZXc6XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2Vla1ZpZXc6IFdlZWsgPSBDYWxlbmRhclV0aWxzLkdldERheXNPZldlZWsodGhpcy5zZWxlY3RlZERhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla0RheXMgPSB3ZWVrVmlldy53ZWVrRGF5cztcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5maXJzdEF2YWlsYWJsZURhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zaG93QmFja0J1dHRvbiA9IHRoaXMud2Vla0RheXMuZmluZCh3ZCA9PiBEYXRlVXRpbHMuRGF0ZXNFcXVhbCh0aGlzLmZpcnN0QXZhaWxhYmxlRGF0ZSwgd2QuZGF0ZSkpID09PSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBDYWxlbmRhclZpZXcuV2Vla1NlbGVjdFZpZXc6XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2Vla1NlbGVjdFZpZXc6IFdlZWsgPSBDYWxlbmRhclV0aWxzLkdldERheXNPZldlZWsodGhpcy5zZWxlY3RlZERhdGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud2Vla0RheXMgPSB3ZWVrU2VsZWN0Vmlldy53ZWVrRGF5cztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLndlZWtEYXlzLmZvckVhY2goKHdkOiBXZWVrZGF5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV2UGVyRGF5OiBBZ2VuZGFFdmVudFBlckRheSA9IHRoaXMuX2V2ZW50c1BlckRheSAmJiB0aGlzLl9ldmVudHNQZXJEYXkubGVuZ3RoID4gMCA/IHRoaXMuX2V2ZW50c1BlckRheS5maW5kKGUgPT4gRGF0ZVV0aWxzLkRhdGVzRXF1YWwoZS5kYXRlLCB3ZC5kYXRlKSkgOiBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZXZQZXJEYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLmV2ZW50cyA9IGV2UGVyRGF5LmV2ZW50cztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdkLndlZWtkYXlTZWxlY3RlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3RBdmFpbGFibGVEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd0JhY2tCdXR0b24gPSB0aGlzLndlZWtEYXlzLmZpbmQod2QgPT4gRGF0ZVV0aWxzLkRhdGVzRXF1YWwodGhpcy5maXJzdEF2YWlsYWJsZURhdGUsIHdkLmRhdGUpKSA9PT0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgQ2FsZW5kYXJWaWV3Lk1vbnRoVmlldzpcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB3ZWVrT2ZNb250aDogV2VlayA9IENhbGVuZGFyVXRpbHMuR2V0RGF5c09mV2Vlayh0aGlzLnNlbGVjdGVkRGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53ZWVrRGF5cyA9IHdlZWtPZk1vbnRoLndlZWtEYXlzO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0QXZhaWxhYmxlRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dCYWNrQnV0dG9uID0gdGhpcy53ZWVrRGF5cy5maW5kKHdkID0+IERhdGVVdGlscy5EYXRlc0VxdWFsKHRoaXMuZmlyc3RBdmFpbGFibGVEYXRlLCB3ZC5kYXRlKSkgPT09IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,36 @@
1
+ import { Component, Input, ViewEncapsulation } from "@angular/core";
2
+ export class AgendaHourCellComponent {
3
+ constructor() {
4
+ this.onlyLabels = false;
5
+ this.noLabels = false;
6
+ }
7
+ set date(value) {
8
+ this._date = value;
9
+ this._setNextHalfHour();
10
+ }
11
+ get date() {
12
+ return this._date;
13
+ }
14
+ _setNextHalfHour() {
15
+ this.datePlushalfHour = new Date(this._date);
16
+ this.datePlushalfHour.setMinutes(this.datePlushalfHour.getMinutes() + 30);
17
+ }
18
+ }
19
+ AgendaHourCellComponent.decorators = [
20
+ { type: Component, args: [{
21
+ selector: "agenda-hour-cell",
22
+ template: `
23
+ <div class="row-per-half-hour">
24
+ <agenda-half-hour-cell [date]="date" [showLabel]="onlyLabels && !noLabels"></agenda-half-hour-cell>
25
+ <agenda-half-hour-cell [date]="datePlushalfHour"></agenda-half-hour-cell>
26
+ </div>
27
+ `,
28
+ encapsulation: ViewEncapsulation.None
29
+ },] }
30
+ ];
31
+ AgendaHourCellComponent.propDecorators = {
32
+ onlyLabels: [{ type: Input }],
33
+ noLabels: [{ type: Input }],
34
+ date: [{ type: Input }]
35
+ };
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbmRhLWhvdXItY2VsbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBsYW5uaW5nL2NvbXBvbmVudC9hZ2VuZGEvYWdlbmRhLWhvdXItY2VsbC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFZbEUsTUFBTSxPQUFPLHVCQUF1QjtJQVZwQztRQVlXLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFHNUIsYUFBUSxHQUFZLEtBQUssQ0FBQztJQW9CckMsQ0FBQztJQWxCRyxJQUNXLElBQUksQ0FBQyxLQUFXO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFFRCxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQU1PLGdCQUFnQjtRQUNwQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlFLENBQUM7OztZQWxDSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsUUFBUSxFQUFFOzs7OztLQUtUO2dCQUNILGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7eUJBRUksS0FBSzt1QkFHTCxLQUFLO21CQUdMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhZ2VuZGEtaG91ci1jZWxsXCIsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3ctcGVyLWhhbGYtaG91clwiPlxyXG4gICAgICAgICAgICA8YWdlbmRhLWhhbGYtaG91ci1jZWxsIFtkYXRlXT1cImRhdGVcIiBbc2hvd0xhYmVsXT1cIm9ubHlMYWJlbHMgJiYgIW5vTGFiZWxzXCI+PC9hZ2VuZGEtaGFsZi1ob3VyLWNlbGw+XHJcbiAgICAgICAgICAgIDxhZ2VuZGEtaGFsZi1ob3VyLWNlbGwgW2RhdGVdPVwiZGF0ZVBsdXNoYWxmSG91clwiPjwvYWdlbmRhLWhhbGYtaG91ci1jZWxsPlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ2VuZGFIb3VyQ2VsbENvbXBvbmVudCB7XHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG9ubHlMYWJlbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIG5vTGFiZWxzOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZXQgZGF0ZSh2YWx1ZTogRGF0ZSkge1xyXG4gICAgICAgIHRoaXMuX2RhdGUgPSB2YWx1ZTtcclxuICAgICAgICB0aGlzLl9zZXROZXh0SGFsZkhvdXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0IGRhdGUoKTogRGF0ZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRhdGVQbHVzaGFsZkhvdXI6IERhdGU7XHJcblxyXG4gICAgcHJpdmF0ZSBfZGF0ZTogRGF0ZTtcclxuXHJcbiAgICBwcml2YXRlIF9zZXROZXh0SGFsZkhvdXIoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5kYXRlUGx1c2hhbGZIb3VyID0gbmV3IERhdGUodGhpcy5fZGF0ZSk7XHJcbiAgICAgICAgdGhpcy5kYXRlUGx1c2hhbGZIb3VyLnNldE1pbnV0ZXModGhpcy5kYXRlUGx1c2hhbGZIb3VyLmdldE1pbnV0ZXMoKSArIDMwKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -0,0 +1,50 @@
1
+ import { Component, Input, ViewEncapsulation } from "@angular/core";
2
+ export class AgendaHourViewLabelsComponent {
3
+ constructor() {
4
+ this.noLabels = false;
5
+ this.datesByTheHour = [];
6
+ this._date = new Date();
7
+ }
8
+ set date(value) {
9
+ this._date = new Date(value);
10
+ this._date.setDate(1);
11
+ this._date.setMonth(1);
12
+ this._date.setFullYear(1);
13
+ this._prepareViewData();
14
+ }
15
+ get date() {
16
+ return this._date;
17
+ }
18
+ // fixme remove ctrl + c, ctrl + v code duplication with AgendaHourViewComponent._prepareViewData()
19
+ _prepareViewData() {
20
+ this.datesByTheHour.length = 0;
21
+ if (this.date) {
22
+ let newDate = new Date(this.date);
23
+ newDate.setHours(0, 0, 0, 0);
24
+ this.datesByTheHour.push(newDate);
25
+ for (let i = 0; i < 23; i++) {
26
+ newDate = new Date(newDate);
27
+ newDate.setHours(newDate.getHours() + 1);
28
+ this.datesByTheHour.push(newDate);
29
+ }
30
+ }
31
+ }
32
+ }
33
+ AgendaHourViewLabelsComponent.decorators = [
34
+ { type: Component, args: [{
35
+ selector: "agenda-hour-view-labels",
36
+ template: `
37
+ <div class="row-per-hour" *ngFor="let dateByTheHour of datesByTheHour">
38
+ <div>
39
+ <agenda-hour-cell [date]="dateByTheHour" onlyLabels [noLabels]="noLabels"></agenda-hour-cell>
40
+ </div>
41
+ </div>
42
+ `,
43
+ encapsulation: ViewEncapsulation.None
44
+ },] }
45
+ ];
46
+ AgendaHourViewLabelsComponent.propDecorators = {
47
+ date: [{ type: Input }],
48
+ noLabels: [{ type: Input }]
49
+ };
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbmRhLWhvdXItdmlldy1sYWJlbHMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZS1wbGFubmluZy9jb21wb25lbnQvYWdlbmRhL2FnZW5kYS1ob3VyLXZpZXctbGFiZWxzLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxpQkFBaUIsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQWFsRSxNQUFNLE9BQU8sNkJBQTZCO0lBWDFDO1FBdUJXLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFFakIsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFNcEMsVUFBSyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7SUFnQnJDLENBQUM7SUFsQ0csSUFDVyxJQUFJLENBQUMsS0FBVztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFPRCxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUlELG1HQUFtRztJQUMzRixnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLElBQUksT0FBTyxHQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3JDO1NBQ0o7SUFDTCxDQUFDOzs7WUE5Q0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSx5QkFBeUI7Z0JBQ25DLFFBQVEsRUFBRTs7Ozs7O0tBTVQ7Z0JBQ0gsYUFBYSxFQUFFLGlCQUFpQixDQUFDLElBQUk7YUFDdEM7OzttQkFHSSxLQUFLO3VCQVNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgSW5wdXQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhZ2VuZGEtaG91ci12aWV3LWxhYmVsc1wiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93LXBlci1ob3VyXCIgKm5nRm9yPVwibGV0IGRhdGVCeVRoZUhvdXIgb2YgZGF0ZXNCeVRoZUhvdXJcIj5cclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxhZ2VuZGEtaG91ci1jZWxsIFtkYXRlXT1cImRhdGVCeVRoZUhvdXJcIiBvbmx5TGFiZWxzIFtub0xhYmVsc109XCJub0xhYmVsc1wiPjwvYWdlbmRhLWhvdXItY2VsbD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICBgLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcclxufSlcclxuZXhwb3J0IGNsYXNzIEFnZW5kYUhvdXJWaWV3TGFiZWxzQ29tcG9uZW50IHtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIHNldCBkYXRlKHZhbHVlOiBEYXRlKSB7XHJcbiAgICAgICAgdGhpcy5fZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcclxuICAgICAgICB0aGlzLl9kYXRlLnNldERhdGUoMSk7XHJcbiAgICAgICAgdGhpcy5fZGF0ZS5zZXRNb250aCgxKTtcclxuICAgICAgICB0aGlzLl9kYXRlLnNldEZ1bGxZZWFyKDEpO1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVWaWV3RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgbm9MYWJlbHM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgZGF0ZXNCeVRoZUhvdXI6IERhdGVbXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyBnZXQgZGF0ZSgpOiBEYXRlIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9kYXRlOiBEYXRlID0gbmV3IERhdGUoKTtcclxuXHJcbiAgICAvLyBmaXhtZSByZW1vdmUgY3RybCArIGMsIGN0cmwgKyB2IGNvZGUgZHVwbGljYXRpb24gd2l0aCBBZ2VuZGFIb3VyVmlld0NvbXBvbmVudC5fcHJlcGFyZVZpZXdEYXRhKClcclxuICAgIHByaXZhdGUgX3ByZXBhcmVWaWV3RGF0YSgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmRhdGVzQnlUaGVIb3VyLmxlbmd0aCA9IDA7XHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZSkge1xyXG4gICAgICAgICAgICBsZXQgbmV3RGF0ZTogRGF0ZSA9IG5ldyBEYXRlKHRoaXMuZGF0ZSk7XHJcbiAgICAgICAgICAgIG5ld0RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0ZXNCeVRoZUhvdXIucHVzaChuZXdEYXRlKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IDIzOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIG5ld0RhdGUgPSBuZXcgRGF0ZShuZXdEYXRlKTtcclxuICAgICAgICAgICAgICAgIG5ld0RhdGUuc2V0SG91cnMobmV3RGF0ZS5nZXRIb3VycygpICsgMSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGVzQnlUaGVIb3VyLnB1c2gobmV3RGF0ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -0,0 +1,46 @@
1
+ import { Component, Input, ViewEncapsulation } from "@angular/core";
2
+ export class AgendaHourViewComponent {
3
+ constructor() {
4
+ this.datesByTheHour = [];
5
+ this._date = new Date();
6
+ }
7
+ set date(value) {
8
+ this._date = new Date(value);
9
+ this._prepareViewData();
10
+ }
11
+ get date() {
12
+ return this._date;
13
+ }
14
+ // fixme remove ctrl + c, ctrl + v code duplication with AgendaHourViewLabelsComponent._prepareViewData()
15
+ _prepareViewData() {
16
+ this.datesByTheHour.length = 0;
17
+ if (this.date) {
18
+ let newDate = new Date(this.date);
19
+ newDate.setHours(0, 0, 0, 0);
20
+ this.datesByTheHour.push(newDate);
21
+ for (let i = 0; i < 23; i++) {
22
+ newDate = new Date(newDate);
23
+ newDate.setHours(newDate.getHours() + 1);
24
+ this.datesByTheHour.push(newDate);
25
+ }
26
+ }
27
+ }
28
+ }
29
+ AgendaHourViewComponent.decorators = [
30
+ { type: Component, args: [{
31
+ selector: "agenda-hour-view",
32
+ template: `
33
+ <div class="row-per-hour" *ngFor="let dateByTheHour of datesByTheHour">
34
+ <div fxLayout="row">
35
+ <agenda-hour-cell [date]="dateByTheHour"></agenda-hour-cell>
36
+ </div>
37
+ </div>
38
+ <ng-content></ng-content>
39
+ `,
40
+ encapsulation: ViewEncapsulation.None
41
+ },] }
42
+ ];
43
+ AgendaHourViewComponent.propDecorators = {
44
+ date: [{ type: Input }]
45
+ };
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbmRhLWhvdXItdmlldy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBsYW5uaW5nL2NvbXBvbmVudC9hZ2VuZGEvYWdlbmRhLWhvdXItdmlldy5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFjbEUsTUFBTSxPQUFPLHVCQUF1QjtJQVpwQztRQW9Cb0IsbUJBQWMsR0FBVyxFQUFFLENBQUM7UUFNcEMsVUFBSyxHQUFTLElBQUksSUFBSSxFQUFFLENBQUM7SUFpQnJDLENBQUM7SUE3QkcsSUFDVyxJQUFJLENBQUMsS0FBVztRQUN2QixJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzVCLENBQUM7SUFJRCxJQUFXLElBQUk7UUFDWCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDdEIsQ0FBQztJQUlELHlHQUF5RztJQUNqRyxnQkFBZ0I7UUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtZQUNYLElBQUksT0FBTyxHQUFTLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN4QyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2xDLEtBQUssSUFBSSxDQUFDLEdBQVcsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2pDLE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3JDO1NBQ0o7SUFDTCxDQUFDOzs7WUF6Q0osU0FBUyxTQUFDO2dCQUNQLFFBQVEsRUFBRSxrQkFBa0I7Z0JBQzVCLFFBQVEsRUFBRTs7Ozs7OztLQU9UO2dCQUNILGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDOzs7bUJBR0ksS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBJbnB1dCwgVmlld0VuY2Fwc3VsYXRpb259IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFnZW5kYS1ob3VyLXZpZXdcIixcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdy1wZXItaG91clwiICpuZ0Zvcj1cImxldCBkYXRlQnlUaGVIb3VyIG9mIGRhdGVzQnlUaGVIb3VyXCI+XHJcbiAgICAgICAgICAgIDxkaXYgZnhMYXlvdXQ9XCJyb3dcIj5cclxuICAgICAgICAgICAgICAgIDxhZ2VuZGEtaG91ci1jZWxsIFtkYXRlXT1cImRhdGVCeVRoZUhvdXJcIj48L2FnZW5kYS1ob3VyLWNlbGw+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cclxuICAgIGAsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWdlbmRhSG91clZpZXdDb21wb25lbnQge1xyXG5cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgc2V0IGRhdGUodmFsdWU6IERhdGUpIHtcclxuICAgICAgICB0aGlzLl9kYXRlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgIHRoaXMuX3ByZXBhcmVWaWV3RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSBkYXRlc0J5VGhlSG91cjogRGF0ZVtdID0gW107XHJcblxyXG4gICAgcHVibGljIGdldCBkYXRlKCk6IERhdGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgX2RhdGU6IERhdGUgPSBuZXcgRGF0ZSgpO1xyXG5cclxuICAgIC8vIGZpeG1lIHJlbW92ZSBjdHJsICsgYywgY3RybCArIHYgY29kZSBkdXBsaWNhdGlvbiB3aXRoIEFnZW5kYUhvdXJWaWV3TGFiZWxzQ29tcG9uZW50Ll9wcmVwYXJlVmlld0RhdGEoKVxyXG4gICAgcHJpdmF0ZSBfcHJlcGFyZVZpZXdEYXRhKCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZGF0ZXNCeVRoZUhvdXIubGVuZ3RoID0gMDtcclxuICAgICAgICBpZiAodGhpcy5kYXRlKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdEYXRlOiBEYXRlID0gbmV3IERhdGUodGhpcy5kYXRlKTtcclxuICAgICAgICAgICAgbmV3RGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTtcclxuICAgICAgICAgICAgdGhpcy5kYXRlc0J5VGhlSG91ci5wdXNoKG5ld0RhdGUpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpOiBudW1iZXIgPSAwOyBpIDwgMjM7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgbmV3RGF0ZSA9IG5ldyBEYXRlKG5ld0RhdGUpO1xyXG4gICAgICAgICAgICAgICAgbmV3RGF0ZS5zZXRIb3VycyhuZXdEYXRlLmdldEhvdXJzKCkgKyAxKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0ZXNCeVRoZUhvdXIucHVzaChuZXdEYXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,61 @@
1
+ import { Component, ViewEncapsulation } from "@angular/core";
2
+ import { AgendaBaseViewComponent } from "./agenda-base-view.component";
3
+ import { NULL_MONTH } from "../../../../model/agenda-null-objects";
4
+ import { Month } from "../../../../model/month.model";
5
+ import { DateUtils } from "../../../../utils/date-utils";
6
+ import { CalendarUtils } from "../../../../utils/calendar.utils";
7
+ export class AgendaMonthViewComponent extends AgendaBaseViewComponent {
8
+ constructor() {
9
+ super(...arguments);
10
+ this.month = NULL_MONTH;
11
+ this.firstWeekDays = [];
12
+ this.weeks = [];
13
+ }
14
+ prepareViewData() {
15
+ const month = new Month();
16
+ if (this.selectedDate) {
17
+ const day = DateUtils.GetFirstDayOfMonth(this.selectedDate);
18
+ const endOfMonth = DateUtils.GetLastDayOfMonth(this.selectedDate);
19
+ let oneMoreIteration = false;
20
+ let continueLoop = true;
21
+ while (continueLoop) {
22
+ if (oneMoreIteration) {
23
+ continueLoop = false;
24
+ }
25
+ const week = CalendarUtils.GetDaysOfWeek(day);
26
+ const len = week.weekDays.length;
27
+ for (let i = 0; i < len; i++) {
28
+ week.weekDays[i].events = this.getEventsFromDate(week.weekDays[i].date);
29
+ week.weekDays[i].inView = week.weekDays[i].date.getMonth() === this.selectedDate.getMonth();
30
+ }
31
+ month.weeks.push(week);
32
+ day.setDate(day.getDate() + 7);
33
+ if (day.getTime() >= endOfMonth.getTime()) {
34
+ oneMoreIteration = true;
35
+ }
36
+ }
37
+ this.month = month;
38
+ this.firstWeekDays = this.month.firstWeek.weekDays;
39
+ this.weeks = month.weeks;
40
+ }
41
+ }
42
+ }
43
+ AgendaMonthViewComponent.decorators = [
44
+ { type: Component, args: [{
45
+ selector: "agenda-month-view",
46
+ template: `
47
+ <div class="view-wrapper">
48
+ <div class="hour-view-labels-wrapper"></div>
49
+ <div class="weeks">
50
+ <div class="week" *ngFor="let week of weeks" fxLayout="row">
51
+ <div class="week-day" *ngFor="let weekDay of week.weekDays" [class.not-in-month]="!weekDay.inView">
52
+ <div class="day" [textContent]="weekDay.weekdayDay"></div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+ </div>
57
+ `,
58
+ encapsulation: ViewEncapsulation.None
59
+ },] }
60
+ ];
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbmRhLW1vbnRoLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZS1wbGFubmluZy9jb21wb25lbnQvYWdlbmRhL2FnZW5kYS1tb250aC12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZFLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRSxPQUFPLEVBQUMsS0FBSyxFQUFDLE1BQU0sK0JBQStCLENBQUM7QUFHcEQsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLDhCQUE4QixDQUFDO0FBQ3ZELE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxrQ0FBa0MsQ0FBQztBQW1CL0QsTUFBTSxPQUFPLHdCQUF5QixTQUFRLHVCQUF1QjtJQWhCckU7O1FBa0JXLFVBQUssR0FBVSxVQUFVLENBQUM7UUFFMUIsa0JBQWEsR0FBYyxFQUFFLENBQUM7UUFFOUIsVUFBSyxHQUFXLEVBQUUsQ0FBQztJQWdDOUIsQ0FBQztJQTlCYSxlQUFlO1FBQ3JCLE1BQU0sS0FBSyxHQUFVLElBQUksS0FBSyxFQUFFLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ25CLE1BQU0sR0FBRyxHQUFTLFNBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7WUFDbEUsTUFBTSxVQUFVLEdBQVMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN4RSxJQUFJLGdCQUFnQixHQUFZLEtBQUssQ0FBQztZQUN0QyxJQUFJLFlBQVksR0FBWSxJQUFJLENBQUM7WUFFakMsT0FBTyxZQUFZLEVBQUU7Z0JBQ2pCLElBQUksZ0JBQWdCLEVBQUU7b0JBQ2xCLFlBQVksR0FBRyxLQUFLLENBQUM7aUJBQ3hCO2dCQUNELE1BQU0sSUFBSSxHQUFTLGFBQWEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sR0FBRyxHQUFXLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDO2dCQUN6QyxLQUFLLElBQUksQ0FBQyxHQUFXLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDeEUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEtBQUssSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsQ0FBQztpQkFDL0Y7Z0JBQ0QsS0FBSyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZCLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMvQixJQUFJLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxVQUFVLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQ3ZDLGdCQUFnQixHQUFHLElBQUksQ0FBQztpQkFDM0I7YUFDSjtZQUNELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDO1lBQ25ELElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztTQUM1QjtJQUNMLENBQUM7OztZQXBESixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLG1CQUFtQjtnQkFDN0IsUUFBUSxFQUFFOzs7Ozs7Ozs7OztLQVdUO2dCQUNILGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxJQUFJO2FBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtDb21wb25lbnQsIFZpZXdFbmNhcHN1bGF0aW9ufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBZ2VuZGFCYXNlVmlld0NvbXBvbmVudCB9IGZyb20gXCIuL2FnZW5kYS1iYXNlLXZpZXcuY29tcG9uZW50XCI7XHJcbmltcG9ydCB7TlVMTF9NT05USH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2FnZW5kYS1udWxsLW9iamVjdHNcIjtcclxuaW1wb3J0IHtNb250aH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL21vbnRoLm1vZGVsXCI7XHJcbmltcG9ydCB7V2Vla2RheX0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL3dlZWtkYXkubW9kZWxcIjtcclxuaW1wb3J0IHtXZWVrfSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvd2Vlay5tb2RlbFwiO1xyXG5pbXBvcnQge0RhdGVVdGlsc30gZnJvbSBcIi4uLy4uLy4uLy4uL3V0aWxzL2RhdGUtdXRpbHNcIjtcclxuaW1wb3J0IHtDYWxlbmRhclV0aWxzfSBmcm9tIFwiLi4vLi4vLi4vLi4vdXRpbHMvY2FsZW5kYXIudXRpbHNcIjtcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiBcImFnZW5kYS1tb250aC12aWV3XCIsXHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ2aWV3LXdyYXBwZXJcIj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhvdXItdmlldy1sYWJlbHMtd3JhcHBlclwiPjwvZGl2PlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Vla3NcIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrXCIgKm5nRm9yPVwibGV0IHdlZWsgb2Ygd2Vla3NcIiBmeExheW91dD1cInJvd1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3ZWVrLWRheVwiICpuZ0Zvcj1cImxldCB3ZWVrRGF5IG9mIHdlZWsud2Vla0RheXNcIiBbY2xhc3Mubm90LWluLW1vbnRoXT1cIiF3ZWVrRGF5LmluVmlld1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5XCIgW3RleHRDb250ZW50XT1cIndlZWtEYXkud2Vla2RheURheVwiPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgYCxcclxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5Ob25lXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ2VuZGFNb250aFZpZXdDb21wb25lbnQgZXh0ZW5kcyBBZ2VuZGFCYXNlVmlld0NvbXBvbmVudCB7XHJcblxyXG4gICAgcHVibGljIG1vbnRoOiBNb250aCA9IE5VTExfTU9OVEg7XHJcblxyXG4gICAgcHVibGljIGZpcnN0V2Vla0RheXM6IFdlZWtkYXlbXSA9IFtdO1xyXG5cclxuICAgIHB1YmxpYyB3ZWVrczogV2Vla1tdID0gW107XHJcblxyXG4gICAgcHJvdGVjdGVkIHByZXBhcmVWaWV3RGF0YSgpOiB2b2lkIHtcclxuICAgICAgICBjb25zdCBtb250aDogTW9udGggPSBuZXcgTW9udGgoKTtcclxuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZERhdGUpIHtcclxuICAgICAgICAgICAgY29uc3QgZGF5OiBEYXRlID0gRGF0ZVV0aWxzLkdldEZpcnN0RGF5T2ZNb250aCh0aGlzLnNlbGVjdGVkRGF0ZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IGVuZE9mTW9udGg6IERhdGUgPSBEYXRlVXRpbHMuR2V0TGFzdERheU9mTW9udGgodGhpcy5zZWxlY3RlZERhdGUpO1xyXG4gICAgICAgICAgICBsZXQgb25lTW9yZUl0ZXJhdGlvbjogYm9vbGVhbiA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgY29udGludWVMb29wOiBib29sZWFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHdoaWxlIChjb250aW51ZUxvb3ApIHtcclxuICAgICAgICAgICAgICAgIGlmIChvbmVNb3JlSXRlcmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29udGludWVMb29wID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB3ZWVrOiBXZWVrID0gQ2FsZW5kYXJVdGlscy5HZXREYXlzT2ZXZWVrKGRheSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsZW46IG51bWJlciA9IHdlZWsud2Vla0RheXMubGVuZ3RoO1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaTogbnVtYmVyID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2Vlay53ZWVrRGF5c1tpXS5ldmVudHMgPSB0aGlzLmdldEV2ZW50c0Zyb21EYXRlKHdlZWsud2Vla0RheXNbaV0uZGF0ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2Vlay53ZWVrRGF5c1tpXS5pblZpZXcgPSB3ZWVrLndlZWtEYXlzW2ldLmRhdGUuZ2V0TW9udGgoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIG1vbnRoLndlZWtzLnB1c2god2Vlayk7XHJcbiAgICAgICAgICAgICAgICBkYXkuc2V0RGF0ZShkYXkuZ2V0RGF0ZSgpICsgNyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZGF5LmdldFRpbWUoKSA+PSBlbmRPZk1vbnRoLmdldFRpbWUoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG9uZU1vcmVJdGVyYXRpb24gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubW9udGggPSBtb250aDtcclxuICAgICAgICAgICAgdGhpcy5maXJzdFdlZWtEYXlzID0gdGhpcy5tb250aC5maXJzdFdlZWsud2Vla0RheXM7XHJcbiAgICAgICAgICAgIHRoaXMud2Vla3MgPSBtb250aC53ZWVrcztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG59XHJcbiJdfQ==
@@ -0,0 +1,39 @@
1
+ import { Component, EventEmitter, Input, Output } from "@angular/core";
2
+ import { NULL_AGENDA_EVENT } from "../../../../model/agenda-null-objects";
3
+ import { Icon } from "../../../../enum/icon.enum";
4
+ import { IconCacheService } from "../../../../service/icon-cache.service";
5
+ export class AgendaSelectEventComponent {
6
+ constructor(iconCacheService) {
7
+ this.iconCacheService = iconCacheService;
8
+ this.icons = Icon;
9
+ this.event = NULL_AGENDA_EVENT;
10
+ this.eventChecked = new EventEmitter();
11
+ }
12
+ checkEvent(event) {
13
+ this.event.checked = !this.event.checked;
14
+ this.eventChecked.emit(this.event);
15
+ }
16
+ }
17
+ AgendaSelectEventComponent.decorators = [
18
+ { type: Component, args: [{
19
+ selector: "agenda-select-event",
20
+ template: `
21
+ <div class="week-select-item" (click)="checkEvent($event)">
22
+ <co-icon [iconData]="iconCacheService.getIcon(icons.ArrowPointRight)" class="select-icon action-color" *ngIf="!event.checked"></co-icon>
23
+ <co-icon [iconData]="iconCacheService.getIcon(icons.ArrowPointRight)" class="select-icon action-color" *ngIf="event.checked"></co-icon>
24
+ <div class="moment-name">
25
+ <small>{{ event.date | date: 'EEEE d MMMM' | uppercase }}</small>
26
+ <h2>{{ event.description }}</h2>
27
+ </div>
28
+ </div>
29
+ `
30
+ },] }
31
+ ];
32
+ AgendaSelectEventComponent.ctorParameters = () => [
33
+ { type: IconCacheService }
34
+ ];
35
+ AgendaSelectEventComponent.propDecorators = {
36
+ event: [{ type: Input }],
37
+ eventChecked: [{ type: Output }]
38
+ };
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbmRhLXNlbGVjdC1ldmVudC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zaGFyZWRjb21wb25lbnRzL3NyYy9saWIvY29tcG9uZW50cy9kYXRlLXBsYW5uaW5nL2NvbXBvbmVudC9hZ2VuZGEvYWdlbmRhLXNlbGVjdC1ldmVudC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUVyRSxPQUFPLEVBQUMsaUJBQWlCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDaEQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0sd0NBQXdDLENBQUM7QUFleEUsTUFBTSxPQUFPLDBCQUEwQjtJQVNuQyxZQUNTLGdCQUFrQztRQUFsQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBVDNCLFVBQUssR0FBZ0IsSUFBSSxDQUFDO1FBR25DLFVBQUssR0FBZ0IsaUJBQWlCLENBQUM7UUFHdkMsaUJBQVksR0FBOEIsSUFBSSxZQUFZLEVBQWUsQ0FBQztJQUtqRixDQUFDO0lBRU0sVUFBVSxDQUFDLEtBQWlCO1FBQy9CLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDekMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7OztZQTlCSixTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtnQkFDL0IsUUFBUSxFQUFFOzs7Ozs7Ozs7S0FTVDthQUNKOzs7WUFkTyxnQkFBZ0I7OztvQkFrQm5CLEtBQUs7MkJBR0wsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7Q29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXR9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7QWdlbmRhRXZlbnR9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9hZ2VuZGEtZXZlbnQubW9kZWxcIjtcclxuaW1wb3J0IHtOVUxMX0FHRU5EQV9FVkVOVH0gZnJvbSBcIi4uLy4uLy4uLy4uL21vZGVsL2FnZW5kYS1udWxsLW9iamVjdHNcIjtcclxuaW1wb3J0IHtJY29ufSBmcm9tIFwiLi4vLi4vLi4vLi4vZW51bS9pY29uLmVudW1cIjtcclxuaW1wb3J0IHtJY29uQ2FjaGVTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vLi4vLi4vc2VydmljZS9pY29uLWNhY2hlLnNlcnZpY2VcIjtcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gICAgc2VsZWN0b3I6IFwiYWdlbmRhLXNlbGVjdC1ldmVudFwiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwid2Vlay1zZWxlY3QtaXRlbVwiIChjbGljayk9XCJjaGVja0V2ZW50KCRldmVudClcIj5cclxuICAgICAgICAgICAgPGNvLWljb24gW2ljb25EYXRhXT1cImljb25DYWNoZVNlcnZpY2UuZ2V0SWNvbihpY29ucy5BcnJvd1BvaW50UmlnaHQpXCIgY2xhc3M9XCJzZWxlY3QtaWNvbiBhY3Rpb24tY29sb3JcIiAqbmdJZj1cIiFldmVudC5jaGVja2VkXCI+PC9jby1pY29uPlxyXG4gICAgICAgICAgICA8Y28taWNvbiBbaWNvbkRhdGFdPVwiaWNvbkNhY2hlU2VydmljZS5nZXRJY29uKGljb25zLkFycm93UG9pbnRSaWdodClcIiBjbGFzcz1cInNlbGVjdC1pY29uIGFjdGlvbi1jb2xvclwiICpuZ0lmPVwiZXZlbnQuY2hlY2tlZFwiPjwvY28taWNvbj5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vbWVudC1uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICA8c21hbGw+e3sgZXZlbnQuZGF0ZSB8IGRhdGU6ICdFRUVFIGQgTU1NTScgfCB1cHBlcmNhc2UgfX08L3NtYWxsPlxyXG4gICAgICAgICAgICAgICAgPGgyPnt7IGV2ZW50LmRlc2NyaXB0aW9uIH19PC9oMj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICBgXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBZ2VuZGFTZWxlY3RFdmVudENvbXBvbmVudCB7XHJcbiAgICBwdWJsaWMgcmVhZG9ubHkgaWNvbnM6IHR5cGVvZiBJY29uID0gSWNvbjtcclxuXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGV2ZW50OiBBZ2VuZGFFdmVudCA9IE5VTExfQUdFTkRBX0VWRU5UO1xyXG5cclxuICAgIEBPdXRwdXQoKVxyXG4gICAgcHVibGljIGV2ZW50Q2hlY2tlZDogRXZlbnRFbWl0dGVyPEFnZW5kYUV2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXI8QWdlbmRhRXZlbnQ+KCk7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgIHB1YmxpYyBpY29uQ2FjaGVTZXJ2aWNlOiBJY29uQ2FjaGVTZXJ2aWNlXHJcbiAgICApIHtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY2hlY2tFdmVudChldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuZXZlbnQuY2hlY2tlZCA9ICF0aGlzLmV2ZW50LmNoZWNrZWQ7XHJcbiAgICAgICAgdGhpcy5ldmVudENoZWNrZWQuZW1pdCh0aGlzLmV2ZW50KTtcclxuICAgIH1cclxuXHJcbn1cclxuIl19
@@ -0,0 +1,35 @@
1
+ import { Component, EventEmitter, Input, Output, ViewEncapsulation } from "@angular/core";
2
+ import { CalendarView } from "../../../../enum/calendar-view.enum";
3
+ export class AgendaViewComponent {
4
+ constructor() {
5
+ this.view = CalendarView.WeekView;
6
+ this.eventsPerDay = [];
7
+ this.eventChecked = new EventEmitter();
8
+ this.viewTypes = CalendarView;
9
+ }
10
+ }
11
+ AgendaViewComponent.decorators = [
12
+ { type: Component, args: [{
13
+ selector: "agenda-view",
14
+ template: `
15
+ <div class="view-wrapper mini-scrollbar" [ngSwitch]="view">
16
+ <agenda-day-view *ngSwitchCase="viewTypes.DayView"
17
+ [selectedDate]="selectedDate" [eventsPerDay]="eventsPerDay" (eventChecked)="eventChecked.emit($event)"></agenda-day-view>
18
+ <agenda-week-view *ngSwitchCase="viewTypes.WeekView"
19
+ [view]="view" [selectedDate]="selectedDate" [eventsPerDay]="eventsPerDay" (eventChecked)="eventChecked.emit($event)"></agenda-week-view>
20
+ <agenda-week-select-view *ngSwitchCase="viewTypes.WeekSelectView"
21
+ [view]="view" [selectedDate]="selectedDate" [eventsPerDay]="eventsPerDay" (eventChecked)="eventChecked.emit($event)"></agenda-week-select-view>
22
+ <agenda-month-view *ngSwitchCase="viewTypes.MonthView"
23
+ [selectedDate]="selectedDate" [eventsPerDay]="eventsPerDay" (eventChecked)="eventChecked.emit($event)"></agenda-month-view>
24
+ </div>
25
+ `,
26
+ encapsulation: ViewEncapsulation.None
27
+ },] }
28
+ ];
29
+ AgendaViewComponent.propDecorators = {
30
+ view: [{ type: Input }],
31
+ selectedDate: [{ type: Input }],
32
+ eventsPerDay: [{ type: Input }],
33
+ eventChecked: [{ type: Output }]
34
+ };
35
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbmRhLXZpZXcuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkY29tcG9uZW50cy9zcmMvbGliL2NvbXBvbmVudHMvZGF0ZS1wbGFubmluZy9jb21wb25lbnQvYWdlbmRhL2FnZW5kYS12aWV3LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLGlCQUFpQixFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ3hGLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQW9CakUsTUFBTSxPQUFPLG1CQUFtQjtJQWhCaEM7UUFtQlcsU0FBSSxHQUFpQixZQUFZLENBQUMsUUFBUSxDQUFDO1FBTTNDLGlCQUFZLEdBQXdCLEVBQUUsQ0FBQztRQUc5QixpQkFBWSxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO1FBRTFFLGNBQVMsR0FBd0IsWUFBWSxDQUFDO0lBRWxFLENBQUM7OztZQWhDQSxTQUFTLFNBQUM7Z0JBQ1AsUUFBUSxFQUFFLGFBQWE7Z0JBQ3ZCLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7S0FXVDtnQkFDSCxhQUFhLEVBQUUsaUJBQWlCLENBQUMsSUFBSTthQUN0Qzs7O21CQUdJLEtBQUs7MkJBR0wsS0FBSzsyQkFHTCxLQUFLOzJCQUdMLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0NvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbn0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHtDYWxlbmRhclZpZXd9IGZyb20gXCIuLi8uLi8uLi8uLi9lbnVtL2NhbGVuZGFyLXZpZXcuZW51bVwiO1xyXG5pbXBvcnQge0FnZW5kYUV2ZW50fSBmcm9tIFwiLi4vLi4vLi4vLi4vbW9kZWwvYWdlbmRhLWV2ZW50Lm1vZGVsXCI7XHJcbmltcG9ydCB7QWdlbmRhRXZlbnRQZXJEYXl9IGZyb20gXCIuLi8uLi8uLi8uLi9tb2RlbC9hZ2VuZGEtZXZlbnQtcGVyLWRheS5tb2RlbFwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogXCJhZ2VuZGEtdmlld1wiLFxyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8ZGl2IGNsYXNzPVwidmlldy13cmFwcGVyIG1pbmktc2Nyb2xsYmFyXCIgW25nU3dpdGNoXT1cInZpZXdcIj5cclxuICAgICAgICAgICAgPGFnZW5kYS1kYXktdmlldyAqbmdTd2l0Y2hDYXNlPVwidmlld1R5cGVzLkRheVZpZXdcIlxyXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVcIiBbZXZlbnRzUGVyRGF5XT1cImV2ZW50c1BlckRheVwiIChldmVudENoZWNrZWQpPVwiZXZlbnRDaGVja2VkLmVtaXQoJGV2ZW50KVwiPjwvYWdlbmRhLWRheS12aWV3PlxyXG4gICAgICAgICAgICA8YWdlbmRhLXdlZWstdmlldyAqbmdTd2l0Y2hDYXNlPVwidmlld1R5cGVzLldlZWtWaWV3XCJcclxuICAgICAgICAgICAgICAgIFt2aWV3XT1cInZpZXdcIiBbc2VsZWN0ZWREYXRlXT1cInNlbGVjdGVkRGF0ZVwiIFtldmVudHNQZXJEYXldPVwiZXZlbnRzUGVyRGF5XCIgKGV2ZW50Q2hlY2tlZCk9XCJldmVudENoZWNrZWQuZW1pdCgkZXZlbnQpXCI+PC9hZ2VuZGEtd2Vlay12aWV3PlxyXG4gICAgICAgICAgICA8YWdlbmRhLXdlZWstc2VsZWN0LXZpZXcgKm5nU3dpdGNoQ2FzZT1cInZpZXdUeXBlcy5XZWVrU2VsZWN0Vmlld1wiXHJcbiAgICAgICAgICAgICAgICBbdmlld109XCJ2aWV3XCIgW3NlbGVjdGVkRGF0ZV09XCJzZWxlY3RlZERhdGVcIiBbZXZlbnRzUGVyRGF5XT1cImV2ZW50c1BlckRheVwiIChldmVudENoZWNrZWQpPVwiZXZlbnRDaGVja2VkLmVtaXQoJGV2ZW50KVwiPjwvYWdlbmRhLXdlZWstc2VsZWN0LXZpZXc+XHJcbiAgICAgICAgICAgIDxhZ2VuZGEtbW9udGgtdmlldyAqbmdTd2l0Y2hDYXNlPVwidmlld1R5cGVzLk1vbnRoVmlld1wiXHJcbiAgICAgICAgICAgICAgICBbc2VsZWN0ZWREYXRlXT1cInNlbGVjdGVkRGF0ZVwiIFtldmVudHNQZXJEYXldPVwiZXZlbnRzUGVyRGF5XCIgKGV2ZW50Q2hlY2tlZCk9XCJldmVudENoZWNrZWQuZW1pdCgkZXZlbnQpXCI+PC9hZ2VuZGEtbW9udGgtdmlldz5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIGAsXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQWdlbmRhVmlld0NvbXBvbmVudCB7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyB2aWV3OiBDYWxlbmRhclZpZXcgPSBDYWxlbmRhclZpZXcuV2Vla1ZpZXc7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBzZWxlY3RlZERhdGU6IERhdGU7XHJcblxyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBldmVudHNQZXJEYXk6IEFnZW5kYUV2ZW50UGVyRGF5W10gPSBbXTtcclxuXHJcbiAgICBAT3V0cHV0KClcclxuICAgIHB1YmxpYyByZWFkb25seSBldmVudENoZWNrZWQ6IEV2ZW50RW1pdHRlcjxBZ2VuZGFFdmVudD4gPSBuZXcgRXZlbnRFbWl0dGVyPEFnZW5kYUV2ZW50PigpO1xyXG5cclxuICAgIHB1YmxpYyByZWFkb25seSB2aWV3VHlwZXM6IHR5cGVvZiBDYWxlbmRhclZpZXcgPSBDYWxlbmRhclZpZXc7XHJcblxyXG59XHJcbiJdfQ==