@dayflow/angular 3.2.3 → 3.2.5

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.
@@ -7,14 +7,20 @@ export class DayFlowCalendarComponent {
7
7
  cdr;
8
8
  calendar;
9
9
  // Templates for custom content injection
10
- eventContent;
10
+ eventContentDay;
11
+ eventContentWeek;
12
+ eventContentMonth;
13
+ eventContentYear;
14
+ eventContentAllDayDay;
15
+ eventContentAllDayWeek;
16
+ eventContentAllDayMonth;
17
+ eventContentAllDayYear;
11
18
  eventDetailContent;
12
19
  eventDetailDialog;
13
- headerContent;
14
20
  createCalendarDialog;
15
21
  titleBarSlot;
16
22
  colorPicker;
17
- colorPickerWrapper;
23
+ createCalendarDialogColorPicker;
18
24
  collapsedSafeAreaLeft;
19
25
  container;
20
26
  customRenderings = [];
@@ -51,10 +57,33 @@ export class DayFlowCalendarComponent {
51
57
  this.destroyCalendar();
52
58
  this.initCalendar();
53
59
  }
54
- else if (changes['collapsedSafeAreaLeft'] && this.renderer) {
55
- this.renderer.setProps({
56
- collapsedSafeAreaLeft: this.collapsedSafeAreaLeft,
57
- });
60
+ else if (this.renderer) {
61
+ if (changes['collapsedSafeAreaLeft']) {
62
+ this.renderer.setProps({
63
+ collapsedSafeAreaLeft: this.collapsedSafeAreaLeft,
64
+ });
65
+ }
66
+ const slotKeys = [
67
+ 'eventContentDay',
68
+ 'eventContentWeek',
69
+ 'eventContentMonth',
70
+ 'eventContentYear',
71
+ 'eventContentAllDayDay',
72
+ 'eventContentAllDayWeek',
73
+ 'eventContentAllDayMonth',
74
+ 'eventContentAllDayYear',
75
+ 'eventDetailContent',
76
+ 'eventDetailDialog',
77
+ 'createCalendarDialog',
78
+ 'titleBarSlot',
79
+ 'colorPicker',
80
+ 'createCalendarDialogColorPicker',
81
+ ];
82
+ if (slotKeys.some(key => changes[key])) {
83
+ const activeOverrides = this.getActiveOverrides();
84
+ this.renderer.getCustomRenderingStore().setOverrides(activeOverrides);
85
+ this.app.setOverrides(activeOverrides);
86
+ }
58
87
  }
59
88
  }
60
89
  ngOnDestroy() {
@@ -64,7 +93,7 @@ export class DayFlowCalendarComponent {
64
93
  if (!this.container || !this.calendar) {
65
94
  return;
66
95
  }
67
- this.renderer = new CalendarRenderer(this.app);
96
+ this.renderer = new CalendarRenderer(this.app, this.getActiveOverrides());
68
97
  this.renderer.setProps({
69
98
  collapsedSafeAreaLeft: this.collapsedSafeAreaLeft,
70
99
  });
@@ -76,6 +105,25 @@ export class DayFlowCalendarComponent {
76
105
  this.cdr.markForCheck();
77
106
  });
78
107
  }
108
+ getActiveOverrides() {
109
+ const templateInputs = {
110
+ eventContentDay: this.eventContentDay,
111
+ eventContentWeek: this.eventContentWeek,
112
+ eventContentMonth: this.eventContentMonth,
113
+ eventContentYear: this.eventContentYear,
114
+ eventContentAllDayDay: this.eventContentAllDayDay,
115
+ eventContentAllDayWeek: this.eventContentAllDayWeek,
116
+ eventContentAllDayMonth: this.eventContentAllDayMonth,
117
+ eventContentAllDayYear: this.eventContentAllDayYear,
118
+ eventDetailContent: this.eventDetailContent,
119
+ eventDetailDialog: this.eventDetailDialog,
120
+ createCalendarDialog: this.createCalendarDialog,
121
+ titleBarSlot: this.titleBarSlot,
122
+ colorPicker: this.colorPicker,
123
+ createCalendarDialogColorPicker: this.createCalendarDialogColorPicker,
124
+ };
125
+ return Object.keys(templateInputs).filter(key => templateInputs[key] !== null && templateInputs[key] !== undefined);
126
+ }
79
127
  destroyCalendar() {
80
128
  if (this.unsubscribe) {
81
129
  this.unsubscribe();
@@ -89,8 +137,29 @@ export class DayFlowCalendarComponent {
89
137
  getTemplate(name) {
90
138
  // Switch avoids allocating a new Record on every change-detection cycle.
91
139
  switch (name) {
92
- case 'eventContent': {
93
- return this.eventContent ?? null;
140
+ case 'eventContentDay': {
141
+ return this.eventContentDay ?? null;
142
+ }
143
+ case 'eventContentWeek': {
144
+ return this.eventContentWeek ?? null;
145
+ }
146
+ case 'eventContentMonth': {
147
+ return this.eventContentMonth ?? null;
148
+ }
149
+ case 'eventContentYear': {
150
+ return this.eventContentYear ?? null;
151
+ }
152
+ case 'eventContentAllDayDay': {
153
+ return this.eventContentAllDayDay ?? null;
154
+ }
155
+ case 'eventContentAllDayWeek': {
156
+ return this.eventContentAllDayWeek ?? null;
157
+ }
158
+ case 'eventContentAllDayMonth': {
159
+ return this.eventContentAllDayMonth ?? null;
160
+ }
161
+ case 'eventContentAllDayYear': {
162
+ return this.eventContentAllDayYear ?? null;
94
163
  }
95
164
  case 'eventDetailContent': {
96
165
  return this.eventDetailContent ?? null;
@@ -98,9 +167,6 @@ export class DayFlowCalendarComponent {
98
167
  case 'eventDetailDialog': {
99
168
  return this.eventDetailDialog ?? null;
100
169
  }
101
- case 'headerContent': {
102
- return this.headerContent ?? null;
103
- }
104
170
  case 'createCalendarDialog': {
105
171
  return this.createCalendarDialog ?? null;
106
172
  }
@@ -110,8 +176,8 @@ export class DayFlowCalendarComponent {
110
176
  case 'colorPicker': {
111
177
  return this.colorPicker ?? null;
112
178
  }
113
- case 'colorPickerWrapper': {
114
- return this.colorPickerWrapper ?? null;
179
+ case 'createCalendarDialogColorPicker': {
180
+ return this.createCalendarDialogColorPicker ?? null;
115
181
  }
116
182
  default: {
117
183
  return null;
@@ -123,7 +189,7 @@ export class DayFlowCalendarComponent {
123
189
  return item.id;
124
190
  }
125
191
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DayFlowCalendarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
126
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DayFlowCalendarComponent, selector: "dayflow-calendar", inputs: { calendar: "calendar", eventContent: "eventContent", eventDetailContent: "eventDetailContent", eventDetailDialog: "eventDetailDialog", headerContent: "headerContent", createCalendarDialog: "createCalendarDialog", titleBarSlot: "titleBarSlot", colorPicker: "colorPicker", colorPickerWrapper: "colorPickerWrapper", collapsedSafeAreaLeft: "collapsedSafeAreaLeft" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
192
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DayFlowCalendarComponent, selector: "dayflow-calendar", inputs: { calendar: "calendar", eventContentDay: "eventContentDay", eventContentWeek: "eventContentWeek", eventContentMonth: "eventContentMonth", eventContentYear: "eventContentYear", eventContentAllDayDay: "eventContentAllDayDay", eventContentAllDayWeek: "eventContentAllDayWeek", eventContentAllDayMonth: "eventContentAllDayMonth", eventContentAllDayYear: "eventContentAllDayYear", eventDetailContent: "eventDetailContent", eventDetailDialog: "eventDetailDialog", createCalendarDialog: "createCalendarDialog", titleBarSlot: "titleBarSlot", colorPicker: "colorPicker", createCalendarDialogColorPicker: "createCalendarDialogColorPicker", collapsedSafeAreaLeft: "collapsedSafeAreaLeft" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
127
193
  <div #container class="df-calendar-wrapper"></div>
128
194
 
129
195
  <!-- Hidden area to render Angular templates before they are portaled -->
@@ -172,21 +238,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
172
238
  }]
173
239
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { calendar: [{
174
240
  type: Input
175
- }], eventContent: [{
241
+ }], eventContentDay: [{
242
+ type: Input
243
+ }], eventContentWeek: [{
244
+ type: Input
245
+ }], eventContentMonth: [{
246
+ type: Input
247
+ }], eventContentYear: [{
248
+ type: Input
249
+ }], eventContentAllDayDay: [{
250
+ type: Input
251
+ }], eventContentAllDayWeek: [{
252
+ type: Input
253
+ }], eventContentAllDayMonth: [{
254
+ type: Input
255
+ }], eventContentAllDayYear: [{
176
256
  type: Input
177
257
  }], eventDetailContent: [{
178
258
  type: Input
179
259
  }], eventDetailDialog: [{
180
260
  type: Input
181
- }], headerContent: [{
182
- type: Input
183
261
  }], createCalendarDialog: [{
184
262
  type: Input
185
263
  }], titleBarSlot: [{
186
264
  type: Input
187
265
  }], colorPicker: [{
188
266
  type: Input
189
- }], colorPickerWrapper: [{
267
+ }], createCalendarDialogColorPicker: [{
190
268
  type: Input
191
269
  }], collapsedSafeAreaLeft: [{
192
270
  type: Input
@@ -194,4 +272,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
194
272
  type: ViewChild,
195
273
  args: ['container']
196
274
  }] } });
197
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LWZsb3ctY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kYXktZmxvdy1jYWxlbmRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQVFMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQU92QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBMEI5RCxNQUFNLE9BQU8sd0JBQXdCO0lBdUJmO0lBcEJYLFFBQVEsQ0FBMkQ7SUFFNUUseUNBQXlDO0lBQ2hDLFlBQVksQ0FBd0I7SUFDcEMsa0JBQWtCLENBQXdCO0lBQzFDLGlCQUFpQixDQUF3QjtJQUN6QyxhQUFhLENBQXdCO0lBQ3JDLG9CQUFvQixDQUF3QjtJQUM1QyxZQUFZLENBQXdCO0lBQ3BDLFdBQVcsQ0FBd0I7SUFDbkMsa0JBQWtCLENBQXdCO0lBQzFDLHFCQUFxQixDQUFVO0lBRWhCLFNBQVMsQ0FBMkI7SUFFNUQsZ0JBQWdCLEdBQXNCLEVBQUUsQ0FBQztJQUNqQyxRQUFRLENBQW9CO0lBQzVCLFdBQVcsQ0FBYztJQUN6QixXQUFXLENBQWdCO0lBRW5DLFlBQW9CLEdBQXNCO1FBQXRCLFFBQUcsR0FBSCxHQUFHLENBQW1CO0lBQUcsQ0FBQztJQUU5QyxJQUFZLEdBQUc7UUFDYixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNyQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDMUIsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLFFBQVEsWUFBWSxXQUFXLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7UUFDdkIsQ0FBQztRQUVELElBQUssSUFBSSxDQUFDLFFBQXNELENBQUMsR0FBRyxFQUFFLENBQUM7WUFDckUsT0FBUSxJQUFJLENBQUMsUUFBc0QsQ0FBQyxHQUFJLENBQUM7UUFDM0UsQ0FBQztRQUVELDBEQUEwRDtRQUMxRCxJQUNHLElBQUksQ0FBQyxRQUFzRCxDQUFDLEtBQUs7WUFDbEUsU0FBUyxFQUNULENBQUM7WUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxRQUE2QixDQUFDLENBQUM7WUFDdkUsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQzFCLENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyxRQUF3QixDQUFDO0lBQ3ZDLENBQUM7SUFFRCxlQUFlO1FBQ2IsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFFRCxXQUFXLENBQUMsT0FBc0I7UUFDaEMsSUFBSSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDNUQsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7WUFDN0IsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUN0QixDQUFDO2FBQU0sSUFBSSxPQUFPLENBQUMsdUJBQXVCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDN0QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUM7Z0JBQ3JCLHFCQUFxQixFQUFFLElBQUksQ0FBQyxxQkFBcUI7YUFDbEQsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ3RDLE9BQU87UUFDVCxDQUFDO1FBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGdCQUFnQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUNyQixxQkFBcUIsRUFBRSxJQUFJLENBQUMscUJBQXFCO1NBQ2xELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFFbEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsUUFBUTthQUM3Qix1QkFBdUIsRUFBRTthQUN6QixTQUFTLENBQUMsVUFBVSxDQUFDLEVBQUU7WUFDdEIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLENBQUMsR0FBRyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNqRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVPLGVBQWU7UUFDckIsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDckIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUM7UUFDRCxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzFCLENBQUM7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLFNBQVMsQ0FBQztRQUM3QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUM1QixDQUFDO0lBRUQsV0FBVyxDQUFDLElBQVk7UUFDdEIseUVBQXlFO1FBQ3pFLFFBQVEsSUFBSSxFQUFFLENBQUM7WUFDYixLQUFLLGNBQWMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLE9BQU8sSUFBSSxDQUFDLFlBQVksSUFBSSxJQUFJLENBQUM7WUFDbkMsQ0FBQztZQUNELEtBQUssb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUM7WUFDekMsQ0FBQztZQUNELEtBQUssbUJBQW1CLENBQUMsQ0FBQyxDQUFDO2dCQUN6QixPQUFPLElBQUksQ0FBQyxpQkFBaUIsSUFBSSxJQUFJLENBQUM7WUFDeEMsQ0FBQztZQUNELEtBQUssZUFBZSxDQUFDLENBQUMsQ0FBQztnQkFDckIsT0FBTyxJQUFJLENBQUMsYUFBYSxJQUFJLElBQUksQ0FBQztZQUNwQyxDQUFDO1lBQ0QsS0FBSyxzQkFBc0IsQ0FBQyxDQUFDLENBQUM7Z0JBQzVCLE9BQU8sSUFBSSxDQUFDLG9CQUFvQixJQUFJLElBQUksQ0FBQztZQUMzQyxDQUFDO1lBQ0QsS0FBSyxjQUFjLENBQUMsQ0FBQyxDQUFDO2dCQUNwQixPQUFPLElBQUksQ0FBQyxZQUFZLElBQUksSUFBSSxDQUFDO1lBQ25DLENBQUM7WUFDRCxLQUFLLGFBQWEsQ0FBQyxDQUFDLENBQUM7Z0JBQ25CLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUM7WUFDbEMsQ0FBQztZQUNELEtBQUssb0JBQW9CLENBQUMsQ0FBQyxDQUFDO2dCQUMxQixPQUFPLElBQUksQ0FBQyxrQkFBa0IsSUFBSSxJQUFJLENBQUM7WUFDekMsQ0FBQztZQUNELE9BQU8sQ0FBQyxDQUFDLENBQUM7Z0JBQ1IsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsU0FBUyxDQUFDLE1BQWMsRUFBRSxJQUFxQjtRQUM3QyxPQUFPLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDakIsQ0FBQzt3R0F4SVUsd0JBQXdCOzRGQUF4Qix3QkFBd0IseWlCQXRCekI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQlQ7OzRGQUdVLHdCQUF3QjtrQkF4QnBDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGtCQUFrQjtvQkFDNUIsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbUJUO29CQUNELGVBQWUsRUFBRSx1QkFBdUIsQ0FBQyxNQUFNO2lCQUNoRDtzRkFJVSxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFa0IsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIEFmdGVyVmlld0luaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIElDYWxlbmRhckFwcCxcbiAgQ2FsZW5kYXJBcHBDb25maWcsXG4gIFVzZUNhbGVuZGFyQXBwUmV0dXJuLFxuICBDdXN0b21SZW5kZXJpbmcsXG59IGZyb20gJ0BkYXlmbG93L2NvcmUnO1xuaW1wb3J0IHsgQ2FsZW5kYXJSZW5kZXJlciwgQ2FsZW5kYXJBcHAgfSBmcm9tICdAZGF5Zmxvdy9jb3JlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnZGF5Zmxvdy1jYWxlbmRhcicsXG4gIHRlbXBsYXRlOiBgXG4gICAgPGRpdiAjY29udGFpbmVyIGNsYXNzPVwiZGYtY2FsZW5kYXItd3JhcHBlclwiPjwvZGl2PlxuXG4gICAgPCEtLSBIaWRkZW4gYXJlYSB0byByZW5kZXIgQW5ndWxhciB0ZW1wbGF0ZXMgYmVmb3JlIHRoZXkgYXJlIHBvcnRhbGVkIC0tPlxuICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBub25lXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByZW5kZXJpbmcgb2YgY3VzdG9tUmVuZGVyaW5nczsgdHJhY2tCeTogdHJhY2tCeUlkXCI+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICAqbmdJZj1cImdldFRlbXBsYXRlKHJlbmRlcmluZy5nZW5lcmF0b3JOYW1lKVwiXG4gICAgICAgICAgW2RheWZsb3dQb3J0YWxdPVwicmVuZGVyaW5nLmNvbnRhaW5lckVsXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXG4gICAgICAgICAgICAgIGdldFRlbXBsYXRlKHJlbmRlcmluZy5nZW5lcmF0b3JOYW1lKSE7XG4gICAgICAgICAgICAgIGNvbnRleHQ6IHsgJGltcGxpY2l0OiByZW5kZXJpbmcuZ2VuZXJhdG9yQXJncyB9XG4gICAgICAgICAgICBcIlxuICAgICAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgYCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIERheUZsb3dDYWxlbmRhckNvbXBvbmVudFxuICBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95XG57XG4gIEBJbnB1dCgpIGNhbGVuZGFyITogSUNhbGVuZGFyQXBwIHwgVXNlQ2FsZW5kYXJBcHBSZXR1cm4gfCBDYWxlbmRhckFwcENvbmZpZztcblxuICAvLyBUZW1wbGF0ZXMgZm9yIGN1c3RvbSBjb250ZW50IGluamVjdGlvblxuICBASW5wdXQoKSBldmVudENvbnRlbnQ/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgQElucHV0KCkgZXZlbnREZXRhaWxDb250ZW50PzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIEBJbnB1dCgpIGV2ZW50RGV0YWlsRGlhbG9nPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIEBJbnB1dCgpIGhlYWRlckNvbnRlbnQ/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgQElucHV0KCkgY3JlYXRlQ2FsZW5kYXJEaWFsb2c/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcbiAgQElucHV0KCkgdGl0bGVCYXJTbG90PzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIEBJbnB1dCgpIGNvbG9yUGlja2VyPzogVGVtcGxhdGVSZWY8dW5rbm93bj47XG4gIEBJbnB1dCgpIGNvbG9yUGlja2VyV3JhcHBlcj86IFRlbXBsYXRlUmVmPHVua25vd24+O1xuICBASW5wdXQoKSBjb2xsYXBzZWRTYWZlQXJlYUxlZnQ/OiBudW1iZXI7XG5cbiAgQFZpZXdDaGlsZCgnY29udGFpbmVyJykgY29udGFpbmVyITogRWxlbWVudFJlZjxIVE1MRWxlbWVudD47XG5cbiAgY3VzdG9tUmVuZGVyaW5nczogQ3VzdG9tUmVuZGVyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZW5kZXJlcj86IENhbGVuZGFyUmVuZGVyZXI7XG4gIHByaXZhdGUgdW5zdWJzY3JpYmU/OiAoKSA9PiB2b2lkO1xuICBwcml2YXRlIGludGVybmFsQXBwPzogSUNhbGVuZGFyQXBwO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBwcml2YXRlIGdldCBhcHAoKTogSUNhbGVuZGFyQXBwIHtcbiAgICBpZiAodGhpcy5pbnRlcm5hbEFwcCkge1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxBcHA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuY2FsZW5kYXIgaW5zdGFuY2VvZiBDYWxlbmRhckFwcCkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FsZW5kYXI7XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLmNhbGVuZGFyIGFzIHsgYXBwPzogSUNhbGVuZGFyQXBwOyB2aWV3cz86IHVua25vd25bXSB9KS5hcHApIHtcbiAgICAgIHJldHVybiAodGhpcy5jYWxlbmRhciBhcyB7IGFwcD86IElDYWxlbmRhckFwcDsgdmlld3M/OiB1bmtub3duW10gfSkuYXBwITtcbiAgICB9XG5cbiAgICAvLyBJZiBpdCdzIGEgY29uZmlnIG9iamVjdCwgd2UgY3JlYXRlIGFuIGludGVybmFsIGluc3RhbmNlXG4gICAgaWYgKFxuICAgICAgKHRoaXMuY2FsZW5kYXIgYXMgeyBhcHA/OiBJQ2FsZW5kYXJBcHA7IHZpZXdzPzogdW5rbm93bltdIH0pLnZpZXdzICE9PVxuICAgICAgdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aGlzLmludGVybmFsQXBwID0gbmV3IENhbGVuZGFyQXBwKHRoaXMuY2FsZW5kYXIgYXMgQ2FsZW5kYXJBcHBDb25maWcpO1xuICAgICAgcmV0dXJuIHRoaXMuaW50ZXJuYWxBcHA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuY2FsZW5kYXIgYXMgSUNhbGVuZGFyQXBwO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIHRoaXMuaW5pdENhbGVuZGFyKCk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2NhbGVuZGFyJ10gJiYgIWNoYW5nZXNbJ2NhbGVuZGFyJ10uZmlyc3RDaGFuZ2UpIHtcbiAgICAgIHRoaXMuaW50ZXJuYWxBcHAgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmRlc3Ryb3lDYWxlbmRhcigpO1xuICAgICAgdGhpcy5pbml0Q2FsZW5kYXIoKTtcbiAgICB9IGVsc2UgaWYgKGNoYW5nZXNbJ2NvbGxhcHNlZFNhZmVBcmVhTGVmdCddICYmIHRoaXMucmVuZGVyZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcHMoe1xuICAgICAgICBjb2xsYXBzZWRTYWZlQXJlYUxlZnQ6IHRoaXMuY29sbGFwc2VkU2FmZUFyZWFMZWZ0LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95Q2FsZW5kYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENhbGVuZGFyKCkge1xuICAgIGlmICghdGhpcy5jb250YWluZXIgfHwgIXRoaXMuY2FsZW5kYXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbmV3IENhbGVuZGFyUmVuZGVyZXIodGhpcy5hcHApO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcHMoe1xuICAgICAgY29sbGFwc2VkU2FmZUFyZWFMZWZ0OiB0aGlzLmNvbGxhcHNlZFNhZmVBcmVhTGVmdCxcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLm1vdW50KHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucmVuZGVyZXJcbiAgICAgIC5nZXRDdXN0b21SZW5kZXJpbmdTdG9yZSgpXG4gICAgICAuc3Vic2NyaWJlKHJlbmRlcmluZ3MgPT4ge1xuICAgICAgICB0aGlzLmN1c3RvbVJlbmRlcmluZ3MgPSBbLi4ucmVuZGVyaW5ncy52YWx1ZXMoKV07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlc3Ryb3lDYWxlbmRhcigpIHtcbiAgICBpZiAodGhpcy51bnN1YnNjcmliZSkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZW5kZXJlcikge1xuICAgICAgdGhpcy5yZW5kZXJlci51bm1vdW50KCk7XG4gICAgfVxuICAgIHRoaXMudW5zdWJzY3JpYmUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5yZW5kZXJlciA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldFRlbXBsYXRlKG5hbWU6IHN0cmluZyk6IFRlbXBsYXRlUmVmPHVua25vd24+IHwgbnVsbCB7XG4gICAgLy8gU3dpdGNoIGF2b2lkcyBhbGxvY2F0aW5nIGEgbmV3IFJlY29yZCBvbiBldmVyeSBjaGFuZ2UtZGV0ZWN0aW9uIGN5Y2xlLlxuICAgIHN3aXRjaCAobmFtZSkge1xuICAgICAgY2FzZSAnZXZlbnRDb250ZW50Jzoge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudENvbnRlbnQgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2V2ZW50RGV0YWlsQ29udGVudCc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnREZXRhaWxDb250ZW50ID8/IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlICdldmVudERldGFpbERpYWxvZyc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnREZXRhaWxEaWFsb2cgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2hlYWRlckNvbnRlbnQnOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmhlYWRlckNvbnRlbnQgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NyZWF0ZUNhbGVuZGFyRGlhbG9nJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDYWxlbmRhckRpYWxvZyA/PyBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSAndGl0bGVCYXJTbG90Jzoge1xuICAgICAgICByZXR1cm4gdGhpcy50aXRsZUJhclNsb3QgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbG9yUGlja2VyJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclBpY2tlciA/PyBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSAnY29sb3JQaWNrZXJXcmFwcGVyJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclBpY2tlcldyYXBwZXIgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgdHJhY2tCeUlkKF9pbmRleDogbnVtYmVyLCBpdGVtOiBDdXN0b21SZW5kZXJpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5pZDtcbiAgfVxufVxuIl19
275
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF5LWZsb3ctY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9kYXktZmxvdy1jYWxlbmRhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQVFMLFNBQVMsRUFDVCxLQUFLLEVBQ0wsU0FBUyxFQUNULHVCQUF1QixHQUN4QixNQUFNLGVBQWUsQ0FBQztBQWN2QixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7O0FBMEI5RCxNQUFNLE9BQU8sd0JBQXdCO0lBOEJmO0lBM0JYLFFBQVEsQ0FBMkQ7SUFFNUUseUNBQXlDO0lBQ2hDLGVBQWUsQ0FBcUM7SUFDcEQsZ0JBQWdCLENBQXFDO0lBQ3JELGlCQUFpQixDQUFxQztJQUN0RCxnQkFBZ0IsQ0FBcUM7SUFDckQscUJBQXFCLENBQXFDO0lBQzFELHNCQUFzQixDQUFxQztJQUMzRCx1QkFBdUIsQ0FBcUM7SUFDNUQsc0JBQXNCLENBQXFDO0lBQzNELGtCQUFrQixDQUF3QztJQUMxRCxpQkFBaUIsQ0FBdUM7SUFDeEQsb0JBQW9CLENBQTBDO0lBQzlELFlBQVksQ0FBa0M7SUFDOUMsV0FBVyxDQUFpQztJQUVyRCwrQkFBK0IsQ0FBcUQ7SUFDM0UscUJBQXFCLENBQVU7SUFFaEIsU0FBUyxDQUEyQjtJQUU1RCxnQkFBZ0IsR0FBc0IsRUFBRSxDQUFDO0lBQ2pDLFFBQVEsQ0FBb0I7SUFDNUIsV0FBVyxDQUFjO0lBQ3pCLFdBQVcsQ0FBZ0I7SUFFbkMsWUFBb0IsR0FBc0I7UUFBdEIsUUFBRyxHQUFILEdBQUcsQ0FBbUI7SUFBRyxDQUFDO0lBRTlDLElBQVksR0FBRztRQUNiLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUMxQixDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsUUFBUSxZQUFZLFdBQVcs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QUMsTUFBTTtpQkFDaEQ7c0ZBSVUsUUFBUTtzQkFBaEIsS0FBSztnQkFHRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csZ0JBQWdCO3NCQUF4QixLQUFLO2dCQUNHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFDRyxzQkFBc0I7c0JBQTlCLEtBQUs7Z0JBQ0csdUJBQXVCO3NCQUEvQixLQUFLO2dCQUNHLHNCQUFzQjtzQkFBOUIsS0FBSztnQkFDRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRU4sK0JBQStCO3NCQUQ5QixLQUFLO2dCQUVHLHFCQUFxQjtzQkFBN0IsS0FBSztnQkFFa0IsU0FBUztzQkFBaEMsU0FBUzt1QkFBQyxXQUFXIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIEFmdGVyVmlld0luaXQsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgVmlld0NoaWxkLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG4gIElDYWxlbmRhckFwcCxcbiAgQ2FsZW5kYXJBcHBDb25maWcsXG4gIFVzZUNhbGVuZGFyQXBwUmV0dXJuLFxuICBDdXN0b21SZW5kZXJpbmcsXG4gIEV2ZW50RGV0YWlsQ29udGVudFByb3BzLFxuICBFdmVudERldGFpbERpYWxvZ1Byb3BzLFxuICBDcmVhdGVDYWxlbmRhckRpYWxvZ1Byb3BzLFxuICBUaXRsZUJhclNsb3RQcm9wcyxcbiAgRXZlbnRDb250ZW50U2xvdEFyZ3MsXG4gIENvbG9yUGlja2VyUHJvcHMsXG4gIENyZWF0ZUNhbGVuZGFyRGlhbG9nQ29sb3JQaWNrZXJQcm9wcyxcbn0gZnJvbSAnQGRheWZsb3cvY29yZSc7XG5pbXBvcnQgeyBDYWxlbmRhclJlbmRlcmVyLCBDYWxlbmRhckFwcCB9IGZyb20gJ0BkYXlmbG93L2NvcmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkYXlmbG93LWNhbGVuZGFyJyxcbiAgdGVtcGxhdGU6IGBcbiAgICA8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJkZi1jYWxlbmRhci13cmFwcGVyXCI+PC9kaXY+XG5cbiAgICA8IS0tIEhpZGRlbiBhcmVhIHRvIHJlbmRlciBBbmd1bGFyIHRlbXBsYXRlcyBiZWZvcmUgdGhleSBhcmUgcG9ydGFsZWQgLS0+XG4gICAgPGRpdiBzdHlsZT1cImRpc3BsYXk6IG5vbmVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJlbmRlcmluZyBvZiBjdXN0b21SZW5kZXJpbmdzOyB0cmFja0J5OiB0cmFja0J5SWRcIj5cbiAgICAgICAgPGRpdlxuICAgICAgICAgICpuZ0lmPVwiZ2V0VGVtcGxhdGUocmVuZGVyaW5nLmdlbmVyYXRvck5hbWUpXCJcbiAgICAgICAgICBbZGF5Zmxvd1BvcnRhbF09XCJyZW5kZXJpbmcuY29udGFpbmVyRWxcIlxuICAgICAgICA+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nVGVtcGxhdGVPdXRsZXQ9XCJcbiAgICAgICAgICAgICAgZ2V0VGVtcGxhdGUocmVuZGVyaW5nLmdlbmVyYXRvck5hbWUpITtcbiAgICAgICAgICAgICAgY29udGV4dDogeyAkaW1wbGljaXQ6IHJlbmRlcmluZy5nZW5lcmF0b3JBcmdzIH1cbiAgICAgICAgICAgIFwiXG4gICAgICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICBgLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgRGF5Rmxvd0NhbGVuZGFyQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3lcbntcbiAgQElucHV0KCkgY2FsZW5kYXIhOiBJQ2FsZW5kYXJBcHAgfCBVc2VDYWxlbmRhckFwcFJldHVybiB8IENhbGVuZGFyQXBwQ29uZmlnO1xuXG4gIC8vIFRlbXBsYXRlcyBmb3IgY3VzdG9tIGNvbnRlbnQgaW5qZWN0aW9uXG4gIEBJbnB1dCgpIGV2ZW50Q29udGVudERheT86IFRlbXBsYXRlUmVmPEV2ZW50Q29udGVudFNsb3RBcmdzPjtcbiAgQElucHV0KCkgZXZlbnRDb250ZW50V2Vlaz86IFRlbXBsYXRlUmVmPEV2ZW50Q29udGVudFNsb3RBcmdzPjtcbiAgQElucHV0KCkgZXZlbnRDb250ZW50TW9udGg/OiBUZW1wbGF0ZVJlZjxFdmVudENvbnRlbnRTbG90QXJncz47XG4gIEBJbnB1dCgpIGV2ZW50Q29udGVudFllYXI/OiBUZW1wbGF0ZVJlZjxFdmVudENvbnRlbnRTbG90QXJncz47XG4gIEBJbnB1dCgpIGV2ZW50Q29udGVudEFsbERheURheT86IFRlbXBsYXRlUmVmPEV2ZW50Q29udGVudFNsb3RBcmdzPjtcbiAgQElucHV0KCkgZXZlbnRDb250ZW50QWxsRGF5V2Vlaz86IFRlbXBsYXRlUmVmPEV2ZW50Q29udGVudFNsb3RBcmdzPjtcbiAgQElucHV0KCkgZXZlbnRDb250ZW50QWxsRGF5TW9udGg/OiBUZW1wbGF0ZVJlZjxFdmVudENvbnRlbnRTbG90QXJncz47XG4gIEBJbnB1dCgpIGV2ZW50Q29udGVudEFsbERheVllYXI/OiBUZW1wbGF0ZVJlZjxFdmVudENvbnRlbnRTbG90QXJncz47XG4gIEBJbnB1dCgpIGV2ZW50RGV0YWlsQ29udGVudD86IFRlbXBsYXRlUmVmPEV2ZW50RGV0YWlsQ29udGVudFByb3BzPjtcbiAgQElucHV0KCkgZXZlbnREZXRhaWxEaWFsb2c/OiBUZW1wbGF0ZVJlZjxFdmVudERldGFpbERpYWxvZ1Byb3BzPjtcbiAgQElucHV0KCkgY3JlYXRlQ2FsZW5kYXJEaWFsb2c/OiBUZW1wbGF0ZVJlZjxDcmVhdGVDYWxlbmRhckRpYWxvZ1Byb3BzPjtcbiAgQElucHV0KCkgdGl0bGVCYXJTbG90PzogVGVtcGxhdGVSZWY8VGl0bGVCYXJTbG90UHJvcHM+O1xuICBASW5wdXQoKSBjb2xvclBpY2tlcj86IFRlbXBsYXRlUmVmPENvbG9yUGlja2VyUHJvcHM+O1xuICBASW5wdXQoKVxuICBjcmVhdGVDYWxlbmRhckRpYWxvZ0NvbG9yUGlja2VyPzogVGVtcGxhdGVSZWY8Q3JlYXRlQ2FsZW5kYXJEaWFsb2dDb2xvclBpY2tlclByb3BzPjtcbiAgQElucHV0KCkgY29sbGFwc2VkU2FmZUFyZWFMZWZ0PzogbnVtYmVyO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTEVsZW1lbnQ+O1xuXG4gIGN1c3RvbVJlbmRlcmluZ3M6IEN1c3RvbVJlbmRlcmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVuZGVyZXI/OiBDYWxlbmRhclJlbmRlcmVyO1xuICBwcml2YXRlIHVuc3Vic2NyaWJlPzogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBpbnRlcm5hbEFwcD86IElDYWxlbmRhckFwcDtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHt9XG5cbiAgcHJpdmF0ZSBnZXQgYXBwKCk6IElDYWxlbmRhckFwcCB7XG4gICAgaWYgKHRoaXMuaW50ZXJuYWxBcHApIHtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsQXBwO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmNhbGVuZGFyIGluc3RhbmNlb2YgQ2FsZW5kYXJBcHApIHtcbiAgICAgIHJldHVybiB0aGlzLmNhbGVuZGFyO1xuICAgIH1cblxuICAgIGlmICgodGhpcy5jYWxlbmRhciBhcyB7IGFwcD86IElDYWxlbmRhckFwcDsgdmlld3M/OiB1bmtub3duW10gfSkuYXBwKSB7XG4gICAgICByZXR1cm4gKHRoaXMuY2FsZW5kYXIgYXMgeyBhcHA/OiBJQ2FsZW5kYXJBcHA7IHZpZXdzPzogdW5rbm93bltdIH0pLmFwcCE7XG4gICAgfVxuXG4gICAgLy8gSWYgaXQncyBhIGNvbmZpZyBvYmplY3QsIHdlIGNyZWF0ZSBhbiBpbnRlcm5hbCBpbnN0YW5jZVxuICAgIGlmIChcbiAgICAgICh0aGlzLmNhbGVuZGFyIGFzIHsgYXBwPzogSUNhbGVuZGFyQXBwOyB2aWV3cz86IHVua25vd25bXSB9KS52aWV3cyAhPT1cbiAgICAgIHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhpcy5pbnRlcm5hbEFwcCA9IG5ldyBDYWxlbmRhckFwcCh0aGlzLmNhbGVuZGFyIGFzIENhbGVuZGFyQXBwQ29uZmlnKTtcbiAgICAgIHJldHVybiB0aGlzLmludGVybmFsQXBwO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNhbGVuZGFyIGFzIElDYWxlbmRhckFwcDtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICB0aGlzLmluaXRDYWxlbmRhcigpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIGlmIChjaGFuZ2VzWydjYWxlbmRhciddICYmICFjaGFuZ2VzWydjYWxlbmRhciddLmZpcnN0Q2hhbmdlKSB7XG4gICAgICB0aGlzLmludGVybmFsQXBwID0gdW5kZWZpbmVkO1xuICAgICAgdGhpcy5kZXN0cm95Q2FsZW5kYXIoKTtcbiAgICAgIHRoaXMuaW5pdENhbGVuZGFyKCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnJlbmRlcmVyKSB7XG4gICAgICBpZiAoY2hhbmdlc1snY29sbGFwc2VkU2FmZUFyZWFMZWZ0J10pIHtcbiAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRQcm9wcyh7XG4gICAgICAgICAgY29sbGFwc2VkU2FmZUFyZWFMZWZ0OiB0aGlzLmNvbGxhcHNlZFNhZmVBcmVhTGVmdCxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBjb25zdCBzbG90S2V5cyA9IFtcbiAgICAgICAgJ2V2ZW50Q29udGVudERheScsXG4gICAgICAgICdldmVudENvbnRlbnRXZWVrJyxcbiAgICAgICAgJ2V2ZW50Q29udGVudE1vbnRoJyxcbiAgICAgICAgJ2V2ZW50Q29udGVudFllYXInLFxuICAgICAgICAnZXZlbnRDb250ZW50QWxsRGF5RGF5JyxcbiAgICAgICAgJ2V2ZW50Q29udGVudEFsbERheVdlZWsnLFxuICAgICAgICAnZXZlbnRDb250ZW50QWxsRGF5TW9udGgnLFxuICAgICAgICAnZXZlbnRDb250ZW50QWxsRGF5WWVhcicsXG4gICAgICAgICdldmVudERldGFpbENvbnRlbnQnLFxuICAgICAgICAnZXZlbnREZXRhaWxEaWFsb2cnLFxuICAgICAgICAnY3JlYXRlQ2FsZW5kYXJEaWFsb2cnLFxuICAgICAgICAndGl0bGVCYXJTbG90JyxcbiAgICAgICAgJ2NvbG9yUGlja2VyJyxcbiAgICAgICAgJ2NyZWF0ZUNhbGVuZGFyRGlhbG9nQ29sb3JQaWNrZXInLFxuICAgICAgXTtcbiAgICAgIGlmIChzbG90S2V5cy5zb21lKGtleSA9PiBjaGFuZ2VzW2tleV0pKSB7XG4gICAgICAgIGNvbnN0IGFjdGl2ZU92ZXJyaWRlcyA9IHRoaXMuZ2V0QWN0aXZlT3ZlcnJpZGVzKCk7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuZ2V0Q3VzdG9tUmVuZGVyaW5nU3RvcmUoKS5zZXRPdmVycmlkZXMoYWN0aXZlT3ZlcnJpZGVzKTtcbiAgICAgICAgdGhpcy5hcHAuc2V0T3ZlcnJpZGVzKGFjdGl2ZU92ZXJyaWRlcyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5kZXN0cm95Q2FsZW5kYXIoKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdENhbGVuZGFyKCkge1xuICAgIGlmICghdGhpcy5jb250YWluZXIgfHwgIXRoaXMuY2FsZW5kYXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnJlbmRlcmVyID0gbmV3IENhbGVuZGFyUmVuZGVyZXIodGhpcy5hcHAsIHRoaXMuZ2V0QWN0aXZlT3ZlcnJpZGVzKCkpO1xuICAgIHRoaXMucmVuZGVyZXIuc2V0UHJvcHMoe1xuICAgICAgY29sbGFwc2VkU2FmZUFyZWFMZWZ0OiB0aGlzLmNvbGxhcHNlZFNhZmVBcmVhTGVmdCxcbiAgICB9KTtcbiAgICB0aGlzLnJlbmRlcmVyLm1vdW50KHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQpO1xuXG4gICAgdGhpcy51bnN1YnNjcmliZSA9IHRoaXMucmVuZGVyZXJcbiAgICAgIC5nZXRDdXN0b21SZW5kZXJpbmdTdG9yZSgpXG4gICAgICAuc3Vic2NyaWJlKHJlbmRlcmluZ3MgPT4ge1xuICAgICAgICB0aGlzLmN1c3RvbVJlbmRlcmluZ3MgPSBbLi4ucmVuZGVyaW5ncy52YWx1ZXMoKV07XG4gICAgICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFjdGl2ZU92ZXJyaWRlcygpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgdGVtcGxhdGVJbnB1dHM6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUmVmPHVua25vd24+IHwgdW5kZWZpbmVkPiA9IHtcbiAgICAgIGV2ZW50Q29udGVudERheTogdGhpcy5ldmVudENvbnRlbnREYXksXG4gICAgICBldmVudENvbnRlbnRXZWVrOiB0aGlzLmV2ZW50Q29udGVudFdlZWssXG4gICAgICBldmVudENvbnRlbnRNb250aDogdGhpcy5ldmVudENvbnRlbnRNb250aCxcbiAgICAgIGV2ZW50Q29udGVudFllYXI6IHRoaXMuZXZlbnRDb250ZW50WWVhcixcbiAgICAgIGV2ZW50Q29udGVudEFsbERheURheTogdGhpcy5ldmVudENvbnRlbnRBbGxEYXlEYXksXG4gICAgICBldmVudENvbnRlbnRBbGxEYXlXZWVrOiB0aGlzLmV2ZW50Q29udGVudEFsbERheVdlZWssXG4gICAgICBldmVudENvbnRlbnRBbGxEYXlNb250aDogdGhpcy5ldmVudENvbnRlbnRBbGxEYXlNb250aCxcbiAgICAgIGV2ZW50Q29udGVudEFsbERheVllYXI6IHRoaXMuZXZlbnRDb250ZW50QWxsRGF5WWVhcixcbiAgICAgIGV2ZW50RGV0YWlsQ29udGVudDogdGhpcy5ldmVudERldGFpbENvbnRlbnQsXG4gICAgICBldmVudERldGFpbERpYWxvZzogdGhpcy5ldmVudERldGFpbERpYWxvZyxcbiAgICAgIGNyZWF0ZUNhbGVuZGFyRGlhbG9nOiB0aGlzLmNyZWF0ZUNhbGVuZGFyRGlhbG9nLFxuICAgICAgdGl0bGVCYXJTbG90OiB0aGlzLnRpdGxlQmFyU2xvdCxcbiAgICAgIGNvbG9yUGlja2VyOiB0aGlzLmNvbG9yUGlja2VyLFxuICAgICAgY3JlYXRlQ2FsZW5kYXJEaWFsb2dDb2xvclBpY2tlcjogdGhpcy5jcmVhdGVDYWxlbmRhckRpYWxvZ0NvbG9yUGlja2VyLFxuICAgIH07XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHRlbXBsYXRlSW5wdXRzKS5maWx0ZXIoXG4gICAgICBrZXkgPT4gdGVtcGxhdGVJbnB1dHNba2V5XSAhPT0gbnVsbCAmJiB0ZW1wbGF0ZUlucHV0c1trZXldICE9PSB1bmRlZmluZWRcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBkZXN0cm95Q2FsZW5kYXIoKSB7XG4gICAgaWYgKHRoaXMudW5zdWJzY3JpYmUpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMucmVuZGVyZXIpIHtcbiAgICAgIHRoaXMucmVuZGVyZXIudW5tb3VudCgpO1xuICAgIH1cbiAgICB0aGlzLnVuc3Vic2NyaWJlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMucmVuZGVyZXIgPSB1bmRlZmluZWQ7XG4gIH1cblxuICBnZXRUZW1wbGF0ZShuYW1lOiBzdHJpbmcpOiBUZW1wbGF0ZVJlZjx1bmtub3duPiB8IG51bGwge1xuICAgIC8vIFN3aXRjaCBhdm9pZHMgYWxsb2NhdGluZyBhIG5ldyBSZWNvcmQgb24gZXZlcnkgY2hhbmdlLWRldGVjdGlvbiBjeWNsZS5cbiAgICBzd2l0Y2ggKG5hbWUpIHtcbiAgICAgIGNhc2UgJ2V2ZW50Q29udGVudERheSc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRDb250ZW50RGF5ID8/IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlICdldmVudENvbnRlbnRXZWVrJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudENvbnRlbnRXZWVrID8/IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlICdldmVudENvbnRlbnRNb250aCc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRDb250ZW50TW9udGggPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2V2ZW50Q29udGVudFllYXInOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50Q29udGVudFllYXIgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2V2ZW50Q29udGVudEFsbERheURheSc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRDb250ZW50QWxsRGF5RGF5ID8/IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlICdldmVudENvbnRlbnRBbGxEYXlXZWVrJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudENvbnRlbnRBbGxEYXlXZWVrID8/IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlICdldmVudENvbnRlbnRBbGxEYXlNb250aCc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRDb250ZW50QWxsRGF5TW9udGggPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2V2ZW50Q29udGVudEFsbERheVllYXInOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmV2ZW50Q29udGVudEFsbERheVllYXIgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2V2ZW50RGV0YWlsQ29udGVudCc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnREZXRhaWxDb250ZW50ID8/IG51bGw7XG4gICAgICB9XG4gICAgICBjYXNlICdldmVudERldGFpbERpYWxvZyc6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnREZXRhaWxEaWFsb2cgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NyZWF0ZUNhbGVuZGFyRGlhbG9nJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVDYWxlbmRhckRpYWxvZyA/PyBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSAndGl0bGVCYXJTbG90Jzoge1xuICAgICAgICByZXR1cm4gdGhpcy50aXRsZUJhclNsb3QgPz8gbnVsbDtcbiAgICAgIH1cbiAgICAgIGNhc2UgJ2NvbG9yUGlja2VyJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5jb2xvclBpY2tlciA/PyBudWxsO1xuICAgICAgfVxuICAgICAgY2FzZSAnY3JlYXRlQ2FsZW5kYXJEaWFsb2dDb2xvclBpY2tlcic6IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlQ2FsZW5kYXJEaWFsb2dDb2xvclBpY2tlciA/PyBudWxsO1xuICAgICAgfVxuICAgICAgZGVmYXVsdDoge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICB0cmFja0J5SWQoX2luZGV4OiBudW1iZXIsIGl0ZW06IEN1c3RvbVJlbmRlcmluZykge1xuICAgIHJldHVybiBpdGVtLmlkO1xuICB9XG59XG4iXX0=
@@ -39,14 +39,20 @@ class DayFlowCalendarComponent {
39
39
  cdr;
40
40
  calendar;
41
41
  // Templates for custom content injection
42
- eventContent;
42
+ eventContentDay;
43
+ eventContentWeek;
44
+ eventContentMonth;
45
+ eventContentYear;
46
+ eventContentAllDayDay;
47
+ eventContentAllDayWeek;
48
+ eventContentAllDayMonth;
49
+ eventContentAllDayYear;
43
50
  eventDetailContent;
44
51
  eventDetailDialog;
45
- headerContent;
46
52
  createCalendarDialog;
47
53
  titleBarSlot;
48
54
  colorPicker;
49
- colorPickerWrapper;
55
+ createCalendarDialogColorPicker;
50
56
  collapsedSafeAreaLeft;
51
57
  container;
52
58
  customRenderings = [];
@@ -83,10 +89,33 @@ class DayFlowCalendarComponent {
83
89
  this.destroyCalendar();
84
90
  this.initCalendar();
85
91
  }
86
- else if (changes['collapsedSafeAreaLeft'] && this.renderer) {
87
- this.renderer.setProps({
88
- collapsedSafeAreaLeft: this.collapsedSafeAreaLeft,
89
- });
92
+ else if (this.renderer) {
93
+ if (changes['collapsedSafeAreaLeft']) {
94
+ this.renderer.setProps({
95
+ collapsedSafeAreaLeft: this.collapsedSafeAreaLeft,
96
+ });
97
+ }
98
+ const slotKeys = [
99
+ 'eventContentDay',
100
+ 'eventContentWeek',
101
+ 'eventContentMonth',
102
+ 'eventContentYear',
103
+ 'eventContentAllDayDay',
104
+ 'eventContentAllDayWeek',
105
+ 'eventContentAllDayMonth',
106
+ 'eventContentAllDayYear',
107
+ 'eventDetailContent',
108
+ 'eventDetailDialog',
109
+ 'createCalendarDialog',
110
+ 'titleBarSlot',
111
+ 'colorPicker',
112
+ 'createCalendarDialogColorPicker',
113
+ ];
114
+ if (slotKeys.some(key => changes[key])) {
115
+ const activeOverrides = this.getActiveOverrides();
116
+ this.renderer.getCustomRenderingStore().setOverrides(activeOverrides);
117
+ this.app.setOverrides(activeOverrides);
118
+ }
90
119
  }
91
120
  }
92
121
  ngOnDestroy() {
@@ -96,7 +125,7 @@ class DayFlowCalendarComponent {
96
125
  if (!this.container || !this.calendar) {
97
126
  return;
98
127
  }
99
- this.renderer = new CalendarRenderer(this.app);
128
+ this.renderer = new CalendarRenderer(this.app, this.getActiveOverrides());
100
129
  this.renderer.setProps({
101
130
  collapsedSafeAreaLeft: this.collapsedSafeAreaLeft,
102
131
  });
@@ -108,6 +137,25 @@ class DayFlowCalendarComponent {
108
137
  this.cdr.markForCheck();
109
138
  });
110
139
  }
140
+ getActiveOverrides() {
141
+ const templateInputs = {
142
+ eventContentDay: this.eventContentDay,
143
+ eventContentWeek: this.eventContentWeek,
144
+ eventContentMonth: this.eventContentMonth,
145
+ eventContentYear: this.eventContentYear,
146
+ eventContentAllDayDay: this.eventContentAllDayDay,
147
+ eventContentAllDayWeek: this.eventContentAllDayWeek,
148
+ eventContentAllDayMonth: this.eventContentAllDayMonth,
149
+ eventContentAllDayYear: this.eventContentAllDayYear,
150
+ eventDetailContent: this.eventDetailContent,
151
+ eventDetailDialog: this.eventDetailDialog,
152
+ createCalendarDialog: this.createCalendarDialog,
153
+ titleBarSlot: this.titleBarSlot,
154
+ colorPicker: this.colorPicker,
155
+ createCalendarDialogColorPicker: this.createCalendarDialogColorPicker,
156
+ };
157
+ return Object.keys(templateInputs).filter(key => templateInputs[key] !== null && templateInputs[key] !== undefined);
158
+ }
111
159
  destroyCalendar() {
112
160
  if (this.unsubscribe) {
113
161
  this.unsubscribe();
@@ -121,8 +169,29 @@ class DayFlowCalendarComponent {
121
169
  getTemplate(name) {
122
170
  // Switch avoids allocating a new Record on every change-detection cycle.
123
171
  switch (name) {
124
- case 'eventContent': {
125
- return this.eventContent ?? null;
172
+ case 'eventContentDay': {
173
+ return this.eventContentDay ?? null;
174
+ }
175
+ case 'eventContentWeek': {
176
+ return this.eventContentWeek ?? null;
177
+ }
178
+ case 'eventContentMonth': {
179
+ return this.eventContentMonth ?? null;
180
+ }
181
+ case 'eventContentYear': {
182
+ return this.eventContentYear ?? null;
183
+ }
184
+ case 'eventContentAllDayDay': {
185
+ return this.eventContentAllDayDay ?? null;
186
+ }
187
+ case 'eventContentAllDayWeek': {
188
+ return this.eventContentAllDayWeek ?? null;
189
+ }
190
+ case 'eventContentAllDayMonth': {
191
+ return this.eventContentAllDayMonth ?? null;
192
+ }
193
+ case 'eventContentAllDayYear': {
194
+ return this.eventContentAllDayYear ?? null;
126
195
  }
127
196
  case 'eventDetailContent': {
128
197
  return this.eventDetailContent ?? null;
@@ -130,9 +199,6 @@ class DayFlowCalendarComponent {
130
199
  case 'eventDetailDialog': {
131
200
  return this.eventDetailDialog ?? null;
132
201
  }
133
- case 'headerContent': {
134
- return this.headerContent ?? null;
135
- }
136
202
  case 'createCalendarDialog': {
137
203
  return this.createCalendarDialog ?? null;
138
204
  }
@@ -142,8 +208,8 @@ class DayFlowCalendarComponent {
142
208
  case 'colorPicker': {
143
209
  return this.colorPicker ?? null;
144
210
  }
145
- case 'colorPickerWrapper': {
146
- return this.colorPickerWrapper ?? null;
211
+ case 'createCalendarDialogColorPicker': {
212
+ return this.createCalendarDialogColorPicker ?? null;
147
213
  }
148
214
  default: {
149
215
  return null;
@@ -155,7 +221,7 @@ class DayFlowCalendarComponent {
155
221
  return item.id;
156
222
  }
157
223
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DayFlowCalendarComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
158
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DayFlowCalendarComponent, selector: "dayflow-calendar", inputs: { calendar: "calendar", eventContent: "eventContent", eventDetailContent: "eventDetailContent", eventDetailDialog: "eventDetailDialog", headerContent: "headerContent", createCalendarDialog: "createCalendarDialog", titleBarSlot: "titleBarSlot", colorPicker: "colorPicker", colorPickerWrapper: "colorPickerWrapper", collapsedSafeAreaLeft: "collapsedSafeAreaLeft" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
224
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: DayFlowCalendarComponent, selector: "dayflow-calendar", inputs: { calendar: "calendar", eventContentDay: "eventContentDay", eventContentWeek: "eventContentWeek", eventContentMonth: "eventContentMonth", eventContentYear: "eventContentYear", eventContentAllDayDay: "eventContentAllDayDay", eventContentAllDayWeek: "eventContentAllDayWeek", eventContentAllDayMonth: "eventContentAllDayMonth", eventContentAllDayYear: "eventContentAllDayYear", eventDetailContent: "eventDetailContent", eventDetailDialog: "eventDetailDialog", createCalendarDialog: "createCalendarDialog", titleBarSlot: "titleBarSlot", colorPicker: "colorPicker", createCalendarDialogColorPicker: "createCalendarDialogColorPicker", collapsedSafeAreaLeft: "collapsedSafeAreaLeft" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: `
159
225
  <div #container class="df-calendar-wrapper"></div>
160
226
 
161
227
  <!-- Hidden area to render Angular templates before they are portaled -->
@@ -204,21 +270,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
204
270
  }]
205
271
  }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { calendar: [{
206
272
  type: Input
207
- }], eventContent: [{
273
+ }], eventContentDay: [{
274
+ type: Input
275
+ }], eventContentWeek: [{
276
+ type: Input
277
+ }], eventContentMonth: [{
278
+ type: Input
279
+ }], eventContentYear: [{
280
+ type: Input
281
+ }], eventContentAllDayDay: [{
282
+ type: Input
283
+ }], eventContentAllDayWeek: [{
284
+ type: Input
285
+ }], eventContentAllDayMonth: [{
286
+ type: Input
287
+ }], eventContentAllDayYear: [{
208
288
  type: Input
209
289
  }], eventDetailContent: [{
210
290
  type: Input
211
291
  }], eventDetailDialog: [{
212
292
  type: Input
213
- }], headerContent: [{
214
- type: Input
215
293
  }], createCalendarDialog: [{
216
294
  type: Input
217
295
  }], titleBarSlot: [{
218
296
  type: Input
219
297
  }], colorPicker: [{
220
298
  type: Input
221
- }], colorPickerWrapper: [{
299
+ }], createCalendarDialogColorPicker: [{
222
300
  type: Input
223
301
  }], collapsedSafeAreaLeft: [{
224
302
  type: Input
@@ -1,17 +1,23 @@
1
1
  import { ElementRef, OnChanges, OnDestroy, AfterViewInit, SimpleChanges, TemplateRef, ChangeDetectorRef } from '@angular/core';
2
- import type { ICalendarApp, CalendarAppConfig, UseCalendarAppReturn, CustomRendering } from '@dayflow/core';
2
+ import type { ICalendarApp, CalendarAppConfig, UseCalendarAppReturn, CustomRendering, EventDetailContentProps, EventDetailDialogProps, CreateCalendarDialogProps, TitleBarSlotProps, EventContentSlotArgs, ColorPickerProps, CreateCalendarDialogColorPickerProps } from '@dayflow/core';
3
3
  import * as i0 from "@angular/core";
4
4
  export declare class DayFlowCalendarComponent implements AfterViewInit, OnChanges, OnDestroy {
5
5
  private cdr;
6
6
  calendar: ICalendarApp | UseCalendarAppReturn | CalendarAppConfig;
7
- eventContent?: TemplateRef<unknown>;
8
- eventDetailContent?: TemplateRef<unknown>;
9
- eventDetailDialog?: TemplateRef<unknown>;
10
- headerContent?: TemplateRef<unknown>;
11
- createCalendarDialog?: TemplateRef<unknown>;
12
- titleBarSlot?: TemplateRef<unknown>;
13
- colorPicker?: TemplateRef<unknown>;
14
- colorPickerWrapper?: TemplateRef<unknown>;
7
+ eventContentDay?: TemplateRef<EventContentSlotArgs>;
8
+ eventContentWeek?: TemplateRef<EventContentSlotArgs>;
9
+ eventContentMonth?: TemplateRef<EventContentSlotArgs>;
10
+ eventContentYear?: TemplateRef<EventContentSlotArgs>;
11
+ eventContentAllDayDay?: TemplateRef<EventContentSlotArgs>;
12
+ eventContentAllDayWeek?: TemplateRef<EventContentSlotArgs>;
13
+ eventContentAllDayMonth?: TemplateRef<EventContentSlotArgs>;
14
+ eventContentAllDayYear?: TemplateRef<EventContentSlotArgs>;
15
+ eventDetailContent?: TemplateRef<EventDetailContentProps>;
16
+ eventDetailDialog?: TemplateRef<EventDetailDialogProps>;
17
+ createCalendarDialog?: TemplateRef<CreateCalendarDialogProps>;
18
+ titleBarSlot?: TemplateRef<TitleBarSlotProps>;
19
+ colorPicker?: TemplateRef<ColorPickerProps>;
20
+ createCalendarDialogColorPicker?: TemplateRef<CreateCalendarDialogColorPickerProps>;
15
21
  collapsedSafeAreaLeft?: number;
16
22
  container: ElementRef<HTMLElement>;
17
23
  customRenderings: CustomRendering[];
@@ -24,9 +30,10 @@ export declare class DayFlowCalendarComponent implements AfterViewInit, OnChange
24
30
  ngOnChanges(changes: SimpleChanges): void;
25
31
  ngOnDestroy(): void;
26
32
  private initCalendar;
33
+ private getActiveOverrides;
27
34
  private destroyCalendar;
28
35
  getTemplate(name: string): TemplateRef<unknown> | null;
29
36
  trackById(_index: number, item: CustomRendering): string;
30
37
  static ɵfac: i0.ɵɵFactoryDeclaration<DayFlowCalendarComponent, never>;
31
- static ɵcmp: i0.ɵɵComponentDeclaration<DayFlowCalendarComponent, "dayflow-calendar", never, { "calendar": { "alias": "calendar"; "required": false; }; "eventContent": { "alias": "eventContent"; "required": false; }; "eventDetailContent": { "alias": "eventDetailContent"; "required": false; }; "eventDetailDialog": { "alias": "eventDetailDialog"; "required": false; }; "headerContent": { "alias": "headerContent"; "required": false; }; "createCalendarDialog": { "alias": "createCalendarDialog"; "required": false; }; "titleBarSlot": { "alias": "titleBarSlot"; "required": false; }; "colorPicker": { "alias": "colorPicker"; "required": false; }; "colorPickerWrapper": { "alias": "colorPickerWrapper"; "required": false; }; "collapsedSafeAreaLeft": { "alias": "collapsedSafeAreaLeft"; "required": false; }; }, {}, never, never, false, never>;
38
+ static ɵcmp: i0.ɵɵComponentDeclaration<DayFlowCalendarComponent, "dayflow-calendar", never, { "calendar": { "alias": "calendar"; "required": false; }; "eventContentDay": { "alias": "eventContentDay"; "required": false; }; "eventContentWeek": { "alias": "eventContentWeek"; "required": false; }; "eventContentMonth": { "alias": "eventContentMonth"; "required": false; }; "eventContentYear": { "alias": "eventContentYear"; "required": false; }; "eventContentAllDayDay": { "alias": "eventContentAllDayDay"; "required": false; }; "eventContentAllDayWeek": { "alias": "eventContentAllDayWeek"; "required": false; }; "eventContentAllDayMonth": { "alias": "eventContentAllDayMonth"; "required": false; }; "eventContentAllDayYear": { "alias": "eventContentAllDayYear"; "required": false; }; "eventDetailContent": { "alias": "eventDetailContent"; "required": false; }; "eventDetailDialog": { "alias": "eventDetailDialog"; "required": false; }; "createCalendarDialog": { "alias": "createCalendarDialog"; "required": false; }; "titleBarSlot": { "alias": "titleBarSlot"; "required": false; }; "colorPicker": { "alias": "colorPicker"; "required": false; }; "createCalendarDialogColorPicker": { "alias": "createCalendarDialogColorPicker"; "required": false; }; "collapsedSafeAreaLeft": { "alias": "collapsedSafeAreaLeft"; "required": false; }; }, {}, never, never, false, never>;
32
39
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dayflow/angular",
3
- "version": "3.2.3",
3
+ "version": "3.2.5",
4
4
  "description": "Angular adapter for DayFlow calendar",
5
5
  "files": [
6
6
  "**/*.mjs",
@@ -12,7 +12,7 @@
12
12
  "peerDependencies": {
13
13
  "@angular/common": ">=14.0.0",
14
14
  "@angular/core": ">=14.0.0",
15
- "@dayflow/core": "3.2.0"
15
+ "@dayflow/core": "3.2.2"
16
16
  },
17
17
  "module": "fesm2022/dayflow-angular.mjs",
18
18
  "typings": "index.d.ts",