@bimetal/calendar-angular-components 0.34.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/LICENSE +57 -129
  2. package/README.md +1 -1
  3. package/dist/binding/controller.d.ts +10 -1
  4. package/dist/binding/controller.d.ts.map +1 -1
  5. package/dist/binding/controller.js +11 -1
  6. package/dist/binding/controller.js.map +1 -1
  7. package/dist/binding/index.d.ts +5 -5
  8. package/dist/binding/index.d.ts.map +1 -1
  9. package/dist/binding/index.js +5 -5
  10. package/dist/binding/index.js.map +1 -1
  11. package/dist/binding/services/event-render.service.d.ts +9 -0
  12. package/dist/binding/services/event-render.service.d.ts.map +1 -1
  13. package/dist/binding/services/event-render.service.js +11 -0
  14. package/dist/binding/services/event-render.service.js.map +1 -1
  15. package/dist/binding/services/pointer-gesture.service.d.ts +26 -0
  16. package/dist/binding/services/pointer-gesture.service.d.ts.map +1 -0
  17. package/dist/binding/services/pointer-gesture.service.js +37 -0
  18. package/dist/binding/services/pointer-gesture.service.js.map +1 -0
  19. package/dist/components/Calendar.d.ts +47 -8
  20. package/dist/components/Calendar.d.ts.map +1 -1
  21. package/dist/components/Calendar.js +183 -63
  22. package/dist/components/Calendar.js.map +1 -1
  23. package/dist/components/CalendarHeader.d.ts +12 -1
  24. package/dist/components/CalendarHeader.d.ts.map +1 -1
  25. package/dist/components/CalendarHeader.js +66 -14
  26. package/dist/components/CalendarHeader.js.map +1 -1
  27. package/dist/components/CategoryFilter.d.ts +4 -0
  28. package/dist/components/CategoryFilter.d.ts.map +1 -1
  29. package/dist/components/CategoryFilter.js +10 -5
  30. package/dist/components/CategoryFilter.js.map +1 -1
  31. package/dist/components/EventBar.d.ts +15 -4
  32. package/dist/components/EventBar.d.ts.map +1 -1
  33. package/dist/components/EventBar.js +108 -37
  34. package/dist/components/EventBar.js.map +1 -1
  35. package/dist/components/EventDialog.d.ts +11 -4
  36. package/dist/components/EventDialog.d.ts.map +1 -1
  37. package/dist/components/EventDialog.js +86 -44
  38. package/dist/components/EventDialog.js.map +1 -1
  39. package/dist/components/EventHistory.d.ts +14 -9
  40. package/dist/components/EventHistory.d.ts.map +1 -1
  41. package/dist/components/EventHistory.js +59 -55
  42. package/dist/components/EventHistory.js.map +1 -1
  43. package/dist/components/UndoToast.d.ts +9 -5
  44. package/dist/components/UndoToast.d.ts.map +1 -1
  45. package/dist/components/UndoToast.js +16 -27
  46. package/dist/components/UndoToast.js.map +1 -1
  47. package/dist/index.d.ts +0 -2
  48. package/dist/index.d.ts.map +1 -1
  49. package/dist/index.js +0 -2
  50. package/dist/index.js.map +1 -1
  51. package/dist/styles/index.css.d.ts +3 -0
  52. package/dist/views/agenda/AgendaView.d.ts +1 -0
  53. package/dist/views/agenda/AgendaView.d.ts.map +1 -1
  54. package/dist/views/agenda/AgendaView.js +9 -2
  55. package/dist/views/agenda/AgendaView.js.map +1 -1
  56. package/dist/views/day/DayView.d.ts +30 -4
  57. package/dist/views/day/DayView.d.ts.map +1 -1
  58. package/dist/views/day/DayView.js +61 -17
  59. package/dist/views/day/DayView.js.map +1 -1
  60. package/dist/views/month/MonthView.d.ts +21 -4
  61. package/dist/views/month/MonthView.d.ts.map +1 -1
  62. package/dist/views/month/MonthView.js +66 -12
  63. package/dist/views/month/MonthView.js.map +1 -1
  64. package/dist/views/month/WeekRow.d.ts +28 -4
  65. package/dist/views/month/WeekRow.d.ts.map +1 -1
  66. package/dist/views/month/WeekRow.js +100 -29
  67. package/dist/views/month/WeekRow.js.map +1 -1
  68. package/dist/views/resource/ResourceView.d.ts +32 -1
  69. package/dist/views/resource/ResourceView.d.ts.map +1 -1
  70. package/dist/views/resource/ResourceView.js +84 -22
  71. package/dist/views/resource/ResourceView.js.map +1 -1
  72. package/dist/views/timeline/TimelineView.d.ts +29 -3
  73. package/dist/views/timeline/TimelineView.d.ts.map +1 -1
  74. package/dist/views/timeline/TimelineView.js +83 -17
  75. package/dist/views/timeline/TimelineView.js.map +1 -1
  76. package/dist/views/week/AllDayRow.d.ts +21 -3
  77. package/dist/views/week/AllDayRow.d.ts.map +1 -1
  78. package/dist/views/week/AllDayRow.js +60 -13
  79. package/dist/views/week/AllDayRow.js.map +1 -1
  80. package/dist/views/week/TimeEvent.d.ts +20 -4
  81. package/dist/views/week/TimeEvent.d.ts.map +1 -1
  82. package/dist/views/week/TimeEvent.js +101 -31
  83. package/dist/views/week/TimeEvent.js.map +1 -1
  84. package/dist/views/week/WeekView.d.ts +25 -2
  85. package/dist/views/week/WeekView.d.ts.map +1 -1
  86. package/dist/views/week/WeekView.js +69 -21
  87. package/dist/views/week/WeekView.js.map +1 -1
  88. package/dist/views/year/YearView.d.ts +11 -4
  89. package/dist/views/year/YearView.d.ts.map +1 -1
  90. package/dist/views/year/YearView.js +26 -5
  91. package/dist/views/year/YearView.js.map +1 -1
  92. package/package.json +16 -13
@@ -1,14 +1,13 @@
1
1
  import { Component, Input, NgZone, TemplateRef, Optional, signal } from '@angular/core';
2
2
  import { CommonModule } from '@angular/common';
3
- import { getYear, getMonth } from '@bimetal/calendar-core';
4
- import { parseDragInfo } from '@bimetal/calendar-headless';
3
+ import { getYear, getMonth, monthIndex } from '@bimetal/temporal';
4
+ import { parseDragInfo, reportUnroutedCalendarError } from '@bimetal/calendar-headless';
5
5
  import { isEditableTarget } from '@bimetal/a11y-dom';
6
6
  import { createCalendarControllerBinding, EventRenderService, ZERO_RECT, } from '../binding/index.js';
7
7
  import { CalendarHeaderComponent } from './CalendarHeader.js';
8
8
  import { CategoryFilterComponent } from './CategoryFilter.js';
9
9
  import { ResourceFilterComponent } from './ResourceFilter.js';
10
10
  import { EventDialogComponent } from './EventDialog.js';
11
- import { UndoToastComponent } from './UndoToast.js';
12
11
  import { MonthViewComponent } from '../views/month/MonthView.js';
13
12
  import { WeekViewComponent } from '../views/week/WeekView.js';
14
13
  import { DayViewComponent } from '../views/day/DayView.js';
@@ -21,7 +20,7 @@ import * as i1 from "../binding/index.js";
21
20
  import * as i2 from "@angular/common";
22
21
  function CalendarComponent_cal_category_filter_2_Template(rf, ctx) { if (rf & 1) {
23
22
  const _r1 = i0.ɵɵgetCurrentView();
24
- i0.ɵɵelementStart(0, "cal-category-filter", 14);
23
+ i0.ɵɵelementStart(0, "cal-category-filter", 13);
25
24
  i0.ɵɵlistener("toggle", function CalendarComponent_cal_category_filter_2_Template_cal_category_filter_toggle_0_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.toggleCategory($event)); });
26
25
  i0.ɵɵelementEnd();
27
26
  } if (rf & 2) {
@@ -30,7 +29,7 @@ function CalendarComponent_cal_category_filter_2_Template(rf, ctx) { if (rf & 1)
30
29
  } }
31
30
  function CalendarComponent_cal_resource_filter_3_Template(rf, ctx) { if (rf & 1) {
32
31
  const _r3 = i0.ɵɵgetCurrentView();
33
- i0.ɵɵelementStart(0, "cal-resource-filter", 15);
32
+ i0.ɵɵelementStart(0, "cal-resource-filter", 14);
34
33
  i0.ɵɵlistener("toggle", function CalendarComponent_cal_resource_filter_3_Template_cal_resource_filter_toggle_0_listener($event) { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.toggleResource($event)); });
35
34
  i0.ɵɵelementEnd();
36
35
  } if (rf & 2) {
@@ -39,7 +38,7 @@ function CalendarComponent_cal_resource_filter_3_Template(rf, ctx) { if (rf & 1)
39
38
  } }
40
39
  function CalendarComponent_cal_year_view_4_Template(rf, ctx) { if (rf & 1) {
41
40
  const _r4 = i0.ɵɵgetCurrentView();
42
- i0.ɵɵelementStart(0, "cal-year-view", 16);
41
+ i0.ɵɵelementStart(0, "cal-year-view", 15);
43
42
  i0.ɵɵlistener("monthClick", function CalendarComponent_cal_year_view_4_Template_cal_year_view_monthClick_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.goToMonth($event.year, $event.month)); })("dayCellClick", function CalendarComponent_cal_year_view_4_Template_cal_year_view_dayCellClick_0_listener($event) { i0.ɵɵrestoreView(_r4); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDayCellClick($event)); });
44
43
  i0.ɵɵelementEnd();
45
44
  } if (rf & 2) {
@@ -48,17 +47,17 @@ function CalendarComponent_cal_year_view_4_Template(rf, ctx) { if (rf & 1) {
48
47
  } }
49
48
  function CalendarComponent_cal_month_view_5_Template(rf, ctx) { if (rf & 1) {
50
49
  const _r5 = i0.ɵɵgetCurrentView();
51
- i0.ɵɵelementStart(0, "cal-month-view", 17);
52
- i0.ɵɵlistener("eventClick", function CalendarComponent_cal_month_view_5_Template_cal_month_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_month_view_5_Template_cal_month_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_month_view_5_Template_cal_month_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("dayCellClick", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dayCellClick_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDayCellClick($event)); })("dropEvent", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dropEvent_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDropEvent($event)); })("dragOverDate", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dragOverDate_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updatePreview($event)); })("hidePreviewEv", function CalendarComponent_cal_month_view_5_Template_cal_month_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); })("expandMonthCell", function CalendarComponent_cal_month_view_5_Template_cal_month_view_expandMonthCell_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.expandMonthCell($event)); })("collapseMonthCell", function CalendarComponent_cal_month_view_5_Template_cal_month_view_collapseMonthCell_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.collapseMonthCell()); });
50
+ i0.ɵɵelementStart(0, "cal-month-view", 16);
51
+ i0.ɵɵlistener("eventClick", function CalendarComponent_cal_month_view_5_Template_cal_month_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_month_view_5_Template_cal_month_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_month_view_5_Template_cal_month_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("dayCellClick", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dayCellClick_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDayCellClick($event)); })("dropEvent", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dropEvent_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDropEvent($event)); })("dropDayInfo", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dropDayInfo_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.voidDropAllDay($event.info, $event.date)); })("dragOverDate", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dragOverDate_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updatePreview($event)); })("hidePreviewEv", function CalendarComponent_cal_month_view_5_Template_cal_month_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_month_view_5_Template_cal_month_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); })("expandMonthCell", function CalendarComponent_cal_month_view_5_Template_cal_month_view_expandMonthCell_0_listener($event) { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.expandMonthCell($event)); })("collapseMonthCell", function CalendarComponent_cal_month_view_5_Template_cal_month_view_collapseMonthCell_0_listener() { i0.ɵɵrestoreView(_r5); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.collapseMonthCell()); });
53
52
  i0.ɵɵelementEnd();
54
53
  } if (rf & 2) {
55
54
  const ctx_r1 = i0.ɵɵnextContext();
56
- i0.ɵɵproperty("year", ctx_r1.getYear(ctx_r1.snapshot.currentDate))("month", ctx_r1.getMonth(ctx_r1.snapshot.currentDate))("events", ctx_r1.filteredEvents)("config", ctx_r1.mergedConfig)("previewEvent", ctx_r1.snapshot.previewEvent)("expandedMonthDay", ctx_r1.snapshot.expandedMonthDay)("selectedEventId", ctx_r1.selectedEventId)("selectedInstanceDate", ctx_r1.selectedInstanceDate);
55
+ i0.ɵɵproperty("year", ctx_r1.getYear(ctx_r1.snapshot.currentDate))("month", ctx_r1.monthIndex(ctx_r1.getMonth(ctx_r1.snapshot.currentDate)))("events", ctx_r1.filteredEvents)("config", ctx_r1.mergedConfig)("previewEvent", ctx_r1.snapshot.previewEvent)("expandedMonthDay", ctx_r1.snapshot.expandedMonthDay)("selectedEventId", ctx_r1.selectedEventId)("selectedInstanceDate", ctx_r1.selectedInstanceDate);
57
56
  } }
58
57
  function CalendarComponent_cal_week_view_6_Template(rf, ctx) { if (rf & 1) {
59
58
  const _r6 = i0.ɵɵgetCurrentView();
60
- i0.ɵɵelementStart(0, "cal-week-view", 18);
61
- i0.ɵɵlistener("eventClick", function CalendarComponent_cal_week_view_6_Template_cal_week_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_week_view_6_Template_cal_week_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_week_view_6_Template_cal_week_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("dayCellClick", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dayCellClick_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDayCellClick($event)); })("dropEvent", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dropEvent_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDropEvent($event)); })("dropTimedEvent", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dropTimedEvent_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDropTimedEvent($event)); })("dragOverDate", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dragOverDate_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updatePreview($event)); })("dragOverDateTime", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dragOverDateTime_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updateTimedPreview($event.date, $event.time)); })("hidePreviewEv", function CalendarComponent_cal_week_view_6_Template_cal_week_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); });
59
+ i0.ɵɵelementStart(0, "cal-week-view", 17);
60
+ i0.ɵɵlistener("eventClick", function CalendarComponent_cal_week_view_6_Template_cal_week_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_week_view_6_Template_cal_week_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_week_view_6_Template_cal_week_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("dayCellClick", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dayCellClick_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDayCellClick($event)); })("dropEvent", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dropEvent_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDropEvent($event)); })("dropTimedEvent", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dropTimedEvent_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDropTimedEvent($event)); })("dropTimedInfo", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dropTimedInfo_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.voidDropTimed($event.info, $event.date, $event.time)); })("dropDayInfo", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dropDayInfo_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.voidDropAllDay($event.info, $event.date)); })("dragOverDate", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dragOverDate_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updatePreview($event)); })("dragOverDateTime", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dragOverDateTime_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updateTimedPreview($event.date, $event.time)); })("hidePreviewEv", function CalendarComponent_cal_week_view_6_Template_cal_week_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_week_view_6_Template_cal_week_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); });
62
61
  i0.ɵɵelementEnd();
63
62
  } if (rf & 2) {
64
63
  const ctx_r1 = i0.ɵɵnextContext();
@@ -66,8 +65,8 @@ function CalendarComponent_cal_week_view_6_Template(rf, ctx) { if (rf & 1) {
66
65
  } }
67
66
  function CalendarComponent_cal_day_view_7_Template(rf, ctx) { if (rf & 1) {
68
67
  const _r7 = i0.ɵɵgetCurrentView();
69
- i0.ɵɵelementStart(0, "cal-day-view", 19);
70
- i0.ɵɵlistener("eventClick", function CalendarComponent_cal_day_view_7_Template_cal_day_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_day_view_7_Template_cal_day_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_day_view_7_Template_cal_day_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("dayCellClick", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dayCellClick_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDayCellClick($event)); })("dropTimedEvent", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dropTimedEvent_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDropTimedEvent($event)); })("dragOverDateTime", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dragOverDateTime_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updateTimedPreview($event.date, $event.time)); })("hidePreviewEv", function CalendarComponent_cal_day_view_7_Template_cal_day_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); });
68
+ i0.ɵɵelementStart(0, "cal-day-view", 18);
69
+ i0.ɵɵlistener("eventClick", function CalendarComponent_cal_day_view_7_Template_cal_day_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_day_view_7_Template_cal_day_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_day_view_7_Template_cal_day_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("dayCellClick", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dayCellClick_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDayCellClick($event)); })("dropTimedEvent", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dropTimedEvent_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleDropTimedEvent($event)); })("dropTimedInfo", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dropTimedInfo_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.voidDropTimed($event.info, $event.date, $event.time)); })("dragOverDateTime", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dragOverDateTime_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updateTimedPreview($event.date, $event.time)); })("hidePreviewEv", function CalendarComponent_cal_day_view_7_Template_cal_day_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_day_view_7_Template_cal_day_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); });
71
70
  i0.ɵɵelementEnd();
72
71
  } if (rf & 2) {
73
72
  const ctx_r1 = i0.ɵɵnextContext();
@@ -75,8 +74,8 @@ function CalendarComponent_cal_day_view_7_Template(rf, ctx) { if (rf & 1) {
75
74
  } }
76
75
  function CalendarComponent_cal_timeline_view_8_Template(rf, ctx) { if (rf & 1) {
77
76
  const _r8 = i0.ɵɵgetCurrentView();
78
- i0.ɵɵelementStart(0, "cal-timeline-view", 20);
79
- i0.ɵɵlistener("eventClick", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("timelineCellClick", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_timelineCellClick_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleTimelineCellClick($event)); })("timelineDrop", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_timelineDrop_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleTimelineDrop($event)); })("dragOverDate", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_dragOverDate_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updatePreview($event)); })("hidePreviewEv", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); });
77
+ i0.ɵɵelementStart(0, "cal-timeline-view", 19);
78
+ i0.ɵɵlistener("eventClick", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("timelineCellClick", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_timelineCellClick_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleTimelineCellClick($event)); })("timelineDrop", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_timelineDrop_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleTimelineDrop($event)); })("timelineDropInfo", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_timelineDropInfo_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.voidDropTimeline($event.info, $event.date, $event.resourceId)); })("dragOverDate", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_dragOverDate_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updatePreview($event)); })("hidePreviewEv", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_timeline_view_8_Template_cal_timeline_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r8); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); });
80
79
  i0.ɵɵelementEnd();
81
80
  } if (rf & 2) {
82
81
  const ctx_r1 = i0.ɵɵnextContext();
@@ -84,8 +83,8 @@ function CalendarComponent_cal_timeline_view_8_Template(rf, ctx) { if (rf & 1) {
84
83
  } }
85
84
  function CalendarComponent_cal_resource_view_9_Template(rf, ctx) { if (rf & 1) {
86
85
  const _r9 = i0.ɵɵgetCurrentView();
87
- i0.ɵɵelementStart(0, "cal-resource-view", 21);
88
- i0.ɵɵlistener("eventClick", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("resourceCellClick", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_resourceCellClick_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleResourceCellClick($event)); })("resourceDrop", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_resourceDrop_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleResourceDrop($event)); })("dragOverDateTime", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_dragOverDateTime_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updateTimedPreview($event.date, $event.time)); })("hidePreviewEv", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); });
86
+ i0.ɵɵelementStart(0, "cal-resource-view", 20);
87
+ i0.ɵɵlistener("eventClick", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); })("clearSelection", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_clearSelection_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.clearSelection()); })("resourceCellClick", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_resourceCellClick_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleResourceCellClick($event)); })("resourceDrop", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_resourceDrop_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleResourceDrop($event)); })("resourceDropInfo", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_resourceDropInfo_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.voidDropResource($event.info, $event.date, $event.time, $event.resourceId)); })("dragOverDateTime", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_dragOverDateTime_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.updateTimedPreview($event.date, $event.time)); })("hidePreviewEv", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_hidePreviewEv_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.hidePreview()); })("dragEnd", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_dragEnd_0_listener() { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.endDrag()); })("dragStartEv", function CalendarComponent_cal_resource_view_9_Template_cal_resource_view_dragStartEv_0_listener($event) { i0.ɵɵrestoreView(_r9); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.startDrag($event)); });
89
88
  i0.ɵɵelementEnd();
90
89
  } if (rf & 2) {
91
90
  const ctx_r1 = i0.ɵɵnextContext();
@@ -93,7 +92,7 @@ function CalendarComponent_cal_resource_view_9_Template(rf, ctx) { if (rf & 1) {
93
92
  } }
94
93
  function CalendarComponent_cal_agenda_view_10_Template(rf, ctx) { if (rf & 1) {
95
94
  const _r10 = i0.ɵɵgetCurrentView();
96
- i0.ɵɵelementStart(0, "cal-agenda-view", 22);
95
+ i0.ɵɵelementStart(0, "cal-agenda-view", 21);
97
96
  i0.ɵɵlistener("eventClick", function CalendarComponent_cal_agenda_view_10_Template_cal_agenda_view_eventClick_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEventClick($event)); })("selectEvent", function CalendarComponent_cal_agenda_view_10_Template_cal_agenda_view_selectEvent_0_listener($event) { i0.ɵɵrestoreView(_r10); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.selectEvent($event.eventId, $event.instanceDate)); });
98
97
  i0.ɵɵelementEnd();
99
98
  } if (rf & 2) {
@@ -105,7 +104,7 @@ function CalendarComponent_ng_container_11_ng_container_1_Template(rf, ctx) { if
105
104
  } }
106
105
  function CalendarComponent_ng_container_11_Template(rf, ctx) { if (rf & 1) {
107
106
  i0.ɵɵelementContainerStart(0);
108
- i0.ɵɵtemplate(1, CalendarComponent_ng_container_11_ng_container_1_Template, 1, 0, "ng-container", 23);
107
+ i0.ɵɵtemplate(1, CalendarComponent_ng_container_11_ng_container_1_Template, 1, 0, "ng-container", 22);
109
108
  i0.ɵɵelementContainerEnd();
110
109
  } if (rf & 2) {
111
110
  const cv_r11 = ctx.ngIf;
@@ -115,8 +114,8 @@ function CalendarComponent_ng_container_11_Template(rf, ctx) { if (rf & 1) {
115
114
  } }
116
115
  function CalendarComponent_cal_event_dialog_12_Template(rf, ctx) { if (rf & 1) {
117
116
  const _r12 = i0.ɵɵgetCurrentView();
118
- i0.ɵɵelementStart(0, "cal-event-dialog", 24);
119
- i0.ɵɵlistener("setDraft", function CalendarComponent_cal_event_dialog_12_Template_cal_event_dialog_setDraft_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.setDraft($event)); })("save", function CalendarComponent_cal_event_dialog_12_Template_cal_event_dialog_save_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.saveDialogFromInput()); })("deleteEvent", function CalendarComponent_cal_event_dialog_12_Template_cal_event_dialog_deleteEvent_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.deleteDialog($event)); })("close", function CalendarComponent_cal_event_dialog_12_Template_cal_event_dialog_close_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.closeDialog()); });
117
+ i0.ɵɵelementStart(0, "cal-event-dialog", 23);
118
+ i0.ɵɵlistener("setDraft", function CalendarComponent_cal_event_dialog_12_Template_cal_event_dialog_setDraft_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.setDraft($event)); })("save", function CalendarComponent_cal_event_dialog_12_Template_cal_event_dialog_save_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.saveDialogFromInput()); })("deleteEvent", function CalendarComponent_cal_event_dialog_12_Template_cal_event_dialog_deleteEvent_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.voidDeleteDialog($event)); })("editSeries", function CalendarComponent_cal_event_dialog_12_Template_cal_event_dialog_editSeries_0_listener($event) { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.handleEditSeries($event)); })("close", function CalendarComponent_cal_event_dialog_12_Template_cal_event_dialog_close_0_listener() { i0.ɵɵrestoreView(_r12); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.ctrl.closeDialog()); });
120
119
  i0.ɵɵelementEnd();
121
120
  } if (rf & 2) {
122
121
  const ctx_r1 = i0.ɵɵnextContext();
@@ -127,13 +126,23 @@ function CalendarComponent_ng_container_13_ng_container_1_Template(rf, ctx) { if
127
126
  } }
128
127
  function CalendarComponent_ng_container_13_Template(rf, ctx) { if (rf & 1) {
129
128
  i0.ɵɵelementContainerStart(0);
130
- i0.ɵɵtemplate(1, CalendarComponent_ng_container_13_ng_container_1_Template, 1, 0, "ng-container", 23);
129
+ i0.ɵɵtemplate(1, CalendarComponent_ng_container_13_ng_container_1_Template, 1, 0, "ng-container", 22);
131
130
  i0.ɵɵelementContainerEnd();
132
131
  } if (rf & 2) {
133
132
  const ctx_r1 = i0.ɵɵnextContext();
134
133
  i0.ɵɵadvance();
135
134
  i0.ɵɵproperty("ngComponentOutlet", ctx_r1.customDialogComponent)("ngComponentOutletInputs", ctx_r1.eventDialogInputs);
136
135
  } }
136
+ // bimetal-131 M2: stable empty — a literal `[]` in the getter would mint a fresh
137
+ // identity per CD pass and defeat OnPush in the history consumer.
138
+ const EMPTY_HISTORY = [];
139
+ /**
140
+ * Root calendar component: renders header, filters, the active view, and the
141
+ * event dialog, wiring them all to the calendar controller.
142
+ * Dual API: creates + owns a controller from `store`/`config`/`rules` (STANDALONE)
143
+ * unless a `controller` Input is supplied, in which case it only subscribes to it
144
+ * (BOUND — the host owns lifecycle and reconfiguration).
145
+ */
137
146
  export class CalendarComponent {
138
147
  eventRenderService;
139
148
  zone;
@@ -151,6 +160,9 @@ export class CalendarComponent {
151
160
  dir;
152
161
  showCategoryFilter = false;
153
162
  showResourceFilter = false;
163
+ /** Show the undo/redo button pair in the header (default true). UI-only — the
164
+ * controller's undo()/redo() and the keyboard shortcuts stay active when hidden. */
165
+ showUndoRedo = true;
154
166
  customViews;
155
167
  eventDialog = { kind: 'builtin' };
156
168
  onEventClick;
@@ -158,9 +170,15 @@ export class CalendarComponent {
158
170
  /** OBSERVE hook: fires when the SELECTED EVENT changes (state, including clears)
159
171
  * — a SEPARATE concern from the `none`-mode delegation callbacks. */
160
172
  onSelectionChange;
161
- /** Controller error channel: domain rejections surface as toasts; any other
162
- * error (e.g. ConcurrencyError) is passed here instead of rejecting. */
173
+ /** Controller error channel (ticket-32): EVERY dispatch rejection a domain rule
174
+ * violation, a ConcurrencyError, a storage failure or a bug — is passed here instead
175
+ * of rejecting. No error becomes a toast inside the calendar; presentation is the app's. */
163
176
  onError;
177
+ /** OBSERVE hook: fires when history (undo/redo availability) changes — see
178
+ * {@link CalendarHistoryChange}. The app decides whether to surface a toast. */
179
+ onHistoryChange;
180
+ /** OBSERVE hook: fires with the non-blocking rule warnings for the last mutation. */
181
+ onWarning;
164
182
  /** Template projected after the default content zone of every event. */
165
183
  eventBadgesTpl;
166
184
  /** Template replacing the default content zone of every event. */
@@ -171,6 +189,20 @@ export class CalendarComponent {
171
189
  eventStyle;
172
190
  /** Per-event title override. Return undefined to keep event.title. */
173
191
  eventTitle;
192
+ /** Per-event interaction policy (ticket-19): a PURE function of the event returning
193
+ * which interactions it allows (`draggable`/`resizable`/`editable`/`deletable`, or
194
+ * `locked` for all-off). The controller enforces it AND exposes it so the views drop
195
+ * the matching affordance. Read at controller creation — pass a stable function. */
196
+ eventInteraction;
197
+ /** bimetal-147: macht aus der Audit-Id `event.metadata.userId` den in der
198
+ * eingebauten Historie angezeigten Text. Ohne den Hook zeigt die Historie die
199
+ * Id roh — sie erfindet nie einen Namen. Nur auf dem STANDALONE-Pfad ein Input;
200
+ * wer den Controller selbst besitzt, setzt ihn dort als Option. Wie
201
+ * `eventInteraction` bei der Controller-Erzeugung gelesen — eine STABILE
202
+ * Funktion übergeben; ein späterer `@Input()`-Wechsel wird NICHT nachgezogen
203
+ * (kein `ngOnChanges`-Pfad), auch wenn ein Input sonst Reaktivität erwarten
204
+ * lässt. */
205
+ resolveActor;
174
206
  /** STANDALONE only — the bound path leaves the owned controller untouched. */
175
207
  binding;
176
208
  bound = false;
@@ -183,6 +215,7 @@ export class CalendarComponent {
183
215
  get snapshot() { return this.snapshotSig(); }
184
216
  getYear = getYear;
185
217
  getMonth = getMonth;
218
+ monthIndex = monthIndex;
186
219
  /** v0.29 Tastatur: root-scoped keydown → controller (Ctrl/Cmd+Z undo, Escape clears).
187
220
  * Bound via the `.bm-cal` root's `(keydown)` in the template — NOT a window listener
188
221
  * (no document-level routing). Public so the template can call it. */
@@ -200,19 +233,55 @@ export class CalendarComponent {
200
233
  * child's `[setViewport]` reference doesn't churn. */
201
234
  setViewport = (scrollTop, viewportHeight) => this.ctrl.setViewport(scrollTop, viewportHeight);
202
235
  /** Builtin dialog save: the controller assembles + mints + validates + saves. */
203
- saveDialogFromInput() { void this.ctrl.saveDialogFromInput(); }
236
+ saveDialogFromInput() { this.ctrl.voidSaveDialogFromInput(); }
204
237
  // ── Snapshot-derived convenience accessors (template + tests) ──
205
238
  get mergedConfig() { return this.snapshot.config; }
206
239
  // Angular's strict template binder rejects readonly arrays into the views'
207
240
  // mutable @Inputs, so spread into fresh mutable arrays at the binding edge.
208
- get viewConfigList() { return [...this.snapshot.viewConfigList]; }
209
- get filteredEvents() { return [...this.snapshot.events]; }
241
+ //
242
+ // CACHED PER SNAPSHOT, not per call. A getter runs on EVERY change-detection
243
+ // pass, and Zone.js runs change detection after every DOM event — so a bare
244
+ // `[...]` handed the views a NEW array identity on every mousedown/keydown/
245
+ // dragstart. That fired the views' ngOnChanges, rebuilt their layout wrappers,
246
+ // and the un-trackBy'd *ngFor re-created every event bar mid-gesture. Chromium
247
+ // cancels a native HTML5 drag whose source node is destroyed in the dragstart
248
+ // task: month/week/day event-bar drag was therefore DEAD on Angular only —
249
+ // React never re-renders here, because `startDrag` is deliberately transient
250
+ // (no snapshot change). Same array while the snapshot is the same ⇒ no input
251
+ // change ⇒ the dragged node survives its own dragstart.
252
+ eventsCopy = null;
253
+ get filteredEvents() {
254
+ const src = this.snapshot.events;
255
+ if (this.eventsCopy?.src !== src)
256
+ this.eventsCopy = { src, copy: [...src] };
257
+ return this.eventsCopy.copy;
258
+ }
259
+ viewConfigCopy = null;
260
+ get viewConfigList() {
261
+ const src = this.snapshot.viewConfigList;
262
+ if (this.viewConfigCopy?.src !== src)
263
+ this.viewConfigCopy = { src, copy: [...src] };
264
+ return this.viewConfigCopy.copy;
265
+ }
210
266
  get visibleResources() { return this.snapshot.visibleResources; }
211
267
  get selectedEventId() { return this.snapshot.selectedEvent?.eventId ?? null; }
212
268
  get selectedInstanceDate() { return this.snapshot.selectedEvent?.instanceDate; }
269
+ // CACHED PER (SNAPSHOT, EVENT) — bimetal-131 M2. As a bare getter this ran
270
+ // ctrl.getHistory() on EVERY change-detection pass while any dialog was open:
271
+ // a full-stream filter + structuredClone per keystroke, growing linearly with
272
+ // stream length, and the fresh identities rebuilt the history timeline DOM
273
+ // each time. History can only change when the store notifies (= new snapshot),
274
+ // so the snapshot identity is the complete invalidation key.
275
+ historyCache = null;
213
276
  get dialogHistory() {
214
277
  const ev = this.snapshot.dialog?.event;
215
- return ev ? this.ctrl.getHistory(ev.id) : [];
278
+ if (!ev)
279
+ return EMPTY_HISTORY;
280
+ const c = this.historyCache;
281
+ if (!c || c.snap !== this.snapshot || c.eventId !== ev.id) {
282
+ this.historyCache = { snap: this.snapshot, eventId: ev.id, value: this.ctrl.getHistoryEntries(ev.id) };
283
+ }
284
+ return this.historyCache.value;
216
285
  }
217
286
  syncEventRenderService() {
218
287
  if (!this.eventRenderService)
@@ -223,6 +292,9 @@ export class CalendarComponent {
223
292
  this.eventRenderService.eventClassName = this.eventClassName;
224
293
  this.eventRenderService.eventStyle = this.eventStyle;
225
294
  this.eventRenderService.eventTitle = this.eventTitle;
295
+ // ticket-19: the controller's memoized policy resolver — the leaves' affordance
296
+ // then reads the SAME source the controller enforces on.
297
+ this.eventRenderService.getEventInteraction = this.ctrl.getEventInteraction;
226
298
  }
227
299
  ngOnInit() {
228
300
  // Dual-API (composition contract, F1): a passed `controller` selects the BOUND
@@ -244,18 +316,28 @@ export class CalendarComponent {
244
316
  this.snapshotSig = sig;
245
317
  }
246
318
  else {
247
- this.binding = createCalendarControllerBinding({
319
+ // bimetal-181: roh standen hier `eventInteraction` und `resolveActor` — zwei
320
+ // FUNKTIONEN, die der Getter jetzt bei jedem Aufruf neu von `this` liest.
321
+ // R1-Korrektur: `eventDialogKind` gehörte NICHT in diese Aufzählung. Es ist ein
322
+ // String, also ein Nicht-Funktions-Feld — `liveOptions` friert es am Aufbau ein,
323
+ // genau wie vorher. Geändert wird es über `ctrl.setEventDialogKind` (unten in
324
+ // `ngOnChanges`), in allen drei Stacks; der Getter heilt daran nichts.
325
+ this.binding = createCalendarControllerBinding(() => ({
248
326
  store: this.store,
249
327
  config: this.config,
250
328
  rules: this.rules,
251
329
  customViews: this.customViews,
330
+ eventInteraction: this.eventInteraction,
331
+ resolveActor: this.resolveActor,
252
332
  eventDialogKind: this.eventDialog.kind,
253
333
  onEventClickExternal: (id, rect, inst) => this.onEventClick?.(id, rect, inst),
254
334
  onNewEventRequestedExternal: (date, rect, rid) => this.onNewEventRequested?.(date, rect, rid),
255
335
  // OBSERVE: fires on selection state change (separate from `none` delegation).
256
336
  onSelectionChange: (sel) => this.onSelectionChange?.(sel),
257
- onError: (err) => this.onError?.(err),
258
- }, this.zone);
337
+ onError: (err) => (this.onError ?? reportUnroutedCalendarError)(err),
338
+ onHistoryChange: (change) => this.onHistoryChange?.(change),
339
+ onWarning: (warnings) => this.onWarning?.(warnings),
340
+ }), this.zone);
259
341
  this.ctrlRef = this.binding.ctrl;
260
342
  this.snapshotSig = this.binding.snapshot;
261
343
  // Mirror the current view onto the render service after every update so
@@ -297,8 +379,19 @@ export class CalendarComponent {
297
379
  getCustomView(id) {
298
380
  return this.customViews?.find(v => v.id === id);
299
381
  }
382
+ // CACHED PER SNAPSHOT — bimetal-131 M3. Bound via *ngComponentOutlet's
383
+ // `inputs:`, and ngComponentOutlet diffs the inputs OBJECT by reference: a
384
+ // bare getter handed it a fresh object with fresh callback closures on every
385
+ // CD pass, so the consumer's custom view took a setInput/ngOnChanges storm on
386
+ // every DOM event. If that view has draggable content in an un-trackBy'd
387
+ // ngFor, this reproduces mcp-129 AT THE CONSUMER — with the framework as the
388
+ // cause. Every value below derives from the snapshot; the callbacks close
389
+ // only over `this.ctrl` (stable) — snapshot identity is the complete key.
390
+ customViewInputsCache = null;
300
391
  get customViewInputs() {
301
- return {
392
+ if (this.customViewInputsCache?.snap === this.snapshot)
393
+ return this.customViewInputsCache.value;
394
+ const value = {
302
395
  currentDate: this.snapshot.currentDate,
303
396
  events: this.snapshot.events,
304
397
  config: this.mergedConfig,
@@ -309,31 +402,47 @@ export class CalendarComponent {
309
402
  onSelectEvent: (eventId, instanceDate) => this.ctrl.selectEvent(eventId, instanceDate),
310
403
  onClearSelection: () => this.ctrl.clearSelection(),
311
404
  };
405
+ this.customViewInputsCache = { snap: this.snapshot, value };
406
+ return value;
312
407
  }
313
408
  /** Component class for the custom dialog (template binding helper). */
314
409
  get customDialogComponent() {
315
410
  return this.eventDialog.kind === 'custom' ? this.eventDialog.component : null;
316
411
  }
317
412
  /** Inputs passed to the custom dialog via *ngComponentOutlet. */
413
+ // CACHED PER SNAPSHOT — bimetal-131 M3, same class as customViewInputs above.
414
+ eventDialogInputsCache = null;
318
415
  get eventDialogInputs() {
319
416
  const dialog = this.snapshot.dialog;
320
417
  if (!dialog)
321
418
  return undefined;
322
- return {
419
+ if (this.eventDialogInputsCache?.snap === this.snapshot)
420
+ return this.eventDialogInputsCache.value;
421
+ const value = {
323
422
  event: dialog.event,
324
423
  defaultDate: dialog.defaultDate,
325
424
  anchorRect: dialog.anchorRect,
326
425
  defaultResourceId: dialog.defaultResourceId,
327
426
  config: this.mergedConfig,
328
427
  onClose: () => this.ctrl.closeDialog(),
329
- onSave: (ev) => { void this.ctrl.saveDialog(ev); },
330
- onDelete: (id) => { void this.ctrl.deleteDialog(id); },
428
+ onSave: (ev) => { this.ctrl.voidSaveDialog(ev); },
429
+ onDelete: (id) => { this.ctrl.voidDeleteDialog(id); },
331
430
  };
431
+ this.eventDialogInputsCache = { snap: this.snapshot, value };
432
+ return value;
332
433
  }
333
434
  // ── DOM-event → controller-intent bindings ──────────────────────
334
435
  handleEventClick(ev) {
335
436
  this.ctrl.openEdit(ev.eventId, ev.rect, ev.instanceDate);
336
437
  }
438
+ /** mcp-116: re-open the dialog on the series master behind the shown occurrence.
439
+ * The anchor stays the one the dialog already sits on — the user is not moving. */
440
+ handleEditSeries(eventId) {
441
+ const anchorRect = this.snapshot.dialog?.anchorRect;
442
+ if (!anchorRect)
443
+ return;
444
+ this.ctrl.openEditSeries(eventId, anchorRect);
445
+ }
337
446
  handleDayCellClick(ev) {
338
447
  this.ctrl.openCreate(ev.date, ev.rect);
339
448
  }
@@ -346,39 +455,37 @@ export class CalendarComponent {
346
455
  handleDropEvent(ev) {
347
456
  const info = parseDragInfo(ev.event.dataTransfer);
348
457
  if (info)
349
- void this.ctrl.dropAllDay(info, ev.date);
458
+ this.ctrl.voidDropAllDay(info, ev.date);
350
459
  }
351
460
  handleDropTimedEvent(ev) {
352
461
  const info = parseDragInfo(ev.event.dataTransfer);
353
462
  if (info)
354
- void this.ctrl.dropTimed(info, ev.date, ev.time);
463
+ this.ctrl.voidDropTimed(info, ev.date, ev.time);
355
464
  }
356
465
  handleResourceDrop(ev) {
357
466
  const info = parseDragInfo(ev.event.dataTransfer);
358
467
  if (info)
359
- void this.ctrl.dropResource(info, ev.date, ev.time, ev.resourceId);
468
+ this.ctrl.voidDropResource(info, ev.date, ev.time, ev.resourceId);
360
469
  }
361
470
  handleTimelineDrop(ev) {
362
471
  const info = parseDragInfo(ev.event.dataTransfer);
363
472
  if (info)
364
- void this.ctrl.dropTimeline(info, ev.date, ev.resourceId);
473
+ this.ctrl.voidDropTimeline(info, ev.date, ev.resourceId);
365
474
  }
366
475
  static ɵfac = function CalendarComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CalendarComponent)(i0.ɵɵdirectiveInject(i1.EventRenderService, 8), i0.ɵɵdirectiveInject(i0.NgZone)); };
367
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CalendarComponent, selectors: [["cal-calendar"]], inputs: { controller: "controller", store: "store", rules: "rules", config: "config", darkMode: "darkMode", dir: "dir", showCategoryFilter: "showCategoryFilter", showResourceFilter: "showResourceFilter", customViews: "customViews", eventDialog: "eventDialog", onEventClick: "onEventClick", onNewEventRequested: "onNewEventRequested", onSelectionChange: "onSelectionChange", onError: "onError", eventBadgesTpl: "eventBadgesTpl", eventContentTpl: "eventContentTpl", eventClassName: "eventClassName", eventStyle: "eventStyle", eventTitle: "eventTitle" }, features: [i0.ɵɵProvidersFeature([EventRenderService]), i0.ɵɵNgOnChangesFeature], decls: 15, vars: 20, consts: [[1, "bm-cal", 3, "keydown"], [3, "prev", "next", "today", "viewChange", "title", "currentView", "viewConfigs", "locale"], [3, "categories", "hiddenCategories", "toggle", 4, "ngIf"], [3, "resources", "hiddenResources", "toggle", 4, "ngIf"], [3, "year", "events", "config", "monthClick", "dayCellClick", 4, "ngIf"], [3, "year", "month", "events", "config", "previewEvent", "expandedMonthDay", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropEvent", "dragOverDate", "hidePreviewEv", "dragEnd", "dragStartEv", "expandMonthCell", "collapseMonthCell", 4, "ngIf"], [3, "currentDate", "events", "config", "previewEvent", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropEvent", "dropTimedEvent", "dragOverDate", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", 4, "ngIf"], [3, "currentDate", "events", "config", "previewEvent", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropTimedEvent", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", 4, "ngIf"], [3, "currentDate", "days", "events", "visibleResources", "config", "previewEvent", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "timelineCellClick", "timelineDrop", "dragOverDate", "hidePreviewEv", "dragEnd", "dragStartEv", 4, "ngIf"], [3, "currentDate", "events", "visibleResources", "config", "previewEvent", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "resourceCellClick", "resourceDrop", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", 4, "ngIf"], [3, "agenda", "config", "setViewport", "eventClick", "selectEvent", 4, "ngIf"], [4, "ngIf"], [3, "dialog", "config", "history", "setDraft", "save", "deleteEvent", "close", 4, "ngIf"], [3, "undoAction", "dismiss", "lastAction", "locale"], [3, "toggle", "categories", "hiddenCategories"], [3, "toggle", "resources", "hiddenResources"], [3, "monthClick", "dayCellClick", "year", "events", "config"], [3, "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropEvent", "dragOverDate", "hidePreviewEv", "dragEnd", "dragStartEv", "expandMonthCell", "collapseMonthCell", "year", "month", "events", "config", "previewEvent", "expandedMonthDay", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropEvent", "dropTimedEvent", "dragOverDate", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", "currentDate", "events", "config", "previewEvent", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropTimedEvent", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", "currentDate", "events", "config", "previewEvent", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "clearSelection", "timelineCellClick", "timelineDrop", "dragOverDate", "hidePreviewEv", "dragEnd", "dragStartEv", "currentDate", "days", "events", "visibleResources", "config", "previewEvent", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "clearSelection", "resourceCellClick", "resourceDrop", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", "currentDate", "events", "visibleResources", "config", "previewEvent", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "agenda", "config", "setViewport"], [4, "ngComponentOutlet", "ngComponentOutletInputs"], [3, "setDraft", "save", "deleteEvent", "close", "dialog", "config", "history"]], template: function CalendarComponent_Template(rf, ctx) { if (rf & 1) {
476
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CalendarComponent, selectors: [["cal-calendar"]], inputs: { controller: "controller", store: "store", rules: "rules", config: "config", darkMode: "darkMode", dir: "dir", showCategoryFilter: "showCategoryFilter", showResourceFilter: "showResourceFilter", showUndoRedo: "showUndoRedo", customViews: "customViews", eventDialog: "eventDialog", onEventClick: "onEventClick", onNewEventRequested: "onNewEventRequested", onSelectionChange: "onSelectionChange", onError: "onError", onHistoryChange: "onHistoryChange", onWarning: "onWarning", eventBadgesTpl: "eventBadgesTpl", eventContentTpl: "eventContentTpl", eventClassName: "eventClassName", eventStyle: "eventStyle", eventTitle: "eventTitle", eventInteraction: "eventInteraction", resolveActor: "resolveActor" }, features: [i0.ɵɵProvidersFeature([EventRenderService]), i0.ɵɵNgOnChangesFeature], decls: 14, vars: 22, consts: [[1, "bm-cal", 3, "keydown"], [3, "prev", "next", "today", "viewChange", "undo", "redo", "title", "currentView", "viewConfigs", "locale", "showUndoRedo", "canUndo", "canRedo"], [3, "categories", "hiddenCategories", "toggle", 4, "ngIf"], [3, "resources", "hiddenResources", "toggle", 4, "ngIf"], [3, "year", "events", "config", "monthClick", "dayCellClick", 4, "ngIf"], [3, "year", "month", "events", "config", "previewEvent", "expandedMonthDay", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropEvent", "dropDayInfo", "dragOverDate", "hidePreviewEv", "dragEnd", "dragStartEv", "expandMonthCell", "collapseMonthCell", 4, "ngIf"], [3, "currentDate", "events", "config", "previewEvent", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropEvent", "dropTimedEvent", "dropTimedInfo", "dropDayInfo", "dragOverDate", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", 4, "ngIf"], [3, "currentDate", "events", "config", "previewEvent", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropTimedEvent", "dropTimedInfo", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", 4, "ngIf"], [3, "currentDate", "days", "events", "visibleResources", "config", "previewEvent", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "timelineCellClick", "timelineDrop", "timelineDropInfo", "dragOverDate", "hidePreviewEv", "dragEnd", "dragStartEv", 4, "ngIf"], [3, "currentDate", "events", "visibleResources", "config", "previewEvent", "selectedEventId", "selectedInstanceDate", "eventClick", "selectEvent", "clearSelection", "resourceCellClick", "resourceDrop", "resourceDropInfo", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", 4, "ngIf"], [3, "agenda", "config", "setViewport", "eventClick", "selectEvent", 4, "ngIf"], [4, "ngIf"], [3, "dialog", "config", "history", "setDraft", "save", "deleteEvent", "editSeries", "close", 4, "ngIf"], [3, "toggle", "categories", "hiddenCategories"], [3, "toggle", "resources", "hiddenResources"], [3, "monthClick", "dayCellClick", "year", "events", "config"], [3, "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropEvent", "dropDayInfo", "dragOverDate", "hidePreviewEv", "dragEnd", "dragStartEv", "expandMonthCell", "collapseMonthCell", "year", "month", "events", "config", "previewEvent", "expandedMonthDay", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropEvent", "dropTimedEvent", "dropTimedInfo", "dropDayInfo", "dragOverDate", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", "currentDate", "events", "config", "previewEvent", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "clearSelection", "dayCellClick", "dropTimedEvent", "dropTimedInfo", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", "currentDate", "events", "config", "previewEvent", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "clearSelection", "timelineCellClick", "timelineDrop", "timelineDropInfo", "dragOverDate", "hidePreviewEv", "dragEnd", "dragStartEv", "currentDate", "days", "events", "visibleResources", "config", "previewEvent", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "clearSelection", "resourceCellClick", "resourceDrop", "resourceDropInfo", "dragOverDateTime", "hidePreviewEv", "dragEnd", "dragStartEv", "currentDate", "events", "visibleResources", "config", "previewEvent", "selectedEventId", "selectedInstanceDate"], [3, "eventClick", "selectEvent", "agenda", "config", "setViewport"], [4, "ngComponentOutlet", "ngComponentOutletInputs"], [3, "setDraft", "save", "deleteEvent", "editSeries", "close", "dialog", "config", "history"]], template: function CalendarComponent_Template(rf, ctx) { if (rf & 1) {
368
477
  i0.ɵɵelementStart(0, "div", 0);
369
478
  i0.ɵɵlistener("keydown", function CalendarComponent_Template_div_keydown_0_listener($event) { return ctx.keyHandler($event); });
370
479
  i0.ɵɵelementStart(1, "cal-header", 1);
371
- i0.ɵɵlistener("prev", function CalendarComponent_Template_cal_header_prev_1_listener() { return ctx.ctrl.prev(); })("next", function CalendarComponent_Template_cal_header_next_1_listener() { return ctx.ctrl.next(); })("today", function CalendarComponent_Template_cal_header_today_1_listener() { return ctx.ctrl.today(); })("viewChange", function CalendarComponent_Template_cal_header_viewChange_1_listener($event) { return ctx.handleViewChange($event); });
480
+ i0.ɵɵlistener("prev", function CalendarComponent_Template_cal_header_prev_1_listener() { return ctx.ctrl.prev(); })("next", function CalendarComponent_Template_cal_header_next_1_listener() { return ctx.ctrl.next(); })("today", function CalendarComponent_Template_cal_header_today_1_listener() { return ctx.ctrl.today(); })("viewChange", function CalendarComponent_Template_cal_header_viewChange_1_listener($event) { return ctx.handleViewChange($event); })("undo", function CalendarComponent_Template_cal_header_undo_1_listener() { return ctx.ctrl.voidUndo(); })("redo", function CalendarComponent_Template_cal_header_redo_1_listener() { return ctx.ctrl.voidRedo(); });
372
481
  i0.ɵɵelementEnd();
373
482
  i0.ɵɵtemplate(2, CalendarComponent_cal_category_filter_2_Template, 1, 2, "cal-category-filter", 2)(3, CalendarComponent_cal_resource_filter_3_Template, 1, 2, "cal-resource-filter", 3)(4, CalendarComponent_cal_year_view_4_Template, 1, 3, "cal-year-view", 4)(5, CalendarComponent_cal_month_view_5_Template, 1, 8, "cal-month-view", 5)(6, CalendarComponent_cal_week_view_6_Template, 1, 6, "cal-week-view", 6)(7, CalendarComponent_cal_day_view_7_Template, 1, 6, "cal-day-view", 7)(8, CalendarComponent_cal_timeline_view_8_Template, 1, 8, "cal-timeline-view", 8)(9, CalendarComponent_cal_resource_view_9_Template, 1, 7, "cal-resource-view", 9)(10, CalendarComponent_cal_agenda_view_10_Template, 1, 3, "cal-agenda-view", 10)(11, CalendarComponent_ng_container_11_Template, 2, 2, "ng-container", 11)(12, CalendarComponent_cal_event_dialog_12_Template, 1, 3, "cal-event-dialog", 12)(13, CalendarComponent_ng_container_13_Template, 2, 2, "ng-container", 11);
374
- i0.ɵɵelementStart(14, "cal-undo-toast", 13);
375
- i0.ɵɵlistener("undoAction", function CalendarComponent_Template_cal_undo_toast_undoAction_14_listener($event) { return ctx.ctrl.undo($event); })("dismiss", function CalendarComponent_Template_cal_undo_toast_dismiss_14_listener() { return ctx.ctrl.dismissUndo(); });
376
- i0.ɵɵelementEnd()();
483
+ i0.ɵɵelementEnd();
377
484
  } if (rf & 2) {
378
- let tmp_1_0;
379
- i0.ɵɵattribute("data-theme", ctx.darkMode ? "dark" : null)("dir", (tmp_1_0 = ctx.dir) !== null && tmp_1_0 !== undefined ? tmp_1_0 : null);
485
+ let tmp_2_0;
486
+ i0.ɵɵattribute("data-theme", ctx.darkMode ? "dark" : null)("data-readonly", ctx.snapshot.config.readOnly ? "true" : null)("dir", (tmp_2_0 = ctx.dir) !== null && tmp_2_0 !== undefined ? tmp_2_0 : null);
380
487
  i0.ɵɵadvance();
381
- i0.ɵɵproperty("title", ctx.snapshot.title)("currentView", ctx.snapshot.currentView)("viewConfigs", ctx.viewConfigList)("locale", ctx.mergedConfig.locale);
488
+ i0.ɵɵproperty("title", ctx.snapshot.title)("currentView", ctx.snapshot.currentView)("viewConfigs", ctx.viewConfigList)("locale", ctx.mergedConfig.locale)("showUndoRedo", ctx.showUndoRedo && !ctx.snapshot.config.readOnly)("canUndo", ctx.snapshot.canUndo)("canRedo", ctx.snapshot.canRedo);
382
489
  i0.ɵɵadvance();
383
490
  i0.ɵɵproperty("ngIf", ctx.showCategoryFilter && ctx.mergedConfig.categories.length > 0);
384
491
  i0.ɵɵadvance();
@@ -403,10 +510,8 @@ export class CalendarComponent {
403
510
  i0.ɵɵproperty("ngIf", ctx.snapshot.dialog && ctx.eventDialog.kind === "builtin");
404
511
  i0.ɵɵadvance();
405
512
  i0.ɵɵproperty("ngIf", ctx.snapshot.dialog && ctx.eventDialog.kind === "custom");
406
- i0.ɵɵadvance();
407
- i0.ɵɵproperty("lastAction", ctx.snapshot.lastAction)("locale", ctx.mergedConfig.locale);
408
513
  } }, dependencies: [CommonModule, i2.NgComponentOutlet, i2.NgIf, CalendarHeaderComponent, CategoryFilterComponent, ResourceFilterComponent,
409
- EventDialogComponent, UndoToastComponent,
514
+ EventDialogComponent,
410
515
  MonthViewComponent, WeekViewComponent, DayViewComponent, AgendaViewComponent,
411
516
  YearViewComponent, ResourceViewComponent, TimelineViewComponent], encapsulation: 2 });
412
517
  }
@@ -418,21 +523,26 @@ export class CalendarComponent {
418
523
  imports: [
419
524
  CommonModule,
420
525
  CalendarHeaderComponent, CategoryFilterComponent, ResourceFilterComponent,
421
- EventDialogComponent, UndoToastComponent,
526
+ EventDialogComponent,
422
527
  MonthViewComponent, WeekViewComponent, DayViewComponent, AgendaViewComponent,
423
528
  YearViewComponent, ResourceViewComponent, TimelineViewComponent,
424
529
  ],
425
530
  template: `
426
- <div class="bm-cal" [attr.data-theme]="darkMode ? 'dark' : null" [attr.dir]="dir ?? null" (keydown)="keyHandler($event)">
531
+ <div class="bm-cal" [attr.data-theme]="darkMode ? 'dark' : null" [attr.data-readonly]="snapshot.config.readOnly ? 'true' : null" [attr.dir]="dir ?? null" (keydown)="keyHandler($event)">
427
532
  <cal-header
428
533
  [title]="snapshot.title"
429
534
  [currentView]="snapshot.currentView"
430
535
  [viewConfigs]="viewConfigList"
431
536
  [locale]="mergedConfig.locale"
537
+ [showUndoRedo]="showUndoRedo && !snapshot.config.readOnly"
538
+ [canUndo]="snapshot.canUndo"
539
+ [canRedo]="snapshot.canRedo"
432
540
  (prev)="ctrl.prev()"
433
541
  (next)="ctrl.next()"
434
542
  (today)="ctrl.today()"
435
- (viewChange)="handleViewChange($event)">
543
+ (viewChange)="handleViewChange($event)"
544
+ (undo)="ctrl.voidUndo()"
545
+ (redo)="ctrl.voidRedo()">
436
546
  </cal-header>
437
547
 
438
548
  <cal-category-filter *ngIf="showCategoryFilter && mergedConfig.categories.length > 0"
@@ -454,7 +564,7 @@ export class CalendarComponent {
454
564
  </cal-year-view>
455
565
 
456
566
  <cal-month-view *ngIf="snapshot.currentView === 'month'"
457
- [year]="getYear(snapshot.currentDate)" [month]="getMonth(snapshot.currentDate)"
567
+ [year]="getYear(snapshot.currentDate)" [month]="monthIndex(getMonth(snapshot.currentDate))"
458
568
  [events]="filteredEvents" [config]="mergedConfig" [previewEvent]="snapshot.previewEvent"
459
569
  [expandedMonthDay]="snapshot.expandedMonthDay"
460
570
  [selectedEventId]="selectedEventId" [selectedInstanceDate]="selectedInstanceDate"
@@ -463,6 +573,7 @@ export class CalendarComponent {
463
573
  (clearSelection)="ctrl.clearSelection()"
464
574
  (dayCellClick)="handleDayCellClick($event)"
465
575
  (dropEvent)="handleDropEvent($event)"
576
+ (dropDayInfo)="ctrl.voidDropAllDay($event.info, $event.date)"
466
577
  (dragOverDate)="ctrl.updatePreview($event)"
467
578
  (hidePreviewEv)="ctrl.hidePreview()"
468
579
  (dragEnd)="ctrl.endDrag()"
@@ -480,6 +591,8 @@ export class CalendarComponent {
480
591
  (dayCellClick)="handleDayCellClick($event)"
481
592
  (dropEvent)="handleDropEvent($event)"
482
593
  (dropTimedEvent)="handleDropTimedEvent($event)"
594
+ (dropTimedInfo)="ctrl.voidDropTimed($event.info, $event.date, $event.time)"
595
+ (dropDayInfo)="ctrl.voidDropAllDay($event.info, $event.date)"
483
596
  (dragOverDate)="ctrl.updatePreview($event)"
484
597
  (dragOverDateTime)="ctrl.updateTimedPreview($event.date, $event.time)"
485
598
  (hidePreviewEv)="ctrl.hidePreview()"
@@ -495,6 +608,7 @@ export class CalendarComponent {
495
608
  (clearSelection)="ctrl.clearSelection()"
496
609
  (dayCellClick)="handleDayCellClick($event)"
497
610
  (dropTimedEvent)="handleDropTimedEvent($event)"
611
+ (dropTimedInfo)="ctrl.voidDropTimed($event.info, $event.date, $event.time)"
498
612
  (dragOverDateTime)="ctrl.updateTimedPreview($event.date, $event.time)"
499
613
  (hidePreviewEv)="ctrl.hidePreview()"
500
614
  (dragEnd)="ctrl.endDrag()"
@@ -514,6 +628,7 @@ export class CalendarComponent {
514
628
  (clearSelection)="ctrl.clearSelection()"
515
629
  (timelineCellClick)="handleTimelineCellClick($event)"
516
630
  (timelineDrop)="handleTimelineDrop($event)"
631
+ (timelineDropInfo)="ctrl.voidDropTimeline($event.info, $event.date, $event.resourceId)"
517
632
  (dragOverDate)="ctrl.updatePreview($event)"
518
633
  (hidePreviewEv)="ctrl.hidePreview()"
519
634
  (dragEnd)="ctrl.endDrag()"
@@ -530,6 +645,7 @@ export class CalendarComponent {
530
645
  (clearSelection)="ctrl.clearSelection()"
531
646
  (resourceCellClick)="handleResourceCellClick($event)"
532
647
  (resourceDrop)="handleResourceDrop($event)"
648
+ (resourceDropInfo)="ctrl.voidDropResource($event.info, $event.date, $event.time, $event.resourceId)"
533
649
  (dragOverDateTime)="ctrl.updateTimedPreview($event.date, $event.time)"
534
650
  (hidePreviewEv)="ctrl.hidePreview()"
535
651
  (dragEnd)="ctrl.endDrag()"
@@ -553,20 +669,14 @@ export class CalendarComponent {
553
669
  [history]="dialogHistory"
554
670
  (setDraft)="ctrl.setDraft($event)"
555
671
  (save)="saveDialogFromInput()"
556
- (deleteEvent)="ctrl.deleteDialog($event)"
672
+ (deleteEvent)="ctrl.voidDeleteDialog($event)"
673
+ (editSeries)="handleEditSeries($event)"
557
674
  (close)="ctrl.closeDialog()">
558
675
  </cal-event-dialog>
559
676
 
560
677
  <ng-container *ngIf="snapshot.dialog && eventDialog.kind === 'custom'">
561
678
  <ng-container *ngComponentOutlet="customDialogComponent; inputs: eventDialogInputs"></ng-container>
562
679
  </ng-container>
563
-
564
- <cal-undo-toast
565
- [lastAction]="snapshot.lastAction"
566
- [locale]="mergedConfig.locale"
567
- (undoAction)="ctrl.undo($event)"
568
- (dismiss)="ctrl.dismissUndo()">
569
- </cal-undo-toast>
570
680
  </div>
571
681
  `,
572
682
  providers: [EventRenderService],
@@ -589,6 +699,8 @@ export class CalendarComponent {
589
699
  type: Input
590
700
  }], showResourceFilter: [{
591
701
  type: Input
702
+ }], showUndoRedo: [{
703
+ type: Input
592
704
  }], customViews: [{
593
705
  type: Input
594
706
  }], eventDialog: [{
@@ -601,6 +713,10 @@ export class CalendarComponent {
601
713
  type: Input
602
714
  }], onError: [{
603
715
  type: Input
716
+ }], onHistoryChange: [{
717
+ type: Input
718
+ }], onWarning: [{
719
+ type: Input
604
720
  }], eventBadgesTpl: [{
605
721
  type: Input
606
722
  }], eventContentTpl: [{
@@ -611,6 +727,10 @@ export class CalendarComponent {
611
727
  type: Input
612
728
  }], eventTitle: [{
613
729
  type: Input
730
+ }], eventInteraction: [{
731
+ type: Input
732
+ }], resolveActor: [{
733
+ type: Input
614
734
  }] }); })();
615
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CalendarComponent, { className: "CalendarComponent", filePath: "components/calendar.ts", lineNumber: 192 }); })();
735
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CalendarComponent, { className: "CalendarComponent", filePath: "components/calendar.ts", lineNumber: 207 }); })();
616
736
  //# sourceMappingURL=Calendar.js.map