@idea-ionic/agenda 8.10.2 → 8.11.1

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.
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, inject, ChangeDetectorRef, EventEmitter, Output, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
2
+ import { Injectable, inject, ChangeDetectorRef, input, output, Input, ChangeDetectionStrategy, Component, NgModule } from '@angular/core';
3
3
  import * as i1 from '@angular/common';
4
4
  import { formatDate, CommonModule } from '@angular/common';
5
5
  import * as i1$1 from '@angular/forms';
@@ -34,10 +34,10 @@ class CustomDateFormatter extends CalendarDateFormatter {
34
34
  this.dayViewHour = ({ date, locale }) => locale === 'it' ? formatDate(date, 'HH:mm', locale) : formatDate(date, 'h aa', locale);
35
35
  this.dayViewTitle = ({ date, locale }) => locale === 'it' ? formatDate(date, 'EEEE, dd MMM yyyy', locale) : formatDate(date, 'EEEE, MMM dd, yyyy', locale);
36
36
  }
37
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomDateFormatter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
38
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomDateFormatter }); }
37
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CustomDateFormatter, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); }
38
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CustomDateFormatter }); }
39
39
  }
40
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: CustomDateFormatter, decorators: [{
40
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: CustomDateFormatter, decorators: [{
41
41
  type: Injectable
42
42
  }] });
43
43
 
@@ -49,80 +49,99 @@ class IDEAAgendaComponent {
49
49
  /**
50
50
  * The events to display in the calendar.
51
51
  */
52
+ // TODO: Skipped for migration because:
53
+ // Your application code writes to the input. This prevents migration.
52
54
  this.events = [];
53
55
  /**
54
56
  * An array of day indexes (0 = sunday, 1 = monday, etc.) that will be hidden on the view.
55
57
  */
56
- this.excludeDays = [];
58
+ this.excludeDays = input([], /* @ts-ignore */
59
+ ...(ngDevMode ? [{ debugName: "excludeDays" }] : /* istanbul ignore next */ []));
57
60
  /**
58
61
  * The day start hours in 24 hour time. Must be 0-23
59
62
  */
60
- this.dayStartHour = 0;
63
+ this.dayStartHour = input(0, /* @ts-ignore */
64
+ ...(ngDevMode ? [{ debugName: "dayStartHour" }] : /* istanbul ignore next */ []));
61
65
  /**
62
66
  * The day start hours in 24 hour time. Must be 0-23
63
67
  */
64
- this.dayEndHour = 23;
68
+ this.dayEndHour = input(23, /* @ts-ignore */
69
+ ...(ngDevMode ? [{ debugName: "dayEndHour" }] : /* istanbul ignore next */ []));
65
70
  /**
66
71
  * The number of segments in an hour. Must divide equally into 60.
67
72
  */
68
- this.hourSegments = 2;
73
+ this.hourSegments = input(2, /* @ts-ignore */
74
+ ...(ngDevMode ? [{ debugName: "hourSegments" }] : /* istanbul ignore next */ []));
69
75
  /**
70
76
  * Whether to open the current day's details right away in month view.
71
77
  */
78
+ // TODO: Skipped for migration because:
79
+ // Your application code writes to the input. This prevents migration.
72
80
  this.activeDayIsOpen = false;
73
81
  /**
74
82
  * The view mode for the agenda.
75
83
  */
84
+ // TODO: Skipped for migration because:
85
+ // Your application code writes to the input. This prevents migration.
76
86
  this.view = CalendarView.Week;
77
87
  /**
78
88
  * The allowed view mode for the agenda.
79
89
  */
90
+ // TODO: Skipped for migration because: This input is used in a control flow expression (e.g. `@if` or `*ngIf`) and migrating would break narrowing currently.
80
91
  this.allowedViews = [CalendarView.Day, CalendarView.Week, CalendarView.Month];
81
92
  /**
82
93
  * Whether to block any day/slot in the past.
83
94
  */
84
- this.onlyFuture = false;
95
+ this.onlyFuture = input(false, /* @ts-ignore */
96
+ ...(ngDevMode ? [{ debugName: "onlyFuture" }] : /* istanbul ignore next */ []));
85
97
  /**
86
98
  * The template for new events created by drag&drop.
87
99
  */
88
- this.newEventTemplate = { title: 'New', start: null, meta: {} };
100
+ this.newEventTemplate = input({ title: 'New', start: null, meta: {} }, /* @ts-ignore */
101
+ ...(ngDevMode ? [{ debugName: "newEventTemplate" }] : /* istanbul ignore next */ []));
89
102
  /**
90
103
  * Whether (and how) to allow the creation of events by drag&drop.
91
104
  * If enabled, on mobile it requires the `parentContent` to be set for a correct execution.
92
105
  */
93
- this.allowDragToCreate = DragToCreateOptions.DISABLED;
106
+ this.allowDragToCreate = input(DragToCreateOptions.DISABLED, /* @ts-ignore */
107
+ ...(ngDevMode ? [{ debugName: "allowDragToCreate" }] : /* istanbul ignore next */ []));
108
+ /**
109
+ * The parent ion-content, in case we want to control its scrollability for drag&drop features.
110
+ */
111
+ this.parentContent = input(/* @ts-ignore */
112
+ ...(ngDevMode ? [undefined, { debugName: "parentContent" }] : /* istanbul ignore next */ []));
94
113
  /**
95
114
  * Trigger when an event is selected.
96
115
  */
97
- this.selectEvent = new EventEmitter();
116
+ this.selectEvent = output();
98
117
  /**
99
118
  * Trigger when a day is selected.
100
119
  */
101
- this.selectDay = new EventEmitter();
120
+ this.selectDay = output();
102
121
  /**
103
122
  * Trigger when a time slot is selected.
104
123
  */
105
- this.selectSlot = new EventEmitter();
124
+ this.selectSlot = output();
106
125
  /**
107
126
  * Trigger when a new event is added by drag and drop.
108
127
  */
109
- this.newEventByDrag = new EventEmitter();
128
+ this.newEventByDrag = output();
110
129
  /**
111
130
  * Trigger when an event changed date (drag&drop or resize).
112
131
  */
113
- this.changeEvent = new EventEmitter();
132
+ this.changeEvent = output();
114
133
  /**
115
134
  * Trigger when the view date of reference changed (because we moved inside the calendar).
116
135
  */
117
- this.changeDate = new EventEmitter();
136
+ this.changeDate = output();
118
137
  /**
119
138
  * Trigger before the rendering of the week or day view.
120
139
  */
121
- this.beforeWeekOrDayViewRenderEmitter = new EventEmitter();
140
+ this.beforeWeekOrDayViewRenderEmitter = output();
122
141
  /**
123
142
  * Trigger before the rendering of the month view.
124
143
  */
125
- this.beforeMonthViewRenderEmitter = new EventEmitter();
144
+ this.beforeMonthViewRenderEmitter = output();
126
145
  this.CalendarView = CalendarView;
127
146
  this.Attendance = EventAttendance;
128
147
  this.viewDate = new Date();
@@ -168,7 +187,7 @@ class IDEAAgendaComponent {
168
187
  });
169
188
  }
170
189
  dateIsValid(date, sameDayIsValid) {
171
- if (!this.onlyFuture)
190
+ if (!this.onlyFuture())
172
191
  return true;
173
192
  return isFuture(date) || (sameDayIsValid ? isToday(date) : false);
174
193
  }
@@ -230,11 +249,12 @@ class IDEAAgendaComponent {
230
249
  return description && description.length > 100 ? description.slice(0, 100).concat('...') : description;
231
250
  }
232
251
  startDragToCreate(event, segmentDate, segmentElement) {
233
- if (!this.allowDragToCreate)
252
+ if (!this.allowDragToCreate())
234
253
  return;
235
- if (this.parentContent)
236
- this.parentContent.scrollY = false;
237
- const eventByDragAndDrop = { ...this.newEventTemplate, start: segmentDate };
254
+ const parentContent = this.parentContent();
255
+ if (parentContent)
256
+ parentContent.scrollY = false;
257
+ const eventByDragAndDrop = { ...this.newEventTemplate(), start: segmentDate };
238
258
  this.events = [...this.events, eventByDragAndDrop];
239
259
  const segmentPosition = segmentElement.getBoundingClientRect();
240
260
  const endOfView = endOfWeek(this.viewDate, { weekStartsOn: this.weekStartsOn });
@@ -243,7 +263,7 @@ class IDEAAgendaComponent {
243
263
  const minutesDiff = ceilToNearest(clientY - segmentPosition.top, 30);
244
264
  const daysDiff = floorToNearest(clientX - segmentPosition.left, segmentPosition.width) / segmentPosition.width;
245
265
  let newEnd;
246
- if (this.allowDragToCreate === DragToCreateOptions.ONLY_SAME_DAY)
266
+ if (this.allowDragToCreate() === DragToCreateOptions.ONLY_SAME_DAY)
247
267
  newEnd = addMinutes(segmentDate, minutesDiff);
248
268
  else
249
269
  newEnd = addDays(addMinutes(segmentDate, minutesDiff), daysDiff);
@@ -252,8 +272,9 @@ class IDEAAgendaComponent {
252
272
  refreshView();
253
273
  };
254
274
  const endOfDrag = () => {
255
- if (this.parentContent)
256
- this.parentContent.scrollY = true;
275
+ const parentContentValue = this.parentContent();
276
+ if (parentContentValue)
277
+ parentContentValue.scrollY = true;
257
278
  eventByDragAndDrop.end = this.getFixedEndDateWithMinimumSegmentDuration(eventByDragAndDrop);
258
279
  refreshView();
259
280
  this.newEventByDrag.emit(eventByDragAndDrop);
@@ -275,60 +296,28 @@ class IDEAAgendaComponent {
275
296
  }
276
297
  getFixedEndDateWithMinimumSegmentDuration(agendaBooking) {
277
298
  const fixedEnd = new Date(agendaBooking.end || agendaBooking.start);
278
- const segmentSizeInMinutes = 60 / this.hourSegments;
299
+ const segmentSizeInMinutes = 60 / this.hourSegments();
279
300
  if (fixedEnd.getTime() <= agendaBooking.start.getTime() + segmentSizeInMinutes * 60 * 1000)
280
301
  fixedEnd.setMinutes(agendaBooking.start.getMinutes() + segmentSizeInMinutes);
281
302
  return fixedEnd;
282
303
  }
283
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAgendaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
284
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEAAgendaComponent, isStandalone: false, selector: "idea-agenda", inputs: { events: "events", excludeDays: "excludeDays", dayStartHour: "dayStartHour", dayEndHour: "dayEndHour", hourSegments: "hourSegments", activeDayIsOpen: "activeDayIsOpen", view: "view", allowedViews: "allowedViews", onlyFuture: "onlyFuture", titleNotes: "titleNotes", newEventTemplate: "newEventTemplate", allowDragToCreate: "allowDragToCreate", parentContent: "parentContent" }, outputs: { selectEvent: "selectEvent", selectDay: "selectDay", selectSlot: "selectSlot", newEventByDrag: "newEventByDrag", changeEvent: "changeEvent", changeDate: "changeDate", beforeWeekOrDayViewRenderEmitter: "beforeWeekOrDayViewRenderEmitter", beforeMonthViewRenderEmitter: "beforeMonthViewRenderEmitter" }, ngImport: i0, template: "<div class=\"agenda\">\n <!-- TOOLBAR -->\n <ion-row class=\"ion-align-items-center\">\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"5\"\n [sizeSm]=\"3\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n @if (allowedViews.length > 1) {\n <ion-item lines=\"none\" class=\"calendarViewSelector\">\n <ion-select\n interface=\"popover\"\n [value]=\"view\"\n (ionChange)=\"$event?.detail ? setView($event.detail.value) : null\"\n >\n @for (view of allowedViews; track view) {\n <ion-select-option [value]=\"view\">\n {{ 'IDEA_AGENDA.' + view | uppercase | translate }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n </ion-col>\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"7\"\n [sizeSm]=\"4\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarPreviousView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarToday\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"today-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarNextView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-align-self-center titleCol\" [size]=\"12\" [sizeSm]=\"5\" [pullSm]=\"7\" [sizeLg]=\"8\" [pullLg]=\"4\">\n <h2>{{ viewDate | calendarDate: view + 'ViewTitle' : locale }}</h2>\n @if (titleNotes) {\n <p>{{ titleNotes }}</p>\n }\n </ion-col>\n </ion-row>\n <!-- TEMPLATES (touch only what's necessary and leave everything else as it is) -->\n <ng-template #eventTitleTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [class.noWrap]=\"event.allDay\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideEventTitle'\"\n >\n {{ event.title | calendarEventTitle: view : event }}\n @if (event.target) {\n <p>{{ event.target }}</p>\n } @else {\n @if (event.location) {\n <p>{{ event.location }}</p>\n }\n }\n @if (!event.allDay) {\n <p>{{ getPreviewDescription(event.description) }}</p>\n }\n </span>\n </ng-template>\n <ng-template\n #eventTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [class.external]=\"weekEvent.event.external\"\n [class.allDay]=\"weekEvent.event.allDay\"\n [class.needsAction]=\"Attendance.NEEDS_ACTION === weekEvent.event.attendance\"\n [class.declined]=\"Attendance.DECLINED === weekEvent.event.attendance\"\n [class.tentative]=\"Attendance.TENTATIVE === weekEvent.event.attendance\"\n [style.border-left-color]=\"weekEvent.event.color?.primary\"\n [style.color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 80 : -40)\"\n [style.background-color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 60 : 80, 0.2)\"\n [mwlCalendarTooltip]=\"!tooltipDisabled && !isMobile() ? getTooltipContent(weekEvent.event) : ''\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale } | calendarA11y: 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions [event]=\"weekEvent.tempEvent || weekEvent.event\" />\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n @if (!weekEvent.event.allDay) {\n <div class=\"eventGadgets\">\n @for (icon of weekEvent.event.icons; track icon) {\n <ion-icon [name]=\"icon.name\" [title]=\"icon.title\" />\n }\n @for (avatar of weekEvent.event.avatars; track avatar) {\n <idea-user-avatar size=\"mini\" [src]=\"avatar.url\" [name]=\"avatar.title\" />\n }\n </div>\n }\n </div>\n </ng-template>\n <ng-template\n #hourSegmentTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n >\n <div\n #segmentElement\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n (mousedown)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n (touchstart)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n >\n @if (isTimeLabel) {\n <div class=\"cal-time\">\n {{ segment.date | calendarDate: 'weekViewHour' : locale }}\n </div>\n }\n </div>\n </ng-template>\n <!-- VIEWS -->\n <div>\n @switch (view) {\n @case (CalendarView.Month) {\n <mwl-calendar-month-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [activeDayIsOpen]=\"activeDayIsOpen\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayClicked)=\"changeDay($event.day)\"\n (beforeViewRender)=\"beforeMonthViewRender($event)\"\n >\n </mwl-calendar-month-view>\n }\n @case (CalendarView.Week) {\n <mwl-calendar-week-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayHeaderClicked)=\"dateIsValid($event.day.date) ? selectDay.emit($event.day.date) : null\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-week-view>\n }\n @case (CalendarView.Day) {\n <mwl-calendar-day-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-day-view>\n }\n }\n </div>\n</div>\n", styles: [".agenda{margin-top:15px}.agenda ion-col.titleCol{padding-left:8px}.agenda ion-col.titleCol h2,.agenda ion-col.titleCol p{margin:0}.agenda ion-col.titleCol h2{font-size:1.2em}.agenda ion-col.titleCol p{font-size:.8em;font-style:italic}.agenda .calendarViewSelector{background-color:transparent;--ion-background-color: transparent;--background: transparent}.agenda .calendarViewSelector ion-select{max-width:100%;width:100%;padding-left:0;font-weight:500}.agenda .eventGadgets{margin-top:4px;margin-left:5px;text-align:right}.agenda .eventGadgets idea-user-avatar{display:block;float:left;margin:2px 1px}.agenda .eventGadgets ion-icon{padding-right:2px;opacity:.7;font-size:1.15em}@media only screen and (max-width: 575px){.agenda ion-col.titleCol{padding:0 8px 12px;text-align:center}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "required", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: i2.IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "directive", type: i2.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "component", type: i3.IDEAUserAvatarComponent, selector: "idea-user-avatar", inputs: ["src", "name", "size", "color"] }, { kind: "component", type: i4.ɵCalendarEventActionsComponent, selector: "mwl-calendar-event-actions", inputs: ["event", "customTemplate"] }, { kind: "component", type: i4.ɵCalendarEventTitleComponent, selector: "mwl-calendar-event-title", inputs: ["event", "customTemplate", "view"] }, { kind: "directive", type: i4.ɵCalendarTooltipDirective, selector: "[mwlCalendarTooltip]", inputs: ["mwlCalendarTooltip", "tooltipPlacement", "tooltipTemplate", "tooltipEvent", "tooltipAppendToBody", "tooltipDelay"] }, { kind: "directive", type: i4.ɵCalendarPreviousViewDirective, selector: "[mwlCalendarPreviousView]", inputs: ["view", "viewDate", "excludeDays", "daysInWeek"], outputs: ["viewDateChange"] }, { kind: "directive", type: i4.ɵCalendarNextViewDirective, selector: "[mwlCalendarNextView]", inputs: ["view", "viewDate", "excludeDays", "daysInWeek"], outputs: ["viewDateChange"] }, { kind: "directive", type: i4.ɵCalendarTodayDirective, selector: "[mwlCalendarToday]", inputs: ["viewDate"], outputs: ["viewDateChange"] }, { kind: "directive", type: i4.ɵClickDirective, selector: "[mwlClick]", inputs: ["clickListenerDisabled"], outputs: ["mwlClick"] }, { kind: "directive", type: i4.ɵKeydownEnterDirective, selector: "[mwlKeydownEnter]", outputs: ["mwlKeydownEnter"] }, { kind: "component", type: i4.CalendarMonthViewComponent, selector: "mwl-calendar-month-view", inputs: ["viewDate", "events", "excludeDays", "activeDayIsOpen", "activeDay", "refresh", "locale", "tooltipPlacement", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "weekStartsOn", "headerTemplate", "cellTemplate", "openDayEventsTemplate", "eventTitleTemplate", "eventActionsTemplate", "weekendDays"], outputs: ["beforeViewRender", "dayClicked", "eventClicked", "columnHeaderClicked", "eventTimesChanged"] }, { kind: "component", type: i4.CalendarWeekViewComponent, selector: "mwl-calendar-week-view", inputs: ["viewDate", "events", "excludeDays", "refresh", "locale", "tooltipPlacement", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "weekStartsOn", "headerTemplate", "eventTemplate", "eventTitleTemplate", "eventActionsTemplate", "precision", "weekendDays", "snapDraggedEvents", "hourSegments", "hourDuration", "hourSegmentHeight", "minimumEventHeight", "dayStartHour", "dayStartMinute", "dayEndHour", "dayEndMinute", "hourSegmentTemplate", "eventSnapSize", "allDayEventsLabelTemplate", "daysInWeek", "currentTimeMarkerTemplate", "validateEventTimesChanged", "resizeCursors"], outputs: ["dayHeaderClicked", "eventClicked", "eventTimesChanged", "beforeViewRender", "hourSegmentClicked"] }, { kind: "component", type: i4.CalendarDayViewComponent, selector: "mwl-calendar-day-view", inputs: ["viewDate", "events", "hourSegments", "hourSegmentHeight", "hourDuration", "minimumEventHeight", "dayStartHour", "dayStartMinute", "dayEndHour", "dayEndMinute", "refresh", "locale", "eventSnapSize", "tooltipPlacement", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "hourSegmentTemplate", "eventTemplate", "eventTitleTemplate", "eventActionsTemplate", "snapDraggedEvents", "allDayEventsLabelTemplate", "currentTimeMarkerTemplate", "validateEventTimesChanged", "resizeCursors"], outputs: ["eventClicked", "hourSegmentClicked", "eventTimesChanged", "beforeViewRender"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i3.IDEATranslatePipe, name: "translate" }, { kind: "pipe", type: i4.ɵCalendarDatePipe, name: "calendarDate" }, { kind: "pipe", type: i4.ɵCalendarEventTitlePipe, name: "calendarEventTitle" }, { kind: "pipe", type: i4.ɵCalendarA11yPipe, name: "calendarA11y" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
304
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAgendaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
305
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEAAgendaComponent, isStandalone: false, selector: "idea-agenda", inputs: { events: { classPropertyName: "events", publicName: "events", isSignal: false, isRequired: false, transformFunction: null }, excludeDays: { classPropertyName: "excludeDays", publicName: "excludeDays", isSignal: true, isRequired: false, transformFunction: null }, dayStartHour: { classPropertyName: "dayStartHour", publicName: "dayStartHour", isSignal: true, isRequired: false, transformFunction: null }, dayEndHour: { classPropertyName: "dayEndHour", publicName: "dayEndHour", isSignal: true, isRequired: false, transformFunction: null }, hourSegments: { classPropertyName: "hourSegments", publicName: "hourSegments", isSignal: true, isRequired: false, transformFunction: null }, activeDayIsOpen: { classPropertyName: "activeDayIsOpen", publicName: "activeDayIsOpen", isSignal: false, isRequired: false, transformFunction: null }, view: { classPropertyName: "view", publicName: "view", isSignal: false, isRequired: false, transformFunction: null }, allowedViews: { classPropertyName: "allowedViews", publicName: "allowedViews", isSignal: false, isRequired: false, transformFunction: null }, onlyFuture: { classPropertyName: "onlyFuture", publicName: "onlyFuture", isSignal: true, isRequired: false, transformFunction: null }, titleNotes: { classPropertyName: "titleNotes", publicName: "titleNotes", isSignal: false, isRequired: false, transformFunction: null }, newEventTemplate: { classPropertyName: "newEventTemplate", publicName: "newEventTemplate", isSignal: true, isRequired: false, transformFunction: null }, allowDragToCreate: { classPropertyName: "allowDragToCreate", publicName: "allowDragToCreate", isSignal: true, isRequired: false, transformFunction: null }, parentContent: { classPropertyName: "parentContent", publicName: "parentContent", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectEvent: "selectEvent", selectDay: "selectDay", selectSlot: "selectSlot", newEventByDrag: "newEventByDrag", changeEvent: "changeEvent", changeDate: "changeDate", beforeWeekOrDayViewRenderEmitter: "beforeWeekOrDayViewRenderEmitter", beforeMonthViewRenderEmitter: "beforeMonthViewRenderEmitter" }, ngImport: i0, template: "<div class=\"agenda\">\n <!-- TOOLBAR -->\n <ion-row class=\"ion-align-items-center\">\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"5\"\n [sizeSm]=\"3\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n @if (allowedViews.length > 1) {\n <ion-item lines=\"none\" class=\"calendarViewSelector\">\n <ion-select\n interface=\"popover\"\n [value]=\"view\"\n (ionChange)=\"$event?.detail ? setView($event.detail.value) : null\"\n >\n @for (view of allowedViews; track view) {\n <ion-select-option [value]=\"view\">\n {{ 'IDEA_AGENDA.' + view | uppercase | translate }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n </ion-col>\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"7\"\n [sizeSm]=\"4\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarPreviousView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarToday\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"today-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarNextView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-align-self-center titleCol\" [size]=\"12\" [sizeSm]=\"5\" [pullSm]=\"7\" [sizeLg]=\"8\" [pullLg]=\"4\">\n <h2>{{ viewDate | calendarDate: view + 'ViewTitle' : locale }}</h2>\n @if (titleNotes) {\n <p>{{ titleNotes }}</p>\n }\n </ion-col>\n </ion-row>\n <!-- TEMPLATES (touch only what's necessary and leave everything else as it is) -->\n <ng-template #eventTitleTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [class.noWrap]=\"event.allDay\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideEventTitle'\"\n >\n {{ event.title | calendarEventTitle: view : event }}\n @if (event.target) {\n <p>{{ event.target }}</p>\n } @else {\n @if (event.location) {\n <p>{{ event.location }}</p>\n }\n }\n @if (!event.allDay) {\n <p>{{ getPreviewDescription(event.description) }}</p>\n }\n </span>\n </ng-template>\n <ng-template\n #eventTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [class.external]=\"weekEvent.event.external\"\n [class.allDay]=\"weekEvent.event.allDay\"\n [class.needsAction]=\"Attendance.NEEDS_ACTION === weekEvent.event.attendance\"\n [class.declined]=\"Attendance.DECLINED === weekEvent.event.attendance\"\n [class.tentative]=\"Attendance.TENTATIVE === weekEvent.event.attendance\"\n [style.border-left-color]=\"weekEvent.event.color?.primary\"\n [style.color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 80 : -40)\"\n [style.background-color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 60 : 80, 0.2)\"\n [mwlCalendarTooltip]=\"!tooltipDisabled && !isMobile() ? getTooltipContent(weekEvent.event) : ''\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale } | calendarA11y: 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions [event]=\"weekEvent.tempEvent || weekEvent.event\" />\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n @if (!weekEvent.event.allDay) {\n <div class=\"eventGadgets\">\n @for (icon of weekEvent.event.icons; track icon) {\n <ion-icon [name]=\"icon.name\" [title]=\"icon.title\" />\n }\n @for (avatar of weekEvent.event.avatars; track avatar) {\n <idea-user-avatar size=\"mini\" [src]=\"avatar.url\" [name]=\"avatar.title\" />\n }\n </div>\n }\n </div>\n </ng-template>\n <ng-template\n #hourSegmentTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n >\n <div\n #segmentElement\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n (mousedown)=\"allowDragToCreate() ? startDragToCreate($event, segment.date, segmentElement) : null\"\n (touchstart)=\"allowDragToCreate() ? startDragToCreate($event, segment.date, segmentElement) : null\"\n >\n @if (isTimeLabel) {\n <div class=\"cal-time\">\n {{ segment.date | calendarDate: 'weekViewHour' : locale }}\n </div>\n }\n </div>\n </ng-template>\n <!-- VIEWS -->\n <div>\n @switch (view) {\n @case (CalendarView.Month) {\n <mwl-calendar-month-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [activeDayIsOpen]=\"activeDayIsOpen\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays()\"\n [weekStartsOn]=\"weekStartsOn\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayClicked)=\"changeDay($event.day)\"\n (beforeViewRender)=\"beforeMonthViewRender($event)\"\n >\n </mwl-calendar-month-view>\n }\n @case (CalendarView.Week) {\n <mwl-calendar-week-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays()\"\n [weekStartsOn]=\"weekStartsOn\"\n [dayStartHour]=\"dayStartHour()\"\n [dayEndHour]=\"dayEndHour()\"\n [hourSegments]=\"hourSegments()\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayHeaderClicked)=\"dateIsValid($event.day.date) ? selectDay.emit($event.day.date) : null\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-week-view>\n }\n @case (CalendarView.Day) {\n <mwl-calendar-day-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [dayStartHour]=\"dayStartHour()\"\n [dayEndHour]=\"dayEndHour()\"\n [hourSegments]=\"hourSegments()\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-day-view>\n }\n }\n </div>\n</div>\n", styles: [".agenda{margin-top:15px}.agenda ion-col.titleCol{padding-left:8px}.agenda ion-col.titleCol h2,.agenda ion-col.titleCol p{margin:0}.agenda ion-col.titleCol h2{font-size:1.2em}.agenda ion-col.titleCol p{font-size:.8em;font-style:italic}.agenda .calendarViewSelector{background-color:transparent;--ion-background-color: transparent;--background: transparent}.agenda .calendarViewSelector ion-select{max-width:100%;width:100%;padding-left:0;font-weight:500}.agenda .eventGadgets{margin-top:4px;margin-left:5px;text-align:right}.agenda .eventGadgets idea-user-avatar{display:block;float:left;margin:2px 1px}.agenda .eventGadgets ion-icon{padding-right:2px;opacity:.7;font-size:1.15em}@media only screen and (max-width:575px){.agenda ion-col.titleCol{padding:0 8px 12px;text-align:center}}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonSelect, selector: "ion-select", inputs: ["cancelText", "color", "compareWith", "disabled", "errorText", "expandedIcon", "fill", "helperText", "interface", "interfaceOptions", "justify", "label", "labelPlacement", "mode", "multiple", "name", "okText", "placeholder", "required", "selectedText", "shape", "toggleIcon", "value"] }, { kind: "component", type: i2.IonSelectOption, selector: "ion-select-option", inputs: ["disabled", "value"] }, { kind: "directive", type: i2.SelectValueAccessor, selector: "ion-select, ion-radio-group, ion-segment, ion-datetime" }, { kind: "component", type: i3.IDEAUserAvatarComponent, selector: "idea-user-avatar", inputs: ["src", "name", "size", "color"] }, { kind: "component", type: i4.CalendarEventActionsComponent, selector: "mwl-calendar-event-actions", inputs: ["event", "customTemplate"] }, { kind: "component", type: i4.CalendarEventTitleComponent, selector: "mwl-calendar-event-title", inputs: ["event", "customTemplate", "view"] }, { kind: "directive", type: i4.CalendarTooltipDirective, selector: "[mwlCalendarTooltip]", inputs: ["mwlCalendarTooltip", "tooltipPlacement", "tooltipTemplate", "tooltipEvent", "tooltipAppendToBody", "tooltipDelay"] }, { kind: "directive", type: i4.CalendarPreviousViewDirective, selector: "[mwlCalendarPreviousView]", inputs: ["view", "viewDate", "excludeDays", "daysInWeek"], outputs: ["viewDateChange"] }, { kind: "directive", type: i4.CalendarNextViewDirective, selector: "[mwlCalendarNextView]", inputs: ["view", "viewDate", "excludeDays", "daysInWeek"], outputs: ["viewDateChange"] }, { kind: "directive", type: i4.CalendarTodayDirective, selector: "[mwlCalendarToday]", inputs: ["viewDate"], outputs: ["viewDateChange"] }, { kind: "directive", type: i4.ClickDirective, selector: "[mwlClick]", inputs: ["clickListenerDisabled"], outputs: ["mwlClick"] }, { kind: "directive", type: i4.KeydownEnterDirective, selector: "[mwlKeydownEnter]", outputs: ["mwlKeydownEnter"] }, { kind: "component", type: i4.CalendarMonthViewComponent, selector: "mwl-calendar-month-view", inputs: ["viewDate", "events", "excludeDays", "activeDayIsOpen", "activeDay", "refresh", "locale", "tooltipPlacement", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "weekStartsOn", "headerTemplate", "cellTemplate", "openDayEventsTemplate", "eventTitleTemplate", "eventActionsTemplate", "weekendDays"], outputs: ["beforeViewRender", "dayClicked", "eventClicked", "columnHeaderClicked", "eventTimesChanged"] }, { kind: "component", type: i4.CalendarWeekViewComponent, selector: "mwl-calendar-week-view", inputs: ["viewDate", "events", "excludeDays", "refresh", "locale", "tooltipPlacement", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "weekStartsOn", "headerTemplate", "eventTemplate", "eventTitleTemplate", "eventActionsTemplate", "precision", "weekendDays", "snapDraggedEvents", "hourSegments", "hourDuration", "hourSegmentHeight", "minimumEventHeight", "dayStartHour", "dayStartMinute", "dayEndHour", "dayEndMinute", "hourSegmentTemplate", "eventSnapSize", "allDayEventsLabelTemplate", "daysInWeek", "currentTimeMarkerTemplate", "validateEventTimesChanged", "resizeCursors"], outputs: ["dayHeaderClicked", "eventClicked", "eventTimesChanged", "beforeViewRender", "hourSegmentClicked"] }, { kind: "component", type: i4.CalendarDayViewComponent, selector: "mwl-calendar-day-view", inputs: ["viewDate", "events", "hourSegments", "hourSegmentHeight", "hourDuration", "minimumEventHeight", "dayStartHour", "dayStartMinute", "dayEndHour", "dayEndMinute", "refresh", "locale", "eventSnapSize", "tooltipPlacement", "tooltipTemplate", "tooltipAppendToBody", "tooltipDelay", "hourSegmentTemplate", "eventTemplate", "eventTitleTemplate", "eventActionsTemplate", "snapDraggedEvents", "allDayEventsLabelTemplate", "currentTimeMarkerTemplate", "validateEventTimesChanged", "resizeCursors"], outputs: ["eventClicked", "hourSegmentClicked", "eventTimesChanged", "beforeViewRender"] }, { kind: "pipe", type: i1.UpperCasePipe, name: "uppercase" }, { kind: "pipe", type: i3.IDEATranslatePipe, name: "translate" }, { kind: "pipe", type: i4.CalendarDatePipe, name: "calendarDate" }, { kind: "pipe", type: i4.CalendarEventTitlePipe, name: "calendarEventTitle" }, { kind: "pipe", type: i4.CalendarA11yPipe, name: "calendarA11y" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
285
306
  }
286
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAgendaComponent, decorators: [{
307
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAgendaComponent, decorators: [{
287
308
  type: Component,
288
- args: [{ standalone: false, selector: 'idea-agenda', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"agenda\">\n <!-- TOOLBAR -->\n <ion-row class=\"ion-align-items-center\">\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"5\"\n [sizeSm]=\"3\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n @if (allowedViews.length > 1) {\n <ion-item lines=\"none\" class=\"calendarViewSelector\">\n <ion-select\n interface=\"popover\"\n [value]=\"view\"\n (ionChange)=\"$event?.detail ? setView($event.detail.value) : null\"\n >\n @for (view of allowedViews; track view) {\n <ion-select-option [value]=\"view\">\n {{ 'IDEA_AGENDA.' + view | uppercase | translate }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n </ion-col>\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"7\"\n [sizeSm]=\"4\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarPreviousView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarToday\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"today-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarNextView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-align-self-center titleCol\" [size]=\"12\" [sizeSm]=\"5\" [pullSm]=\"7\" [sizeLg]=\"8\" [pullLg]=\"4\">\n <h2>{{ viewDate | calendarDate: view + 'ViewTitle' : locale }}</h2>\n @if (titleNotes) {\n <p>{{ titleNotes }}</p>\n }\n </ion-col>\n </ion-row>\n <!-- TEMPLATES (touch only what's necessary and leave everything else as it is) -->\n <ng-template #eventTitleTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [class.noWrap]=\"event.allDay\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideEventTitle'\"\n >\n {{ event.title | calendarEventTitle: view : event }}\n @if (event.target) {\n <p>{{ event.target }}</p>\n } @else {\n @if (event.location) {\n <p>{{ event.location }}</p>\n }\n }\n @if (!event.allDay) {\n <p>{{ getPreviewDescription(event.description) }}</p>\n }\n </span>\n </ng-template>\n <ng-template\n #eventTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [class.external]=\"weekEvent.event.external\"\n [class.allDay]=\"weekEvent.event.allDay\"\n [class.needsAction]=\"Attendance.NEEDS_ACTION === weekEvent.event.attendance\"\n [class.declined]=\"Attendance.DECLINED === weekEvent.event.attendance\"\n [class.tentative]=\"Attendance.TENTATIVE === weekEvent.event.attendance\"\n [style.border-left-color]=\"weekEvent.event.color?.primary\"\n [style.color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 80 : -40)\"\n [style.background-color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 60 : 80, 0.2)\"\n [mwlCalendarTooltip]=\"!tooltipDisabled && !isMobile() ? getTooltipContent(weekEvent.event) : ''\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale } | calendarA11y: 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions [event]=\"weekEvent.tempEvent || weekEvent.event\" />\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n @if (!weekEvent.event.allDay) {\n <div class=\"eventGadgets\">\n @for (icon of weekEvent.event.icons; track icon) {\n <ion-icon [name]=\"icon.name\" [title]=\"icon.title\" />\n }\n @for (avatar of weekEvent.event.avatars; track avatar) {\n <idea-user-avatar size=\"mini\" [src]=\"avatar.url\" [name]=\"avatar.title\" />\n }\n </div>\n }\n </div>\n </ng-template>\n <ng-template\n #hourSegmentTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n >\n <div\n #segmentElement\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n (mousedown)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n (touchstart)=\"allowDragToCreate ? startDragToCreate($event, segment.date, segmentElement) : null\"\n >\n @if (isTimeLabel) {\n <div class=\"cal-time\">\n {{ segment.date | calendarDate: 'weekViewHour' : locale }}\n </div>\n }\n </div>\n </ng-template>\n <!-- VIEWS -->\n <div>\n @switch (view) {\n @case (CalendarView.Month) {\n <mwl-calendar-month-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [activeDayIsOpen]=\"activeDayIsOpen\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayClicked)=\"changeDay($event.day)\"\n (beforeViewRender)=\"beforeMonthViewRender($event)\"\n >\n </mwl-calendar-month-view>\n }\n @case (CalendarView.Week) {\n <mwl-calendar-week-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays\"\n [weekStartsOn]=\"weekStartsOn\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayHeaderClicked)=\"dateIsValid($event.day.date) ? selectDay.emit($event.day.date) : null\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-week-view>\n }\n @case (CalendarView.Day) {\n <mwl-calendar-day-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [dayStartHour]=\"dayStartHour\"\n [dayEndHour]=\"dayEndHour\"\n [hourSegments]=\"hourSegments\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-day-view>\n }\n }\n </div>\n</div>\n", styles: [".agenda{margin-top:15px}.agenda ion-col.titleCol{padding-left:8px}.agenda ion-col.titleCol h2,.agenda ion-col.titleCol p{margin:0}.agenda ion-col.titleCol h2{font-size:1.2em}.agenda ion-col.titleCol p{font-size:.8em;font-style:italic}.agenda .calendarViewSelector{background-color:transparent;--ion-background-color: transparent;--background: transparent}.agenda .calendarViewSelector ion-select{max-width:100%;width:100%;padding-left:0;font-weight:500}.agenda .eventGadgets{margin-top:4px;margin-left:5px;text-align:right}.agenda .eventGadgets idea-user-avatar{display:block;float:left;margin:2px 1px}.agenda .eventGadgets ion-icon{padding-right:2px;opacity:.7;font-size:1.15em}@media only screen and (max-width: 575px){.agenda ion-col.titleCol{padding:0 8px 12px;text-align:center}}\n"] }]
309
+ args: [{ standalone: false, selector: 'idea-agenda', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"agenda\">\n <!-- TOOLBAR -->\n <ion-row class=\"ion-align-items-center\">\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"5\"\n [sizeSm]=\"3\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n @if (allowedViews.length > 1) {\n <ion-item lines=\"none\" class=\"calendarViewSelector\">\n <ion-select\n interface=\"popover\"\n [value]=\"view\"\n (ionChange)=\"$event?.detail ? setView($event.detail.value) : null\"\n >\n @for (view of allowedViews; track view) {\n <ion-select-option [value]=\"view\">\n {{ 'IDEA_AGENDA.' + view | uppercase | translate }}\n </ion-select-option>\n }\n </ion-select>\n </ion-item>\n }\n </ion-col>\n <ion-col\n class=\"ion-align-self-center ion-text-right\"\n [size]=\"7\"\n [sizeSm]=\"4\"\n [pushSm]=\"5\"\n [sizeLg]=\"2\"\n [pushLg]=\"8\"\n >\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarPreviousView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-back-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarToday\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"today-outline\" slot=\"icon-only\" />\n </ion-button>\n <ion-button\n fill=\"clear\"\n color=\"dark\"\n size=\"small\"\n mwlCalendarNextView\n [view]=\"view\"\n [(viewDate)]=\"viewDate\"\n (viewDateChange)=\"viewDateChanged($event)\"\n >\n <ion-icon name=\"chevron-forward-outline\" slot=\"icon-only\" />\n </ion-button>\n </ion-col>\n <ion-col class=\"ion-align-self-center titleCol\" [size]=\"12\" [sizeSm]=\"5\" [pullSm]=\"7\" [sizeLg]=\"8\" [pullLg]=\"4\">\n <h2>{{ viewDate | calendarDate: view + 'ViewTitle' : locale }}</h2>\n @if (titleNotes) {\n <p>{{ titleNotes }}</p>\n }\n </ion-col>\n </ion-row>\n <!-- TEMPLATES (touch only what's necessary and leave everything else as it is) -->\n <ng-template #eventTitleTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [class.noWrap]=\"event.allDay\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideEventTitle'\"\n >\n {{ event.title | calendarEventTitle: view : event }}\n @if (event.target) {\n <p>{{ event.target }}</p>\n } @else {\n @if (event.location) {\n <p>{{ event.location }}</p>\n }\n }\n @if (!event.allDay) {\n <p>{{ getPreviewDescription(event.description) }}</p>\n }\n </span>\n </ng-template>\n <ng-template\n #eventTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [class.external]=\"weekEvent.event.external\"\n [class.allDay]=\"weekEvent.event.allDay\"\n [class.needsAction]=\"Attendance.NEEDS_ACTION === weekEvent.event.attendance\"\n [class.declined]=\"Attendance.DECLINED === weekEvent.event.attendance\"\n [class.tentative]=\"Attendance.TENTATIVE === weekEvent.event.attendance\"\n [style.border-left-color]=\"weekEvent.event.color?.primary\"\n [style.color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 80 : -40)\"\n [style.background-color]=\"getAlternateColor(weekEvent.event.color?.primary, darkMode ? 60 : 80, 0.2)\"\n [mwlCalendarTooltip]=\"!tooltipDisabled && !isMobile() ? getTooltipContent(weekEvent.event) : ''\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale } | calendarA11y: 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions [event]=\"weekEvent.tempEvent || weekEvent.event\" />\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n @if (!weekEvent.event.allDay) {\n <div class=\"eventGadgets\">\n @for (icon of weekEvent.event.icons; track icon) {\n <ion-icon [name]=\"icon.name\" [title]=\"icon.title\" />\n }\n @for (avatar of weekEvent.event.avatars; track avatar) {\n <idea-user-avatar size=\"mini\" [src]=\"avatar.url\" [name]=\"avatar.title\" />\n }\n </div>\n }\n </div>\n </ng-template>\n <ng-template\n #hourSegmentTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n >\n <div\n #segmentElement\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n (mousedown)=\"allowDragToCreate() ? startDragToCreate($event, segment.date, segmentElement) : null\"\n (touchstart)=\"allowDragToCreate() ? startDragToCreate($event, segment.date, segmentElement) : null\"\n >\n @if (isTimeLabel) {\n <div class=\"cal-time\">\n {{ segment.date | calendarDate: 'weekViewHour' : locale }}\n </div>\n }\n </div>\n </ng-template>\n <!-- VIEWS -->\n <div>\n @switch (view) {\n @case (CalendarView.Month) {\n <mwl-calendar-month-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [activeDayIsOpen]=\"activeDayIsOpen\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays()\"\n [weekStartsOn]=\"weekStartsOn\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayClicked)=\"changeDay($event.day)\"\n (beforeViewRender)=\"beforeMonthViewRender($event)\"\n >\n </mwl-calendar-month-view>\n }\n @case (CalendarView.Week) {\n <mwl-calendar-week-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [excludeDays]=\"excludeDays()\"\n [weekStartsOn]=\"weekStartsOn\"\n [dayStartHour]=\"dayStartHour()\"\n [dayEndHour]=\"dayEndHour()\"\n [hourSegments]=\"hourSegments()\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (dayHeaderClicked)=\"dateIsValid($event.day.date) ? selectDay.emit($event.day.date) : null\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-week-view>\n }\n @case (CalendarView.Day) {\n <mwl-calendar-day-view\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [dayStartHour]=\"dayStartHour()\"\n [dayEndHour]=\"dayEndHour()\"\n [hourSegments]=\"hourSegments()\"\n [eventTemplate]=\"eventTemplate\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n (eventClicked)=\"selectEvent.emit($event.event)\"\n (eventTimesChanged)=\"eventTimesChanged($event)\"\n (hourSegmentClicked)=\"dateIsValid($event.date) ? selectSlot.emit($event.date) : null\"\n (beforeViewRender)=\"beforeWeekOrDayViewRender($event)\"\n >\n </mwl-calendar-day-view>\n }\n }\n </div>\n</div>\n", styles: [".agenda{margin-top:15px}.agenda ion-col.titleCol{padding-left:8px}.agenda ion-col.titleCol h2,.agenda ion-col.titleCol p{margin:0}.agenda ion-col.titleCol h2{font-size:1.2em}.agenda ion-col.titleCol p{font-size:.8em;font-style:italic}.agenda .calendarViewSelector{background-color:transparent;--ion-background-color: transparent;--background: transparent}.agenda .calendarViewSelector ion-select{max-width:100%;width:100%;padding-left:0;font-weight:500}.agenda .eventGadgets{margin-top:4px;margin-left:5px;text-align:right}.agenda .eventGadgets idea-user-avatar{display:block;float:left;margin:2px 1px}.agenda .eventGadgets ion-icon{padding-right:2px;opacity:.7;font-size:1.15em}@media only screen and (max-width:575px){.agenda ion-col.titleCol{padding:0 8px 12px;text-align:center}}\n"] }]
289
310
  }], propDecorators: { events: [{
290
311
  type: Input
291
- }], excludeDays: [{
292
- type: Input
293
- }], dayStartHour: [{
294
- type: Input
295
- }], dayEndHour: [{
296
- type: Input
297
- }], hourSegments: [{
298
- type: Input
299
- }], activeDayIsOpen: [{
312
+ }], excludeDays: [{ type: i0.Input, args: [{ isSignal: true, alias: "excludeDays", required: false }] }], dayStartHour: [{ type: i0.Input, args: [{ isSignal: true, alias: "dayStartHour", required: false }] }], dayEndHour: [{ type: i0.Input, args: [{ isSignal: true, alias: "dayEndHour", required: false }] }], hourSegments: [{ type: i0.Input, args: [{ isSignal: true, alias: "hourSegments", required: false }] }], activeDayIsOpen: [{
300
313
  type: Input
301
314
  }], view: [{
302
315
  type: Input
303
316
  }], allowedViews: [{
304
317
  type: Input
305
- }], onlyFuture: [{
306
- type: Input
307
- }], titleNotes: [{
308
- type: Input
309
- }], newEventTemplate: [{
310
- type: Input
311
- }], allowDragToCreate: [{
312
- type: Input
313
- }], parentContent: [{
318
+ }], onlyFuture: [{ type: i0.Input, args: [{ isSignal: true, alias: "onlyFuture", required: false }] }], titleNotes: [{
314
319
  type: Input
315
- }], selectEvent: [{
316
- type: Output
317
- }], selectDay: [{
318
- type: Output
319
- }], selectSlot: [{
320
- type: Output
321
- }], newEventByDrag: [{
322
- type: Output
323
- }], changeEvent: [{
324
- type: Output
325
- }], changeDate: [{
326
- type: Output
327
- }], beforeWeekOrDayViewRenderEmitter: [{
328
- type: Output
329
- }], beforeMonthViewRenderEmitter: [{
330
- type: Output
331
- }] } });
320
+ }], newEventTemplate: [{ type: i0.Input, args: [{ isSignal: true, alias: "newEventTemplate", required: false }] }], allowDragToCreate: [{ type: i0.Input, args: [{ isSignal: true, alias: "allowDragToCreate", required: false }] }], parentContent: [{ type: i0.Input, args: [{ isSignal: true, alias: "parentContent", required: false }] }], selectEvent: [{ type: i0.Output, args: ["selectEvent"] }], selectDay: [{ type: i0.Output, args: ["selectDay"] }], selectSlot: [{ type: i0.Output, args: ["selectSlot"] }], newEventByDrag: [{ type: i0.Output, args: ["newEventByDrag"] }], changeEvent: [{ type: i0.Output, args: ["changeEvent"] }], changeDate: [{ type: i0.Output, args: ["changeDate"] }], beforeWeekOrDayViewRenderEmitter: [{ type: i0.Output, args: ["beforeWeekOrDayViewRenderEmitter"] }], beforeMonthViewRenderEmitter: [{ type: i0.Output, args: ["beforeMonthViewRenderEmitter"] }] } });
332
321
  /**
333
322
  * Possible attendance statuses for the event.
334
323
  */
@@ -549,10 +538,10 @@ class IDEACalendarsService {
549
538
  })
550
539
  .catch(err => done(err));
551
540
  }
552
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
553
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarsService }); }
541
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
542
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarsService }); }
554
543
  }
555
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarsService, decorators: [{
544
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarsService, decorators: [{
556
545
  type: Injectable
557
546
  }] });
558
547
 
@@ -566,6 +555,7 @@ class IDEACalendarComponent {
566
555
  this._API = inject(IDEAAWSAPIService);
567
556
  this._translate = inject(IDEATranslationsService);
568
557
  this._calendars = inject(IDEACalendarsService);
558
+ this._cdr = inject(ChangeDetectorRef);
569
559
  this.errors = new Set();
570
560
  this.DEFAULT_COLOR = '#555';
571
561
  }
@@ -579,6 +569,7 @@ class IDEACalendarComponent {
579
569
  name: m.name,
580
570
  checked: (this.calendarWC.usersCanManageAppointments || []).some(x => x === m.userId)
581
571
  }));
572
+ this._cdr.markForCheck();
582
573
  }
583
574
  catch (error) {
584
575
  this._message.error('COMMON.COULDNT_LOAD_LIST');
@@ -641,12 +632,12 @@ class IDEACalendarComponent {
641
632
  close() {
642
633
  this._modal.dismiss();
643
634
  }
644
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
645
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEACalendarComponent, isStandalone: false, selector: "idea-calendar", inputs: { calendar: "calendar", advancedPermissions: "advancedPermissions", hideColor: "hideColor" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n <ion-icon name=\"checkmark-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n @if (calendarWC) {\n <div class=\"maxWidthContainer\">\n <ion-list class=\"aList\">\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('name')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.NAME' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n [(ngModel)]=\"calendarWC.name\"\n />\n </ion-item>\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('description')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n [(ngModel)]=\"calendarWC.description\"\n />\n </ion-item>\n @if (!hideColor) {\n <idea-color-picker\n [lines]=\"'inset'\"\n [current]=\"calendarWC.color\"\n [label]=\"'IDEA_AGENDA.CALENDARS.COLOR' | translate\"\n [class.fieldHasError]=\"hasFieldAnError('color')\"\n (select)=\"$event ? (calendarWC.color = $event) : null\"\n />\n }\n @if (membershipsChecks && calendarWC.isShared() && advancedPermissions) {\n <idea-checker\n [data]=\"membershipsChecks\"\n [label]=\"'IDEA_AGENDA.CALENDARS.USERS_ALLOWED_TO_MANAGE_APPOINTMENTS' | translate\"\n [searchPlaceholder]=\"'IDEA_AGENDA.CALENDARS.WHO_CAN_MANAGE_APPOINTMENTS' | translate\"\n [noneText]=\"'IDEA_AGENDA.CALENDARS.NOBODY' | translate\"\n [allText]=\"'IDEA_AGENDA.CALENDARS.EVERYONE' | translate\"\n [allowSelectDeselectAll]=\"true\"\n [lines]=\"'inset'\"\n />\n }\n </ion-list>\n @if (calendarWC.external?.service) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_AGENDA.CALENDARS.INFO_ON_CALENDAR' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n @if (calendar.userId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"person\" />\n </ion-item>\n }\n @if (calendar.teamId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"people\" />\n </ion-item>\n }\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.LINKED_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + calendarWC.external.service | translate }}\n <p>{{ calendarWC.external.name }} ({{ calendarWC.external.email }})</p>\n </ion-label>\n <ion-icon slot=\"end\" [name]=\"_calendars.getServiceIcon(calendarWC.external.service)\" />\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.ACCESS_LEVELS.' + calendarWC.external.userAccess | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.BASED_ON_EXTERNAL_SERVICE_SHARING_PERMISSION' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"shield\" />\n </ion-item>\n </ion-list>\n }\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label color=\"danger\">\n <h2>{{ 'IDEA_AGENDA.CALENDARS.DANGEROUS_ZONE' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\">\n <ion-label class=\"ion-text-wrap\">\n {{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-button\n color=\"danger\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate\"\n (click)=\"delete()\"\n >\n {{ 'COMMON.DELETE' | translate }}\n </ion-button>\n </ion-item>\n </ion-list>\n </div>\n }\n</ion-content>\n", styles: [".maxWidthContainer{max-width:500px;padding-top:20px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-input-otp[type=text],ion-textarea,ion-searchbar" }, { kind: "component", type: i3$1.IDEAColorPickerComponent, selector: "idea-color-picker", inputs: ["colors", "current", "label", "placeholder", "icon", "iconColor", "disabled", "obligatory", "lines", "color"], outputs: ["select", "iconSelect"] }, { kind: "component", type: i3.IDEACheckerComponent, selector: "idea-checker", inputs: ["data", "dataProvider", "label", "icon", "iconColor", "searchPlaceholder", "noPreviewText", "noElementsFoundText", "noneEqualsAll", "noneText", "allText", "previewTextKey", "lines", "color", "disabled", "tappableWhenDisabled", "obligatory", "sortData", "numMaxElementsInPreview", "showAvatars", "limitSelectionToNum", "allowSelectDeselectAll", "category1", "category2", "showCategoriesFilters"], outputs: ["change", "iconSelect"] }, { kind: "pipe", type: i3.IDEATranslatePipe, name: "translate" }] }); }
635
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
636
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEACalendarComponent, isStandalone: false, selector: "idea-calendar", inputs: { calendar: "calendar", advancedPermissions: "advancedPermissions", hideColor: "hideColor" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n <ion-icon name=\"checkmark-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n @if (calendarWC) {\n <div class=\"maxWidthContainer\">\n <ion-list class=\"aList\">\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('name')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.NAME' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n [(ngModel)]=\"calendarWC.name\"\n />\n </ion-item>\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('description')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n [(ngModel)]=\"calendarWC.description\"\n />\n </ion-item>\n @if (!hideColor) {\n <idea-color-picker\n [lines]=\"'inset'\"\n [current]=\"calendarWC.color\"\n [label]=\"'IDEA_AGENDA.CALENDARS.COLOR' | translate\"\n [class.fieldHasError]=\"hasFieldAnError('color')\"\n (select)=\"$event ? (calendarWC.color = $event) : null\"\n />\n }\n @if (membershipsChecks && calendarWC.isShared() && advancedPermissions) {\n <idea-checker\n [data]=\"membershipsChecks\"\n [label]=\"'IDEA_AGENDA.CALENDARS.USERS_ALLOWED_TO_MANAGE_APPOINTMENTS' | translate\"\n [searchPlaceholder]=\"'IDEA_AGENDA.CALENDARS.WHO_CAN_MANAGE_APPOINTMENTS' | translate\"\n [noneText]=\"'IDEA_AGENDA.CALENDARS.NOBODY' | translate\"\n [allText]=\"'IDEA_AGENDA.CALENDARS.EVERYONE' | translate\"\n [allowSelectDeselectAll]=\"true\"\n [lines]=\"'inset'\"\n />\n }\n </ion-list>\n @if (calendarWC.external?.service) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_AGENDA.CALENDARS.INFO_ON_CALENDAR' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n @if (calendar.userId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"person\" />\n </ion-item>\n }\n @if (calendar.teamId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"people\" />\n </ion-item>\n }\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.LINKED_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + calendarWC.external.service | translate }}\n <p>{{ calendarWC.external.name }} ({{ calendarWC.external.email }})</p>\n </ion-label>\n <ion-icon slot=\"end\" [name]=\"_calendars.getServiceIcon(calendarWC.external.service)\" />\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.ACCESS_LEVELS.' + calendarWC.external.userAccess | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.BASED_ON_EXTERNAL_SERVICE_SHARING_PERMISSION' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"shield\" />\n </ion-item>\n </ion-list>\n }\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label color=\"danger\">\n <h2>{{ 'IDEA_AGENDA.CALENDARS.DANGEROUS_ZONE' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\">\n <ion-label class=\"ion-text-wrap\">\n {{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-button\n color=\"danger\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate\"\n (click)=\"delete()\"\n >\n {{ 'COMMON.DELETE' | translate }}\n </ion-button>\n </ion-item>\n </ion-list>\n </div>\n }\n</ion-content>\n", styles: [".maxWidthContainer{max-width:500px;padding-top:20px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonInput, selector: "ion-input", inputs: ["autocapitalize", "autocomplete", "autocorrect", "autofocus", "clearInput", "clearInputIcon", "clearOnEdit", "color", "counter", "counterFormatter", "debounce", "disabled", "enterkeyhint", "errorText", "fill", "helperText", "inputmode", "label", "labelPlacement", "max", "maxlength", "min", "minlength", "mode", "multiple", "name", "pattern", "placeholder", "readonly", "required", "shape", "spellcheck", "step", "type", "value"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonList, selector: "ion-list", inputs: ["inset", "lines", "mode"] }, { kind: "component", type: i2.IonListHeader, selector: "ion-list-header", inputs: ["color", "lines", "mode"] }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "directive", type: i2.TextValueAccessor, selector: "ion-input:not([type=number]),ion-input-otp[type=text],ion-textarea,ion-searchbar" }, { kind: "component", type: i3$1.IDEAColorPickerComponent, selector: "idea-color-picker", inputs: ["colors", "current", "label", "placeholder", "icon", "iconColor", "disabled", "obligatory", "lines", "color"], outputs: ["select", "iconSelect"] }, { kind: "component", type: i3.IDEACheckerComponent, selector: "idea-checker", inputs: ["data", "dataProvider", "label", "icon", "iconColor", "searchPlaceholder", "noPreviewText", "noElementsFoundText", "noneEqualsAll", "noneText", "allText", "previewTextKey", "lines", "color", "disabled", "tappableWhenDisabled", "obligatory", "sortData", "numMaxElementsInPreview", "showAvatars", "limitSelectionToNum", "allowSelectDeselectAll", "category1", "category2", "showCategoriesFilters"], outputs: ["change", "iconSelect"] }, { kind: "pipe", type: i3.IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
646
637
  }
647
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarComponent, decorators: [{
638
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarComponent, decorators: [{
648
639
  type: Component,
649
- args: [{ standalone: false, selector: 'idea-calendar', template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n <ion-icon name=\"checkmark-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n @if (calendarWC) {\n <div class=\"maxWidthContainer\">\n <ion-list class=\"aList\">\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('name')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.NAME' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n [(ngModel)]=\"calendarWC.name\"\n />\n </ion-item>\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('description')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n [(ngModel)]=\"calendarWC.description\"\n />\n </ion-item>\n @if (!hideColor) {\n <idea-color-picker\n [lines]=\"'inset'\"\n [current]=\"calendarWC.color\"\n [label]=\"'IDEA_AGENDA.CALENDARS.COLOR' | translate\"\n [class.fieldHasError]=\"hasFieldAnError('color')\"\n (select)=\"$event ? (calendarWC.color = $event) : null\"\n />\n }\n @if (membershipsChecks && calendarWC.isShared() && advancedPermissions) {\n <idea-checker\n [data]=\"membershipsChecks\"\n [label]=\"'IDEA_AGENDA.CALENDARS.USERS_ALLOWED_TO_MANAGE_APPOINTMENTS' | translate\"\n [searchPlaceholder]=\"'IDEA_AGENDA.CALENDARS.WHO_CAN_MANAGE_APPOINTMENTS' | translate\"\n [noneText]=\"'IDEA_AGENDA.CALENDARS.NOBODY' | translate\"\n [allText]=\"'IDEA_AGENDA.CALENDARS.EVERYONE' | translate\"\n [allowSelectDeselectAll]=\"true\"\n [lines]=\"'inset'\"\n />\n }\n </ion-list>\n @if (calendarWC.external?.service) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_AGENDA.CALENDARS.INFO_ON_CALENDAR' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n @if (calendar.userId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"person\" />\n </ion-item>\n }\n @if (calendar.teamId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"people\" />\n </ion-item>\n }\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.LINKED_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + calendarWC.external.service | translate }}\n <p>{{ calendarWC.external.name }} ({{ calendarWC.external.email }})</p>\n </ion-label>\n <ion-icon slot=\"end\" [name]=\"_calendars.getServiceIcon(calendarWC.external.service)\" />\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.ACCESS_LEVELS.' + calendarWC.external.userAccess | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.BASED_ON_EXTERNAL_SERVICE_SHARING_PERMISSION' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"shield\" />\n </ion-item>\n </ion-list>\n }\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label color=\"danger\">\n <h2>{{ 'IDEA_AGENDA.CALENDARS.DANGEROUS_ZONE' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\">\n <ion-label class=\"ion-text-wrap\">\n {{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-button\n color=\"danger\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate\"\n (click)=\"delete()\"\n >\n {{ 'COMMON.DELETE' | translate }}\n </ion-button>\n </ion-item>\n </ion-list>\n </div>\n }\n</ion-content>\n", styles: [".maxWidthContainer{max-width:500px;padding-top:20px}\n"] }]
640
+ args: [{ standalone: false, selector: 'idea-calendar', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n <ion-title>{{ 'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate }}</ion-title>\n <ion-buttons slot=\"end\">\n <ion-button [title]=\"'COMMON.SAVE' | translate\" (click)=\"save()\">\n <ion-icon name=\"checkmark-circle\" slot=\"icon-only\" />\n </ion-button>\n </ion-buttons>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n @if (calendarWC) {\n <div class=\"maxWidthContainer\">\n <ion-list class=\"aList\">\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('name')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.NAME' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.NAME_HINT' | translate\"\n [(ngModel)]=\"calendarWC.name\"\n />\n </ion-item>\n <ion-item\n lines=\"inset\"\n [class.fieldHasError]=\"hasFieldAnError('description')\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n >\n <ion-input\n labelPlacement=\"stacked\"\n [label]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION' | translate\"\n [placeholder]=\"'IDEA_AGENDA.CALENDARS.DESCRIPTION_HINT' | translate\"\n [(ngModel)]=\"calendarWC.description\"\n />\n </ion-item>\n @if (!hideColor) {\n <idea-color-picker\n [lines]=\"'inset'\"\n [current]=\"calendarWC.color\"\n [label]=\"'IDEA_AGENDA.CALENDARS.COLOR' | translate\"\n [class.fieldHasError]=\"hasFieldAnError('color')\"\n (select)=\"$event ? (calendarWC.color = $event) : null\"\n />\n }\n @if (membershipsChecks && calendarWC.isShared() && advancedPermissions) {\n <idea-checker\n [data]=\"membershipsChecks\"\n [label]=\"'IDEA_AGENDA.CALENDARS.USERS_ALLOWED_TO_MANAGE_APPOINTMENTS' | translate\"\n [searchPlaceholder]=\"'IDEA_AGENDA.CALENDARS.WHO_CAN_MANAGE_APPOINTMENTS' | translate\"\n [noneText]=\"'IDEA_AGENDA.CALENDARS.NOBODY' | translate\"\n [allText]=\"'IDEA_AGENDA.CALENDARS.EVERYONE' | translate\"\n [allowSelectDeselectAll]=\"true\"\n [lines]=\"'inset'\"\n />\n }\n </ion-list>\n @if (calendarWC.external?.service) {\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label>\n <h2>{{ 'IDEA_AGENDA.CALENDARS.INFO_ON_CALENDAR' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n @if (calendar.userId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.PRIVATE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"person\" />\n </ion-item>\n }\n @if (calendar.teamId) {\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"people\" />\n </ion-item>\n }\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.LINKED_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + calendarWC.external.service | translate }}\n <p>{{ calendarWC.external.name }} ({{ calendarWC.external.email }})</p>\n </ion-label>\n <ion-icon slot=\"end\" [name]=\"_calendars.getServiceIcon(calendarWC.external.service)\" />\n </ion-item>\n <ion-item lines=\"inset\">\n <ion-label>\n {{ 'IDEA_AGENDA.CALENDARS.ACCESS_LEVELS.' + calendarWC.external.userAccess | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.BASED_ON_EXTERNAL_SERVICE_SHARING_PERMISSION' | translate }}</p>\n </ion-label>\n <ion-icon slot=\"end\" name=\"shield\" />\n </ion-item>\n </ion-list>\n }\n <ion-list class=\"aList\">\n <ion-list-header>\n <ion-label color=\"danger\">\n <h2>{{ 'IDEA_AGENDA.CALENDARS.DANGEROUS_ZONE' | translate }}</h2>\n </ion-label>\n </ion-list-header>\n <ion-item lines=\"inset\">\n <ion-label class=\"ion-text-wrap\">\n {{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR' | translate }}\n <p>{{ 'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate }}</p>\n </ion-label>\n <ion-button\n color=\"danger\"\n [title]=\"'IDEA_AGENDA.CALENDARS.DELETE_CALENDAR_HINT' | translate\"\n (click)=\"delete()\"\n >\n {{ 'COMMON.DELETE' | translate }}\n </ion-button>\n </ion-item>\n </ion-list>\n </div>\n }\n</ion-content>\n", styles: [".maxWidthContainer{max-width:500px;padding-top:20px}\n"] }]
650
641
  }], propDecorators: { calendar: [{
651
642
  type: Input
652
643
  }], advancedPermissions: [{
@@ -663,20 +654,40 @@ class IDEACalendarItemComponent {
663
654
  this._loading = inject(IDEALoadingService);
664
655
  this._translate = inject(IDEATranslationsService);
665
656
  this._calendars = inject(IDEACalendarsService);
657
+ /**
658
+ * Whether the component is disabled.
659
+ */
660
+ this.disabled = input(/* @ts-ignore */
661
+ ...(ngDevMode ? [undefined, { debugName: "disabled" }] : /* istanbul ignore next */ []));
662
+ /**
663
+ * Whether we want to enable advanced permissions (based on the memberships) on the calendar.
664
+ */
665
+ this.advancedPermissions = input(/* @ts-ignore */
666
+ ...(ngDevMode ? [undefined, { debugName: "advancedPermissions" }] : /* istanbul ignore next */ []));
667
+ /**
668
+ * Whether the calendar color is an important detail or it shouldn't be shown.
669
+ */
670
+ this.hideColor = input(/* @ts-ignore */
671
+ ...(ngDevMode ? [undefined, { debugName: "hideColor" }] : /* istanbul ignore next */ []));
672
+ /**
673
+ * The URL to be used on the redirect calls.
674
+ */
675
+ this.baseURL = input(/* @ts-ignore */
676
+ ...(ngDevMode ? [undefined, { debugName: "baseURL" }] : /* istanbul ignore next */ []));
666
677
  /**
667
678
  * Report to parent components a change.
668
679
  */
669
- this.somethingChanged = new EventEmitter();
680
+ this.somethingChanged = output();
670
681
  }
671
682
  async manageCalendar() {
672
- if (this.disabled)
683
+ if (this.disabled())
673
684
  return;
674
685
  const modal = await this._modal.create({
675
686
  component: IDEACalendarComponent,
676
687
  componentProps: {
677
688
  calendar: this.calendar,
678
- advancedPermissions: this.advancedPermissions,
679
- hideColor: this.hideColor
689
+ advancedPermissions: this.advancedPermissions(),
690
+ hideColor: this.hideColor()
680
691
  }
681
692
  });
682
693
  modal.onDidDismiss().then(res => {
@@ -687,12 +698,12 @@ class IDEACalendarItemComponent {
687
698
  this.calendar = null;
688
699
  else
689
700
  this.calendar.load(cal);
690
- this.somethingChanged.emit();
701
+ this.somethingChanged.emit(this.calendar);
691
702
  });
692
703
  modal.present();
693
704
  }
694
705
  async linkExtCalendarOrDelete() {
695
- if (this.disabled)
706
+ if (this.disabled())
696
707
  return;
697
708
  try {
698
709
  const cal = await this._calendars.chooseAndSetExternalCalendar(this.calendar);
@@ -710,7 +721,7 @@ class IDEACalendarItemComponent {
710
721
  }
711
722
  finally {
712
723
  this._loading.hide();
713
- this.somethingChanged.emit();
724
+ this.somethingChanged.emit(this.calendar);
714
725
  }
715
726
  }
716
727
  catch (error) {
@@ -719,7 +730,7 @@ class IDEACalendarItemComponent {
719
730
  await this._loading.show();
720
731
  await this._calendars.deleteCalendar(this.calendar);
721
732
  this._message.success('COMMON.OPERATION_COMPLETED');
722
- this.somethingChanged.emit();
733
+ this.somethingChanged.emit(this.calendar);
723
734
  }
724
735
  catch (error) {
725
736
  this._message.error('COMMON.OPERATION_FAILED');
@@ -730,7 +741,7 @@ class IDEACalendarItemComponent {
730
741
  };
731
742
  const doLink = async () => {
732
743
  try {
733
- await this._calendars.linkExtService(this.calendar, this.baseURL);
744
+ await this._calendars.linkExtService(this.calendar, this.baseURL());
734
745
  this.linkExtCalendarOrDelete();
735
746
  }
736
747
  catch (error) {
@@ -747,25 +758,15 @@ class IDEACalendarItemComponent {
747
758
  alert.present();
748
759
  }
749
760
  }
750
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
751
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEACalendarItemComponent, isStandalone: false, selector: "idea-calendar-item", inputs: { calendar: "calendar", disabled: "disabled", advancedPermissions: "advancedPermissions", hideColor: "hideColor", baseURL: "baseURL" }, outputs: { somethingChanged: "somethingChanged" }, ngImport: i0, template: "@if (calendar) {\n <ion-item\n class=\"calendarItem\"\n [button]=\"!disabled\"\n [title]=\"'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n >\n @if (!hideColor) {\n <ion-avatar slot=\"start\" class=\"colorCircle\" [style.background-color]=\"calendar.color\" />\n }\n <ion-label>\n {{ calendar.name }}\n <p>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-text color=\"danger\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n }\n {{ calendar.description }}\n </p>\n </ion-label>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n [title]=\"'IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT' | translate\"\n />\n }\n @if (calendar.external?.service) {\n <ion-icon\n slot=\"end\"\n [name]=\"_calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n ('IDEA_AGENDA.CALENDARS.LINKED_TO' | translate) +\n ' ' +\n ('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service | translate)\n \"\n />\n }\n </ion-item>\n}\n", styles: [".calendarItem ion-avatar.colorCircle{width:20px;height:20px;background-color:#555}\n"], dependencies: [{ kind: "component", type: i2.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "pipe", type: i3.IDEATranslatePipe, name: "translate" }] }); }
761
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
762
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEACalendarItemComponent, isStandalone: false, selector: "idea-calendar-item", inputs: { calendar: { classPropertyName: "calendar", publicName: "calendar", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, advancedPermissions: { classPropertyName: "advancedPermissions", publicName: "advancedPermissions", isSignal: true, isRequired: false, transformFunction: null }, hideColor: { classPropertyName: "hideColor", publicName: "hideColor", isSignal: true, isRequired: false, transformFunction: null }, baseURL: { classPropertyName: "baseURL", publicName: "baseURL", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { somethingChanged: "somethingChanged" }, ngImport: i0, template: "@if (calendar) {\n <ion-item\n class=\"calendarItem\"\n [button]=\"!disabled()\"\n [title]=\"'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n >\n @if (!hideColor()) {\n <ion-avatar slot=\"start\" class=\"colorCircle\" [style.background-color]=\"calendar.color\" />\n }\n <ion-label>\n {{ calendar.name }}\n <p>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-text color=\"danger\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n }\n {{ calendar.description }}\n </p>\n </ion-label>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n [title]=\"'IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT' | translate\"\n />\n }\n @if (calendar.external?.service) {\n <ion-icon\n slot=\"end\"\n [name]=\"_calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n ('IDEA_AGENDA.CALENDARS.LINKED_TO' | translate) +\n ' ' +\n ('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service | translate)\n \"\n />\n }\n </ion-item>\n}\n", styles: [".calendarItem ion-avatar.colorCircle{width:20px;height:20px;background-color:#555}\n"], dependencies: [{ kind: "component", type: i2.IonAvatar, selector: "ion-avatar" }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "detail", "detailIcon", "disabled", "download", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }, { kind: "component", type: i2.IonText, selector: "ion-text", inputs: ["color", "mode"] }, { kind: "pipe", type: i3.IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
752
763
  }
753
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarItemComponent, decorators: [{
764
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarItemComponent, decorators: [{
754
765
  type: Component,
755
- args: [{ standalone: false, selector: 'idea-calendar-item', template: "@if (calendar) {\n <ion-item\n class=\"calendarItem\"\n [button]=\"!disabled\"\n [title]=\"'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n >\n @if (!hideColor) {\n <ion-avatar slot=\"start\" class=\"colorCircle\" [style.background-color]=\"calendar.color\" />\n }\n <ion-label>\n {{ calendar.name }}\n <p>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-text color=\"danger\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n }\n {{ calendar.description }}\n </p>\n </ion-label>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n [title]=\"'IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT' | translate\"\n />\n }\n @if (calendar.external?.service) {\n <ion-icon\n slot=\"end\"\n [name]=\"_calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n ('IDEA_AGENDA.CALENDARS.LINKED_TO' | translate) +\n ' ' +\n ('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service | translate)\n \"\n />\n }\n </ion-item>\n}\n", styles: [".calendarItem ion-avatar.colorCircle{width:20px;height:20px;background-color:#555}\n"] }]
766
+ args: [{ standalone: false, selector: 'idea-calendar-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "@if (calendar) {\n <ion-item\n class=\"calendarItem\"\n [button]=\"!disabled()\"\n [title]=\"'IDEA_AGENDA.CALENDARS.EDIT_CALENDAR' | translate\"\n (click)=\"calendar.external && !calendar.external.calendarId ? linkExtCalendarOrDelete() : manageCalendar()\"\n >\n @if (!hideColor()) {\n <ion-avatar slot=\"start\" class=\"colorCircle\" [style.background-color]=\"calendar.color\" />\n }\n <ion-label>\n {{ calendar.name }}\n <p>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-text color=\"danger\">\n {{ 'IDEA_AGENDA.CALENDARS.TAP_TO_CONFIGURE' | translate }}\n </ion-text>\n }\n {{ calendar.description }}\n </p>\n </ion-label>\n @if (calendar.external && !calendar.external.calendarId) {\n <ion-icon\n slot=\"end\"\n color=\"danger\"\n name=\"flash-off\"\n [title]=\"'IDEA_AGENDA.CALENDARS.CALENDAR_NOT_YET_LINKED_HINT' | translate\"\n />\n }\n @if (calendar.external?.service) {\n <ion-icon\n slot=\"end\"\n [name]=\"_calendars.getServiceIcon(calendar.external.service)\"\n [title]=\"\n ('IDEA_AGENDA.CALENDARS.LINKED_TO' | translate) +\n ' ' +\n ('IDEA_AGENDA.CALENDARS.SERVICES.' + calendar.external.service | translate)\n \"\n />\n }\n </ion-item>\n}\n", styles: [".calendarItem ion-avatar.colorCircle{width:20px;height:20px;background-color:#555}\n"] }]
756
767
  }], propDecorators: { calendar: [{
757
768
  type: Input
758
- }], disabled: [{
759
- type: Input
760
- }], advancedPermissions: [{
761
- type: Input
762
- }], hideColor: [{
763
- type: Input
764
- }], baseURL: [{
765
- type: Input
766
- }], somethingChanged: [{
767
- type: Output
768
- }] } });
769
+ }], disabled: [{ type: i0.Input, args: [{ isSignal: true, alias: "disabled", required: false }] }], advancedPermissions: [{ type: i0.Input, args: [{ isSignal: true, alias: "advancedPermissions", required: false }] }], hideColor: [{ type: i0.Input, args: [{ isSignal: true, alias: "hideColor", required: false }] }], baseURL: [{ type: i0.Input, args: [{ isSignal: true, alias: "baseURL", required: false }] }], somethingChanged: [{ type: i0.Output, args: ["somethingChanged"] }] } });
769
770
 
770
771
  class IDEACalendarCreationComponent {
771
772
  constructor() {
@@ -775,6 +776,21 @@ class IDEACalendarCreationComponent {
775
776
  this._translate = inject(IDEATranslationsService);
776
777
  this._tc = inject(IDEATinCanService);
777
778
  this._calendars = inject(IDEACalendarsService);
779
+ /**
780
+ * Whether we want to allow the creation of only a particular type of calendar, based on the scope.
781
+ */
782
+ this.fixScope = input(/* @ts-ignore */
783
+ ...(ngDevMode ? [undefined, { debugName: "fixScope" }] : /* istanbul ignore next */ []));
784
+ /**
785
+ * Whether we want to allow the creation of local calendars.
786
+ */
787
+ this.onlyExternalCalendars = input(/* @ts-ignore */
788
+ ...(ngDevMode ? [undefined, { debugName: "onlyExternalCalendars" }] : /* istanbul ignore next */ []));
789
+ /**
790
+ * The URL to be used on the redirect calls.
791
+ */
792
+ this.baseURL = input(/* @ts-ignore */
793
+ ...(ngDevMode ? [undefined, { debugName: "baseURL" }] : /* istanbul ignore next */ []));
778
794
  this.DEFAULT_COLOR = '#555';
779
795
  this.SOURCES = Object.keys(ExternalCalendarSources);
780
796
  }
@@ -782,9 +798,10 @@ class IDEACalendarCreationComponent {
782
798
  this.calendar = new Calendar();
783
799
  this.team = this._tc.get('team');
784
800
  this.membership = this._tc.get('membership');
785
- if (this.fixScope === CalendarScopes.SHARED)
801
+ const fixScope = this.fixScope();
802
+ if (fixScope === CalendarScopes.SHARED)
786
803
  this.calendar.teamId = this.team.teamId;
787
- if (this.fixScope === CalendarScopes.PRIVATE)
804
+ if (fixScope === CalendarScopes.PRIVATE)
788
805
  this.calendar.userId = this.membership.userId;
789
806
  }
790
807
  resetScope() {
@@ -792,7 +809,7 @@ class IDEACalendarCreationComponent {
792
809
  this.calendar.teamId = this.calendar.userId = null;
793
810
  }
794
811
  canChangeScope() {
795
- return !this.fixScope && this.scopeIsSet();
812
+ return !this.fixScope() && this.scopeIsSet();
796
813
  }
797
814
  scopeIsSet() {
798
815
  return Boolean(this.calendar.userId) || Boolean(this.calendar.teamId);
@@ -800,7 +817,7 @@ class IDEACalendarCreationComponent {
800
817
  async saveNewCalendar(service) {
801
818
  if (!this.scopeIsSet())
802
819
  return;
803
- if (!service && this.onlyExternalCalendars)
820
+ if (!service && this.onlyExternalCalendars())
804
821
  return;
805
822
  if (service) {
806
823
  this.calendar.external = new ExternalCalendarInfo({ service });
@@ -823,7 +840,7 @@ class IDEACalendarCreationComponent {
823
840
  }
824
841
  try {
825
842
  await this._loading.hide();
826
- await this._calendars.linkExtService(this.calendar, this.baseURL);
843
+ await this._calendars.linkExtService(this.calendar, this.baseURL());
827
844
  const res = await this._calendars.chooseAndSetExternalCalendar(this.calendar);
828
845
  if (!res) {
829
846
  await this._modal.dismiss(this.calendar);
@@ -857,19 +874,13 @@ class IDEACalendarCreationComponent {
857
874
  close() {
858
875
  this._modal.dismiss();
859
876
  }
860
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarCreationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
861
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.16", type: IDEACalendarCreationComponent, isStandalone: false, selector: "idea-calendar-creation", inputs: { fixScope: "fixScope", onlyExternalCalendars: "onlyExternalCalendars", baseURL: "baseURL" }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n @if (!canChangeScope()) {\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n }\n @if (canChangeScope()) {\n <ion-button (click)=\"resetScope()\">\n <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n </ion-button>\n }\n </ion-buttons>\n <ion-title>\n @if (!scopeIsSet()) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.ADD_A_CALENDAR' | translate }}</span>\n }\n @if (calendar.userId) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</span>\n }\n @if (calendar.teamId) {\n <span>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate: { team: team.name } }}\n </span>\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <!-- 1st STEP -->\n @if (!scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.CREATE_PRIVATE_OR_TEAM' | translate }}</h1>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.userId = membership.userId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"person\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.teamId = membership.teamId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"people\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n }\n <!-- 2nd STEP -->\n @if (scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK_HINT' | translate }}</p>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n @if (!onlyExternalCalendars) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar()\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"remove\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n @for (s of SOURCES; track s) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar(s)\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon [name]=\"_calendars.getServiceIcon(s)\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>\n {{ 'IDEA_AGENDA.CALENDARS.LINK_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + s | translate }}\n </h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.LINK_TO_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n</ion-content>\n", styles: ["ion-content{--background: var(--ion-color-white-shade)}.choiceGrid ion-row ion-col>h1{margin:10px 0 0;font-size:1.1em}.choiceGrid ion-row ion-col>p{margin-top:0;margin-bottom:0;font-size:.9em}.choiceGrid ion-row:first-child ion-col{padding-bottom:25px}.choiceGrid ion-card{--ion-item-background: var(--ion-color-white);--color: var(--ion-color-dark-tint);height:240px;margin:0 auto;text-align:center}.choiceGrid ion-card ion-card-header{padding-bottom:10px}.choiceGrid ion-card ion-card-header ion-card-title{font-size:2.5em}.choiceGrid ion-card ion-card-content h1{font-size:1.4em;height:60px}.choiceGrid ion-card.step2{height:135px}.choiceGrid ion-card.step2 ion-card-header{padding-top:10px;padding-bottom:0}.choiceGrid ion-card.step2 ion-card-content h1{height:auto}\n"], dependencies: [{ kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "pipe", type: i3.IDEATranslatePipe, name: "translate" }] }); }
877
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarCreationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
878
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "22.0.2", type: IDEACalendarCreationComponent, isStandalone: false, selector: "idea-calendar-creation", inputs: { fixScope: { classPropertyName: "fixScope", publicName: "fixScope", isSignal: true, isRequired: false, transformFunction: null }, onlyExternalCalendars: { classPropertyName: "onlyExternalCalendars", publicName: "onlyExternalCalendars", isSignal: true, isRequired: false, transformFunction: null }, baseURL: { classPropertyName: "baseURL", publicName: "baseURL", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n @if (!canChangeScope()) {\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n }\n @if (canChangeScope()) {\n <ion-button (click)=\"resetScope()\">\n <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n </ion-button>\n }\n </ion-buttons>\n <ion-title>\n @if (!scopeIsSet()) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.ADD_A_CALENDAR' | translate }}</span>\n }\n @if (calendar.userId) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</span>\n }\n @if (calendar.teamId) {\n <span>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate: { team: team.name } }}\n </span>\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <!-- 1st STEP -->\n @if (!scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.CREATE_PRIVATE_OR_TEAM' | translate }}</h1>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.userId = membership.userId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"person\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.teamId = membership.teamId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"people\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n }\n <!-- 2nd STEP -->\n @if (scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK_HINT' | translate }}</p>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n @if (!onlyExternalCalendars()) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar()\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"remove\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n @for (s of SOURCES; track s) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar(s)\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon [name]=\"_calendars.getServiceIcon(s)\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>\n {{ 'IDEA_AGENDA.CALENDARS.LINK_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + s | translate }}\n </h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.LINK_TO_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n</ion-content>\n", styles: ["ion-content{--background: var(--ion-color-white-shade)}.choiceGrid ion-row ion-col>h1{margin:10px 0 0;font-size:1.1em}.choiceGrid ion-row ion-col>p{margin-top:0;margin-bottom:0;font-size:.9em}.choiceGrid ion-row:first-child ion-col{padding-bottom:25px}.choiceGrid ion-card{--ion-item-background: var(--ion-color-white);--color: var(--ion-color-dark-tint);height:240px;margin:0 auto;text-align:center}.choiceGrid ion-card ion-card-header{padding-bottom:10px}.choiceGrid ion-card ion-card-header ion-card-title{font-size:2.5em}.choiceGrid ion-card ion-card-content h1{font-size:1.4em;height:60px}.choiceGrid ion-card.step2{height:135px}.choiceGrid ion-card.step2 ion-card-header{padding-top:10px;padding-bottom:0}.choiceGrid ion-card.step2 ion-card-content h1{height:auto}\n"], dependencies: [{ kind: "component", type: i2.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { kind: "component", type: i2.IonButtons, selector: "ion-buttons", inputs: ["collapse"] }, { kind: "component", type: i2.IonCard, selector: "ion-card", inputs: ["button", "color", "disabled", "download", "href", "mode", "rel", "routerAnimation", "routerDirection", "target", "type"] }, { kind: "component", type: i2.IonCardContent, selector: "ion-card-content", inputs: ["mode"] }, { kind: "component", type: i2.IonCardHeader, selector: "ion-card-header", inputs: ["color", "mode", "translucent"] }, { kind: "component", type: i2.IonCardTitle, selector: "ion-card-title", inputs: ["color", "mode"] }, { kind: "component", type: i2.IonCol, selector: "ion-col", inputs: ["offset", "offsetLg", "offsetMd", "offsetSm", "offsetXl", "offsetXs", "pull", "pullLg", "pullMd", "pullSm", "pullXl", "pullXs", "push", "pushLg", "pushMd", "pushSm", "pushXl", "pushXs", "size", "sizeLg", "sizeMd", "sizeSm", "sizeXl", "sizeXs"] }, { kind: "component", type: i2.IonContent, selector: "ion-content", inputs: ["color", "fixedSlotPlacement", "forceOverscroll", "fullscreen", "scrollEvents", "scrollX", "scrollY"] }, { kind: "component", type: i2.IonGrid, selector: "ion-grid", inputs: ["fixed"] }, { kind: "component", type: i2.IonHeader, selector: "ion-header", inputs: ["collapse", "mode", "translucent"] }, { kind: "component", type: i2.IonIcon, selector: "ion-icon", inputs: ["color", "flipRtl", "icon", "ios", "lazy", "md", "mode", "name", "sanitize", "size", "src"] }, { kind: "component", type: i2.IonRow, selector: "ion-row" }, { kind: "component", type: i2.IonTitle, selector: "ion-title", inputs: ["color", "size"] }, { kind: "component", type: i2.IonToolbar, selector: "ion-toolbar", inputs: ["color", "mode"] }, { kind: "pipe", type: i3.IDEATranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
862
879
  }
863
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEACalendarCreationComponent, decorators: [{
880
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEACalendarCreationComponent, decorators: [{
864
881
  type: Component,
865
- args: [{ standalone: false, selector: 'idea-calendar-creation', template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n @if (!canChangeScope()) {\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n }\n @if (canChangeScope()) {\n <ion-button (click)=\"resetScope()\">\n <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n </ion-button>\n }\n </ion-buttons>\n <ion-title>\n @if (!scopeIsSet()) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.ADD_A_CALENDAR' | translate }}</span>\n }\n @if (calendar.userId) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</span>\n }\n @if (calendar.teamId) {\n <span>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate: { team: team.name } }}\n </span>\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <!-- 1st STEP -->\n @if (!scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.CREATE_PRIVATE_OR_TEAM' | translate }}</h1>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.userId = membership.userId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"person\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.teamId = membership.teamId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"people\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n }\n <!-- 2nd STEP -->\n @if (scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK_HINT' | translate }}</p>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n @if (!onlyExternalCalendars) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar()\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"remove\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n @for (s of SOURCES; track s) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar(s)\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon [name]=\"_calendars.getServiceIcon(s)\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>\n {{ 'IDEA_AGENDA.CALENDARS.LINK_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + s | translate }}\n </h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.LINK_TO_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n</ion-content>\n", styles: ["ion-content{--background: var(--ion-color-white-shade)}.choiceGrid ion-row ion-col>h1{margin:10px 0 0;font-size:1.1em}.choiceGrid ion-row ion-col>p{margin-top:0;margin-bottom:0;font-size:.9em}.choiceGrid ion-row:first-child ion-col{padding-bottom:25px}.choiceGrid ion-card{--ion-item-background: var(--ion-color-white);--color: var(--ion-color-dark-tint);height:240px;margin:0 auto;text-align:center}.choiceGrid ion-card ion-card-header{padding-bottom:10px}.choiceGrid ion-card ion-card-header ion-card-title{font-size:2.5em}.choiceGrid ion-card ion-card-content h1{font-size:1.4em;height:60px}.choiceGrid ion-card.step2{height:135px}.choiceGrid ion-card.step2 ion-card-header{padding-top:10px;padding-bottom:0}.choiceGrid ion-card.step2 ion-card-content h1{height:auto}\n"] }]
866
- }], propDecorators: { fixScope: [{
867
- type: Input
868
- }], onlyExternalCalendars: [{
869
- type: Input
870
- }], baseURL: [{
871
- type: Input
872
- }] } });
882
+ args: [{ standalone: false, selector: 'idea-calendar-creation', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ion-header>\n <ion-toolbar color=\"ideaToolbar\">\n <ion-buttons slot=\"start\">\n @if (!canChangeScope()) {\n <ion-button [title]=\"'COMMON.CLOSE' | translate\" (click)=\"close()\">\n <ion-icon name=\"close\" slot=\"icon-only\" />\n </ion-button>\n }\n @if (canChangeScope()) {\n <ion-button (click)=\"resetScope()\">\n <ion-icon name=\"arrow-back\" slot=\"icon-only\" />\n </ion-button>\n }\n </ion-buttons>\n <ion-title>\n @if (!scopeIsSet()) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.ADD_A_CALENDAR' | translate }}</span>\n }\n @if (calendar.userId) {\n <span>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</span>\n }\n @if (calendar.teamId) {\n <span>\n {{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate: { team: team.name } }}\n </span>\n }\n </ion-title>\n </ion-toolbar>\n</ion-header>\n<ion-content>\n <!-- 1st STEP -->\n @if (!scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.CREATE_PRIVATE_OR_TEAM' | translate }}</h1>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.userId = membership.userId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"person\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.PERSONAL_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n <ion-col class=\"ion-text-center\" [size]=\"12\" [sizeSm]=\"6\">\n <ion-card [button]=\"true\" (click)=\"calendar.teamId = membership.teamId\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"people\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.TEAM_CALENDAR_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n </ion-row>\n </ion-grid>\n }\n <!-- 2nd STEP -->\n @if (scopeIsSet()) {\n <ion-grid class=\"ion-padding choiceGrid\">\n <ion-row>\n <ion-col class=\"ion-text-center\">\n <h1>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.WHICH_EXTERNAL_SERVICE_TO_LINK_HINT' | translate }}</p>\n </ion-col>\n </ion-row>\n <ion-row class=\"ion-align-items-center\">\n @if (!onlyExternalCalendars()) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar()\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon name=\"remove\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK' | translate }}</h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.DONT_LINK_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n @for (s of SOURCES; track s) {\n <ion-col class=\"ion-text-center\" [size]=\"12\">\n <ion-card class=\"step2\" [button]=\"true\" (click)=\"saveNewCalendar(s)\">\n <ion-card-header>\n <ion-card-title>\n <ion-icon [name]=\"_calendars.getServiceIcon(s)\" />\n </ion-card-title>\n </ion-card-header>\n <ion-card-content>\n <h1>\n {{ 'IDEA_AGENDA.CALENDARS.LINK_TO' | translate }}\n {{ 'IDEA_AGENDA.CALENDARS.SERVICES.' + s | translate }}\n </h1>\n <p>{{ 'IDEA_AGENDA.CALENDARS.LINK_TO_HINT' | translate }}</p>\n </ion-card-content>\n </ion-card>\n </ion-col>\n }\n </ion-row>\n </ion-grid>\n }\n</ion-content>\n", styles: ["ion-content{--background: var(--ion-color-white-shade)}.choiceGrid ion-row ion-col>h1{margin:10px 0 0;font-size:1.1em}.choiceGrid ion-row ion-col>p{margin-top:0;margin-bottom:0;font-size:.9em}.choiceGrid ion-row:first-child ion-col{padding-bottom:25px}.choiceGrid ion-card{--ion-item-background: var(--ion-color-white);--color: var(--ion-color-dark-tint);height:240px;margin:0 auto;text-align:center}.choiceGrid ion-card ion-card-header{padding-bottom:10px}.choiceGrid ion-card ion-card-header ion-card-title{font-size:2.5em}.choiceGrid ion-card ion-card-content h1{font-size:1.4em;height:60px}.choiceGrid ion-card.step2{height:135px}.choiceGrid ion-card.step2 ion-card-header{padding-top:10px;padding-bottom:0}.choiceGrid ion-card.step2 ion-card-content h1{height:auto}\n"] }]
883
+ }], propDecorators: { fixScope: [{ type: i0.Input, args: [{ isSignal: true, alias: "fixScope", required: false }] }], onlyExternalCalendars: [{ type: i0.Input, args: [{ isSignal: true, alias: "onlyExternalCalendars", required: false }] }], baseURL: [{ type: i0.Input, args: [{ isSignal: true, alias: "baseURL", required: false }] }] } });
873
884
  /**
874
885
  * The possible scopes of the calendar.
875
886
  */
@@ -880,15 +891,15 @@ var CalendarScopes;
880
891
  })(CalendarScopes || (CalendarScopes = {}));
881
892
 
882
893
  class IDEAAgendaModule {
883
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAgendaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
884
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.16", ngImport: i0, type: IDEAAgendaModule, declarations: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent], imports: [CommonModule,
894
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAgendaModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
895
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "22.0.2", ngImport: i0, type: IDEAAgendaModule, declarations: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent], imports: [CommonModule,
885
896
  FormsModule,
886
897
  IonicModule,
887
898
  IDEATranslationsModule,
888
899
  IDEAColorPickerComponent,
889
900
  IDEACheckerComponent,
890
901
  IDEAUserAvatarComponent, i4.CalendarModule], exports: [IDEAAgendaComponent, IDEACalendarComponent, IDEACalendarItemComponent, IDEACalendarCreationComponent] }); }
891
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAgendaModule, providers: [{ provide: CalendarDateFormatter, useClass: CustomDateFormatter }, IDEACalendarsService], imports: [CommonModule,
902
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAgendaModule, providers: [{ provide: CalendarDateFormatter, useClass: CustomDateFormatter }, IDEACalendarsService], imports: [CommonModule,
892
903
  FormsModule,
893
904
  IonicModule,
894
905
  IDEATranslationsModule,
@@ -897,7 +908,7 @@ class IDEAAgendaModule {
897
908
  IDEAUserAvatarComponent,
898
909
  CalendarModule.forRoot({ provide: DateAdapter, useFactory: adapterFactory })] }); }
899
910
  }
900
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.16", ngImport: i0, type: IDEAAgendaModule, decorators: [{
911
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.0.2", ngImport: i0, type: IDEAAgendaModule, decorators: [{
901
912
  type: NgModule,
902
913
  args: [{
903
914
  imports: [