@bimetal/calendar-angular-components 0.29.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 (112) hide show
  1. package/LICENSE +129 -0
  2. package/README.md +56 -0
  3. package/dist/binding/config.d.ts +6 -0
  4. package/dist/binding/config.d.ts.map +1 -0
  5. package/dist/binding/config.js +6 -0
  6. package/dist/binding/config.js.map +1 -0
  7. package/dist/binding/controller.d.ts +22 -0
  8. package/dist/binding/controller.d.ts.map +1 -0
  9. package/dist/binding/controller.js +17 -0
  10. package/dist/binding/controller.js.map +1 -0
  11. package/dist/binding/index.d.ts +24 -0
  12. package/dist/binding/index.d.ts.map +1 -0
  13. package/dist/binding/index.js +26 -0
  14. package/dist/binding/index.js.map +1 -0
  15. package/dist/binding/services/event-render.service.d.ts +40 -0
  16. package/dist/binding/services/event-render.service.d.ts.map +1 -0
  17. package/dist/binding/services/event-render.service.js +58 -0
  18. package/dist/binding/services/event-render.service.js.map +1 -0
  19. package/dist/binding/types.d.ts +128 -0
  20. package/dist/binding/types.d.ts.map +1 -0
  21. package/dist/binding/types.js +12 -0
  22. package/dist/binding/types.js.map +1 -0
  23. package/dist/binding/utils/date-strings.d.ts +16 -0
  24. package/dist/binding/utils/date-strings.d.ts.map +1 -0
  25. package/dist/binding/utils/date-strings.js +30 -0
  26. package/dist/binding/utils/date-strings.js.map +1 -0
  27. package/dist/binding/utils/gridUtils.d.ts +6 -0
  28. package/dist/binding/utils/gridUtils.d.ts.map +1 -0
  29. package/dist/binding/utils/gridUtils.js +13 -0
  30. package/dist/binding/utils/gridUtils.js.map +1 -0
  31. package/dist/binding/view-configs.d.ts +6 -0
  32. package/dist/binding/view-configs.d.ts.map +1 -0
  33. package/dist/binding/view-configs.js +6 -0
  34. package/dist/binding/view-configs.js.map +1 -0
  35. package/dist/components/Calendar.d.ts +110 -0
  36. package/dist/components/Calendar.d.ts.map +1 -0
  37. package/dist/components/Calendar.js +554 -0
  38. package/dist/components/Calendar.js.map +1 -0
  39. package/dist/components/CalendarHeader.d.ts +17 -0
  40. package/dist/components/CalendarHeader.d.ts.map +1 -0
  41. package/dist/components/CalendarHeader.js +105 -0
  42. package/dist/components/CalendarHeader.js.map +1 -0
  43. package/dist/components/CategoryFilter.d.ts +11 -0
  44. package/dist/components/CategoryFilter.d.ts.map +1 -0
  45. package/dist/components/CategoryFilter.js +66 -0
  46. package/dist/components/CategoryFilter.js.map +1 -0
  47. package/dist/components/EventBar.d.ts +56 -0
  48. package/dist/components/EventBar.d.ts.map +1 -0
  49. package/dist/components/EventBar.js +328 -0
  50. package/dist/components/EventBar.js.map +1 -0
  51. package/dist/components/EventDialog.d.ts +52 -0
  52. package/dist/components/EventDialog.d.ts.map +1 -0
  53. package/dist/components/EventDialog.js +557 -0
  54. package/dist/components/EventDialog.js.map +1 -0
  55. package/dist/components/EventHistory.d.ts +17 -0
  56. package/dist/components/EventHistory.d.ts.map +1 -0
  57. package/dist/components/EventHistory.js +166 -0
  58. package/dist/components/EventHistory.js.map +1 -0
  59. package/dist/components/ResourceFilter.d.ts +12 -0
  60. package/dist/components/ResourceFilter.d.ts.map +1 -0
  61. package/dist/components/ResourceFilter.js +67 -0
  62. package/dist/components/ResourceFilter.js.map +1 -0
  63. package/dist/components/UndoToast.d.ts +20 -0
  64. package/dist/components/UndoToast.d.ts.map +1 -0
  65. package/dist/components/UndoToast.js +90 -0
  66. package/dist/components/UndoToast.js.map +1 -0
  67. package/dist/index.d.ts +20 -0
  68. package/dist/index.d.ts.map +1 -0
  69. package/dist/index.js +25 -0
  70. package/dist/index.js.map +1 -0
  71. package/dist/styles/index.css +1 -0
  72. package/dist/views/agenda/AgendaView.d.ts +54 -0
  73. package/dist/views/agenda/AgendaView.d.ts.map +1 -0
  74. package/dist/views/agenda/AgendaView.js +309 -0
  75. package/dist/views/agenda/AgendaView.js.map +1 -0
  76. package/dist/views/day/DayView.d.ts +85 -0
  77. package/dist/views/day/DayView.d.ts.map +1 -0
  78. package/dist/views/day/DayView.js +422 -0
  79. package/dist/views/day/DayView.js.map +1 -0
  80. package/dist/views/month/MonthView.d.ts +51 -0
  81. package/dist/views/month/MonthView.d.ts.map +1 -0
  82. package/dist/views/month/MonthView.js +184 -0
  83. package/dist/views/month/MonthView.js.map +1 -0
  84. package/dist/views/month/WeekRow.d.ts +89 -0
  85. package/dist/views/month/WeekRow.d.ts.map +1 -0
  86. package/dist/views/month/WeekRow.js +548 -0
  87. package/dist/views/month/WeekRow.js.map +1 -0
  88. package/dist/views/resource/ResourceView.d.ts +85 -0
  89. package/dist/views/resource/ResourceView.d.ts.map +1 -0
  90. package/dist/views/resource/ResourceView.js +388 -0
  91. package/dist/views/resource/ResourceView.js.map +1 -0
  92. package/dist/views/timeline/TimelineView.d.ts +69 -0
  93. package/dist/views/timeline/TimelineView.d.ts.map +1 -0
  94. package/dist/views/timeline/TimelineView.js +314 -0
  95. package/dist/views/timeline/TimelineView.js.map +1 -0
  96. package/dist/views/week/AllDayRow.d.ts +38 -0
  97. package/dist/views/week/AllDayRow.d.ts.map +1 -0
  98. package/dist/views/week/AllDayRow.js +149 -0
  99. package/dist/views/week/AllDayRow.js.map +1 -0
  100. package/dist/views/week/TimeEvent.d.ts +77 -0
  101. package/dist/views/week/TimeEvent.d.ts.map +1 -0
  102. package/dist/views/week/TimeEvent.js +279 -0
  103. package/dist/views/week/TimeEvent.js.map +1 -0
  104. package/dist/views/week/WeekView.d.ts +79 -0
  105. package/dist/views/week/WeekView.d.ts.map +1 -0
  106. package/dist/views/week/WeekView.js +370 -0
  107. package/dist/views/week/WeekView.js.map +1 -0
  108. package/dist/views/year/YearView.d.ts +37 -0
  109. package/dist/views/year/YearView.d.ts.map +1 -0
  110. package/dist/views/year/YearView.js +162 -0
  111. package/dist/views/year/YearView.js.map +1 -0
  112. package/package.json +69 -0
@@ -0,0 +1,370 @@
1
+ import { Component, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { weekGrid, calendarWeekNumber, isSameDay, now, segmentAllDay, segmentTimed, layoutAllDay, layoutTimed, getHours, getMinutes, getDayOfMonth, } from '@bimetal/calendar-core';
4
+ import { toDateStr, parseDateTimeStr } from '../../binding/index.js';
5
+ import { DEFAULT_HOUR_HEIGHT, DEFAULT_TIME_LABEL_WIDTH_WEEK, DEFAULT_SCROLL_HOUR, createClickIntent, timeGridHit } from '@bimetal/calendar-headless';
6
+ import { AllDayRowComponent } from './AllDayRow.js';
7
+ import { TimeEventComponent } from './TimeEvent.js';
8
+ import * as i0 from "@angular/core";
9
+ import * as i1 from "@angular/common";
10
+ const _c0 = ["timeGridEl"];
11
+ const _c1 = ["gridInnerEl"];
12
+ function WeekViewComponent_div_4_Template(rf, ctx) { if (rf & 1) {
13
+ i0.ɵɵelementStart(0, "div")(1, "span", 13);
14
+ i0.ɵɵtext(2);
15
+ i0.ɵɵelementEnd();
16
+ i0.ɵɵelementStart(3, "span");
17
+ i0.ɵɵtext(4);
18
+ i0.ɵɵelementEnd()();
19
+ } if (rf & 2) {
20
+ const date_r2 = ctx.$implicit;
21
+ const i_r3 = ctx.index;
22
+ const ctx_r3 = i0.ɵɵnextContext();
23
+ i0.ɵɵclassMap("week-view__day-header" + (ctx_r3.isTodayAt(i_r3) ? " week-view__day-header--today" : ""));
24
+ i0.ɵɵadvance(2);
25
+ i0.ɵɵtextInterpolate(ctx_r3.config.locale.dayNamesShort[i_r3]);
26
+ i0.ɵɵadvance();
27
+ i0.ɵɵclassMap("week-view__day-number" + (ctx_r3.isTodayAt(i_r3) ? " week-view__day-number--today" : ""));
28
+ i0.ɵɵadvance();
29
+ i0.ɵɵtextInterpolate1(" ", ctx_r3.getDayOfMonth(date_r2), " ");
30
+ } }
31
+ function WeekViewComponent_div_10_Template(rf, ctx) { if (rf & 1) {
32
+ i0.ɵɵelementStart(0, "div")(1, "div", 14);
33
+ i0.ɵɵtext(2);
34
+ i0.ɵɵpipe(3, "number");
35
+ i0.ɵɵelementEnd()();
36
+ } if (rf & 2) {
37
+ const h_r5 = ctx.$implicit;
38
+ const ctx_r3 = i0.ɵɵnextContext();
39
+ i0.ɵɵclassMap("week-view__hour-row" + (ctx_r3.isOffHour(h_r5) ? " hour-slot--off" : ""));
40
+ i0.ɵɵstyleProp("top", h_r5 * ctx_r3.hourHeight, "px")("height", ctx_r3.hourHeight, "px");
41
+ i0.ɵɵadvance(2);
42
+ i0.ɵɵtextInterpolate(h_r5 > 0 ? i0.ɵɵpipeBind2(3, 7, h_r5, "2.0-0") + ":00" : "");
43
+ } }
44
+ function WeekViewComponent_div_11_Template(rf, ctx) { if (rf & 1) {
45
+ i0.ɵɵelement(0, "div", 15);
46
+ } if (rf & 2) {
47
+ const col_r6 = ctx.index;
48
+ const ctx_r3 = i0.ɵɵnextContext();
49
+ i0.ɵɵstyleProp("left", ctx_r3.dayColLeft(col_r6))("width", ctx_r3.dayColWidth);
50
+ } }
51
+ function WeekViewComponent_ng_container_12_Template(rf, ctx) { if (rf & 1) {
52
+ const _r7 = i0.ɵɵgetCurrentView();
53
+ i0.ɵɵelementContainerStart(0);
54
+ i0.ɵɵelementStart(1, "cal-time-event", 16);
55
+ i0.ɵɵlistener("eventClick", function WeekViewComponent_ng_container_12_Template_cal_time_event_eventClick_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.eventClick.emit($event)); })("selectEvent", function WeekViewComponent_ng_container_12_Template_cal_time_event_selectEvent_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.selectEvent.emit($event)); })("dragStart", function WeekViewComponent_ng_container_12_Template_cal_time_event_dragStart_1_listener($event) { i0.ɵɵrestoreView(_r7); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.dragStartEv.emit($event)); })("dragEnd", function WeekViewComponent_ng_container_12_Template_cal_time_event_dragEnd_1_listener() { i0.ɵɵrestoreView(_r7); const ctx_r3 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r3.dragEnd.emit()); });
56
+ i0.ɵɵelementEnd();
57
+ i0.ɵɵelementContainerEnd();
58
+ } if (rf & 2) {
59
+ const entry_r8 = ctx.$implicit;
60
+ const ctx_r3 = i0.ɵɵnextContext();
61
+ i0.ɵɵadvance();
62
+ i0.ɵɵproperty("event", entry_r8.event)("layout", entry_r8.layout)("dayDate", ctx_r3.weekDates[entry_r8.layout.dayCol])("hourHeight", ctx_r3.hourHeight)("timeLabelWidth", ctx_r3.timeLabelWidth)("ghost", (ctx_r3.previewEvent == null ? null : ctx_r3.previewEvent.id) === entry_r8.event.id)("clickThresholdMs", ctx_r3.config.clickThresholdMs)("locale", ctx_r3.config.locale)("snapMinutes", ctx_r3.config.core.granularity.day.minutes)("selectedEventId", ctx_r3.selectedEventId)("selectedInstanceDate", ctx_r3.selectedInstanceDate);
63
+ } }
64
+ function WeekViewComponent_div_13_Template(rf, ctx) { if (rf & 1) {
65
+ i0.ɵɵelementStart(0, "div", 17);
66
+ i0.ɵɵelement(1, "div", 18);
67
+ i0.ɵɵelementEnd();
68
+ } if (rf & 2) {
69
+ const ctx_r3 = i0.ɵɵnextContext();
70
+ i0.ɵɵstyleProp("top", ctx_r3.nowHours * ctx_r3.hourHeight, "px")("left", ctx_r3.dayColLeft(ctx_r3.nowCol))("width", ctx_r3.dayColWidth);
71
+ } }
72
+ const HOURS = Array.from({ length: 24 }, (_, i) => i);
73
+ export class WeekViewComponent {
74
+ currentDate;
75
+ events = [];
76
+ config;
77
+ // B-CAL-1: the controller already rebuilt the dragged event's geometry.
78
+ previewEvent = null;
79
+ selectedEventId = null;
80
+ selectedInstanceDate = undefined;
81
+ eventClick = new EventEmitter();
82
+ selectEvent = new EventEmitter();
83
+ clearSelection = new EventEmitter();
84
+ dayCellClick = new EventEmitter();
85
+ dropEvent = new EventEmitter();
86
+ dropTimedEvent = new EventEmitter();
87
+ dragOverDate = new EventEmitter();
88
+ dragOverDateTime = new EventEmitter();
89
+ /** Drop-Zone wurde verlassen (dragleave) — Preview visuell ausräumen. */
90
+ hidePreviewEv = new EventEmitter();
91
+ /** Native `dragend` der Source — Drag-Session vollständig beendet. */
92
+ dragEnd = new EventEmitter();
93
+ dragStartEv = new EventEmitter();
94
+ timeGridEl;
95
+ gridInnerEl;
96
+ weekDates = [];
97
+ weekNumber = 0;
98
+ allDayItems = [];
99
+ timedEntries = [];
100
+ hours = HOURS;
101
+ hourHeight = DEFAULT_HOUR_HEIGHT;
102
+ timeLabelWidth = DEFAULT_TIME_LABEL_WIDTH_WEEK;
103
+ nowCol = -1;
104
+ nowHours = 0;
105
+ click = createClickIntent();
106
+ getDayOfMonth = getDayOfMonth;
107
+ currentNow;
108
+ timeSnapMinutes = 15;
109
+ get dayColWidth() { return `calc((100% - ${DEFAULT_TIME_LABEL_WIDTH_WEEK}px) / 7)`; }
110
+ dayColLeft(col) { return `calc(${DEFAULT_TIME_LABEL_WIDTH_WEEK}px + ${col} * (100% - ${DEFAULT_TIME_LABEL_WIDTH_WEEK}px) / 7)`; }
111
+ isTodayAt(i) { return isSameDay(this.weekDates[i], this.currentNow); }
112
+ isOffHour(h) {
113
+ const wh = this.config.core.workingHours;
114
+ return wh ? (h < wh.start || h >= wh.end) : false;
115
+ }
116
+ ngOnChanges() {
117
+ this.currentNow = now(this.config.core.timezone, this.config.core.clock);
118
+ this.timeSnapMinutes = this.config.core.granularity.week.minutes;
119
+ this.weekDates = weekGrid(this.currentDate, this.config.core);
120
+ this.weekNumber = calendarWeekNumber(this.weekDates[0]);
121
+ // B-CAL-1: swap in the controller-rebuilt event by id (no parsing in the view).
122
+ const pe = this.previewEvent;
123
+ const displayEvents = pe
124
+ ? this.events.map(ev => ev.id === pe.id ? { ...ev, timeRange: pe.timeRange } : ev)
125
+ : this.events;
126
+ const allDay = displayEvents.filter(ev => ev.allDay);
127
+ const timed = displayEvents.filter(ev => !ev.allDay);
128
+ const segments = segmentAllDay(allDay, this.weekDates);
129
+ this.allDayItems = layoutAllDay(segments, this.weekDates);
130
+ // Lane-Layout pro Tag durch den Core (Pilot-Direktive 2026-06-21):
131
+ // segmentTimed clippt auf den Tag, layoutTimed assignt Lanes via
132
+ // Collision-Detection + Greedy-Belegung.
133
+ this.timedEntries = [];
134
+ for (let col = 0; col < 7; col++) {
135
+ const segments = segmentTimed(timed, this.weekDates[col]);
136
+ const items = layoutTimed(segments);
137
+ for (const item of items) {
138
+ this.timedEntries.push({
139
+ event: item.segment.event,
140
+ layout: {
141
+ dayCol: col,
142
+ dayCount: 7,
143
+ lane: item.column,
144
+ laneCount: item.totalColumns,
145
+ startOffset: item.startOffset,
146
+ endOffset: item.endOffset,
147
+ },
148
+ });
149
+ }
150
+ }
151
+ this.nowCol = this.weekDates.findIndex(d => isSameDay(d, this.currentNow));
152
+ this.nowHours = getHours(this.currentNow) + getMinutes(this.currentNow) / 60;
153
+ }
154
+ ngAfterViewInit() {
155
+ if (this.timeGridEl) {
156
+ this.timeGridEl.nativeElement.scrollTop = DEFAULT_SCROLL_HOUR * DEFAULT_HOUR_HEIGHT;
157
+ }
158
+ }
159
+ handleGridDragOver(e) {
160
+ e.preventDefault();
161
+ e.dataTransfer.dropEffect = 'move';
162
+ if (!this.gridInnerEl)
163
+ return;
164
+ const rect = this.gridInnerEl.nativeElement.getBoundingClientRect();
165
+ const hit = timeGridHit({ x: e.clientX, y: e.clientY }, rect, { labelWidth: DEFAULT_TIME_LABEL_WIDTH_WEEK, hourHeight: DEFAULT_HOUR_HEIGHT, snapMinutes: this.timeSnapMinutes });
166
+ this.dragOverDateTime.emit({ date: this.weekDates[hit.col], time: hit.time });
167
+ }
168
+ handleGridDrop(e) {
169
+ e.preventDefault();
170
+ if (!this.gridInnerEl)
171
+ return;
172
+ const rect = this.gridInnerEl.nativeElement.getBoundingClientRect();
173
+ const hit = timeGridHit({ x: e.clientX, y: e.clientY }, rect, { labelWidth: DEFAULT_TIME_LABEL_WIDTH_WEEK, hourHeight: DEFAULT_HOUR_HEIGHT, snapMinutes: this.timeSnapMinutes });
174
+ this.dropTimedEvent.emit({ event: e, date: this.weekDates[hit.col], time: hit.time });
175
+ }
176
+ handleGridDragLeave(e) {
177
+ const el = e.currentTarget;
178
+ const rect = el.getBoundingClientRect();
179
+ if (e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom) {
180
+ this.hidePreviewEv.emit();
181
+ }
182
+ }
183
+ handleGridClick(e) {
184
+ if (!this.click.accept(this.config.clickThresholdMs))
185
+ return;
186
+ if (e.target.closest('.time-event'))
187
+ return;
188
+ // Single click on empty grid deselects; create-dialog moves to dblclick.
189
+ if (this.selectedEventId !== null)
190
+ this.clearSelection.emit();
191
+ }
192
+ handleGridDoubleClick(e) {
193
+ if (!this.click.accept(this.config.clickThresholdMs))
194
+ return;
195
+ if (!this.gridInnerEl)
196
+ return;
197
+ if (e.target.closest('.time-event'))
198
+ return;
199
+ const gridRect = this.gridInnerEl.nativeElement.getBoundingClientRect();
200
+ const hit = timeGridHit({ x: e.clientX, y: e.clientY }, gridRect, { labelWidth: DEFAULT_TIME_LABEL_WIDTH_WEEK, hourHeight: DEFAULT_HOUR_HEIGHT, snapMinutes: this.timeSnapMinutes });
201
+ const clickedDate = this.weekDates[hit.col];
202
+ // Compose the clicked date + snapped time via the shared parser (no split).
203
+ const clickedDt = parseDateTimeStr(toDateStr(clickedDate), hit.time, clickedDate.timezone);
204
+ const rect = e.currentTarget.getBoundingClientRect();
205
+ this.dayCellClick.emit({ date: clickedDt, rect });
206
+ }
207
+ static ɵfac = function WeekViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || WeekViewComponent)(); };
208
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: WeekViewComponent, selectors: [["cal-week-view"]], viewQuery: function WeekViewComponent_Query(rf, ctx) { if (rf & 1) {
209
+ i0.ɵɵviewQuery(_c0, 5);
210
+ i0.ɵɵviewQuery(_c1, 5);
211
+ } if (rf & 2) {
212
+ let _t;
213
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.timeGridEl = _t.first);
214
+ i0.ɵɵqueryRefresh(_t = i0.ɵɵloadQuery()) && (ctx.gridInnerEl = _t.first);
215
+ } }, hostAttrs: [2, "display", "contents"], inputs: { currentDate: "currentDate", events: "events", config: "config", previewEvent: "previewEvent", selectedEventId: "selectedEventId", selectedInstanceDate: "selectedInstanceDate" }, outputs: { eventClick: "eventClick", selectEvent: "selectEvent", clearSelection: "clearSelection", dayCellClick: "dayCellClick", dropEvent: "dropEvent", dropTimedEvent: "dropTimedEvent", dragOverDate: "dragOverDate", dragOverDateTime: "dragOverDateTime", hidePreviewEv: "hidePreviewEv", dragEnd: "dragEnd", dragStartEv: "dragStartEv" }, features: [i0.ɵɵNgOnChangesFeature], decls: 14, vars: 15, consts: [["timeGridEl", ""], ["gridInnerEl", ""], [1, "week-view"], [1, "week-view__header"], [1, "week-view__corner"], [3, "class", 4, "ngFor", "ngForOf"], [3, "eventClick", "selectEvent", "dropEvent", "dragOver", "hidePreviewEv", "dragEnd", "dragStartEv", "weekDates", "items", "allDayLabel", "previewEvent", "selectedEventId", "selectedInstanceDate"], [1, "week-view__time-grid", 3, "dragover", "drop", "dragleave", "mousedown", "click", "dblclick"], [1, "week-view__time-grid-inner"], [3, "class", "top", "height", 4, "ngFor", "ngForOf"], ["class", "week-view__day-col", 3, "left", "width", 4, "ngFor", "ngForOf"], [4, "ngFor", "ngForOf"], ["class", "week-view__now-line", 3, "top", "left", "width", 4, "ngIf"], [1, "week-view__day-name"], [1, "week-view__hour-label"], [1, "week-view__day-col"], [3, "eventClick", "selectEvent", "dragStart", "dragEnd", "event", "layout", "dayDate", "hourHeight", "timeLabelWidth", "ghost", "clickThresholdMs", "locale", "snapMinutes", "selectedEventId", "selectedInstanceDate"], [1, "week-view__now-line"], [1, "week-view__now-dot"]], template: function WeekViewComponent_Template(rf, ctx) { if (rf & 1) {
216
+ const _r1 = i0.ɵɵgetCurrentView();
217
+ i0.ɵɵelementStart(0, "div", 2)(1, "div", 3)(2, "div", 4);
218
+ i0.ɵɵtext(3);
219
+ i0.ɵɵelementEnd();
220
+ i0.ɵɵtemplate(4, WeekViewComponent_div_4_Template, 5, 6, "div", 5);
221
+ i0.ɵɵelementEnd();
222
+ i0.ɵɵelementStart(5, "cal-allday-row", 6);
223
+ i0.ɵɵlistener("eventClick", function WeekViewComponent_Template_cal_allday_row_eventClick_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.eventClick.emit($event)); })("selectEvent", function WeekViewComponent_Template_cal_allday_row_selectEvent_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.selectEvent.emit($event)); })("dropEvent", function WeekViewComponent_Template_cal_allday_row_dropEvent_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.dropEvent.emit($event)); })("dragOver", function WeekViewComponent_Template_cal_allday_row_dragOver_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.dragOverDate.emit($event)); })("hidePreviewEv", function WeekViewComponent_Template_cal_allday_row_hidePreviewEv_5_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.hidePreviewEv.emit()); })("dragEnd", function WeekViewComponent_Template_cal_allday_row_dragEnd_5_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.dragEnd.emit()); })("dragStartEv", function WeekViewComponent_Template_cal_allday_row_dragStartEv_5_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.dragStartEv.emit($event)); });
224
+ i0.ɵɵelementEnd();
225
+ i0.ɵɵelementStart(6, "div", 7, 0);
226
+ i0.ɵɵlistener("dragover", function WeekViewComponent_Template_div_dragover_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridDragOver($event)); })("drop", function WeekViewComponent_Template_div_drop_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridDrop($event)); })("dragleave", function WeekViewComponent_Template_div_dragleave_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridDragLeave($event)); })("mousedown", function WeekViewComponent_Template_div_mousedown_6_listener() { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.click.markMouseDown()); })("click", function WeekViewComponent_Template_div_click_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridClick($event)); })("dblclick", function WeekViewComponent_Template_div_dblclick_6_listener($event) { i0.ɵɵrestoreView(_r1); return i0.ɵɵresetView(ctx.handleGridDoubleClick($event)); });
227
+ i0.ɵɵelementStart(8, "div", 8, 1);
228
+ i0.ɵɵtemplate(10, WeekViewComponent_div_10_Template, 4, 10, "div", 9)(11, WeekViewComponent_div_11_Template, 1, 4, "div", 10)(12, WeekViewComponent_ng_container_12_Template, 2, 11, "ng-container", 11)(13, WeekViewComponent_div_13_Template, 2, 6, "div", 12);
229
+ i0.ɵɵelementEnd()()();
230
+ } if (rf & 2) {
231
+ i0.ɵɵadvance(3);
232
+ i0.ɵɵtextInterpolate2("", ctx.config.locale.calendarWeek, " ", ctx.weekNumber, "");
233
+ i0.ɵɵadvance();
234
+ i0.ɵɵproperty("ngForOf", ctx.weekDates);
235
+ i0.ɵɵadvance();
236
+ i0.ɵɵproperty("weekDates", ctx.weekDates)("items", ctx.allDayItems)("allDayLabel", ctx.config.locale.allDayLabel)("previewEvent", ctx.previewEvent)("selectedEventId", ctx.selectedEventId)("selectedInstanceDate", ctx.selectedInstanceDate);
237
+ i0.ɵɵadvance(3);
238
+ i0.ɵɵstyleProp("height", 24 * ctx.hourHeight, "px");
239
+ i0.ɵɵadvance(2);
240
+ i0.ɵɵproperty("ngForOf", ctx.hours);
241
+ i0.ɵɵadvance();
242
+ i0.ɵɵproperty("ngForOf", ctx.weekDates);
243
+ i0.ɵɵadvance();
244
+ i0.ɵɵproperty("ngForOf", ctx.timedEntries);
245
+ i0.ɵɵadvance();
246
+ i0.ɵɵproperty("ngIf", ctx.nowCol >= 0);
247
+ } }, dependencies: [CommonModule, i1.NgForOf, i1.NgIf, i1.DecimalPipe, AllDayRowComponent, TimeEventComponent], encapsulation: 2 });
248
+ }
249
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(WeekViewComponent, [{
250
+ type: Component,
251
+ args: [{
252
+ selector: 'cal-week-view',
253
+ standalone: true,
254
+ host: { style: 'display: contents' },
255
+ imports: [CommonModule, AllDayRowComponent, TimeEventComponent],
256
+ template: `
257
+ <div class="week-view">
258
+ <div class="week-view__header">
259
+ <div class="week-view__corner">{{ config.locale.calendarWeek }} {{ weekNumber }}</div>
260
+ <div *ngFor="let date of weekDates; let i = index"
261
+ [class]="'week-view__day-header' + (isTodayAt(i) ? ' week-view__day-header--today' : '')">
262
+ <span class="week-view__day-name">{{ config.locale.dayNamesShort[i] }}</span>
263
+ <span [class]="'week-view__day-number' + (isTodayAt(i) ? ' week-view__day-number--today' : '')">
264
+ {{ getDayOfMonth(date) }}
265
+ </span>
266
+ </div>
267
+ </div>
268
+
269
+ <cal-allday-row
270
+ [weekDates]="weekDates" [items]="allDayItems"
271
+ [allDayLabel]="config.locale.allDayLabel"
272
+ [previewEvent]="previewEvent"
273
+ [selectedEventId]="selectedEventId"
274
+ [selectedInstanceDate]="selectedInstanceDate"
275
+ (eventClick)="eventClick.emit($event)"
276
+ (selectEvent)="selectEvent.emit($event)"
277
+ (dropEvent)="dropEvent.emit($event)"
278
+ (dragOver)="dragOverDate.emit($event)"
279
+ (hidePreviewEv)="hidePreviewEv.emit()"
280
+ (dragEnd)="dragEnd.emit()"
281
+ (dragStartEv)="dragStartEv.emit($event)">
282
+ </cal-allday-row>
283
+
284
+ <div #timeGridEl class="week-view__time-grid"
285
+ (dragover)="handleGridDragOver($event)"
286
+ (drop)="handleGridDrop($event)"
287
+ (dragleave)="handleGridDragLeave($event)"
288
+ (mousedown)="click.markMouseDown()"
289
+ (click)="handleGridClick($event)"
290
+ (dblclick)="handleGridDoubleClick($event)">
291
+ <div #gridInnerEl class="week-view__time-grid-inner" [style.height.px]="24 * hourHeight">
292
+ <div *ngFor="let h of hours"
293
+ [class]="'week-view__hour-row' + (isOffHour(h) ? ' hour-slot--off' : '')"
294
+ [style.top.px]="h * hourHeight" [style.height.px]="hourHeight">
295
+ <div class="week-view__hour-label">{{ h > 0 ? (h | number:'2.0-0') + ':00' : '' }}</div>
296
+ </div>
297
+
298
+ <div *ngFor="let date of weekDates; let col = index" class="week-view__day-col"
299
+ [style.left]="dayColLeft(col)" [style.width]="dayColWidth">
300
+ </div>
301
+
302
+ <ng-container *ngFor="let entry of timedEntries">
303
+ <cal-time-event
304
+ [event]="entry.event" [layout]="entry.layout"
305
+ [dayDate]="weekDates[entry.layout.dayCol]" [hourHeight]="hourHeight"
306
+ [timeLabelWidth]="timeLabelWidth" [ghost]="previewEvent?.id === entry.event.id"
307
+ [clickThresholdMs]="config.clickThresholdMs" [locale]="config.locale"
308
+ [snapMinutes]="config.core.granularity.day.minutes"
309
+ [selectedEventId]="selectedEventId"
310
+ [selectedInstanceDate]="selectedInstanceDate"
311
+ (eventClick)="eventClick.emit($event)"
312
+ (selectEvent)="selectEvent.emit($event)"
313
+ (dragStart)="dragStartEv.emit($event)"
314
+ (dragEnd)="dragEnd.emit()">
315
+ </cal-time-event>
316
+ </ng-container>
317
+
318
+ <div *ngIf="nowCol >= 0" class="week-view__now-line"
319
+ [style.top.px]="nowHours * hourHeight"
320
+ [style.left]="dayColLeft(nowCol)" [style.width]="dayColWidth">
321
+ <div class="week-view__now-dot"></div>
322
+ </div>
323
+ </div>
324
+ </div>
325
+ </div>
326
+ `,
327
+ }]
328
+ }], null, { currentDate: [{
329
+ type: Input
330
+ }], events: [{
331
+ type: Input
332
+ }], config: [{
333
+ type: Input
334
+ }], previewEvent: [{
335
+ type: Input
336
+ }], selectedEventId: [{
337
+ type: Input
338
+ }], selectedInstanceDate: [{
339
+ type: Input
340
+ }], eventClick: [{
341
+ type: Output
342
+ }], selectEvent: [{
343
+ type: Output
344
+ }], clearSelection: [{
345
+ type: Output
346
+ }], dayCellClick: [{
347
+ type: Output
348
+ }], dropEvent: [{
349
+ type: Output
350
+ }], dropTimedEvent: [{
351
+ type: Output
352
+ }], dragOverDate: [{
353
+ type: Output
354
+ }], dragOverDateTime: [{
355
+ type: Output
356
+ }], hidePreviewEv: [{
357
+ type: Output
358
+ }], dragEnd: [{
359
+ type: Output
360
+ }], dragStartEv: [{
361
+ type: Output
362
+ }], timeGridEl: [{
363
+ type: ViewChild,
364
+ args: ['timeGridEl']
365
+ }], gridInnerEl: [{
366
+ type: ViewChild,
367
+ args: ['gridInnerEl']
368
+ }] }); })();
369
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(WeekViewComponent, { className: "WeekViewComponent", filePath: "views/week/weekview.ts", lineNumber: 94 }); })();
370
+ //# sourceMappingURL=WeekView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WeekView.js","sourceRoot":"","sources":["../../../src/views/week/WeekView.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,EAA4B,SAAS,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AACxH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,OAAO,EACL,QAAQ,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG,EAC5C,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EACtD,QAAQ,EAAE,UAAU,EAAE,aAAa,GACpC,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,6BAA6B,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACrJ,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAwB,MAAM,gBAAgB,CAAC;;;;;;IAehE,AAFF,2BAC4F,eACxD;IAAA,YAAoC;IAAA,iBAAO;IAC7E,4BAAgG;IAC9F,YACF;IACF,AADE,iBAAO,EACH;;;;;IALJ,wGAAyF;IACvD,eAAoC;IAApC,8DAAoC;IAChE,cAAyF;IAAzF,wGAAyF;IAC7F,cACF;IADE,8DACF;;;IA8BE,AAHF,2BAEiE,cAC5B;IAAA,YAA+C;;IACpF,AADoF,iBAAM,EACpF;;;;IAHJ,wFAAyE;IACzC,AAAhC,qDAA+B,mCAA+B;IAC3B,eAA+C;IAA/C,iFAA+C;;;IAGpF,0BAEM;;;;IAD2B,AAA/B,iDAA8B,6BAA4B;;;;IAG5D,6BAAiD;IAC/C,0CAW6B;IAA3B,AADA,AADA,AADA,+MAAc,8BAAuB,KAAC,oMACvB,+BAAwB,KAAC,gMAC3B,+BAAwB,KAAC,sLAC3B,qBAAc,KAAC;IAC5B,iBAAiB;;;;;IAXf,cAAqB;IAMrB,AADA,AADA,AAD6C,AAA7C,AADkC,AAAlC,AAD2C,AAA3C,AADsB,AAAtB,sCAAqB,2BAAwB,qDACH,iCAA0B,yCACnC,8FAA8C,oDACnC,gCAAyB,2DAClB,2CAChB,qDACU;;;IAQjD,+BAEgE;IAC9D,0BAAsC;IACxC,iBAAM;;;IAF8B,AAAlC,AADA,gEAAsC,0CACL,6BAA4B;;AAvEzE,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AA+EtD,MAAM,OAAO,iBAAiB;IACnB,WAAW,CAAoB;IAC/B,MAAM,GAAoB,EAAE,CAAC;IAC7B,MAAM,CAAkB;IACjC,wEAAwE;IAC/D,YAAY,GAAyB,IAAI,CAAC;IAC1C,eAAe,GAAkB,IAAI,CAAC;IACtC,oBAAoB,GAAuB,SAAS,CAAC;IACpD,UAAU,GAAG,IAAI,YAAY,EAA6D,CAAC;IAC3F,WAAW,GAAG,IAAI,YAAY,EAA8C,CAAC;IAC7E,cAAc,GAAG,IAAI,YAAY,EAAQ,CAAC;IAC1C,YAAY,GAAG,IAAI,YAAY,EAA6C,CAAC;IAC7E,SAAS,GAAG,IAAI,YAAY,EAAgD,CAAC;IAC7E,cAAc,GAAG,IAAI,YAAY,EAA8D,CAAC;IAChG,YAAY,GAAG,IAAI,YAAY,EAAoB,CAAC;IACpD,gBAAgB,GAAG,IAAI,YAAY,EAA4C,CAAC;IAC1F,yEAAyE;IAC/D,aAAa,GAAG,IAAI,YAAY,EAAQ,CAAC;IACnD,sEAAsE;IAC5D,OAAO,GAAG,IAAI,YAAY,EAAQ,CAAC;IACnC,WAAW,GAAG,IAAI,YAAY,EAAO,CAAC;IAEvB,UAAU,CAA8B;IACvC,WAAW,CAA8B;IAEnE,SAAS,GAAuB,EAAE,CAAC;IACnC,UAAU,GAAG,CAAC,CAAC;IACf,WAAW,GAAiB,EAAE,CAAC;IAC/B,YAAY,GAAwD,EAAE,CAAC;IACvE,KAAK,GAAG,KAAK,CAAC;IACd,UAAU,GAAG,mBAAmB,CAAC;IACjC,cAAc,GAAG,6BAA6B,CAAC;IAC/C,MAAM,GAAG,CAAC,CAAC,CAAC;IACZ,QAAQ,GAAG,CAAC,CAAC;IACb,KAAK,GAAG,iBAAiB,EAAE,CAAC;IAC5B,aAAa,GAAG,aAAa,CAAC;IAEtB,UAAU,CAAoB;IAC9B,eAAe,GAAG,EAAE,CAAC;IAE7B,IAAI,WAAW,KAAK,OAAO,gBAAgB,6BAA6B,UAAU,CAAC,CAAC,CAAC;IACrF,UAAU,CAAC,GAAW,IAAI,OAAO,QAAQ,6BAA6B,QAAQ,GAAG,cAAc,6BAA6B,UAAU,CAAC,CAAC,CAAC;IAEzI,SAAS,CAAC,CAAS,IAAa,OAAO,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACvF,SAAS,CAAC,CAAS;QACjB,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;QACzC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACpD,CAAC;IAED,WAAW;QACT,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC;QACjE,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9D,IAAI,CAAC,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAExD,gFAAgF;QAChF,MAAM,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC;QAC7B,MAAM,aAAa,GAAG,EAAE;YACtB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClF,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC;QAEhB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QACrD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;QAErD,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;QAE1D,mEAAmE;QACnE,iEAAiE;QACjE,yCAAyC;QACzC,IAAI,CAAC,YAAY,GAAG,EAAE,CAAC;QACvB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,MAAM,KAAK,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;YACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;oBACrB,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK;oBACzB,MAAM,EAAE;wBACN,MAAM,EAAE,GAAG;wBACX,QAAQ,EAAE,CAAC;wBACX,IAAI,EAAE,IAAI,CAAC,MAAM;wBACjB,SAAS,EAAE,IAAI,CAAC,YAAY;wBAC5B,WAAW,EAAE,IAAI,CAAC,WAAW;wBAC7B,SAAS,EAAE,IAAI,CAAC,SAAS;qBAC1B;iBACF,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;IAC/E,CAAC;IAED,eAAe;QACb,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC,SAAS,GAAG,mBAAmB,GAAG,mBAAmB,CAAC;QACtF,CAAC;IACH,CAAC;IAED,kBAAkB,CAAC,CAAY;QAC7B,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,CAAC,CAAC,YAAa,CAAC,UAAU,GAAG,MAAM,CAAC;QACpC,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,6BAA6B,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QACjL,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,cAAc,CAAC,CAAY;QACzB,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACpE,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,6BAA6B,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QACjL,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACxF,CAAC;IAED,mBAAmB,CAAC,CAAY;QAC9B,MAAM,EAAE,GAAG,CAAC,CAAC,aAA4B,CAAC;QAC1C,MAAM,IAAI,GAAG,EAAE,CAAC,qBAAqB,EAAE,CAAC;QACxC,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YACvG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;IACH,CAAC;IAED,eAAe,CAAC,CAAa;QAC3B,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAAE,OAAO;QAC7D,IAAK,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,aAAa,CAAC;YAAE,OAAO;QAC7D,yEAAyE;QACzE,IAAI,IAAI,CAAC,eAAe,KAAK,IAAI;YAAE,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;IAChE,CAAC;IAED,qBAAqB,CAAC,CAAa;QACjC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;YAAE,OAAO;QAC7D,IAAI,CAAC,IAAI,CAAC,WAAW;YAAE,OAAO;QAC9B,IAAK,CAAC,CAAC,MAAsB,CAAC,OAAO,CAAC,aAAa,CAAC;YAAE,OAAO;QAC7D,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,qBAAqB,EAAE,CAAC;QACxE,MAAM,GAAG,GAAG,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,UAAU,EAAE,6BAA6B,EAAE,UAAU,EAAE,mBAAmB,EAAE,WAAW,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC;QACrL,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5C,4EAA4E;QAC5E,MAAM,SAAS,GAAG,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC3F,MAAM,IAAI,GAAI,CAAC,CAAC,aAA6B,CAAC,qBAAqB,EAAE,CAAC;QACtE,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,CAAC;2GA9IU,iBAAiB;6DAAjB,iBAAiB;;;;;;;;;YArEtB,AADF,AADF,8BAAuB,aACU,aACE;YAAA,YAAiD;YAAA,iBAAM;YACtF,kEAC4F;YAM9F,iBAAM;YAEN,yCAY2C;YAAzC,AADA,AADA,AADA,AADA,AADA,AADA,4JAAc,2BAAuB,KAAC,iJACvB,4BAAwB,KAAC,6IAC3B,0BAAsB,KAAC,2IACxB,6BAAyB,KAAC,+IACrB,wBAAoB,KAAC,mIAC3B,kBAAc,KAAC,iJACX,4BAAwB,KAAC;YAC1C,iBAAiB;YAEjB,iCAM6C;YAA3C,AADA,AADA,AADA,AADA,AADA,6IAAY,8BAA0B,KAAC,wHAC/B,0BAAsB,KAAC,kIAClB,+BAA2B,KAAC,4HAC5B,yBAAqB,KAAC,0HAC1B,2BAAuB,KAAC,gIACrB,iCAA6B,KAAC;YAC1C,iCAAyF;YA2BvF,AAhBA,AAJA,AANA,qEAEiE,wDAKJ,2EAGZ,wDAkBe;YAKtE,AADE,AADE,iBAAM,EACF,EACF;;YAlE6B,eAAiD;YAAjD,kFAAiD;YAC1D,cAAc;YAAd,uCAAc;YAUpC,cAAuB;YAIvB,AADA,AADA,AADA,AADwB,AAAxB,yCAAuB,0BAAsB,8CACJ,kCACZ,wCACM,kDACU;YAiBQ,eAAmC;YAAnC,mDAAmC;YACnE,eAAQ;YAAR,mCAAQ;YAML,cAAc;YAAd,uCAAc;YAIJ,cAAe;YAAf,0CAAe;YAgBzC,cAAiB;YAAjB,sCAAiB;4BA/DrB,YAAY,uCAAE,kBAAkB,EAAE,kBAAkB;;iFAyEnD,iBAAiB;cA7E7B,SAAS;eAAC;gBACT,QAAQ,EAAE,eAAe;gBACzB,UAAU,EAAE,IAAI;gBAChB,IAAI,EAAE,EAAE,KAAK,EAAE,mBAAmB,EAAE;gBACpC,OAAO,EAAE,CAAC,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,CAAC;gBAC/D,QAAQ,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsET;aACF;gBAEU,WAAW;kBAAnB,KAAK;YACG,MAAM;kBAAd,KAAK;YACG,MAAM;kBAAd,KAAK;YAEG,YAAY;kBAApB,KAAK;YACG,eAAe;kBAAvB,KAAK;YACG,oBAAoB;kBAA5B,KAAK;YACI,UAAU;kBAAnB,MAAM;YACG,WAAW;kBAApB,MAAM;YACG,cAAc;kBAAvB,MAAM;YACG,YAAY;kBAArB,MAAM;YACG,SAAS;kBAAlB,MAAM;YACG,cAAc;kBAAvB,MAAM;YACG,YAAY;kBAArB,MAAM;YACG,gBAAgB;kBAAzB,MAAM;YAEG,aAAa;kBAAtB,MAAM;YAEG,OAAO;kBAAhB,MAAM;YACG,WAAW;kBAApB,MAAM;YAEkB,UAAU;kBAAlC,SAAS;mBAAC,YAAY;YACG,WAAW;kBAApC,SAAS;mBAAC,aAAa;;kFAvBb,iBAAiB"}
@@ -0,0 +1,37 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import type { CalendarEvent, CalendarDateTime } from '@bimetal/calendar-core';
3
+ import { getDayOfMonth } from '@bimetal/calendar-core';
4
+ import type { CalendarConfig } from '../../binding/index.js';
5
+ import * as i0 from "@angular/core";
6
+ interface MonthCell {
7
+ month: number;
8
+ label: string;
9
+ weeks: CalendarDateTime[][];
10
+ }
11
+ export declare class YearViewComponent {
12
+ year: number;
13
+ events: CalendarEvent[];
14
+ config: CalendarConfig;
15
+ monthClick: EventEmitter<{
16
+ year: number;
17
+ month: number;
18
+ }>;
19
+ dayCellClick: EventEmitter<{
20
+ date: CalendarDateTime;
21
+ rect: DOMRect;
22
+ }>;
23
+ getDayOfMonth: typeof getDayOfMonth;
24
+ get dayNames(): string[];
25
+ get today(): CalendarDateTime;
26
+ get eventDays(): Set<number>;
27
+ get months(): MonthCell[];
28
+ dayClass(date: CalendarDateTime, month: number): string;
29
+ onDayClick(e: MouseEvent, date: CalendarDateTime): void;
30
+ trackMonth(_: number, mc: MonthCell): number;
31
+ trackWeek(idx: number): number;
32
+ trackDay(_: number, d: CalendarDateTime): number;
33
+ static ɵfac: i0.ɵɵFactoryDeclaration<YearViewComponent, never>;
34
+ static ɵcmp: i0.ɵɵComponentDeclaration<YearViewComponent, "cal-year-view", never, { "year": { "alias": "year"; "required": false; }; "events": { "alias": "events"; "required": false; }; "config": { "alias": "config"; "required": false; }; }, { "monthClick": "monthClick"; "dayCellClick": "dayCellClick"; }, never, never, true, never>;
35
+ }
36
+ export {};
37
+ //# sourceMappingURL=YearView.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YearView.d.ts","sourceRoot":"","sources":["../../../src/views/year/YearView.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,YAAY,EAA2B,MAAM,eAAe,CAAC;AAEhG,OAAO,KAAK,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EACgB,aAAa,EACnC,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;;AAE7D,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,gBAAgB,EAAE,EAAE,CAAC;CAC7B;AAED,qBA6Ba,iBAAiB;IACnB,IAAI,EAAG,MAAM,CAAC;IACd,MAAM,EAAE,aAAa,EAAE,CAAM;IAC7B,MAAM,EAAG,cAAc,CAAC;IACvB,UAAU;cAA4B,MAAM;eAAS,MAAM;OAAM;IACjE,YAAY;cAA4B,gBAAgB;cAAQ,OAAO;OAAM;IAEvF,aAAa,uBAAiB;IAE9B,IAAI,QAAQ,aAA+C;IAE3D,IAAI,KAAK,IAAI,gBAAgB,CAAmE;IAEhG,IAAI,SAAS,IAAI,GAAG,CAAC,MAAM,CAAC,CAW3B;IAED,IAAI,MAAM,IAAI,SAAS,EAAE,CASxB;IAED,QAAQ,CAAC,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAUvD,UAAU,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,EAAE,gBAAgB;IAKhD,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS;IACnC,SAAS,CAAC,GAAG,EAAE,MAAM;IACrB,QAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB;yCAtD5B,iBAAiB;2CAAjB,iBAAiB;CAuD7B"}
@@ -0,0 +1,162 @@
1
+ import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';
2
+ import { CommonModule } from '@angular/common';
3
+ import { monthGrid, getMonth, getDayOfMonth, isSameDay, startOfDay, addDays, now, } from '@bimetal/calendar-core';
4
+ import * as i0 from "@angular/core";
5
+ import * as i1 from "@angular/common";
6
+ function YearViewComponent_div_1_div_4_Template(rf, ctx) { if (rf & 1) {
7
+ i0.ɵɵelementStart(0, "div", 8);
8
+ i0.ɵɵtext(1);
9
+ i0.ɵɵelementEnd();
10
+ } if (rf & 2) {
11
+ const n_r4 = ctx.$implicit;
12
+ i0.ɵɵadvance();
13
+ i0.ɵɵtextInterpolate(n_r4[0]);
14
+ } }
15
+ function YearViewComponent_div_1_ng_container_6_button_1_Template(rf, ctx) { if (rf & 1) {
16
+ const _r5 = i0.ɵɵgetCurrentView();
17
+ i0.ɵɵelementStart(0, "button", 10);
18
+ i0.ɵɵlistener("click", function YearViewComponent_div_1_ng_container_6_button_1_Template_button_click_0_listener($event) { const date_r6 = i0.ɵɵrestoreView(_r5).$implicit; const ctx_r2 = i0.ɵɵnextContext(3); return i0.ɵɵresetView(ctx_r2.onDayClick($event, date_r6)); });
19
+ i0.ɵɵelementStart(1, "span", 11);
20
+ i0.ɵɵtext(2);
21
+ i0.ɵɵelementEnd()();
22
+ } if (rf & 2) {
23
+ const date_r6 = ctx.$implicit;
24
+ const mc_r2 = i0.ɵɵnextContext(2).$implicit;
25
+ const ctx_r2 = i0.ɵɵnextContext();
26
+ i0.ɵɵclassMap(ctx_r2.dayClass(date_r6, mc_r2.month));
27
+ i0.ɵɵadvance(2);
28
+ i0.ɵɵtextInterpolate(ctx_r2.getDayOfMonth(date_r6));
29
+ } }
30
+ function YearViewComponent_div_1_ng_container_6_Template(rf, ctx) { if (rf & 1) {
31
+ i0.ɵɵelementContainerStart(0);
32
+ i0.ɵɵtemplate(1, YearViewComponent_div_1_ng_container_6_button_1_Template, 3, 3, "button", 9);
33
+ i0.ɵɵelementContainerEnd();
34
+ } if (rf & 2) {
35
+ const week_r7 = ctx.$implicit;
36
+ const ctx_r2 = i0.ɵɵnextContext(2);
37
+ i0.ɵɵadvance();
38
+ i0.ɵɵproperty("ngForOf", week_r7)("ngForTrackBy", ctx_r2.trackDay);
39
+ } }
40
+ function YearViewComponent_div_1_Template(rf, ctx) { if (rf & 1) {
41
+ const _r1 = i0.ɵɵgetCurrentView();
42
+ i0.ɵɵelementStart(0, "div", 2)(1, "button", 3);
43
+ i0.ɵɵlistener("click", function YearViewComponent_div_1_Template_button_click_1_listener() { const mc_r2 = i0.ɵɵrestoreView(_r1).$implicit; const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.monthClick.emit({ year: ctx_r2.year, month: mc_r2.month })); });
44
+ i0.ɵɵtext(2);
45
+ i0.ɵɵelementEnd();
46
+ i0.ɵɵelementStart(3, "div", 4);
47
+ i0.ɵɵtemplate(4, YearViewComponent_div_1_div_4_Template, 2, 1, "div", 5);
48
+ i0.ɵɵelementEnd();
49
+ i0.ɵɵelementStart(5, "div", 6);
50
+ i0.ɵɵtemplate(6, YearViewComponent_div_1_ng_container_6_Template, 2, 2, "ng-container", 7);
51
+ i0.ɵɵelementEnd()();
52
+ } if (rf & 2) {
53
+ const mc_r2 = ctx.$implicit;
54
+ const ctx_r2 = i0.ɵɵnextContext();
55
+ i0.ɵɵadvance(2);
56
+ i0.ɵɵtextInterpolate1(" ", mc_r2.label, " ");
57
+ i0.ɵɵadvance(2);
58
+ i0.ɵɵproperty("ngForOf", ctx_r2.dayNames);
59
+ i0.ɵɵadvance(2);
60
+ i0.ɵɵproperty("ngForOf", mc_r2.weeks)("ngForTrackBy", ctx_r2.trackWeek);
61
+ } }
62
+ export class YearViewComponent {
63
+ year;
64
+ events = [];
65
+ config;
66
+ monthClick = new EventEmitter();
67
+ dayCellClick = new EventEmitter();
68
+ getDayOfMonth = getDayOfMonth;
69
+ get dayNames() { return this.config.locale.dayNamesShort; }
70
+ get today() { return now(this.config.core.timezone, this.config.core.clock); }
71
+ get eventDays() {
72
+ const set = new Set();
73
+ for (const ev of this.events) {
74
+ let cursor = startOfDay(ev.timeRange.start);
75
+ const last = ev.timeRange.end;
76
+ while (cursor.epochMs < last.epochMs) {
77
+ set.add(cursor.epochMs);
78
+ cursor = addDays(cursor, 1);
79
+ }
80
+ }
81
+ return set;
82
+ }
83
+ get months() {
84
+ const monthFmt = new Intl.DateTimeFormat(this.config.locale.code, {
85
+ month: 'long', timeZone: this.config.core.timezone,
86
+ });
87
+ return Array.from({ length: 12 }, (_, m) => ({
88
+ month: m,
89
+ label: monthFmt.format(new Date(Date.UTC(this.year, m, 15, 12))),
90
+ weeks: monthGrid(this.year, m, this.config.core),
91
+ }));
92
+ }
93
+ dayClass(date, month) {
94
+ const inMonth = getMonth(date) === month;
95
+ const isToday = isSameDay(date, this.today);
96
+ const hasEvents = this.eventDays.has(startOfDay(date).epochMs);
97
+ return 'year-month__day'
98
+ + (inMonth ? '' : ' year-month__day--outside')
99
+ + (isToday ? ' year-month__day--today' : '')
100
+ + (hasEvents ? ' year-month__day--has-events' : '');
101
+ }
102
+ onDayClick(e, date) {
103
+ const rect = e.currentTarget.getBoundingClientRect();
104
+ this.dayCellClick.emit({ date, rect });
105
+ }
106
+ trackMonth(_, mc) { return mc.month; }
107
+ trackWeek(idx) { return idx; }
108
+ trackDay(_, d) { return d.epochMs; }
109
+ static ɵfac = function YearViewComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || YearViewComponent)(); };
110
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: YearViewComponent, selectors: [["cal-year-view"]], inputs: { year: "year", events: "events", config: "config" }, outputs: { monthClick: "monthClick", dayCellClick: "dayCellClick" }, decls: 2, vars: 2, consts: [[1, "year-grid"], ["class", "year-month", 4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "year-month"], ["type", "button", 1, "year-month__header", 3, "click"], [1, "year-month__day-headers"], ["class", "year-month__day-header", 4, "ngFor", "ngForOf"], [1, "year-month__days"], [4, "ngFor", "ngForOf", "ngForTrackBy"], [1, "year-month__day-header"], ["type", "button", 3, "class", "click", 4, "ngFor", "ngForOf", "ngForTrackBy"], ["type", "button", 3, "click"], [1, "year-month__day-num"]], template: function YearViewComponent_Template(rf, ctx) { if (rf & 1) {
111
+ i0.ɵɵelementStart(0, "div", 0);
112
+ i0.ɵɵtemplate(1, YearViewComponent_div_1_Template, 7, 4, "div", 1);
113
+ i0.ɵɵelementEnd();
114
+ } if (rf & 2) {
115
+ i0.ɵɵadvance();
116
+ i0.ɵɵproperty("ngForOf", ctx.months)("ngForTrackBy", ctx.trackMonth);
117
+ } }, dependencies: [CommonModule, i1.NgForOf], encapsulation: 2, changeDetection: 0 });
118
+ }
119
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(YearViewComponent, [{
120
+ type: Component,
121
+ args: [{
122
+ selector: 'cal-year-view',
123
+ standalone: true,
124
+ imports: [CommonModule],
125
+ changeDetection: ChangeDetectionStrategy.OnPush,
126
+ template: `
127
+ <div class="year-grid">
128
+ <div *ngFor="let mc of months; trackBy: trackMonth" class="year-month">
129
+ <button type="button" class="year-month__header"
130
+ (click)="monthClick.emit({ year, month: mc.month })">
131
+ {{ mc.label }}
132
+ </button>
133
+ <div class="year-month__day-headers">
134
+ <div *ngFor="let n of dayNames" class="year-month__day-header">{{ n[0] }}</div>
135
+ </div>
136
+ <div class="year-month__days">
137
+ <ng-container *ngFor="let week of mc.weeks; trackBy: trackWeek">
138
+ <button *ngFor="let date of week; trackBy: trackDay"
139
+ type="button"
140
+ [class]="dayClass(date, mc.month)"
141
+ (click)="onDayClick($event, date)">
142
+ <span class="year-month__day-num">{{ getDayOfMonth(date) }}</span>
143
+ </button>
144
+ </ng-container>
145
+ </div>
146
+ </div>
147
+ </div>
148
+ `,
149
+ }]
150
+ }], null, { year: [{
151
+ type: Input
152
+ }], events: [{
153
+ type: Input
154
+ }], config: [{
155
+ type: Input
156
+ }], monthClick: [{
157
+ type: Output
158
+ }], dayCellClick: [{
159
+ type: Output
160
+ }] }); })();
161
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(YearViewComponent, { className: "YearViewComponent", filePath: "views/year/yearview.ts", lineNumber: 44 }); })();
162
+ //# sourceMappingURL=YearView.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"YearView.js","sourceRoot":"","sources":["../../../src/views/year/YearView.ts"],"names":[],"mappings":"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"}