UNPKG

154 kBJavaScriptView Raw
1import { __decorate, __metadata, __spread, __param, __extends, __assign, __rest } from 'tslib';
2import { Input, TemplateRef, Component, ElementRef, Injector, Renderer2, ComponentFactoryResolver, ViewContainerRef, Inject, HostListener, Directive, EventEmitter, Output, Injectable, LOCALE_ID, Pipe, NgZone, InjectionToken, NgModule, ChangeDetectorRef } from '@angular/core';
3import { DOCUMENT, formatDate, I18nPluralPipe, CommonModule } from '@angular/common';
4import { positionElements } from 'positioning';
5import { Subject, of, timer, Observable, BehaviorSubject, interval } from 'rxjs';
6import { takeUntil, switchMap, startWith, switchMapTo, map } from 'rxjs/operators';
7import { validateEvents as validateEvents$1, getMonthView, getWeekViewHeader, getWeekView } from 'calendar-utils';
8export { DAYS_OF_WEEK } from 'calendar-utils';
9import { DragAndDropModule } from 'angular-draggable-droppable';
10import { trigger, state, style, transition, animate } from '@angular/animations';
11import { ResizableModule } from 'angular-resizable-element';
12
13var CalendarEventActionsComponent = /** @class */ (function () {
14 function CalendarEventActionsComponent() {
15 this.trackByActionId = function (index, action) {
16 return action.id ? action.id : action;
17 };
18 }
19 __decorate([
20 Input(),
21 __metadata("design:type", Object)
22 ], CalendarEventActionsComponent.prototype, "event", void 0);
23 __decorate([
24 Input(),
25 __metadata("design:type", TemplateRef)
26 ], CalendarEventActionsComponent.prototype, "customTemplate", void 0);
27 CalendarEventActionsComponent = __decorate([
28 Component({
29 selector: 'mwl-calendar-event-actions',
30 template: "\n <ng-template\n #defaultTemplate\n let-event=\"event\"\n let-trackByActionId=\"trackByActionId\"\n >\n <span *ngIf=\"event.actions\" class=\"cal-event-actions\">\n <a\n class=\"cal-event-action\"\n href=\"javascript:;\"\n *ngFor=\"let action of event.actions; trackBy: trackByActionId\"\n (mwlClick)=\"action.onClick({ event: event, sourceEvent: $event })\"\n (mwlKeydownEnter)=\"\n action.onClick({ event: event, sourceEvent: $event })\n \"\n [ngClass]=\"action.cssClass\"\n [innerHtml]=\"action.label\"\n tabindex=\"0\"\n role=\"button\"\n [attr.aria-label]=\"\n { action: action } | calendarA11y: 'actionButtonLabel'\n \"\n >\n </a>\n </span>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n event: event,\n trackByActionId: trackByActionId\n }\"\n >\n </ng-template>\n "
31 })
32 ], CalendarEventActionsComponent);
33 return CalendarEventActionsComponent;
34}());
35
36var CalendarEventTitleComponent = /** @class */ (function () {
37 function CalendarEventTitleComponent() {
38 }
39 __decorate([
40 Input(),
41 __metadata("design:type", Object)
42 ], CalendarEventTitleComponent.prototype, "event", void 0);
43 __decorate([
44 Input(),
45 __metadata("design:type", TemplateRef)
46 ], CalendarEventTitleComponent.prototype, "customTemplate", void 0);
47 __decorate([
48 Input(),
49 __metadata("design:type", String)
50 ], CalendarEventTitleComponent.prototype, "view", void 0);
51 CalendarEventTitleComponent = __decorate([
52 Component({
53 selector: 'mwl-calendar-event-title',
54 template: "\n <ng-template #defaultTemplate let-event=\"event\" let-view=\"view\">\n <span\n class=\"cal-event-title\"\n [innerHTML]=\"event.title | calendarEventTitle: view:event\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideEventTitle'\"\n >\n </span>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n event: event,\n view: view\n }\"\n >\n </ng-template>\n "
55 })
56 ], CalendarEventTitleComponent);
57 return CalendarEventTitleComponent;
58}());
59
60var CalendarTooltipWindowComponent = /** @class */ (function () {
61 function CalendarTooltipWindowComponent() {
62 }
63 __decorate([
64 Input(),
65 __metadata("design:type", String)
66 ], CalendarTooltipWindowComponent.prototype, "contents", void 0);
67 __decorate([
68 Input(),
69 __metadata("design:type", String)
70 ], CalendarTooltipWindowComponent.prototype, "placement", void 0);
71 __decorate([
72 Input(),
73 __metadata("design:type", Object)
74 ], CalendarTooltipWindowComponent.prototype, "event", void 0);
75 __decorate([
76 Input(),
77 __metadata("design:type", TemplateRef)
78 ], CalendarTooltipWindowComponent.prototype, "customTemplate", void 0);
79 CalendarTooltipWindowComponent = __decorate([
80 Component({
81 selector: 'mwl-calendar-tooltip-window',
82 template: "\n <ng-template\n #defaultTemplate\n let-contents=\"contents\"\n let-placement=\"placement\"\n let-event=\"event\"\n >\n <div class=\"cal-tooltip\" [ngClass]=\"'cal-tooltip-' + placement\">\n <div class=\"cal-tooltip-arrow\"></div>\n <div class=\"cal-tooltip-inner\" [innerHtml]=\"contents\"></div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n contents: contents,\n placement: placement,\n event: event\n }\"\n >\n </ng-template>\n "
83 })
84 ], CalendarTooltipWindowComponent);
85 return CalendarTooltipWindowComponent;
86}());
87var CalendarTooltipDirective = /** @class */ (function () {
88 function CalendarTooltipDirective(elementRef, injector, renderer, componentFactoryResolver, viewContainerRef, document //tslint:disable-line
89 ) {
90 this.elementRef = elementRef;
91 this.injector = injector;
92 this.renderer = renderer;
93 this.viewContainerRef = viewContainerRef;
94 this.document = document;
95 this.placement = 'auto'; // tslint:disable-line no-input-rename
96 this.delay = null; // tslint:disable-line no-input-rename
97 this.cancelTooltipDelay$ = new Subject();
98 this.tooltipFactory = componentFactoryResolver.resolveComponentFactory(CalendarTooltipWindowComponent);
99 }
100 CalendarTooltipDirective.prototype.ngOnChanges = function (changes) {
101 if (this.tooltipRef &&
102 (changes.contents || changes.customTemplate || changes.event)) {
103 this.tooltipRef.instance.contents = this.contents;
104 this.tooltipRef.instance.customTemplate = this.customTemplate;
105 this.tooltipRef.instance.event = this.event;
106 this.tooltipRef.changeDetectorRef.markForCheck();
107 if (!this.contents) {
108 this.hide();
109 }
110 }
111 };
112 CalendarTooltipDirective.prototype.ngOnDestroy = function () {
113 this.hide();
114 };
115 CalendarTooltipDirective.prototype.onMouseOver = function () {
116 var _this = this;
117 var delay$ = this.delay === null ? of('now') : timer(this.delay);
118 delay$.pipe(takeUntil(this.cancelTooltipDelay$)).subscribe(function () {
119 _this.show();
120 });
121 };
122 CalendarTooltipDirective.prototype.onMouseOut = function () {
123 this.hide();
124 };
125 CalendarTooltipDirective.prototype.show = function () {
126 var _this = this;
127 if (!this.tooltipRef && this.contents) {
128 this.tooltipRef = this.viewContainerRef.createComponent(this.tooltipFactory, 0, this.injector, []);
129 this.tooltipRef.instance.contents = this.contents;
130 this.tooltipRef.instance.customTemplate = this.customTemplate;
131 this.tooltipRef.instance.event = this.event;
132 if (this.appendToBody) {
133 this.document.body.appendChild(this.tooltipRef.location.nativeElement);
134 }
135 requestAnimationFrame(function () {
136 _this.positionTooltip();
137 });
138 }
139 };
140 CalendarTooltipDirective.prototype.hide = function () {
141 if (this.tooltipRef) {
142 this.viewContainerRef.remove(this.viewContainerRef.indexOf(this.tooltipRef.hostView));
143 this.tooltipRef = null;
144 }
145 this.cancelTooltipDelay$.next();
146 };
147 CalendarTooltipDirective.prototype.positionTooltip = function (previousPositions) {
148 if (previousPositions === void 0) { previousPositions = []; }
149 if (this.tooltipRef) {
150 this.tooltipRef.changeDetectorRef.detectChanges();
151 this.tooltipRef.instance.placement = positionElements(this.elementRef.nativeElement, this.tooltipRef.location.nativeElement.children[0], this.placement, this.appendToBody);
152 // keep re-positioning the tooltip until the arrow position doesn't make a difference
153 if (previousPositions.indexOf(this.tooltipRef.instance.placement) === -1) {
154 this.positionTooltip(__spread(previousPositions, [
155 this.tooltipRef.instance.placement,
156 ]));
157 }
158 }
159 };
160 CalendarTooltipDirective.ctorParameters = function () { return [
161 { type: ElementRef },
162 { type: Injector },
163 { type: Renderer2 },
164 { type: ComponentFactoryResolver },
165 { type: ViewContainerRef },
166 { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
167 ]; };
168 __decorate([
169 Input('mwlCalendarTooltip'),
170 __metadata("design:type", String)
171 ], CalendarTooltipDirective.prototype, "contents", void 0);
172 __decorate([
173 Input('tooltipPlacement'),
174 __metadata("design:type", Object)
175 ], CalendarTooltipDirective.prototype, "placement", void 0);
176 __decorate([
177 Input('tooltipTemplate'),
178 __metadata("design:type", TemplateRef)
179 ], CalendarTooltipDirective.prototype, "customTemplate", void 0);
180 __decorate([
181 Input('tooltipEvent'),
182 __metadata("design:type", Object)
183 ], CalendarTooltipDirective.prototype, "event", void 0);
184 __decorate([
185 Input('tooltipAppendToBody'),
186 __metadata("design:type", Boolean)
187 ], CalendarTooltipDirective.prototype, "appendToBody", void 0);
188 __decorate([
189 Input('tooltipDelay'),
190 __metadata("design:type", Number)
191 ], CalendarTooltipDirective.prototype, "delay", void 0);
192 __decorate([
193 HostListener('mouseenter'),
194 __metadata("design:type", Function),
195 __metadata("design:paramtypes", []),
196 __metadata("design:returntype", void 0)
197 ], CalendarTooltipDirective.prototype, "onMouseOver", null);
198 __decorate([
199 HostListener('mouseleave'),
200 __metadata("design:type", Function),
201 __metadata("design:paramtypes", []),
202 __metadata("design:returntype", void 0)
203 ], CalendarTooltipDirective.prototype, "onMouseOut", null);
204 CalendarTooltipDirective = __decorate([
205 Directive({
206 selector: '[mwlCalendarTooltip]',
207 }),
208 __param(5, Inject(DOCUMENT)),
209 __metadata("design:paramtypes", [ElementRef,
210 Injector,
211 Renderer2,
212 ComponentFactoryResolver,
213 ViewContainerRef, Object])
214 ], CalendarTooltipDirective);
215 return CalendarTooltipDirective;
216}());
217
218var DateAdapter = /** @class */ (function () {
219 function DateAdapter() {
220 }
221 return DateAdapter;
222}());
223
224var CalendarView;
225(function (CalendarView) {
226 CalendarView["Month"] = "month";
227 CalendarView["Week"] = "week";
228 CalendarView["Day"] = "day";
229})(CalendarView || (CalendarView = {}));
230
231var validateEvents = function (events) {
232 var warn = function () {
233 var args = [];
234 for (var _i = 0; _i < arguments.length; _i++) {
235 args[_i] = arguments[_i];
236 }
237 return console.warn.apply(console, __spread(['angular-calendar'], args));
238 };
239 return validateEvents$1(events, warn);
240};
241function isInside(outer, inner) {
242 return (Math.floor(outer.left) <= Math.ceil(inner.left) &&
243 Math.floor(inner.left) <= Math.ceil(outer.right) &&
244 Math.floor(outer.left) <= Math.ceil(inner.right) &&
245 Math.floor(inner.right) <= Math.ceil(outer.right) &&
246 Math.floor(outer.top) <= Math.ceil(inner.top) &&
247 Math.floor(inner.top) <= Math.ceil(outer.bottom) &&
248 Math.floor(outer.top) <= Math.ceil(inner.bottom) &&
249 Math.floor(inner.bottom) <= Math.ceil(outer.bottom));
250}
251function roundToNearest(amount, precision) {
252 return Math.round(amount / precision) * precision;
253}
254var trackByEventId = function (index, event) {
255 return event.id ? event.id : event;
256};
257var trackByWeekDayHeaderDate = function (index, day) {
258 return day.date.toISOString();
259};
260var trackByHourSegment = function (index, segment) { return segment.date.toISOString(); };
261var trackByHour = function (index, hour) {
262 return hour.segments[0].date.toISOString();
263};
264var trackByWeekAllDayEvent = function (index, weekEvent) { return (weekEvent.event.id ? weekEvent.event.id : weekEvent.event); };
265var trackByWeekTimeEvent = function (index, weekEvent) { return (weekEvent.event.id ? weekEvent.event.id : weekEvent.event); };
266var MINUTES_IN_HOUR = 60;
267function getPixelAmountInMinutes(hourSegments, hourSegmentHeight) {
268 return MINUTES_IN_HOUR / (hourSegments * hourSegmentHeight);
269}
270function getMinutesMoved(movedY, hourSegments, hourSegmentHeight, eventSnapSize) {
271 var draggedInPixelsSnapSize = roundToNearest(movedY, eventSnapSize || hourSegmentHeight);
272 var pixelAmountInMinutes = getPixelAmountInMinutes(hourSegments, hourSegmentHeight);
273 return draggedInPixelsSnapSize * pixelAmountInMinutes;
274}
275function getMinimumEventHeightInMinutes(hourSegments, hourSegmentHeight) {
276 return (getPixelAmountInMinutes(hourSegments, hourSegmentHeight) * hourSegmentHeight);
277}
278function getDefaultEventEnd(dateAdapter, event, minimumMinutes) {
279 if (event.end) {
280 return event.end;
281 }
282 else {
283 return dateAdapter.addMinutes(event.start, minimumMinutes);
284 }
285}
286function addDaysWithExclusions(dateAdapter, date, days, excluded) {
287 var daysCounter = 0;
288 var daysToAdd = 0;
289 var changeDays = days < 0 ? dateAdapter.subDays : dateAdapter.addDays;
290 var result = date;
291 while (daysToAdd <= Math.abs(days)) {
292 result = changeDays(date, daysCounter);
293 var day = dateAdapter.getDay(result);
294 if (excluded.indexOf(day) === -1) {
295 daysToAdd++;
296 }
297 daysCounter++;
298 }
299 return result;
300}
301function isDraggedWithinPeriod(newStart, newEnd, period) {
302 var end = newEnd || newStart;
303 return ((period.start <= newStart && newStart <= period.end) ||
304 (period.start <= end && end <= period.end));
305}
306function shouldFireDroppedEvent(dropEvent, date, allDay, calendarId) {
307 return (dropEvent.dropData &&
308 dropEvent.dropData.event &&
309 (dropEvent.dropData.calendarId !== calendarId ||
310 (dropEvent.dropData.event.allDay && !allDay) ||
311 (!dropEvent.dropData.event.allDay && allDay)));
312}
313function getWeekViewPeriod(dateAdapter, viewDate, weekStartsOn, excluded, daysInWeek) {
314 if (excluded === void 0) { excluded = []; }
315 var viewStart = daysInWeek
316 ? dateAdapter.startOfDay(viewDate)
317 : dateAdapter.startOfWeek(viewDate, { weekStartsOn: weekStartsOn });
318 var endOfWeek = dateAdapter.endOfWeek(viewDate, { weekStartsOn: weekStartsOn });
319 while (excluded.indexOf(dateAdapter.getDay(viewStart)) > -1 &&
320 viewStart < endOfWeek) {
321 viewStart = dateAdapter.addDays(viewStart, 1);
322 }
323 if (daysInWeek) {
324 var viewEnd = dateAdapter.endOfDay(addDaysWithExclusions(dateAdapter, viewStart, daysInWeek - 1, excluded));
325 return { viewStart: viewStart, viewEnd: viewEnd };
326 }
327 else {
328 var viewEnd = endOfWeek;
329 while (excluded.indexOf(dateAdapter.getDay(viewEnd)) > -1 &&
330 viewEnd > viewStart) {
331 viewEnd = dateAdapter.subDays(viewEnd, 1);
332 }
333 return { viewStart: viewStart, viewEnd: viewEnd };
334 }
335}
336function isWithinThreshold(_a) {
337 var x = _a.x, y = _a.y;
338 var DRAG_THRESHOLD = 1;
339 return Math.abs(x) > DRAG_THRESHOLD || Math.abs(y) > DRAG_THRESHOLD;
340}
341
342/**
343 * Change the view date to the previous view. For example:
344 *
345 * ```typescript
346 * <button
347 * mwlCalendarPreviousView
348 * [(viewDate)]="viewDate"
349 * [view]="view">
350 * Previous
351 * </button>
352 * ```
353 */
354var CalendarPreviousViewDirective = /** @class */ (function () {
355 function CalendarPreviousViewDirective(dateAdapter) {
356 this.dateAdapter = dateAdapter;
357 /**
358 * Days to skip when going back by 1 day
359 */
360 this.excludeDays = [];
361 /**
362 * Called when the view date is changed
363 */
364 this.viewDateChange = new EventEmitter();
365 }
366 /**
367 * @hidden
368 */
369 CalendarPreviousViewDirective.prototype.onClick = function () {
370 var subFn = {
371 day: this.dateAdapter.subDays,
372 week: this.dateAdapter.subWeeks,
373 month: this.dateAdapter.subMonths,
374 }[this.view];
375 if (this.view === CalendarView.Day) {
376 this.viewDateChange.emit(addDaysWithExclusions(this.dateAdapter, this.viewDate, -1, this.excludeDays));
377 }
378 else if (this.view === CalendarView.Week && this.daysInWeek) {
379 this.viewDateChange.emit(addDaysWithExclusions(this.dateAdapter, this.viewDate, -this.daysInWeek, this.excludeDays));
380 }
381 else {
382 this.viewDateChange.emit(subFn(this.viewDate, 1));
383 }
384 };
385 CalendarPreviousViewDirective.ctorParameters = function () { return [
386 { type: DateAdapter }
387 ]; };
388 __decorate([
389 Input(),
390 __metadata("design:type", String)
391 ], CalendarPreviousViewDirective.prototype, "view", void 0);
392 __decorate([
393 Input(),
394 __metadata("design:type", Date)
395 ], CalendarPreviousViewDirective.prototype, "viewDate", void 0);
396 __decorate([
397 Input(),
398 __metadata("design:type", Array)
399 ], CalendarPreviousViewDirective.prototype, "excludeDays", void 0);
400 __decorate([
401 Input(),
402 __metadata("design:type", Number)
403 ], CalendarPreviousViewDirective.prototype, "daysInWeek", void 0);
404 __decorate([
405 Output(),
406 __metadata("design:type", EventEmitter)
407 ], CalendarPreviousViewDirective.prototype, "viewDateChange", void 0);
408 __decorate([
409 HostListener('click'),
410 __metadata("design:type", Function),
411 __metadata("design:paramtypes", []),
412 __metadata("design:returntype", void 0)
413 ], CalendarPreviousViewDirective.prototype, "onClick", null);
414 CalendarPreviousViewDirective = __decorate([
415 Directive({
416 selector: '[mwlCalendarPreviousView]',
417 }),
418 __metadata("design:paramtypes", [DateAdapter])
419 ], CalendarPreviousViewDirective);
420 return CalendarPreviousViewDirective;
421}());
422
423/**
424 * Change the view date to the next view. For example:
425 *
426 * ```typescript
427 * <button
428 * mwlCalendarNextView
429 * [(viewDate)]="viewDate"
430 * [view]="view">
431 * Next
432 * </button>
433 * ```
434 */
435var CalendarNextViewDirective = /** @class */ (function () {
436 function CalendarNextViewDirective(dateAdapter) {
437 this.dateAdapter = dateAdapter;
438 /**
439 * Days to skip when going forward by 1 day
440 */
441 this.excludeDays = [];
442 /**
443 * Called when the view date is changed
444 */
445 this.viewDateChange = new EventEmitter();
446 }
447 /**
448 * @hidden
449 */
450 CalendarNextViewDirective.prototype.onClick = function () {
451 var addFn = {
452 day: this.dateAdapter.addDays,
453 week: this.dateAdapter.addWeeks,
454 month: this.dateAdapter.addMonths,
455 }[this.view];
456 if (this.view === CalendarView.Day) {
457 this.viewDateChange.emit(addDaysWithExclusions(this.dateAdapter, this.viewDate, 1, this.excludeDays));
458 }
459 else if (this.view === CalendarView.Week && this.daysInWeek) {
460 this.viewDateChange.emit(addDaysWithExclusions(this.dateAdapter, this.viewDate, this.daysInWeek, this.excludeDays));
461 }
462 else {
463 this.viewDateChange.emit(addFn(this.viewDate, 1));
464 }
465 };
466 CalendarNextViewDirective.ctorParameters = function () { return [
467 { type: DateAdapter }
468 ]; };
469 __decorate([
470 Input(),
471 __metadata("design:type", String)
472 ], CalendarNextViewDirective.prototype, "view", void 0);
473 __decorate([
474 Input(),
475 __metadata("design:type", Date)
476 ], CalendarNextViewDirective.prototype, "viewDate", void 0);
477 __decorate([
478 Input(),
479 __metadata("design:type", Array)
480 ], CalendarNextViewDirective.prototype, "excludeDays", void 0);
481 __decorate([
482 Input(),
483 __metadata("design:type", Number)
484 ], CalendarNextViewDirective.prototype, "daysInWeek", void 0);
485 __decorate([
486 Output(),
487 __metadata("design:type", EventEmitter)
488 ], CalendarNextViewDirective.prototype, "viewDateChange", void 0);
489 __decorate([
490 HostListener('click'),
491 __metadata("design:type", Function),
492 __metadata("design:paramtypes", []),
493 __metadata("design:returntype", void 0)
494 ], CalendarNextViewDirective.prototype, "onClick", null);
495 CalendarNextViewDirective = __decorate([
496 Directive({
497 selector: '[mwlCalendarNextView]',
498 }),
499 __metadata("design:paramtypes", [DateAdapter])
500 ], CalendarNextViewDirective);
501 return CalendarNextViewDirective;
502}());
503
504/**
505 * Change the view date to the current day. For example:
506 *
507 * ```typescript
508 * <button
509 * mwlCalendarToday
510 * [(viewDate)]="viewDate">
511 * Today
512 * </button>
513 * ```
514 */
515var CalendarTodayDirective = /** @class */ (function () {
516 function CalendarTodayDirective(dateAdapter) {
517 this.dateAdapter = dateAdapter;
518 /**
519 * Called when the view date is changed
520 */
521 this.viewDateChange = new EventEmitter();
522 }
523 /**
524 * @hidden
525 */
526 CalendarTodayDirective.prototype.onClick = function () {
527 this.viewDateChange.emit(this.dateAdapter.startOfDay(new Date()));
528 };
529 CalendarTodayDirective.ctorParameters = function () { return [
530 { type: DateAdapter }
531 ]; };
532 __decorate([
533 Input(),
534 __metadata("design:type", Date)
535 ], CalendarTodayDirective.prototype, "viewDate", void 0);
536 __decorate([
537 Output(),
538 __metadata("design:type", EventEmitter)
539 ], CalendarTodayDirective.prototype, "viewDateChange", void 0);
540 __decorate([
541 HostListener('click'),
542 __metadata("design:type", Function),
543 __metadata("design:paramtypes", []),
544 __metadata("design:returntype", void 0)
545 ], CalendarTodayDirective.prototype, "onClick", null);
546 CalendarTodayDirective = __decorate([
547 Directive({
548 selector: '[mwlCalendarToday]',
549 }),
550 __metadata("design:paramtypes", [DateAdapter])
551 ], CalendarTodayDirective);
552 return CalendarTodayDirective;
553}());
554
555/**
556 * This will use the angular date pipe to do all date formatting. It is the default date formatter used by the calendar.
557 */
558var CalendarAngularDateFormatter = /** @class */ (function () {
559 function CalendarAngularDateFormatter(dateAdapter) {
560 this.dateAdapter = dateAdapter;
561 }
562 /**
563 * The month view header week day labels
564 */
565 CalendarAngularDateFormatter.prototype.monthViewColumnHeader = function (_a) {
566 var date = _a.date, locale = _a.locale;
567 return formatDate(date, 'EEEE', locale);
568 };
569 /**
570 * The month view cell day number
571 */
572 CalendarAngularDateFormatter.prototype.monthViewDayNumber = function (_a) {
573 var date = _a.date, locale = _a.locale;
574 return formatDate(date, 'd', locale);
575 };
576 /**
577 * The month view title
578 */
579 CalendarAngularDateFormatter.prototype.monthViewTitle = function (_a) {
580 var date = _a.date, locale = _a.locale;
581 return formatDate(date, 'LLLL y', locale);
582 };
583 /**
584 * The week view header week day labels
585 */
586 CalendarAngularDateFormatter.prototype.weekViewColumnHeader = function (_a) {
587 var date = _a.date, locale = _a.locale;
588 return formatDate(date, 'EEEE', locale);
589 };
590 /**
591 * The week view sub header day and month labels
592 */
593 CalendarAngularDateFormatter.prototype.weekViewColumnSubHeader = function (_a) {
594 var date = _a.date, locale = _a.locale;
595 return formatDate(date, 'MMM d', locale);
596 };
597 /**
598 * The week view title
599 */
600 CalendarAngularDateFormatter.prototype.weekViewTitle = function (_a) {
601 var date = _a.date, locale = _a.locale, weekStartsOn = _a.weekStartsOn, excludeDays = _a.excludeDays, daysInWeek = _a.daysInWeek;
602 var _b = getWeekViewPeriod(this.dateAdapter, date, weekStartsOn, excludeDays, daysInWeek), viewStart = _b.viewStart, viewEnd = _b.viewEnd;
603 var format = function (dateToFormat, showYear) {
604 return formatDate(dateToFormat, 'MMM d' + (showYear ? ', yyyy' : ''), locale);
605 };
606 return format(viewStart, viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear()) + " - " + format(viewEnd, true);
607 };
608 /**
609 * The time formatting down the left hand side of the week view
610 */
611 CalendarAngularDateFormatter.prototype.weekViewHour = function (_a) {
612 var date = _a.date, locale = _a.locale;
613 return formatDate(date, 'h a', locale);
614 };
615 /**
616 * The time formatting down the left hand side of the day view
617 */
618 CalendarAngularDateFormatter.prototype.dayViewHour = function (_a) {
619 var date = _a.date, locale = _a.locale;
620 return formatDate(date, 'h a', locale);
621 };
622 /**
623 * The day view title
624 */
625 CalendarAngularDateFormatter.prototype.dayViewTitle = function (_a) {
626 var date = _a.date, locale = _a.locale;
627 return formatDate(date, 'EEEE, MMMM d, y', locale);
628 };
629 CalendarAngularDateFormatter.ctorParameters = function () { return [
630 { type: DateAdapter }
631 ]; };
632 CalendarAngularDateFormatter = __decorate([
633 Injectable(),
634 __metadata("design:paramtypes", [DateAdapter])
635 ], CalendarAngularDateFormatter);
636 return CalendarAngularDateFormatter;
637}());
638
639/**
640 * This class is responsible for all formatting of dates. There are 3 implementations available, the `CalendarAngularDateFormatter` (default) which uses the angular date pipe to format dates, the `CalendarNativeDateFormatter` which will use the <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl" target="_blank">Intl</a> API to format dates, or there is the `CalendarMomentDateFormatter` which uses <a href="http://momentjs.com/" target="_blank">moment</a>.
641 *
642 * If you wish, you may override any of the defaults via angulars DI. For example:
643 *
644 * ```typescript
645 * import { CalendarDateFormatter, DateFormatterParams } from 'angular-calendar';
646 * import { formatDate } from '@angular/common';
647 * import { Injectable } from '@angular/core';
648 *
649 * @Injectable()
650 * class CustomDateFormatter extends CalendarDateFormatter {
651 *
652 * public monthViewColumnHeader({date, locale}: DateFormatterParams): string {
653 * return formatDate(date, 'EEE', locale); // use short week days
654 * }
655 *
656 * }
657 *
658 * // in your component that uses the calendar
659 * providers: [{
660 * provide: CalendarDateFormatter,
661 * useClass: CustomDateFormatter
662 * }]
663 * ```
664 */
665var CalendarDateFormatter = /** @class */ (function (_super) {
666 __extends(CalendarDateFormatter, _super);
667 function CalendarDateFormatter() {
668 return _super !== null && _super.apply(this, arguments) || this;
669 }
670 CalendarDateFormatter = __decorate([
671 Injectable()
672 ], CalendarDateFormatter);
673 return CalendarDateFormatter;
674}(CalendarAngularDateFormatter));
675
676/**
677 * This pipe is primarily for rendering the current view title. Example usage:
678 * ```typescript
679 * // where `viewDate` is a `Date` and view is `'month' | 'week' | 'day'`
680 * {{ viewDate | calendarDate:(view + 'ViewTitle'):'en' }}
681 * ```
682 */
683var CalendarDatePipe = /** @class */ (function () {
684 function CalendarDatePipe(dateFormatter, locale) {
685 this.dateFormatter = dateFormatter;
686 this.locale = locale;
687 }
688 CalendarDatePipe.prototype.transform = function (date, method, locale, weekStartsOn, excludeDays, daysInWeek) {
689 if (locale === void 0) { locale = this.locale; }
690 if (weekStartsOn === void 0) { weekStartsOn = 0; }
691 if (excludeDays === void 0) { excludeDays = []; }
692 if (typeof this.dateFormatter[method] === 'undefined') {
693 var allowedMethods = Object.getOwnPropertyNames(Object.getPrototypeOf(CalendarDateFormatter.prototype)).filter(function (iMethod) { return iMethod !== 'constructor'; });
694 throw new Error(method + " is not a valid date formatter. Can only be one of " + allowedMethods.join(', '));
695 }
696 return this.dateFormatter[method]({
697 date: date,
698 locale: locale,
699 weekStartsOn: weekStartsOn,
700 excludeDays: excludeDays,
701 daysInWeek: daysInWeek,
702 });
703 };
704 CalendarDatePipe.ctorParameters = function () { return [
705 { type: CalendarDateFormatter },
706 { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] }
707 ]; };
708 CalendarDatePipe = __decorate([
709 Pipe({
710 name: 'calendarDate',
711 }),
712 __param(1, Inject(LOCALE_ID)),
713 __metadata("design:paramtypes", [CalendarDateFormatter, String])
714 ], CalendarDatePipe);
715 return CalendarDatePipe;
716}());
717
718/**
719 * This class is responsible for displaying all event titles within the calendar. You may override any of its methods via angulars DI to suit your requirements. For example:
720 *
721 * ```typescript
722 * import { Injectable } from '@angular/core';
723 * import { CalendarEventTitleFormatter, CalendarEvent } from 'angular-calendar';
724 *
725 * @Injectable()
726 * class CustomEventTitleFormatter extends CalendarEventTitleFormatter {
727 *
728 * month(event: CalendarEvent): string {
729 * return `Custom prefix: ${event.title}`;
730 * }
731 *
732 * }
733 *
734 * // in your component
735 * providers: [{
736 * provide: CalendarEventTitleFormatter,
737 * useClass: CustomEventTitleFormatter
738 * }]
739 * ```
740 */
741var CalendarEventTitleFormatter = /** @class */ (function () {
742 function CalendarEventTitleFormatter() {
743 }
744 /**
745 * The month view event title.
746 */
747 CalendarEventTitleFormatter.prototype.month = function (event, title) {
748 return event.title;
749 };
750 /**
751 * The month view event tooltip. Return a falsey value from this to disable the tooltip.
752 */
753 CalendarEventTitleFormatter.prototype.monthTooltip = function (event, title) {
754 return event.title;
755 };
756 /**
757 * The week view event title.
758 */
759 CalendarEventTitleFormatter.prototype.week = function (event, title) {
760 return event.title;
761 };
762 /**
763 * The week view event tooltip. Return a falsey value from this to disable the tooltip.
764 */
765 CalendarEventTitleFormatter.prototype.weekTooltip = function (event, title) {
766 return event.title;
767 };
768 /**
769 * The day view event title.
770 */
771 CalendarEventTitleFormatter.prototype.day = function (event, title) {
772 return event.title;
773 };
774 /**
775 * The day view event tooltip. Return a falsey value from this to disable the tooltip.
776 */
777 CalendarEventTitleFormatter.prototype.dayTooltip = function (event, title) {
778 return event.title;
779 };
780 return CalendarEventTitleFormatter;
781}());
782
783var CalendarEventTitlePipe = /** @class */ (function () {
784 function CalendarEventTitlePipe(calendarEventTitle) {
785 this.calendarEventTitle = calendarEventTitle;
786 }
787 CalendarEventTitlePipe.prototype.transform = function (title, titleType, event) {
788 return this.calendarEventTitle[titleType](event, title);
789 };
790 CalendarEventTitlePipe.ctorParameters = function () { return [
791 { type: CalendarEventTitleFormatter }
792 ]; };
793 CalendarEventTitlePipe = __decorate([
794 Pipe({
795 name: 'calendarEventTitle',
796 }),
797 __metadata("design:paramtypes", [CalendarEventTitleFormatter])
798 ], CalendarEventTitlePipe);
799 return CalendarEventTitlePipe;
800}());
801
802var ClickDirective = /** @class */ (function () {
803 function ClickDirective(renderer, elm, document) {
804 this.renderer = renderer;
805 this.elm = elm;
806 this.document = document;
807 this.clickListenerDisabled = false;
808 this.click = new EventEmitter(); // tslint:disable-line
809 this.destroy$ = new Subject();
810 }
811 ClickDirective.prototype.ngOnInit = function () {
812 var _this = this;
813 if (!this.clickListenerDisabled) {
814 this.listen()
815 .pipe(takeUntil(this.destroy$))
816 .subscribe(function (event) {
817 event.stopPropagation();
818 _this.click.emit(event);
819 });
820 }
821 };
822 ClickDirective.prototype.ngOnDestroy = function () {
823 this.destroy$.next();
824 };
825 ClickDirective.prototype.listen = function () {
826 var _this = this;
827 return new Observable(function (observer) {
828 return _this.renderer.listen(_this.elm.nativeElement, 'click', function (event) {
829 observer.next(event);
830 });
831 });
832 };
833 ClickDirective.ctorParameters = function () { return [
834 { type: Renderer2 },
835 { type: ElementRef },
836 { type: undefined, decorators: [{ type: Inject, args: [DOCUMENT,] }] }
837 ]; };
838 __decorate([
839 Input(),
840 __metadata("design:type", Object)
841 ], ClickDirective.prototype, "clickListenerDisabled", void 0);
842 __decorate([
843 Output('mwlClick'),
844 __metadata("design:type", Object)
845 ], ClickDirective.prototype, "click", void 0);
846 ClickDirective = __decorate([
847 Directive({
848 selector: '[mwlClick]',
849 }),
850 __param(2, Inject(DOCUMENT)),
851 __metadata("design:paramtypes", [Renderer2,
852 ElementRef, Object])
853 ], ClickDirective);
854 return ClickDirective;
855}());
856
857var KeydownEnterDirective = /** @class */ (function () {
858 function KeydownEnterDirective(host, ngZone, renderer) {
859 this.host = host;
860 this.ngZone = ngZone;
861 this.renderer = renderer;
862 this.keydown = new EventEmitter(); // tslint:disable-line
863 this.keydownListener = null;
864 }
865 KeydownEnterDirective.prototype.ngOnInit = function () {
866 var _this = this;
867 this.ngZone.runOutsideAngular(function () {
868 _this.keydownListener = _this.renderer.listen(_this.host.nativeElement, 'keydown', function (event) {
869 if (event.keyCode === 13 ||
870 event.which === 13 ||
871 event.key === 'Enter') {
872 event.preventDefault();
873 event.stopPropagation();
874 _this.ngZone.run(function () {
875 _this.keydown.emit(event);
876 });
877 }
878 });
879 });
880 };
881 KeydownEnterDirective.prototype.ngOnDestroy = function () {
882 if (this.keydownListener !== null) {
883 this.keydownListener();
884 this.keydownListener = null;
885 }
886 };
887 KeydownEnterDirective.ctorParameters = function () { return [
888 { type: ElementRef },
889 { type: NgZone },
890 { type: Renderer2 }
891 ]; };
892 __decorate([
893 Output('mwlKeydownEnter'),
894 __metadata("design:type", Object)
895 ], KeydownEnterDirective.prototype, "keydown", void 0);
896 KeydownEnterDirective = __decorate([
897 Directive({ selector: '[mwlKeydownEnter]' }),
898 __metadata("design:paramtypes", [ElementRef,
899 NgZone,
900 Renderer2])
901 ], KeydownEnterDirective);
902 return KeydownEnterDirective;
903}());
904
905var CalendarUtils = /** @class */ (function () {
906 function CalendarUtils(dateAdapter) {
907 this.dateAdapter = dateAdapter;
908 }
909 CalendarUtils.prototype.getMonthView = function (args) {
910 return getMonthView(this.dateAdapter, args);
911 };
912 CalendarUtils.prototype.getWeekViewHeader = function (args) {
913 return getWeekViewHeader(this.dateAdapter, args);
914 };
915 CalendarUtils.prototype.getWeekView = function (args) {
916 return getWeekView(this.dateAdapter, args);
917 };
918 CalendarUtils.ctorParameters = function () { return [
919 { type: DateAdapter }
920 ]; };
921 CalendarUtils = __decorate([
922 Injectable(),
923 __metadata("design:paramtypes", [DateAdapter])
924 ], CalendarUtils);
925 return CalendarUtils;
926}());
927
928/**
929 * This class is responsible for adding accessibility to the calendar.
930 * You may override any of its methods via angulars DI to suit your requirements.
931 * For example:
932 *
933 * ```typescript
934 * import { A11yParams, CalendarA11y } from 'angular-calendar';
935 * import { formatDate, I18nPluralPipe } from '@angular/common';
936 * import { Injectable } from '@angular/core';
937 *
938 * // adding your own a11y params
939 * export interface CustomA11yParams extends A11yParams {
940 * isDrSuess?: boolean;
941 * }
942 *
943 * @Injectable()
944 * export class CustomCalendarA11y extends CalendarA11y {
945 * constructor(protected i18nPlural: I18nPluralPipe) {
946 * super(i18nPlural);
947 * }
948 *
949 * // overriding a function
950 * public openDayEventsLandmark({ date, locale, isDrSuess }: CustomA11yParams): string {
951 * if (isDrSuess) {
952 * return `
953 * ${formatDate(date, 'EEEE MMMM d', locale)}
954 * Today you are you! That is truer than true! There is no one alive
955 * who is you-er than you!
956 * `;
957 * }
958 * }
959 * }
960 *
961 * // in your component that uses the calendar
962 * providers: [{
963 * provide: CalendarA11y,
964 * useClass: CustomCalendarA11y
965 * }]
966 * ```
967 */
968var CalendarA11y = /** @class */ (function () {
969 function CalendarA11y(i18nPlural) {
970 this.i18nPlural = i18nPlural;
971 }
972 /**
973 * Aria label for the badges/date of a cell
974 * @example: `Saturday October 19 1 event click to expand`
975 */
976 CalendarA11y.prototype.monthCell = function (_a) {
977 var day = _a.day, locale = _a.locale;
978 if (day.badgeTotal > 0) {
979 return "\n " + formatDate(day.date, 'EEEE MMMM d', locale) + ",\n " + this.i18nPlural.transform(day.badgeTotal, {
980 '=0': 'No events',
981 '=1': 'One event',
982 other: '# events',
983 }) + ",\n click to expand\n ";
984 }
985 else {
986 return "" + formatDate(day.date, 'EEEE MMMM d', locale);
987 }
988 };
989 /**
990 * Aria label for the open day events start landmark
991 * @example: `Saturday October 19 expanded view`
992 */
993 CalendarA11y.prototype.openDayEventsLandmark = function (_a) {
994 var date = _a.date, locale = _a.locale;
995 return "\n Beginning of expanded view for " + formatDate(date, 'EEEE MMMM dd', locale) + "\n ";
996 };
997 /**
998 * Aria label for alert that a day in the month view was expanded
999 * @example: `Saturday October 19 expanded`
1000 */
1001 CalendarA11y.prototype.openDayEventsAlert = function (_a) {
1002 var date = _a.date, locale = _a.locale;
1003 return formatDate(date, 'EEEE MMMM dd', locale) + " expanded";
1004 };
1005 /**
1006 * Descriptive aria label for an event
1007 * @example: `Saturday October 19th, Scott's Pizza Party, from 11:00am to 5:00pm`
1008 */
1009 CalendarA11y.prototype.eventDescription = function (_a) {
1010 var event = _a.event, locale = _a.locale;
1011 if (event.allDay === true) {
1012 return this.allDayEventDescription({ event: event, locale: locale });
1013 }
1014 var aria = "\n " + formatDate(event.start, 'EEEE MMMM dd', locale) + ",\n " + event.title + ", from " + formatDate(event.start, 'hh:mm a', locale) + "\n ";
1015 if (event.end) {
1016 return aria + (" to " + formatDate(event.end, 'hh:mm a', locale));
1017 }
1018 return aria;
1019 };
1020 /**
1021 * Descriptive aria label for an all day event
1022 * @example:
1023 * `Scott's Party, event spans multiple days: start time October 19 5:00pm, no stop time`
1024 */
1025 CalendarA11y.prototype.allDayEventDescription = function (_a) {
1026 var event = _a.event, locale = _a.locale;
1027 var aria = "\n " + event.title + ", event spans multiple days:\n start time " + formatDate(event.start, 'MMMM dd hh:mm a', locale) + "\n ";
1028 if (event.end) {
1029 return (aria + (", stop time " + formatDate(event.end, 'MMMM d hh:mm a', locale)));
1030 }
1031 return aria + ", no stop time";
1032 };
1033 /**
1034 * Aria label for the calendar event actions icons
1035 * @returns 'Edit' for fa-pencil icons, and 'Delete' for fa-times icons
1036 */
1037 CalendarA11y.prototype.actionButtonLabel = function (_a) {
1038 var action = _a.action;
1039 return action.a11yLabel;
1040 };
1041 /**
1042 * @returns {number} Tab index to be given to month cells
1043 */
1044 CalendarA11y.prototype.monthCellTabIndex = function () {
1045 return 0;
1046 };
1047 /**
1048 * @returns true if the events inside the month cell should be aria-hidden
1049 */
1050 CalendarA11y.prototype.hideMonthCellEvents = function () {
1051 return true;
1052 };
1053 /**
1054 * @returns true if event titles should be aria-hidden (global)
1055 */
1056 CalendarA11y.prototype.hideEventTitle = function () {
1057 return true;
1058 };
1059 /**
1060 * @returns true if hour segments in the week view should be aria-hidden
1061 */
1062 CalendarA11y.prototype.hideWeekHourSegment = function () {
1063 return true;
1064 };
1065 /**
1066 * @returns true if hour segments in the day view should be aria-hidden
1067 */
1068 CalendarA11y.prototype.hideDayHourSegment = function () {
1069 return true;
1070 };
1071 CalendarA11y.ctorParameters = function () { return [
1072 { type: I18nPluralPipe }
1073 ]; };
1074 CalendarA11y = __decorate([
1075 Injectable(),
1076 __metadata("design:paramtypes", [I18nPluralPipe])
1077 ], CalendarA11y);
1078 return CalendarA11y;
1079}());
1080
1081/**
1082 * This pipe is primarily for rendering aria labels. Example usage:
1083 * ```typescript
1084 * // where `myEvent` is a `CalendarEvent` and myLocale is a locale identifier
1085 * {{ { event: myEvent, locale: myLocale } | calendarA11y: 'eventDescription' }}
1086 * ```
1087 */
1088var CalendarA11yPipe = /** @class */ (function () {
1089 function CalendarA11yPipe(calendarA11y, locale) {
1090 this.calendarA11y = calendarA11y;
1091 this.locale = locale;
1092 }
1093 CalendarA11yPipe.prototype.transform = function (a11yParams, method) {
1094 a11yParams.locale = a11yParams.locale || this.locale;
1095 if (typeof this.calendarA11y[method] === 'undefined') {
1096 var allowedMethods = Object.getOwnPropertyNames(Object.getPrototypeOf(CalendarA11y.prototype)).filter(function (iMethod) { return iMethod !== 'constructor'; });
1097 throw new Error(method + " is not a valid a11y method. Can only be one of " + allowedMethods.join(', '));
1098 }
1099 return this.calendarA11y[method](a11yParams);
1100 };
1101 CalendarA11yPipe.ctorParameters = function () { return [
1102 { type: CalendarA11y },
1103 { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] }
1104 ]; };
1105 CalendarA11yPipe = __decorate([
1106 Pipe({
1107 name: 'calendarA11y',
1108 }),
1109 __param(1, Inject(LOCALE_ID)),
1110 __metadata("design:paramtypes", [CalendarA11y, String])
1111 ], CalendarA11yPipe);
1112 return CalendarA11yPipe;
1113}());
1114
1115var MOMENT = new InjectionToken('Moment');
1116/**
1117 * This will use <a href="http://momentjs.com/" target="_blank">moment</a> to do all date formatting. To use this class:
1118 *
1119 * ```typescript
1120 * import { CalendarDateFormatter, CalendarMomentDateFormatter, MOMENT } from 'angular-calendar';
1121 * import moment from 'moment';
1122 *
1123 * // in your component
1124 * provide: [{
1125 * provide: MOMENT, useValue: moment
1126 * }, {
1127 * provide: CalendarDateFormatter, useClass: CalendarMomentDateFormatter
1128 * }]
1129 *
1130 * ```
1131 */
1132var CalendarMomentDateFormatter = /** @class */ (function () {
1133 /**
1134 * @hidden
1135 */
1136 function CalendarMomentDateFormatter(moment, dateAdapter) {
1137 this.moment = moment;
1138 this.dateAdapter = dateAdapter;
1139 }
1140 /**
1141 * The month view header week day labels
1142 */
1143 CalendarMomentDateFormatter.prototype.monthViewColumnHeader = function (_a) {
1144 var date = _a.date, locale = _a.locale;
1145 return this.moment(date).locale(locale).format('dddd');
1146 };
1147 /**
1148 * The month view cell day number
1149 */
1150 CalendarMomentDateFormatter.prototype.monthViewDayNumber = function (_a) {
1151 var date = _a.date, locale = _a.locale;
1152 return this.moment(date).locale(locale).format('D');
1153 };
1154 /**
1155 * The month view title
1156 */
1157 CalendarMomentDateFormatter.prototype.monthViewTitle = function (_a) {
1158 var date = _a.date, locale = _a.locale;
1159 return this.moment(date).locale(locale).format('MMMM YYYY');
1160 };
1161 /**
1162 * The week view header week day labels
1163 */
1164 CalendarMomentDateFormatter.prototype.weekViewColumnHeader = function (_a) {
1165 var date = _a.date, locale = _a.locale;
1166 return this.moment(date).locale(locale).format('dddd');
1167 };
1168 /**
1169 * The week view sub header day and month labels
1170 */
1171 CalendarMomentDateFormatter.prototype.weekViewColumnSubHeader = function (_a) {
1172 var date = _a.date, locale = _a.locale;
1173 return this.moment(date).locale(locale).format('MMM D');
1174 };
1175 /**
1176 * The week view title
1177 */
1178 CalendarMomentDateFormatter.prototype.weekViewTitle = function (_a) {
1179 var _this = this;
1180 var date = _a.date, locale = _a.locale, weekStartsOn = _a.weekStartsOn, excludeDays = _a.excludeDays, daysInWeek = _a.daysInWeek;
1181 var _b = getWeekViewPeriod(this.dateAdapter, date, weekStartsOn, excludeDays, daysInWeek), viewStart = _b.viewStart, viewEnd = _b.viewEnd;
1182 var format = function (dateToFormat, showYear) {
1183 return _this.moment(dateToFormat)
1184 .locale(locale)
1185 .format('MMM D' + (showYear ? ', YYYY' : ''));
1186 };
1187 return format(viewStart, viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear()) + " - " + format(viewEnd, true);
1188 };
1189 /**
1190 * The time formatting down the left hand side of the week view
1191 */
1192 CalendarMomentDateFormatter.prototype.weekViewHour = function (_a) {
1193 var date = _a.date, locale = _a.locale;
1194 return this.moment(date).locale(locale).format('ha');
1195 };
1196 /**
1197 * The time formatting down the left hand side of the day view
1198 */
1199 CalendarMomentDateFormatter.prototype.dayViewHour = function (_a) {
1200 var date = _a.date, locale = _a.locale;
1201 return this.moment(date).locale(locale).format('ha');
1202 };
1203 /**
1204 * The day view title
1205 */
1206 CalendarMomentDateFormatter.prototype.dayViewTitle = function (_a) {
1207 var date = _a.date, locale = _a.locale;
1208 return this.moment(date).locale(locale).format('dddd, D MMMM, YYYY');
1209 };
1210 CalendarMomentDateFormatter.ctorParameters = function () { return [
1211 { type: undefined, decorators: [{ type: Inject, args: [MOMENT,] }] },
1212 { type: DateAdapter }
1213 ]; };
1214 CalendarMomentDateFormatter = __decorate([
1215 Injectable(),
1216 __param(0, Inject(MOMENT)),
1217 __metadata("design:paramtypes", [Object, DateAdapter])
1218 ], CalendarMomentDateFormatter);
1219 return CalendarMomentDateFormatter;
1220}());
1221
1222/**
1223 * This will use <a href="https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Intl" target="_blank">Intl</a> API to do all date formatting.
1224 *
1225 * You will need to include a <a href="https://github.com/andyearnshaw/Intl.js/">polyfill</a> for older browsers.
1226 */
1227var CalendarNativeDateFormatter = /** @class */ (function () {
1228 function CalendarNativeDateFormatter(dateAdapter) {
1229 this.dateAdapter = dateAdapter;
1230 }
1231 /**
1232 * The month view header week day labels
1233 */
1234 CalendarNativeDateFormatter.prototype.monthViewColumnHeader = function (_a) {
1235 var date = _a.date, locale = _a.locale;
1236 return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);
1237 };
1238 /**
1239 * The month view cell day number
1240 */
1241 CalendarNativeDateFormatter.prototype.monthViewDayNumber = function (_a) {
1242 var date = _a.date, locale = _a.locale;
1243 return new Intl.DateTimeFormat(locale, { day: 'numeric' }).format(date);
1244 };
1245 /**
1246 * The month view title
1247 */
1248 CalendarNativeDateFormatter.prototype.monthViewTitle = function (_a) {
1249 var date = _a.date, locale = _a.locale;
1250 return new Intl.DateTimeFormat(locale, {
1251 year: 'numeric',
1252 month: 'long',
1253 }).format(date);
1254 };
1255 /**
1256 * The week view header week day labels
1257 */
1258 CalendarNativeDateFormatter.prototype.weekViewColumnHeader = function (_a) {
1259 var date = _a.date, locale = _a.locale;
1260 return new Intl.DateTimeFormat(locale, { weekday: 'long' }).format(date);
1261 };
1262 /**
1263 * The week view sub header day and month labels
1264 */
1265 CalendarNativeDateFormatter.prototype.weekViewColumnSubHeader = function (_a) {
1266 var date = _a.date, locale = _a.locale;
1267 return new Intl.DateTimeFormat(locale, {
1268 day: 'numeric',
1269 month: 'short',
1270 }).format(date);
1271 };
1272 /**
1273 * The week view title
1274 */
1275 CalendarNativeDateFormatter.prototype.weekViewTitle = function (_a) {
1276 var date = _a.date, locale = _a.locale, weekStartsOn = _a.weekStartsOn, excludeDays = _a.excludeDays, daysInWeek = _a.daysInWeek;
1277 var _b = getWeekViewPeriod(this.dateAdapter, date, weekStartsOn, excludeDays, daysInWeek), viewStart = _b.viewStart, viewEnd = _b.viewEnd;
1278 var format = function (dateToFormat, showYear) {
1279 return new Intl.DateTimeFormat(locale, {
1280 day: 'numeric',
1281 month: 'short',
1282 year: showYear ? 'numeric' : undefined,
1283 }).format(dateToFormat);
1284 };
1285 return format(viewStart, viewStart.getUTCFullYear() !== viewEnd.getUTCFullYear()) + " - " + format(viewEnd, true);
1286 };
1287 /**
1288 * The time formatting down the left hand side of the week view
1289 */
1290 CalendarNativeDateFormatter.prototype.weekViewHour = function (_a) {
1291 var date = _a.date, locale = _a.locale;
1292 return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).format(date);
1293 };
1294 /**
1295 * The time formatting down the left hand side of the day view
1296 */
1297 CalendarNativeDateFormatter.prototype.dayViewHour = function (_a) {
1298 var date = _a.date, locale = _a.locale;
1299 return new Intl.DateTimeFormat(locale, { hour: 'numeric' }).format(date);
1300 };
1301 /**
1302 * The day view title
1303 */
1304 CalendarNativeDateFormatter.prototype.dayViewTitle = function (_a) {
1305 var date = _a.date, locale = _a.locale;
1306 return new Intl.DateTimeFormat(locale, {
1307 day: 'numeric',
1308 month: 'long',
1309 year: 'numeric',
1310 weekday: 'long',
1311 }).format(date);
1312 };
1313 CalendarNativeDateFormatter.ctorParameters = function () { return [
1314 { type: DateAdapter }
1315 ]; };
1316 CalendarNativeDateFormatter = __decorate([
1317 Injectable(),
1318 __metadata("design:paramtypes", [DateAdapter])
1319 ], CalendarNativeDateFormatter);
1320 return CalendarNativeDateFormatter;
1321}());
1322
1323var CalendarEventTimesChangedEventType;
1324(function (CalendarEventTimesChangedEventType) {
1325 CalendarEventTimesChangedEventType["Drag"] = "drag";
1326 CalendarEventTimesChangedEventType["Drop"] = "drop";
1327 CalendarEventTimesChangedEventType["Resize"] = "resize";
1328})(CalendarEventTimesChangedEventType || (CalendarEventTimesChangedEventType = {}));
1329
1330/**
1331 * Import this module to if you're just using a singular view and want to save on bundle size. Example usage:
1332 *
1333 * ```typescript
1334 * import { CalendarCommonModule, CalendarMonthModule } from 'angular-calendar';
1335 *
1336 * @NgModule({
1337 * imports: [
1338 * CalendarCommonModule.forRoot(),
1339 * CalendarMonthModule
1340 * ]
1341 * })
1342 * class MyModule {}
1343 * ```
1344 *
1345 */
1346var CalendarCommonModule = /** @class */ (function () {
1347 function CalendarCommonModule() {
1348 }
1349 CalendarCommonModule_1 = CalendarCommonModule;
1350 CalendarCommonModule.forRoot = function (dateAdapter, config) {
1351 if (config === void 0) { config = {}; }
1352 return {
1353 ngModule: CalendarCommonModule_1,
1354 providers: [
1355 dateAdapter,
1356 config.eventTitleFormatter || CalendarEventTitleFormatter,
1357 config.dateFormatter || CalendarDateFormatter,
1358 config.utils || CalendarUtils,
1359 config.a11y || CalendarA11y,
1360 ],
1361 };
1362 };
1363 var CalendarCommonModule_1;
1364 CalendarCommonModule = CalendarCommonModule_1 = __decorate([
1365 NgModule({
1366 declarations: [
1367 CalendarEventActionsComponent,
1368 CalendarEventTitleComponent,
1369 CalendarTooltipWindowComponent,
1370 CalendarTooltipDirective,
1371 CalendarPreviousViewDirective,
1372 CalendarNextViewDirective,
1373 CalendarTodayDirective,
1374 CalendarDatePipe,
1375 CalendarEventTitlePipe,
1376 CalendarA11yPipe,
1377 ClickDirective,
1378 KeydownEnterDirective,
1379 ],
1380 imports: [CommonModule],
1381 exports: [
1382 CalendarEventActionsComponent,
1383 CalendarEventTitleComponent,
1384 CalendarTooltipWindowComponent,
1385 CalendarTooltipDirective,
1386 CalendarPreviousViewDirective,
1387 CalendarNextViewDirective,
1388 CalendarTodayDirective,
1389 CalendarDatePipe,
1390 CalendarEventTitlePipe,
1391 CalendarA11yPipe,
1392 ClickDirective,
1393 KeydownEnterDirective,
1394 ],
1395 providers: [I18nPluralPipe],
1396 entryComponents: [CalendarTooltipWindowComponent],
1397 })
1398 ], CalendarCommonModule);
1399 return CalendarCommonModule;
1400}());
1401
1402/**
1403 * Shows all events on a given month. Example usage:
1404 *
1405 * ```typescript
1406 * <mwl-calendar-month-view
1407 * [viewDate]="viewDate"
1408 * [events]="events">
1409 * </mwl-calendar-month-view>
1410 * ```
1411 */
1412var CalendarMonthViewComponent = /** @class */ (function () {
1413 /**
1414 * @hidden
1415 */
1416 function CalendarMonthViewComponent(cdr, utils, locale, dateAdapter) {
1417 var _this = this;
1418 this.cdr = cdr;
1419 this.utils = utils;
1420 this.dateAdapter = dateAdapter;
1421 /**
1422 * An array of events to display on view.
1423 * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63
1424 */
1425 this.events = [];
1426 /**
1427 * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view
1428 */
1429 this.excludeDays = [];
1430 /**
1431 * Whether the events list for the day of the `viewDate` option is visible or not
1432 */
1433 this.activeDayIsOpen = false;
1434 /**
1435 * The placement of the event tooltip
1436 */
1437 this.tooltipPlacement = 'auto';
1438 /**
1439 * Whether to append tooltips to the body or next to the trigger element
1440 */
1441 this.tooltipAppendToBody = true;
1442 /**
1443 * The delay in milliseconds before the tooltip should be displayed. If not provided the tooltip
1444 * will be displayed immediately.
1445 */
1446 this.tooltipDelay = null;
1447 /**
1448 * An output that will be called before the view is rendered for the current month.
1449 * If you add the `cssClass` property to a day in the body it will add that class to the cell element in the template
1450 */
1451 this.beforeViewRender = new EventEmitter();
1452 /**
1453 * Called when the day cell is clicked
1454 */
1455 this.dayClicked = new EventEmitter();
1456 /**
1457 * Called when the event title is clicked
1458 */
1459 this.eventClicked = new EventEmitter();
1460 /**
1461 * Called when a header week day is clicked. Returns ISO day number.
1462 */
1463 this.columnHeaderClicked = new EventEmitter();
1464 /**
1465 * Called when an event is dragged and dropped
1466 */
1467 this.eventTimesChanged = new EventEmitter();
1468 /**
1469 * @hidden
1470 */
1471 this.trackByRowOffset = function (index, offset) {
1472 return _this.view.days
1473 .slice(offset, _this.view.totalDaysVisibleInWeek)
1474 .map(function (day) { return day.date.toISOString(); })
1475 .join('-');
1476 };
1477 /**
1478 * @hidden
1479 */
1480 this.trackByDate = function (index, day) { return day.date.toISOString(); };
1481 this.locale = locale;
1482 }
1483 /**
1484 * @hidden
1485 */
1486 CalendarMonthViewComponent.prototype.ngOnInit = function () {
1487 var _this = this;
1488 if (this.refresh) {
1489 this.refreshSubscription = this.refresh.subscribe(function () {
1490 _this.refreshAll();
1491 _this.cdr.markForCheck();
1492 });
1493 }
1494 };
1495 /**
1496 * @hidden
1497 */
1498 CalendarMonthViewComponent.prototype.ngOnChanges = function (changes) {
1499 var refreshHeader = changes.viewDate || changes.excludeDays || changes.weekendDays;
1500 var refreshBody = changes.viewDate ||
1501 changes.events ||
1502 changes.excludeDays ||
1503 changes.weekendDays;
1504 if (refreshHeader) {
1505 this.refreshHeader();
1506 }
1507 if (changes.events) {
1508 validateEvents(this.events);
1509 }
1510 if (refreshBody) {
1511 this.refreshBody();
1512 }
1513 if (refreshHeader || refreshBody) {
1514 this.emitBeforeViewRender();
1515 }
1516 if (changes.activeDayIsOpen ||
1517 changes.viewDate ||
1518 changes.events ||
1519 changes.excludeDays ||
1520 changes.activeDay) {
1521 this.checkActiveDayIsOpen();
1522 }
1523 };
1524 /**
1525 * @hidden
1526 */
1527 CalendarMonthViewComponent.prototype.ngOnDestroy = function () {
1528 if (this.refreshSubscription) {
1529 this.refreshSubscription.unsubscribe();
1530 }
1531 };
1532 /**
1533 * @hidden
1534 */
1535 CalendarMonthViewComponent.prototype.toggleDayHighlight = function (event, isHighlighted) {
1536 this.view.days.forEach(function (day) {
1537 if (isHighlighted && day.events.indexOf(event) > -1) {
1538 day.backgroundColor =
1539 (event.color && event.color.secondary) || '#D1E8FF';
1540 }
1541 else {
1542 delete day.backgroundColor;
1543 }
1544 });
1545 };
1546 /**
1547 * @hidden
1548 */
1549 CalendarMonthViewComponent.prototype.eventDropped = function (droppedOn, event, draggedFrom) {
1550 if (droppedOn !== draggedFrom) {
1551 var year = this.dateAdapter.getYear(droppedOn.date);
1552 var month = this.dateAdapter.getMonth(droppedOn.date);
1553 var date = this.dateAdapter.getDate(droppedOn.date);
1554 var newStart = this.dateAdapter.setDate(this.dateAdapter.setMonth(this.dateAdapter.setYear(event.start, year), month), date);
1555 var newEnd = void 0;
1556 if (event.end) {
1557 var secondsDiff = this.dateAdapter.differenceInSeconds(newStart, event.start);
1558 newEnd = this.dateAdapter.addSeconds(event.end, secondsDiff);
1559 }
1560 this.eventTimesChanged.emit({
1561 event: event,
1562 newStart: newStart,
1563 newEnd: newEnd,
1564 day: droppedOn,
1565 type: CalendarEventTimesChangedEventType.Drop,
1566 });
1567 }
1568 };
1569 CalendarMonthViewComponent.prototype.refreshHeader = function () {
1570 this.columnHeaders = this.utils.getWeekViewHeader({
1571 viewDate: this.viewDate,
1572 weekStartsOn: this.weekStartsOn,
1573 excluded: this.excludeDays,
1574 weekendDays: this.weekendDays,
1575 });
1576 };
1577 CalendarMonthViewComponent.prototype.refreshBody = function () {
1578 this.view = this.utils.getMonthView({
1579 events: this.events,
1580 viewDate: this.viewDate,
1581 weekStartsOn: this.weekStartsOn,
1582 excluded: this.excludeDays,
1583 weekendDays: this.weekendDays,
1584 });
1585 };
1586 CalendarMonthViewComponent.prototype.checkActiveDayIsOpen = function () {
1587 var _this = this;
1588 if (this.activeDayIsOpen === true) {
1589 var activeDay_1 = this.activeDay || this.viewDate;
1590 this.openDay = this.view.days.find(function (day) {
1591 return _this.dateAdapter.isSameDay(day.date, activeDay_1);
1592 });
1593 var index = this.view.days.indexOf(this.openDay);
1594 this.openRowIndex =
1595 Math.floor(index / this.view.totalDaysVisibleInWeek) *
1596 this.view.totalDaysVisibleInWeek;
1597 }
1598 else {
1599 this.openRowIndex = null;
1600 this.openDay = null;
1601 }
1602 };
1603 CalendarMonthViewComponent.prototype.refreshAll = function () {
1604 this.refreshHeader();
1605 this.refreshBody();
1606 this.emitBeforeViewRender();
1607 this.checkActiveDayIsOpen();
1608 };
1609 CalendarMonthViewComponent.prototype.emitBeforeViewRender = function () {
1610 if (this.columnHeaders && this.view) {
1611 this.beforeViewRender.emit({
1612 header: this.columnHeaders,
1613 body: this.view.days,
1614 period: this.view.period,
1615 });
1616 }
1617 };
1618 CalendarMonthViewComponent.ctorParameters = function () { return [
1619 { type: ChangeDetectorRef },
1620 { type: CalendarUtils },
1621 { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },
1622 { type: DateAdapter }
1623 ]; };
1624 __decorate([
1625 Input(),
1626 __metadata("design:type", Date)
1627 ], CalendarMonthViewComponent.prototype, "viewDate", void 0);
1628 __decorate([
1629 Input(),
1630 __metadata("design:type", Array)
1631 ], CalendarMonthViewComponent.prototype, "events", void 0);
1632 __decorate([
1633 Input(),
1634 __metadata("design:type", Array)
1635 ], CalendarMonthViewComponent.prototype, "excludeDays", void 0);
1636 __decorate([
1637 Input(),
1638 __metadata("design:type", Boolean)
1639 ], CalendarMonthViewComponent.prototype, "activeDayIsOpen", void 0);
1640 __decorate([
1641 Input(),
1642 __metadata("design:type", Date)
1643 ], CalendarMonthViewComponent.prototype, "activeDay", void 0);
1644 __decorate([
1645 Input(),
1646 __metadata("design:type", Subject)
1647 ], CalendarMonthViewComponent.prototype, "refresh", void 0);
1648 __decorate([
1649 Input(),
1650 __metadata("design:type", String)
1651 ], CalendarMonthViewComponent.prototype, "locale", void 0);
1652 __decorate([
1653 Input(),
1654 __metadata("design:type", Object)
1655 ], CalendarMonthViewComponent.prototype, "tooltipPlacement", void 0);
1656 __decorate([
1657 Input(),
1658 __metadata("design:type", TemplateRef)
1659 ], CalendarMonthViewComponent.prototype, "tooltipTemplate", void 0);
1660 __decorate([
1661 Input(),
1662 __metadata("design:type", Boolean)
1663 ], CalendarMonthViewComponent.prototype, "tooltipAppendToBody", void 0);
1664 __decorate([
1665 Input(),
1666 __metadata("design:type", Number)
1667 ], CalendarMonthViewComponent.prototype, "tooltipDelay", void 0);
1668 __decorate([
1669 Input(),
1670 __metadata("design:type", Number)
1671 ], CalendarMonthViewComponent.prototype, "weekStartsOn", void 0);
1672 __decorate([
1673 Input(),
1674 __metadata("design:type", TemplateRef)
1675 ], CalendarMonthViewComponent.prototype, "headerTemplate", void 0);
1676 __decorate([
1677 Input(),
1678 __metadata("design:type", TemplateRef)
1679 ], CalendarMonthViewComponent.prototype, "cellTemplate", void 0);
1680 __decorate([
1681 Input(),
1682 __metadata("design:type", TemplateRef)
1683 ], CalendarMonthViewComponent.prototype, "openDayEventsTemplate", void 0);
1684 __decorate([
1685 Input(),
1686 __metadata("design:type", TemplateRef)
1687 ], CalendarMonthViewComponent.prototype, "eventTitleTemplate", void 0);
1688 __decorate([
1689 Input(),
1690 __metadata("design:type", TemplateRef)
1691 ], CalendarMonthViewComponent.prototype, "eventActionsTemplate", void 0);
1692 __decorate([
1693 Input(),
1694 __metadata("design:type", Array)
1695 ], CalendarMonthViewComponent.prototype, "weekendDays", void 0);
1696 __decorate([
1697 Output(),
1698 __metadata("design:type", Object)
1699 ], CalendarMonthViewComponent.prototype, "beforeViewRender", void 0);
1700 __decorate([
1701 Output(),
1702 __metadata("design:type", Object)
1703 ], CalendarMonthViewComponent.prototype, "dayClicked", void 0);
1704 __decorate([
1705 Output(),
1706 __metadata("design:type", Object)
1707 ], CalendarMonthViewComponent.prototype, "eventClicked", void 0);
1708 __decorate([
1709 Output(),
1710 __metadata("design:type", Object)
1711 ], CalendarMonthViewComponent.prototype, "columnHeaderClicked", void 0);
1712 __decorate([
1713 Output(),
1714 __metadata("design:type", Object)
1715 ], CalendarMonthViewComponent.prototype, "eventTimesChanged", void 0);
1716 CalendarMonthViewComponent = __decorate([
1717 Component({
1718 selector: 'mwl-calendar-month-view',
1719 template: "\n <div class=\"cal-month-view\" role=\"grid\">\n <mwl-calendar-month-view-header\n [days]=\"columnHeaders\"\n [locale]=\"locale\"\n (columnHeaderClicked)=\"columnHeaderClicked.emit($event)\"\n [customTemplate]=\"headerTemplate\"\n >\n </mwl-calendar-month-view-header>\n <div class=\"cal-days\">\n <div\n *ngFor=\"let rowIndex of view.rowOffsets; trackBy: trackByRowOffset\"\n >\n <div role=\"row\" class=\"cal-cell-row\">\n <mwl-calendar-month-cell\n role=\"gridcell\"\n *ngFor=\"\n let day of view.days\n | slice: rowIndex:rowIndex + view.totalDaysVisibleInWeek;\n trackBy: trackByDate\n \"\n [ngClass]=\"day?.cssClass\"\n [day]=\"day\"\n [openDay]=\"openDay\"\n [locale]=\"locale\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipDelay]=\"tooltipDelay\"\n [customTemplate]=\"cellTemplate\"\n [ngStyle]=\"{ backgroundColor: day.backgroundColor }\"\n (mwlClick)=\"dayClicked.emit({ day: day, sourceEvent: $event })\"\n [clickListenerDisabled]=\"dayClicked.observers.length === 0\"\n (mwlKeydownEnter)=\"\n dayClicked.emit({ day: day, sourceEvent: $event })\n \"\n (highlightDay)=\"toggleDayHighlight($event.event, true)\"\n (unhighlightDay)=\"toggleDayHighlight($event.event, false)\"\n mwlDroppable\n dragOverClass=\"cal-drag-over\"\n (drop)=\"\n eventDropped(\n day,\n $event.dropData.event,\n $event.dropData.draggedFrom\n )\n \"\n (eventClicked)=\"\n eventClicked.emit({\n event: $event.event,\n sourceEvent: $event.sourceEvent\n })\n \"\n [attr.tabindex]=\"{} | calendarA11y: 'monthCellTabIndex'\"\n >\n </mwl-calendar-month-cell>\n </div>\n <mwl-calendar-open-day-events\n [locale]=\"locale\"\n [isOpen]=\"openRowIndex === rowIndex\"\n [events]=\"openDay?.events\"\n [date]=\"openDay?.date\"\n [customTemplate]=\"openDayEventsTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n (eventClicked)=\"\n eventClicked.emit({\n event: $event.event,\n sourceEvent: $event.sourceEvent\n })\n \"\n mwlDroppable\n dragOverClass=\"cal-drag-over\"\n (drop)=\"\n eventDropped(\n openDay,\n $event.dropData.event,\n $event.dropData.draggedFrom\n )\n \"\n >\n </mwl-calendar-open-day-events>\n </div>\n </div>\n </div>\n "
1720 }),
1721 __param(2, Inject(LOCALE_ID)),
1722 __metadata("design:paramtypes", [ChangeDetectorRef,
1723 CalendarUtils, String, DateAdapter])
1724 ], CalendarMonthViewComponent);
1725 return CalendarMonthViewComponent;
1726}());
1727
1728var CalendarMonthViewHeaderComponent = /** @class */ (function () {
1729 function CalendarMonthViewHeaderComponent() {
1730 this.columnHeaderClicked = new EventEmitter();
1731 this.trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;
1732 }
1733 __decorate([
1734 Input(),
1735 __metadata("design:type", Array)
1736 ], CalendarMonthViewHeaderComponent.prototype, "days", void 0);
1737 __decorate([
1738 Input(),
1739 __metadata("design:type", String)
1740 ], CalendarMonthViewHeaderComponent.prototype, "locale", void 0);
1741 __decorate([
1742 Input(),
1743 __metadata("design:type", TemplateRef)
1744 ], CalendarMonthViewHeaderComponent.prototype, "customTemplate", void 0);
1745 __decorate([
1746 Output(),
1747 __metadata("design:type", Object)
1748 ], CalendarMonthViewHeaderComponent.prototype, "columnHeaderClicked", void 0);
1749 CalendarMonthViewHeaderComponent = __decorate([
1750 Component({
1751 selector: 'mwl-calendar-month-view-header',
1752 template: "\n <ng-template\n #defaultTemplate\n let-days=\"days\"\n let-locale=\"locale\"\n let-trackByWeekDayHeaderDate=\"trackByWeekDayHeaderDate\"\n >\n <div class=\"cal-cell-row cal-header\" role=\"row\">\n <div\n class=\"cal-cell\"\n *ngFor=\"let day of days; trackBy: trackByWeekDayHeaderDate\"\n [class.cal-past]=\"day.isPast\"\n [class.cal-today]=\"day.isToday\"\n [class.cal-future]=\"day.isFuture\"\n [class.cal-weekend]=\"day.isWeekend\"\n (click)=\"\n columnHeaderClicked.emit({\n isoDayNumber: day.day,\n sourceEvent: $event\n })\n \"\n [ngClass]=\"day.cssClass\"\n tabindex=\"0\"\n role=\"columnheader\"\n >\n {{ day.date | calendarDate: 'monthViewColumnHeader':locale }}\n </div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n days: days,\n locale: locale,\n trackByWeekDayHeaderDate: trackByWeekDayHeaderDate\n }\"\n >\n </ng-template>\n "
1753 })
1754 ], CalendarMonthViewHeaderComponent);
1755 return CalendarMonthViewHeaderComponent;
1756}());
1757
1758var CalendarMonthCellComponent = /** @class */ (function () {
1759 function CalendarMonthCellComponent() {
1760 this.highlightDay = new EventEmitter();
1761 this.unhighlightDay = new EventEmitter();
1762 this.eventClicked = new EventEmitter();
1763 this.trackByEventId = trackByEventId;
1764 this.validateDrag = isWithinThreshold;
1765 }
1766 __decorate([
1767 Input(),
1768 __metadata("design:type", Object)
1769 ], CalendarMonthCellComponent.prototype, "day", void 0);
1770 __decorate([
1771 Input(),
1772 __metadata("design:type", Object)
1773 ], CalendarMonthCellComponent.prototype, "openDay", void 0);
1774 __decorate([
1775 Input(),
1776 __metadata("design:type", String)
1777 ], CalendarMonthCellComponent.prototype, "locale", void 0);
1778 __decorate([
1779 Input(),
1780 __metadata("design:type", Object)
1781 ], CalendarMonthCellComponent.prototype, "tooltipPlacement", void 0);
1782 __decorate([
1783 Input(),
1784 __metadata("design:type", Boolean)
1785 ], CalendarMonthCellComponent.prototype, "tooltipAppendToBody", void 0);
1786 __decorate([
1787 Input(),
1788 __metadata("design:type", TemplateRef)
1789 ], CalendarMonthCellComponent.prototype, "customTemplate", void 0);
1790 __decorate([
1791 Input(),
1792 __metadata("design:type", TemplateRef)
1793 ], CalendarMonthCellComponent.prototype, "tooltipTemplate", void 0);
1794 __decorate([
1795 Input(),
1796 __metadata("design:type", Number)
1797 ], CalendarMonthCellComponent.prototype, "tooltipDelay", void 0);
1798 __decorate([
1799 Output(),
1800 __metadata("design:type", EventEmitter)
1801 ], CalendarMonthCellComponent.prototype, "highlightDay", void 0);
1802 __decorate([
1803 Output(),
1804 __metadata("design:type", EventEmitter)
1805 ], CalendarMonthCellComponent.prototype, "unhighlightDay", void 0);
1806 __decorate([
1807 Output(),
1808 __metadata("design:type", Object)
1809 ], CalendarMonthCellComponent.prototype, "eventClicked", void 0);
1810 CalendarMonthCellComponent = __decorate([
1811 Component({
1812 selector: 'mwl-calendar-month-cell',
1813 template: "\n <ng-template\n #defaultTemplate\n let-day=\"day\"\n let-openDay=\"openDay\"\n let-locale=\"locale\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-highlightDay=\"highlightDay\"\n let-unhighlightDay=\"unhighlightDay\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDelay=\"tooltipDelay\"\n let-trackByEventId=\"trackByEventId\"\n let-validateDrag=\"validateDrag\"\n >\n <div\n class=\"cal-cell-top\"\n [attr.aria-label]=\"\n { day: day, locale: locale } | calendarA11y: 'monthCell'\n \"\n >\n <span aria-hidden=\"true\">\n <span class=\"cal-day-badge\" *ngIf=\"day.badgeTotal > 0\">{{\n day.badgeTotal\n }}</span>\n <span class=\"cal-day-number\">{{\n day.date | calendarDate: 'monthViewDayNumber':locale\n }}</span>\n </span>\n </div>\n <div class=\"cal-events\" *ngIf=\"day.events.length > 0\">\n <div\n class=\"cal-event\"\n *ngFor=\"let event of day.events; trackBy: trackByEventId\"\n [ngStyle]=\"{ backgroundColor: event.color?.primary }\"\n [ngClass]=\"event?.cssClass\"\n (mouseenter)=\"highlightDay.emit({ event: event })\"\n (mouseleave)=\"unhighlightDay.emit({ event: event })\"\n [mwlCalendarTooltip]=\"\n event.title | calendarEventTitle: 'monthTooltip':event\n \"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n mwlDraggable\n [class.cal-draggable]=\"event.draggable\"\n dragActiveClass=\"cal-drag-active\"\n [dropData]=\"{ event: event, draggedFrom: day }\"\n [dragAxis]=\"{ x: event.draggable, y: event.draggable }\"\n [validateDrag]=\"validateDrag\"\n [touchStartLongPress]=\"{ delay: 300, delta: 30 }\"\n (mwlClick)=\"eventClicked.emit({ event: event, sourceEvent: $event })\"\n [attr.aria-hidden]=\"{} | calendarA11y: 'hideMonthCellEvents'\"\n ></div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n day: day,\n openDay: openDay,\n locale: locale,\n tooltipPlacement: tooltipPlacement,\n highlightDay: highlightDay,\n unhighlightDay: unhighlightDay,\n eventClicked: eventClicked,\n tooltipTemplate: tooltipTemplate,\n tooltipAppendToBody: tooltipAppendToBody,\n tooltipDelay: tooltipDelay,\n trackByEventId: trackByEventId,\n validateDrag: validateDrag\n }\"\n >\n </ng-template>\n ",
1814 host: {
1815 class: 'cal-cell cal-day-cell',
1816 '[class.cal-past]': 'day.isPast',
1817 '[class.cal-today]': 'day.isToday',
1818 '[class.cal-future]': 'day.isFuture',
1819 '[class.cal-weekend]': 'day.isWeekend',
1820 '[class.cal-in-month]': 'day.inMonth',
1821 '[class.cal-out-month]': '!day.inMonth',
1822 '[class.cal-has-events]': 'day.events.length > 0',
1823 '[class.cal-open]': 'day === openDay',
1824 '[class.cal-event-highlight]': '!!day.backgroundColor',
1825 }
1826 })
1827 ], CalendarMonthCellComponent);
1828 return CalendarMonthCellComponent;
1829}());
1830
1831var collapseAnimation = trigger('collapse', [
1832 state('void', style({
1833 height: 0,
1834 overflow: 'hidden',
1835 'padding-top': 0,
1836 'padding-bottom': 0,
1837 })),
1838 state('*', style({
1839 height: '*',
1840 overflow: 'hidden',
1841 'padding-top': '*',
1842 'padding-bottom': '*',
1843 })),
1844 transition('* => void', animate('150ms ease-out')),
1845 transition('void => *', animate('150ms ease-in')),
1846]);
1847var CalendarOpenDayEventsComponent = /** @class */ (function () {
1848 function CalendarOpenDayEventsComponent() {
1849 this.isOpen = false;
1850 this.eventClicked = new EventEmitter();
1851 this.trackByEventId = trackByEventId;
1852 this.validateDrag = isWithinThreshold;
1853 }
1854 __decorate([
1855 Input(),
1856 __metadata("design:type", String)
1857 ], CalendarOpenDayEventsComponent.prototype, "locale", void 0);
1858 __decorate([
1859 Input(),
1860 __metadata("design:type", Boolean)
1861 ], CalendarOpenDayEventsComponent.prototype, "isOpen", void 0);
1862 __decorate([
1863 Input(),
1864 __metadata("design:type", Array)
1865 ], CalendarOpenDayEventsComponent.prototype, "events", void 0);
1866 __decorate([
1867 Input(),
1868 __metadata("design:type", TemplateRef)
1869 ], CalendarOpenDayEventsComponent.prototype, "customTemplate", void 0);
1870 __decorate([
1871 Input(),
1872 __metadata("design:type", TemplateRef)
1873 ], CalendarOpenDayEventsComponent.prototype, "eventTitleTemplate", void 0);
1874 __decorate([
1875 Input(),
1876 __metadata("design:type", TemplateRef)
1877 ], CalendarOpenDayEventsComponent.prototype, "eventActionsTemplate", void 0);
1878 __decorate([
1879 Input(),
1880 __metadata("design:type", Date)
1881 ], CalendarOpenDayEventsComponent.prototype, "date", void 0);
1882 __decorate([
1883 Output(),
1884 __metadata("design:type", Object)
1885 ], CalendarOpenDayEventsComponent.prototype, "eventClicked", void 0);
1886 CalendarOpenDayEventsComponent = __decorate([
1887 Component({
1888 selector: 'mwl-calendar-open-day-events',
1889 template: "\n <ng-template\n #defaultTemplate\n let-events=\"events\"\n let-eventClicked=\"eventClicked\"\n let-isOpen=\"isOpen\"\n let-trackByEventId=\"trackByEventId\"\n let-validateDrag=\"validateDrag\"\n >\n <div\n class=\"cal-open-day-events\"\n [@collapse]\n *ngIf=\"isOpen\"\n role=\"application\"\n >\n <span\n tabindex=\"-1\"\n role=\"alert\"\n [attr.aria-label]=\"\n { date: date, locale: locale } | calendarA11y: 'openDayEventsAlert'\n \"\n ></span>\n <span\n tabindex=\"0\"\n role=\"landmark\"\n [attr.aria-label]=\"\n { date: date, locale: locale }\n | calendarA11y: 'openDayEventsLandmark'\n \"\n ></span>\n <div\n *ngFor=\"let event of events; trackBy: trackByEventId\"\n [ngClass]=\"event?.cssClass\"\n mwlDraggable\n [class.cal-draggable]=\"event.draggable\"\n dragActiveClass=\"cal-drag-active\"\n [dropData]=\"{ event: event }\"\n [dragAxis]=\"{ x: event.draggable, y: event.draggable }\"\n [validateDrag]=\"validateDrag\"\n [touchStartLongPress]=\"{ delay: 300, delta: 30 }\"\n >\n <span\n class=\"cal-event\"\n [ngStyle]=\"{ backgroundColor: event.color?.primary }\"\n >\n </span>\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"event\"\n [customTemplate]=\"eventTitleTemplate\"\n view=\"month\"\n (mwlClick)=\"\n eventClicked.emit({ event: event, sourceEvent: $event })\n \"\n (mwlKeydownEnter)=\"\n eventClicked.emit({ event: event, sourceEvent: $event })\n \"\n tabindex=\"0\"\n [attr.aria-label]=\"\n { event: event, locale: locale }\n | calendarA11y: 'eventDescription'\n \"\n >\n </mwl-calendar-event-title>\n &ngsp;\n <mwl-calendar-event-actions\n [event]=\"event\"\n [customTemplate]=\"eventActionsTemplate\"\n >\n </mwl-calendar-event-actions>\n </div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n events: events,\n eventClicked: eventClicked,\n isOpen: isOpen,\n trackByEventId: trackByEventId,\n validateDrag: validateDrag\n }\"\n >\n </ng-template>\n ",
1890 animations: [collapseAnimation]
1891 })
1892 ], CalendarOpenDayEventsComponent);
1893 return CalendarOpenDayEventsComponent;
1894}());
1895
1896var CalendarMonthModule = /** @class */ (function () {
1897 function CalendarMonthModule() {
1898 }
1899 CalendarMonthModule = __decorate([
1900 NgModule({
1901 imports: [CommonModule, DragAndDropModule, CalendarCommonModule],
1902 declarations: [
1903 CalendarMonthViewComponent,
1904 CalendarMonthCellComponent,
1905 CalendarOpenDayEventsComponent,
1906 CalendarMonthViewHeaderComponent,
1907 ],
1908 exports: [
1909 DragAndDropModule,
1910 CalendarMonthViewComponent,
1911 CalendarMonthCellComponent,
1912 CalendarOpenDayEventsComponent,
1913 CalendarMonthViewHeaderComponent,
1914 ],
1915 })
1916 ], CalendarMonthModule);
1917 return CalendarMonthModule;
1918}());
1919
1920var CalendarDragHelper = /** @class */ (function () {
1921 function CalendarDragHelper(dragContainerElement, draggableElement) {
1922 this.dragContainerElement = dragContainerElement;
1923 this.startPosition = draggableElement.getBoundingClientRect();
1924 }
1925 CalendarDragHelper.prototype.validateDrag = function (_a) {
1926 var x = _a.x, y = _a.y, snapDraggedEvents = _a.snapDraggedEvents, dragAlreadyMoved = _a.dragAlreadyMoved, transform = _a.transform;
1927 if (snapDraggedEvents) {
1928 var newRect = Object.assign({}, this.startPosition, {
1929 left: this.startPosition.left + transform.x,
1930 right: this.startPosition.right + transform.x,
1931 top: this.startPosition.top + transform.y,
1932 bottom: this.startPosition.bottom + transform.y,
1933 });
1934 return ((isWithinThreshold({ x: x, y: y }) || dragAlreadyMoved) &&
1935 isInside(this.dragContainerElement.getBoundingClientRect(), newRect));
1936 }
1937 else {
1938 return isWithinThreshold({ x: x, y: y }) || dragAlreadyMoved;
1939 }
1940 };
1941 return CalendarDragHelper;
1942}());
1943
1944var CalendarResizeHelper = /** @class */ (function () {
1945 function CalendarResizeHelper(resizeContainerElement, minWidth) {
1946 this.resizeContainerElement = resizeContainerElement;
1947 this.minWidth = minWidth;
1948 }
1949 CalendarResizeHelper.prototype.validateResize = function (_a) {
1950 var rectangle = _a.rectangle;
1951 if (this.minWidth &&
1952 Math.ceil(rectangle.width) < Math.ceil(this.minWidth)) {
1953 return false;
1954 }
1955 return isInside(this.resizeContainerElement.getBoundingClientRect(), rectangle);
1956 };
1957 return CalendarResizeHelper;
1958}());
1959
1960/**
1961 * Shows all events on a given week. Example usage:
1962 *
1963 * ```typescript
1964 * <mwl-calendar-week-view
1965 * [viewDate]="viewDate"
1966 * [events]="events">
1967 * </mwl-calendar-week-view>
1968 * ```
1969 */
1970var CalendarWeekViewComponent = /** @class */ (function () {
1971 /**
1972 * @hidden
1973 */
1974 function CalendarWeekViewComponent(cdr, utils, locale, dateAdapter) {
1975 this.cdr = cdr;
1976 this.utils = utils;
1977 this.dateAdapter = dateAdapter;
1978 /**
1979 * An array of events to display on view
1980 * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63
1981 */
1982 this.events = [];
1983 /**
1984 * An array of day indexes (0 = sunday, 1 = monday etc) that will be hidden on the view
1985 */
1986 this.excludeDays = [];
1987 /**
1988 * The placement of the event tooltip
1989 */
1990 this.tooltipPlacement = 'auto';
1991 /**
1992 * Whether to append tooltips to the body or next to the trigger element
1993 */
1994 this.tooltipAppendToBody = true;
1995 /**
1996 * The delay in milliseconds before the tooltip should be displayed. If not provided the tooltip
1997 * will be displayed immediately.
1998 */
1999 this.tooltipDelay = null;
2000 /**
2001 * The precision to display events.
2002 * `days` will round event start and end dates to the nearest day and `minutes` will not do this rounding
2003 */
2004 this.precision = 'days';
2005 /**
2006 * Whether to snap events to a grid when dragging
2007 */
2008 this.snapDraggedEvents = true;
2009 /**
2010 * The number of segments in an hour. Must divide equally into 60.
2011 */
2012 this.hourSegments = 2;
2013 /**
2014 * The height in pixels of each hour segment
2015 */
2016 this.hourSegmentHeight = 30;
2017 /**
2018 * The day start hours in 24 hour time. Must be 0-23
2019 */
2020 this.dayStartHour = 0;
2021 /**
2022 * The day start minutes. Must be 0-59
2023 */
2024 this.dayStartMinute = 0;
2025 /**
2026 * The day end hours in 24 hour time. Must be 0-23
2027 */
2028 this.dayEndHour = 23;
2029 /**
2030 * The day end minutes. Must be 0-59
2031 */
2032 this.dayEndMinute = 59;
2033 /**
2034 * Called when a header week day is clicked. Adding a `cssClass` property on `$event.day` will add that class to the header element
2035 */
2036 this.dayHeaderClicked = new EventEmitter();
2037 /**
2038 * Called when the event title is clicked
2039 */
2040 this.eventClicked = new EventEmitter();
2041 /**
2042 * Called when an event is resized or dragged and dropped
2043 */
2044 this.eventTimesChanged = new EventEmitter();
2045 /**
2046 * An output that will be called before the view is rendered for the current week.
2047 * If you add the `cssClass` property to a day in the header it will add that class to the cell element in the template
2048 */
2049 this.beforeViewRender = new EventEmitter();
2050 /**
2051 * Called when an hour segment is clicked
2052 */
2053 this.hourSegmentClicked = new EventEmitter();
2054 /**
2055 * @hidden
2056 */
2057 this.allDayEventResizes = new Map();
2058 /**
2059 * @hidden
2060 */
2061 this.timeEventResizes = new Map();
2062 /**
2063 * @hidden
2064 */
2065 this.eventDragEnterByType = {
2066 allDay: 0,
2067 time: 0,
2068 };
2069 /**
2070 * @hidden
2071 */
2072 this.dragActive = false;
2073 /**
2074 * @hidden
2075 */
2076 this.dragAlreadyMoved = false;
2077 /**
2078 * @hidden
2079 */
2080 this.calendarId = Symbol('angular calendar week view id');
2081 /**
2082 * @hidden
2083 */
2084 this.trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;
2085 /**
2086 * @hidden
2087 */
2088 this.trackByHourSegment = trackByHourSegment;
2089 /**
2090 * @hidden
2091 */
2092 this.trackByHour = trackByHour;
2093 /**
2094 * @hidden
2095 */
2096 this.trackByWeekAllDayEvent = trackByWeekAllDayEvent;
2097 /**
2098 * @hidden
2099 */
2100 this.trackByWeekTimeEvent = trackByWeekTimeEvent;
2101 /**
2102 * @hidden
2103 */
2104 this.trackByHourColumn = function (index, column) {
2105 return column.hours[0] ? column.hours[0].segments[0].date.toISOString() : column;
2106 };
2107 /**
2108 * @hidden
2109 */
2110 this.trackById = function (index, row) { return row.id; };
2111 this.locale = locale;
2112 }
2113 /**
2114 * @hidden
2115 */
2116 CalendarWeekViewComponent.prototype.ngOnInit = function () {
2117 var _this = this;
2118 if (this.refresh) {
2119 this.refreshSubscription = this.refresh.subscribe(function () {
2120 _this.refreshAll();
2121 _this.cdr.markForCheck();
2122 });
2123 }
2124 };
2125 /**
2126 * @hidden
2127 */
2128 CalendarWeekViewComponent.prototype.ngOnChanges = function (changes) {
2129 var refreshHeader = changes.viewDate ||
2130 changes.excludeDays ||
2131 changes.weekendDays ||
2132 changes.daysInWeek ||
2133 changes.weekStartsOn;
2134 var refreshBody = changes.viewDate ||
2135 changes.dayStartHour ||
2136 changes.dayStartMinute ||
2137 changes.dayEndHour ||
2138 changes.dayEndMinute ||
2139 changes.hourSegments ||
2140 changes.weekStartsOn ||
2141 changes.weekendDays ||
2142 changes.excludeDays ||
2143 changes.hourSegmentHeight ||
2144 changes.events ||
2145 changes.daysInWeek;
2146 if (refreshHeader) {
2147 this.refreshHeader();
2148 }
2149 if (changes.events) {
2150 validateEvents(this.events);
2151 }
2152 if (refreshBody) {
2153 this.refreshBody();
2154 }
2155 if (refreshHeader || refreshBody) {
2156 this.emitBeforeViewRender();
2157 }
2158 };
2159 /**
2160 * @hidden
2161 */
2162 CalendarWeekViewComponent.prototype.ngOnDestroy = function () {
2163 if (this.refreshSubscription) {
2164 this.refreshSubscription.unsubscribe();
2165 }
2166 };
2167 /**
2168 * @hidden
2169 */
2170 CalendarWeekViewComponent.prototype.timeEventResizeStarted = function (eventsContainer, timeEvent, resizeEvent) {
2171 this.timeEventResizes.set(timeEvent.event, resizeEvent);
2172 this.resizeStarted(eventsContainer);
2173 };
2174 /**
2175 * @hidden
2176 */
2177 CalendarWeekViewComponent.prototype.timeEventResizing = function (timeEvent, resizeEvent) {
2178 var _this = this;
2179 this.timeEventResizes.set(timeEvent.event, resizeEvent);
2180 var adjustedEvents = new Map();
2181 var tempEvents = __spread(this.events);
2182 this.timeEventResizes.forEach(function (lastResizeEvent, event) {
2183 var newEventDates = _this.getTimeEventResizedDates(event, lastResizeEvent);
2184 var adjustedEvent = __assign(__assign({}, event), newEventDates);
2185 adjustedEvents.set(adjustedEvent, event);
2186 var eventIndex = tempEvents.indexOf(event);
2187 tempEvents[eventIndex] = adjustedEvent;
2188 });
2189 this.restoreOriginalEvents(tempEvents, adjustedEvents, true);
2190 };
2191 /**
2192 * @hidden
2193 */
2194 CalendarWeekViewComponent.prototype.timeEventResizeEnded = function (timeEvent) {
2195 this.view = this.getWeekView(this.events);
2196 var lastResizeEvent = this.timeEventResizes.get(timeEvent.event);
2197 if (lastResizeEvent) {
2198 this.timeEventResizes.delete(timeEvent.event);
2199 var newEventDates = this.getTimeEventResizedDates(timeEvent.event, lastResizeEvent);
2200 this.eventTimesChanged.emit({
2201 newStart: newEventDates.start,
2202 newEnd: newEventDates.end,
2203 event: timeEvent.event,
2204 type: CalendarEventTimesChangedEventType.Resize,
2205 });
2206 }
2207 };
2208 /**
2209 * @hidden
2210 */
2211 CalendarWeekViewComponent.prototype.allDayEventResizeStarted = function (allDayEventsContainer, allDayEvent, resizeEvent) {
2212 this.allDayEventResizes.set(allDayEvent, {
2213 originalOffset: allDayEvent.offset,
2214 originalSpan: allDayEvent.span,
2215 edge: typeof resizeEvent.edges.left !== 'undefined' ? 'left' : 'right',
2216 });
2217 this.resizeStarted(allDayEventsContainer, this.getDayColumnWidth(allDayEventsContainer));
2218 };
2219 /**
2220 * @hidden
2221 */
2222 CalendarWeekViewComponent.prototype.allDayEventResizing = function (allDayEvent, resizeEvent, dayWidth) {
2223 var currentResize = this.allDayEventResizes.get(allDayEvent);
2224 if (typeof resizeEvent.edges.left !== 'undefined') {
2225 var diff = Math.round(+resizeEvent.edges.left / dayWidth);
2226 allDayEvent.offset = currentResize.originalOffset + diff;
2227 allDayEvent.span = currentResize.originalSpan - diff;
2228 }
2229 else if (typeof resizeEvent.edges.right !== 'undefined') {
2230 var diff = Math.round(+resizeEvent.edges.right / dayWidth);
2231 allDayEvent.span = currentResize.originalSpan + diff;
2232 }
2233 };
2234 /**
2235 * @hidden
2236 */
2237 CalendarWeekViewComponent.prototype.allDayEventResizeEnded = function (allDayEvent) {
2238 var currentResize = this.allDayEventResizes.get(allDayEvent);
2239 if (currentResize) {
2240 var allDayEventResizingBeforeStart = currentResize.edge === 'left';
2241 var daysDiff = void 0;
2242 if (allDayEventResizingBeforeStart) {
2243 daysDiff = allDayEvent.offset - currentResize.originalOffset;
2244 }
2245 else {
2246 daysDiff = allDayEvent.span - currentResize.originalSpan;
2247 }
2248 allDayEvent.offset = currentResize.originalOffset;
2249 allDayEvent.span = currentResize.originalSpan;
2250 var newStart = allDayEvent.event.start;
2251 var newEnd = allDayEvent.event.end || allDayEvent.event.start;
2252 if (allDayEventResizingBeforeStart) {
2253 newStart = addDaysWithExclusions(this.dateAdapter, newStart, daysDiff, this.excludeDays);
2254 }
2255 else {
2256 newEnd = addDaysWithExclusions(this.dateAdapter, newEnd, daysDiff, this.excludeDays);
2257 }
2258 this.eventTimesChanged.emit({
2259 newStart: newStart,
2260 newEnd: newEnd,
2261 event: allDayEvent.event,
2262 type: CalendarEventTimesChangedEventType.Resize,
2263 });
2264 this.allDayEventResizes.delete(allDayEvent);
2265 }
2266 };
2267 /**
2268 * @hidden
2269 */
2270 CalendarWeekViewComponent.prototype.getDayColumnWidth = function (eventRowContainer) {
2271 return Math.floor(eventRowContainer.offsetWidth / this.days.length);
2272 };
2273 /**
2274 * @hidden
2275 */
2276 CalendarWeekViewComponent.prototype.dateDragEnter = function (date) {
2277 this.lastDragEnterDate = date;
2278 };
2279 /**
2280 * @hidden
2281 */
2282 CalendarWeekViewComponent.prototype.eventDropped = function (dropEvent, date, allDay) {
2283 if (shouldFireDroppedEvent(dropEvent, date, allDay, this.calendarId) &&
2284 this.lastDragEnterDate.getTime() === date.getTime() &&
2285 (!this.snapDraggedEvents ||
2286 dropEvent.dropData.event !== this.lastDraggedEvent)) {
2287 this.eventTimesChanged.emit({
2288 type: CalendarEventTimesChangedEventType.Drop,
2289 event: dropEvent.dropData.event,
2290 newStart: date,
2291 allDay: allDay,
2292 });
2293 }
2294 this.lastDraggedEvent = null;
2295 };
2296 /**
2297 * @hidden
2298 */
2299 CalendarWeekViewComponent.prototype.dragEnter = function (type) {
2300 this.eventDragEnterByType[type]++;
2301 };
2302 /**
2303 * @hidden
2304 */
2305 CalendarWeekViewComponent.prototype.dragLeave = function (type) {
2306 this.eventDragEnterByType[type]--;
2307 };
2308 /**
2309 * @hidden
2310 */
2311 CalendarWeekViewComponent.prototype.dragStarted = function (eventsContainer, event, dayEvent) {
2312 var _this = this;
2313 this.dayColumnWidth = this.getDayColumnWidth(eventsContainer);
2314 var dragHelper = new CalendarDragHelper(eventsContainer, event);
2315 this.validateDrag = function (_a) {
2316 var x = _a.x, y = _a.y, transform = _a.transform;
2317 return _this.allDayEventResizes.size === 0 &&
2318 _this.timeEventResizes.size === 0 &&
2319 dragHelper.validateDrag({
2320 x: x,
2321 y: y,
2322 snapDraggedEvents: _this.snapDraggedEvents,
2323 dragAlreadyMoved: _this.dragAlreadyMoved,
2324 transform: transform,
2325 });
2326 };
2327 this.dragActive = true;
2328 this.dragAlreadyMoved = false;
2329 this.lastDraggedEvent = null;
2330 this.eventDragEnterByType = {
2331 allDay: 0,
2332 time: 0,
2333 };
2334 if (!this.snapDraggedEvents && dayEvent) {
2335 this.view.hourColumns.forEach(function (column) {
2336 var linkedEvent = column.events.find(function (columnEvent) {
2337 return columnEvent.event === dayEvent.event && columnEvent !== dayEvent;
2338 });
2339 // hide any linked events while dragging
2340 if (linkedEvent) {
2341 linkedEvent.width = 0;
2342 linkedEvent.height = 0;
2343 }
2344 });
2345 }
2346 this.cdr.markForCheck();
2347 };
2348 /**
2349 * @hidden
2350 */
2351 CalendarWeekViewComponent.prototype.dragMove = function (dayEvent, dragEvent) {
2352 var newEventTimes = this.getDragMovedEventTimes(dayEvent, dragEvent, this.dayColumnWidth, true);
2353 var originalEvent = dayEvent.event;
2354 var adjustedEvent = __assign(__assign({}, originalEvent), newEventTimes);
2355 var tempEvents = this.events.map(function (event) {
2356 if (event === originalEvent) {
2357 return adjustedEvent;
2358 }
2359 return event;
2360 });
2361 this.restoreOriginalEvents(tempEvents, new Map([[adjustedEvent, originalEvent]]), this.snapDraggedEvents);
2362 this.dragAlreadyMoved = true;
2363 };
2364 /**
2365 * @hidden
2366 */
2367 CalendarWeekViewComponent.prototype.allDayEventDragMove = function () {
2368 this.dragAlreadyMoved = true;
2369 };
2370 /**
2371 * @hidden
2372 */
2373 CalendarWeekViewComponent.prototype.dragEnded = function (weekEvent, dragEndEvent, dayWidth, useY) {
2374 if (useY === void 0) { useY = false; }
2375 this.view = this.getWeekView(this.events);
2376 this.dragActive = false;
2377 this.validateDrag = null;
2378 var _a = this.getDragMovedEventTimes(weekEvent, dragEndEvent, dayWidth, useY), start = _a.start, end = _a.end;
2379 if ((this.snapDraggedEvents ||
2380 this.eventDragEnterByType[useY ? 'time' : 'allDay'] > 0) &&
2381 isDraggedWithinPeriod(start, end, this.view.period)) {
2382 this.lastDraggedEvent = weekEvent.event;
2383 this.eventTimesChanged.emit({
2384 newStart: start,
2385 newEnd: end,
2386 event: weekEvent.event,
2387 type: CalendarEventTimesChangedEventType.Drag,
2388 allDay: !useY,
2389 });
2390 }
2391 };
2392 CalendarWeekViewComponent.prototype.refreshHeader = function () {
2393 this.days = this.utils.getWeekViewHeader(__assign({ viewDate: this.viewDate, weekStartsOn: this.weekStartsOn, excluded: this.excludeDays, weekendDays: this.weekendDays }, getWeekViewPeriod(this.dateAdapter, this.viewDate, this.weekStartsOn, this.excludeDays, this.daysInWeek)));
2394 };
2395 CalendarWeekViewComponent.prototype.refreshBody = function () {
2396 this.view = this.getWeekView(this.events);
2397 };
2398 CalendarWeekViewComponent.prototype.refreshAll = function () {
2399 this.refreshHeader();
2400 this.refreshBody();
2401 this.emitBeforeViewRender();
2402 };
2403 CalendarWeekViewComponent.prototype.emitBeforeViewRender = function () {
2404 if (this.days && this.view) {
2405 this.beforeViewRender.emit(__assign({ header: this.days }, this.view));
2406 }
2407 };
2408 CalendarWeekViewComponent.prototype.getWeekView = function (events) {
2409 return this.utils.getWeekView(__assign({ events: events, viewDate: this.viewDate, weekStartsOn: this.weekStartsOn, excluded: this.excludeDays, precision: this.precision, absolutePositionedEvents: true, hourSegments: this.hourSegments, dayStart: {
2410 hour: this.dayStartHour,
2411 minute: this.dayStartMinute,
2412 }, dayEnd: {
2413 hour: this.dayEndHour,
2414 minute: this.dayEndMinute,
2415 }, segmentHeight: this.hourSegmentHeight, weekendDays: this.weekendDays }, getWeekViewPeriod(this.dateAdapter, this.viewDate, this.weekStartsOn, this.excludeDays, this.daysInWeek)));
2416 };
2417 CalendarWeekViewComponent.prototype.getDragMovedEventTimes = function (weekEvent, dragEndEvent, dayWidth, useY) {
2418 var daysDragged = roundToNearest(dragEndEvent.x, dayWidth) / dayWidth;
2419 var minutesMoved = useY
2420 ? getMinutesMoved(dragEndEvent.y, this.hourSegments, this.hourSegmentHeight, this.eventSnapSize)
2421 : 0;
2422 var start = this.dateAdapter.addMinutes(addDaysWithExclusions(this.dateAdapter, weekEvent.event.start, daysDragged, this.excludeDays), minutesMoved);
2423 var end;
2424 if (weekEvent.event.end) {
2425 end = this.dateAdapter.addMinutes(addDaysWithExclusions(this.dateAdapter, weekEvent.event.end, daysDragged, this.excludeDays), minutesMoved);
2426 }
2427 return { start: start, end: end };
2428 };
2429 CalendarWeekViewComponent.prototype.restoreOriginalEvents = function (tempEvents, adjustedEvents, snapDraggedEvents) {
2430 if (snapDraggedEvents === void 0) { snapDraggedEvents = true; }
2431 var previousView = this.view;
2432 if (snapDraggedEvents) {
2433 this.view = this.getWeekView(tempEvents);
2434 }
2435 var adjustedEventsArray = tempEvents.filter(function (event) {
2436 return adjustedEvents.has(event);
2437 });
2438 this.view.hourColumns.forEach(function (column, columnIndex) {
2439 previousView.hourColumns[columnIndex].hours.forEach(function (hour, hourIndex) {
2440 hour.segments.forEach(function (segment, segmentIndex) {
2441 column.hours[hourIndex].segments[segmentIndex].cssClass =
2442 segment.cssClass;
2443 });
2444 });
2445 adjustedEventsArray.forEach(function (adjustedEvent) {
2446 var originalEvent = adjustedEvents.get(adjustedEvent);
2447 var existingColumnEvent = column.events.find(function (columnEvent) {
2448 return columnEvent.event ===
2449 (snapDraggedEvents ? adjustedEvent : originalEvent);
2450 });
2451 if (existingColumnEvent) {
2452 // restore the original event so trackBy kicks in and the dom isn't changed
2453 existingColumnEvent.event = originalEvent;
2454 existingColumnEvent['tempEvent'] = adjustedEvent;
2455 if (!snapDraggedEvents) {
2456 existingColumnEvent.height = 0;
2457 existingColumnEvent.width = 0;
2458 }
2459 }
2460 else {
2461 // add a dummy event to the drop so if the event was removed from the original column the drag doesn't end early
2462 var event_1 = {
2463 event: originalEvent,
2464 left: 0,
2465 top: 0,
2466 height: 0,
2467 width: 0,
2468 startsBeforeDay: false,
2469 endsAfterDay: false,
2470 tempEvent: adjustedEvent,
2471 };
2472 column.events.push(event_1);
2473 }
2474 });
2475 });
2476 adjustedEvents.clear();
2477 };
2478 CalendarWeekViewComponent.prototype.getTimeEventResizedDates = function (calendarEvent, resizeEvent) {
2479 var minimumEventHeight = getMinimumEventHeightInMinutes(this.hourSegments, this.hourSegmentHeight);
2480 var newEventDates = {
2481 start: calendarEvent.start,
2482 end: getDefaultEventEnd(this.dateAdapter, calendarEvent, minimumEventHeight),
2483 };
2484 var end = calendarEvent.end, eventWithoutEnd = __rest(calendarEvent, ["end"]);
2485 var smallestResizes = {
2486 start: this.dateAdapter.addMinutes(newEventDates.end, minimumEventHeight * -1),
2487 end: getDefaultEventEnd(this.dateAdapter, eventWithoutEnd, minimumEventHeight),
2488 };
2489 if (typeof resizeEvent.edges.left !== 'undefined') {
2490 var daysDiff = Math.round(+resizeEvent.edges.left / this.dayColumnWidth);
2491 var newStart = addDaysWithExclusions(this.dateAdapter, newEventDates.start, daysDiff, this.excludeDays);
2492 if (newStart < smallestResizes.start) {
2493 newEventDates.start = newStart;
2494 }
2495 else {
2496 newEventDates.start = smallestResizes.start;
2497 }
2498 }
2499 else if (typeof resizeEvent.edges.right !== 'undefined') {
2500 var daysDiff = Math.round(+resizeEvent.edges.right / this.dayColumnWidth);
2501 var newEnd = addDaysWithExclusions(this.dateAdapter, newEventDates.end, daysDiff, this.excludeDays);
2502 if (newEnd > smallestResizes.end) {
2503 newEventDates.end = newEnd;
2504 }
2505 else {
2506 newEventDates.end = smallestResizes.end;
2507 }
2508 }
2509 if (typeof resizeEvent.edges.top !== 'undefined') {
2510 var minutesMoved = getMinutesMoved(resizeEvent.edges.top, this.hourSegments, this.hourSegmentHeight, this.eventSnapSize);
2511 var newStart = this.dateAdapter.addMinutes(newEventDates.start, minutesMoved);
2512 if (newStart < smallestResizes.start) {
2513 newEventDates.start = newStart;
2514 }
2515 else {
2516 newEventDates.start = smallestResizes.start;
2517 }
2518 }
2519 else if (typeof resizeEvent.edges.bottom !== 'undefined') {
2520 var minutesMoved = getMinutesMoved(resizeEvent.edges.bottom, this.hourSegments, this.hourSegmentHeight, this.eventSnapSize);
2521 var newEnd = this.dateAdapter.addMinutes(newEventDates.end, minutesMoved);
2522 if (newEnd > smallestResizes.end) {
2523 newEventDates.end = newEnd;
2524 }
2525 else {
2526 newEventDates.end = smallestResizes.end;
2527 }
2528 }
2529 return newEventDates;
2530 };
2531 CalendarWeekViewComponent.prototype.resizeStarted = function (eventsContainer, minWidth) {
2532 this.dayColumnWidth = this.getDayColumnWidth(eventsContainer);
2533 var resizeHelper = new CalendarResizeHelper(eventsContainer, minWidth);
2534 this.validateResize = function (_a) {
2535 var rectangle = _a.rectangle;
2536 return resizeHelper.validateResize({ rectangle: rectangle });
2537 };
2538 this.cdr.markForCheck();
2539 };
2540 CalendarWeekViewComponent.ctorParameters = function () { return [
2541 { type: ChangeDetectorRef },
2542 { type: CalendarUtils },
2543 { type: String, decorators: [{ type: Inject, args: [LOCALE_ID,] }] },
2544 { type: DateAdapter }
2545 ]; };
2546 __decorate([
2547 Input(),
2548 __metadata("design:type", Date)
2549 ], CalendarWeekViewComponent.prototype, "viewDate", void 0);
2550 __decorate([
2551 Input(),
2552 __metadata("design:type", Array)
2553 ], CalendarWeekViewComponent.prototype, "events", void 0);
2554 __decorate([
2555 Input(),
2556 __metadata("design:type", Array)
2557 ], CalendarWeekViewComponent.prototype, "excludeDays", void 0);
2558 __decorate([
2559 Input(),
2560 __metadata("design:type", Subject)
2561 ], CalendarWeekViewComponent.prototype, "refresh", void 0);
2562 __decorate([
2563 Input(),
2564 __metadata("design:type", String)
2565 ], CalendarWeekViewComponent.prototype, "locale", void 0);
2566 __decorate([
2567 Input(),
2568 __metadata("design:type", Object)
2569 ], CalendarWeekViewComponent.prototype, "tooltipPlacement", void 0);
2570 __decorate([
2571 Input(),
2572 __metadata("design:type", TemplateRef)
2573 ], CalendarWeekViewComponent.prototype, "tooltipTemplate", void 0);
2574 __decorate([
2575 Input(),
2576 __metadata("design:type", Boolean)
2577 ], CalendarWeekViewComponent.prototype, "tooltipAppendToBody", void 0);
2578 __decorate([
2579 Input(),
2580 __metadata("design:type", Number)
2581 ], CalendarWeekViewComponent.prototype, "tooltipDelay", void 0);
2582 __decorate([
2583 Input(),
2584 __metadata("design:type", Number)
2585 ], CalendarWeekViewComponent.prototype, "weekStartsOn", void 0);
2586 __decorate([
2587 Input(),
2588 __metadata("design:type", TemplateRef)
2589 ], CalendarWeekViewComponent.prototype, "headerTemplate", void 0);
2590 __decorate([
2591 Input(),
2592 __metadata("design:type", TemplateRef)
2593 ], CalendarWeekViewComponent.prototype, "eventTemplate", void 0);
2594 __decorate([
2595 Input(),
2596 __metadata("design:type", TemplateRef)
2597 ], CalendarWeekViewComponent.prototype, "eventTitleTemplate", void 0);
2598 __decorate([
2599 Input(),
2600 __metadata("design:type", TemplateRef)
2601 ], CalendarWeekViewComponent.prototype, "eventActionsTemplate", void 0);
2602 __decorate([
2603 Input(),
2604 __metadata("design:type", String)
2605 ], CalendarWeekViewComponent.prototype, "precision", void 0);
2606 __decorate([
2607 Input(),
2608 __metadata("design:type", Array)
2609 ], CalendarWeekViewComponent.prototype, "weekendDays", void 0);
2610 __decorate([
2611 Input(),
2612 __metadata("design:type", Boolean)
2613 ], CalendarWeekViewComponent.prototype, "snapDraggedEvents", void 0);
2614 __decorate([
2615 Input(),
2616 __metadata("design:type", Number)
2617 ], CalendarWeekViewComponent.prototype, "hourSegments", void 0);
2618 __decorate([
2619 Input(),
2620 __metadata("design:type", Number)
2621 ], CalendarWeekViewComponent.prototype, "hourSegmentHeight", void 0);
2622 __decorate([
2623 Input(),
2624 __metadata("design:type", Number)
2625 ], CalendarWeekViewComponent.prototype, "dayStartHour", void 0);
2626 __decorate([
2627 Input(),
2628 __metadata("design:type", Number)
2629 ], CalendarWeekViewComponent.prototype, "dayStartMinute", void 0);
2630 __decorate([
2631 Input(),
2632 __metadata("design:type", Number)
2633 ], CalendarWeekViewComponent.prototype, "dayEndHour", void 0);
2634 __decorate([
2635 Input(),
2636 __metadata("design:type", Number)
2637 ], CalendarWeekViewComponent.prototype, "dayEndMinute", void 0);
2638 __decorate([
2639 Input(),
2640 __metadata("design:type", TemplateRef)
2641 ], CalendarWeekViewComponent.prototype, "hourSegmentTemplate", void 0);
2642 __decorate([
2643 Input(),
2644 __metadata("design:type", Number)
2645 ], CalendarWeekViewComponent.prototype, "eventSnapSize", void 0);
2646 __decorate([
2647 Input(),
2648 __metadata("design:type", TemplateRef)
2649 ], CalendarWeekViewComponent.prototype, "allDayEventsLabelTemplate", void 0);
2650 __decorate([
2651 Input(),
2652 __metadata("design:type", Number)
2653 ], CalendarWeekViewComponent.prototype, "daysInWeek", void 0);
2654 __decorate([
2655 Input(),
2656 __metadata("design:type", TemplateRef)
2657 ], CalendarWeekViewComponent.prototype, "currentTimeMarkerTemplate", void 0);
2658 __decorate([
2659 Output(),
2660 __metadata("design:type", Object)
2661 ], CalendarWeekViewComponent.prototype, "dayHeaderClicked", void 0);
2662 __decorate([
2663 Output(),
2664 __metadata("design:type", Object)
2665 ], CalendarWeekViewComponent.prototype, "eventClicked", void 0);
2666 __decorate([
2667 Output(),
2668 __metadata("design:type", Object)
2669 ], CalendarWeekViewComponent.prototype, "eventTimesChanged", void 0);
2670 __decorate([
2671 Output(),
2672 __metadata("design:type", Object)
2673 ], CalendarWeekViewComponent.prototype, "beforeViewRender", void 0);
2674 __decorate([
2675 Output(),
2676 __metadata("design:type", Object)
2677 ], CalendarWeekViewComponent.prototype, "hourSegmentClicked", void 0);
2678 CalendarWeekViewComponent = __decorate([
2679 Component({
2680 selector: 'mwl-calendar-week-view',
2681 template: "\n <div class=\"cal-week-view\" role=\"grid\">\n <mwl-calendar-week-view-header\n [days]=\"days\"\n [locale]=\"locale\"\n [customTemplate]=\"headerTemplate\"\n (dayHeaderClicked)=\"dayHeaderClicked.emit($event)\"\n (eventDropped)=\"\n eventDropped({ dropData: $event }, $event.newStart, true)\n \"\n (dragEnter)=\"dateDragEnter($event.date)\"\n >\n </mwl-calendar-week-view-header>\n <div\n class=\"cal-all-day-events\"\n #allDayEventsContainer\n *ngIf=\"view.allDayEventRows.length > 0\"\n mwlDroppable\n (dragEnter)=\"dragEnter('allDay')\"\n (dragLeave)=\"dragLeave('allDay')\"\n >\n <div class=\"cal-day-columns\">\n <div\n class=\"cal-time-label-column\"\n [ngTemplateOutlet]=\"allDayEventsLabelTemplate\"\n ></div>\n <div\n class=\"cal-day-column\"\n *ngFor=\"let day of days; trackBy: trackByWeekDayHeaderDate\"\n mwlDroppable\n dragOverClass=\"cal-drag-over\"\n (drop)=\"eventDropped($event, day.date, true)\"\n (dragEnter)=\"dateDragEnter(day.date)\"\n ></div>\n </div>\n <div\n *ngFor=\"let eventRow of view.allDayEventRows; trackBy: trackById\"\n #eventRowContainer\n class=\"cal-events-row\"\n >\n <div\n *ngFor=\"\n let allDayEvent of eventRow.row;\n trackBy: trackByWeekAllDayEvent\n \"\n #event\n class=\"cal-event-container\"\n [class.cal-draggable]=\"\n allDayEvent.event.draggable && allDayEventResizes.size === 0\n \"\n [class.cal-starts-within-week]=\"!allDayEvent.startsBeforeWeek\"\n [class.cal-ends-within-week]=\"!allDayEvent.endsAfterWeek\"\n [ngClass]=\"allDayEvent.event?.cssClass\"\n [style.width.%]=\"(100 / days.length) * allDayEvent.span\"\n [style.marginLeft.%]=\"(100 / days.length) * allDayEvent.offset\"\n mwlResizable\n [resizeSnapGrid]=\"{ left: dayColumnWidth, right: dayColumnWidth }\"\n [validateResize]=\"validateResize\"\n (resizeStart)=\"\n allDayEventResizeStarted(eventRowContainer, allDayEvent, $event)\n \"\n (resizing)=\"\n allDayEventResizing(allDayEvent, $event, dayColumnWidth)\n \"\n (resizeEnd)=\"allDayEventResizeEnded(allDayEvent)\"\n mwlDraggable\n dragActiveClass=\"cal-drag-active\"\n [dropData]=\"{ event: allDayEvent.event, calendarId: calendarId }\"\n [dragAxis]=\"{\n x: allDayEvent.event.draggable && allDayEventResizes.size === 0,\n y:\n !snapDraggedEvents &&\n allDayEvent.event.draggable &&\n allDayEventResizes.size === 0\n }\"\n [dragSnapGrid]=\"snapDraggedEvents ? { x: dayColumnWidth } : {}\"\n [validateDrag]=\"validateDrag\"\n [touchStartLongPress]=\"{ delay: 300, delta: 30 }\"\n (dragStart)=\"dragStarted(eventRowContainer, event)\"\n (dragging)=\"allDayEventDragMove()\"\n (dragEnd)=\"dragEnded(allDayEvent, $event, dayColumnWidth)\"\n >\n <div\n class=\"cal-resize-handle cal-resize-handle-before-start\"\n *ngIf=\"\n allDayEvent.event?.resizable?.beforeStart &&\n !allDayEvent.startsBeforeWeek\n \"\n mwlResizeHandle\n [resizeEdges]=\"{ left: true }\"\n ></div>\n <mwl-calendar-week-view-event\n [locale]=\"locale\"\n [weekEvent]=\"allDayEvent\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n [customTemplate]=\"eventTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n [daysInWeek]=\"daysInWeek\"\n (eventClicked)=\"\n eventClicked.emit({\n event: allDayEvent.event,\n sourceEvent: $event.sourceEvent\n })\n \"\n >\n </mwl-calendar-week-view-event>\n <div\n class=\"cal-resize-handle cal-resize-handle-after-end\"\n *ngIf=\"\n allDayEvent.event?.resizable?.afterEnd &&\n !allDayEvent.endsAfterWeek\n \"\n mwlResizeHandle\n [resizeEdges]=\"{ right: true }\"\n ></div>\n </div>\n </div>\n </div>\n <div\n class=\"cal-time-events\"\n mwlDroppable\n (dragEnter)=\"dragEnter('time')\"\n (dragLeave)=\"dragLeave('time')\"\n >\n <div\n class=\"cal-time-label-column\"\n *ngIf=\"view.hourColumns.length > 0 && daysInWeek !== 1\"\n >\n <div\n *ngFor=\"\n let hour of view.hourColumns[0].hours;\n trackBy: trackByHour;\n let odd = odd\n \"\n class=\"cal-hour\"\n [class.cal-hour-odd]=\"odd\"\n >\n <mwl-calendar-week-view-hour-segment\n *ngFor=\"let segment of hour.segments; trackBy: trackByHourSegment\"\n [style.height.px]=\"hourSegmentHeight\"\n [segment]=\"segment\"\n [segmentHeight]=\"hourSegmentHeight\"\n [locale]=\"locale\"\n [customTemplate]=\"hourSegmentTemplate\"\n [isTimeLabel]=\"true\"\n [daysInWeek]=\"daysInWeek\"\n >\n </mwl-calendar-week-view-hour-segment>\n </div>\n </div>\n <div\n class=\"cal-day-columns\"\n [class.cal-resize-active]=\"timeEventResizes.size > 0\"\n #dayColumns\n >\n <div\n class=\"cal-day-column\"\n *ngFor=\"let column of view.hourColumns; trackBy: trackByHourColumn\"\n >\n <mwl-calendar-week-view-current-time-marker\n [columnDate]=\"column.date\"\n [dayStartHour]=\"dayStartHour\"\n [dayStartMinute]=\"dayStartMinute\"\n [dayEndHour]=\"dayEndHour\"\n [dayEndMinute]=\"dayEndMinute\"\n [hourSegments]=\"hourSegments\"\n [hourSegmentHeight]=\"hourSegmentHeight\"\n [customTemplate]=\"currentTimeMarkerTemplate\"\n ></mwl-calendar-week-view-current-time-marker>\n <div class=\"cal-events-container\">\n <div\n *ngFor=\"\n let timeEvent of column.events;\n trackBy: trackByWeekTimeEvent\n \"\n #event\n class=\"cal-event-container\"\n [class.cal-draggable]=\"\n timeEvent.event.draggable && timeEventResizes.size === 0\n \"\n [class.cal-starts-within-day]=\"!timeEvent.startsBeforeDay\"\n [class.cal-ends-within-day]=\"!timeEvent.endsAfterDay\"\n [ngClass]=\"timeEvent.event.cssClass\"\n [hidden]=\"timeEvent.height === 0 && timeEvent.width === 0\"\n [style.top.px]=\"timeEvent.top\"\n [style.height.px]=\"timeEvent.height\"\n [style.left.%]=\"timeEvent.left\"\n [style.width.%]=\"timeEvent.width\"\n mwlResizable\n [resizeSnapGrid]=\"{\n left: dayColumnWidth,\n right: dayColumnWidth,\n top: eventSnapSize || hourSegmentHeight,\n bottom: eventSnapSize || hourSegmentHeight\n }\"\n [validateResize]=\"validateResize\"\n [allowNegativeResizes]=\"true\"\n (resizeStart)=\"\n timeEventResizeStarted(dayColumns, timeEvent, $event)\n \"\n (resizing)=\"timeEventResizing(timeEvent, $event)\"\n (resizeEnd)=\"timeEventResizeEnded(timeEvent)\"\n mwlDraggable\n dragActiveClass=\"cal-drag-active\"\n [dropData]=\"{ event: timeEvent.event, calendarId: calendarId }\"\n [dragAxis]=\"{\n x: timeEvent.event.draggable && timeEventResizes.size === 0,\n y: timeEvent.event.draggable && timeEventResizes.size === 0\n }\"\n [dragSnapGrid]=\"\n snapDraggedEvents\n ? {\n x: dayColumnWidth,\n y: eventSnapSize || hourSegmentHeight\n }\n : {}\n \"\n [touchStartLongPress]=\"{ delay: 300, delta: 30 }\"\n [ghostDragEnabled]=\"!snapDraggedEvents\"\n [ghostElementTemplate]=\"weekEventTemplate\"\n [validateDrag]=\"validateDrag\"\n (dragStart)=\"dragStarted(dayColumns, event, timeEvent)\"\n (dragging)=\"dragMove(timeEvent, $event)\"\n (dragEnd)=\"dragEnded(timeEvent, $event, dayColumnWidth, true)\"\n >\n <div\n class=\"cal-resize-handle cal-resize-handle-before-start\"\n *ngIf=\"\n timeEvent.event?.resizable?.beforeStart &&\n !timeEvent.startsBeforeDay\n \"\n mwlResizeHandle\n [resizeEdges]=\"{\n left: true,\n top: true\n }\"\n ></div>\n <ng-template\n [ngTemplateOutlet]=\"weekEventTemplate\"\n ></ng-template>\n <ng-template #weekEventTemplate>\n <mwl-calendar-week-view-event\n [locale]=\"locale\"\n [weekEvent]=\"timeEvent\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDisabled]=\"dragActive || timeEventResizes.size > 0\"\n [tooltipDelay]=\"tooltipDelay\"\n [customTemplate]=\"eventTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n [column]=\"column\"\n [daysInWeek]=\"daysInWeek\"\n (eventClicked)=\"\n eventClicked.emit({\n event: timeEvent.event,\n sourceEvent: $event.sourceEvent\n })\n \"\n >\n </mwl-calendar-week-view-event>\n </ng-template>\n <div\n class=\"cal-resize-handle cal-resize-handle-after-end\"\n *ngIf=\"\n timeEvent.event?.resizable?.afterEnd &&\n !timeEvent.endsAfterDay\n \"\n mwlResizeHandle\n [resizeEdges]=\"{\n right: true,\n bottom: true\n }\"\n ></div>\n </div>\n </div>\n\n <div\n *ngFor=\"\n let hour of column.hours;\n trackBy: trackByHour;\n let odd = odd\n \"\n class=\"cal-hour\"\n [class.cal-hour-odd]=\"odd\"\n >\n <mwl-calendar-week-view-hour-segment\n *ngFor=\"\n let segment of hour.segments;\n trackBy: trackByHourSegment\n \"\n [style.height.px]=\"hourSegmentHeight\"\n [segment]=\"segment\"\n [segmentHeight]=\"hourSegmentHeight\"\n [locale]=\"locale\"\n [customTemplate]=\"hourSegmentTemplate\"\n [daysInWeek]=\"daysInWeek\"\n (mwlClick)=\"\n hourSegmentClicked.emit({\n date: segment.date,\n sourceEvent: $event\n })\n \"\n [clickListenerDisabled]=\"\n hourSegmentClicked.observers.length === 0\n \"\n mwlDroppable\n [dragOverClass]=\"\n !dragActive || !snapDraggedEvents ? 'cal-drag-over' : null\n \"\n dragActiveClass=\"cal-drag-active\"\n (drop)=\"eventDropped($event, segment.date, false)\"\n (dragEnter)=\"dateDragEnter(segment.date)\"\n [isTimeLabel]=\"daysInWeek === 1\"\n >\n </mwl-calendar-week-view-hour-segment>\n </div>\n </div>\n </div>\n </div>\n </div>\n "
2682 }),
2683 __param(2, Inject(LOCALE_ID)),
2684 __metadata("design:paramtypes", [ChangeDetectorRef,
2685 CalendarUtils, String, DateAdapter])
2686 ], CalendarWeekViewComponent);
2687 return CalendarWeekViewComponent;
2688}());
2689
2690var CalendarWeekViewHeaderComponent = /** @class */ (function () {
2691 function CalendarWeekViewHeaderComponent() {
2692 this.dayHeaderClicked = new EventEmitter();
2693 this.eventDropped = new EventEmitter();
2694 this.dragEnter = new EventEmitter();
2695 this.trackByWeekDayHeaderDate = trackByWeekDayHeaderDate;
2696 }
2697 __decorate([
2698 Input(),
2699 __metadata("design:type", Array)
2700 ], CalendarWeekViewHeaderComponent.prototype, "days", void 0);
2701 __decorate([
2702 Input(),
2703 __metadata("design:type", String)
2704 ], CalendarWeekViewHeaderComponent.prototype, "locale", void 0);
2705 __decorate([
2706 Input(),
2707 __metadata("design:type", TemplateRef)
2708 ], CalendarWeekViewHeaderComponent.prototype, "customTemplate", void 0);
2709 __decorate([
2710 Output(),
2711 __metadata("design:type", Object)
2712 ], CalendarWeekViewHeaderComponent.prototype, "dayHeaderClicked", void 0);
2713 __decorate([
2714 Output(),
2715 __metadata("design:type", Object)
2716 ], CalendarWeekViewHeaderComponent.prototype, "eventDropped", void 0);
2717 __decorate([
2718 Output(),
2719 __metadata("design:type", Object)
2720 ], CalendarWeekViewHeaderComponent.prototype, "dragEnter", void 0);
2721 CalendarWeekViewHeaderComponent = __decorate([
2722 Component({
2723 selector: 'mwl-calendar-week-view-header',
2724 template: "\n <ng-template\n #defaultTemplate\n let-days=\"days\"\n let-locale=\"locale\"\n let-dayHeaderClicked=\"dayHeaderClicked\"\n let-eventDropped=\"eventDropped\"\n let-trackByWeekDayHeaderDate=\"trackByWeekDayHeaderDate\"\n let-dragEnter=\"dragEnter\"\n >\n <div class=\"cal-day-headers\" role=\"row\">\n <div\n class=\"cal-header\"\n *ngFor=\"let day of days; trackBy: trackByWeekDayHeaderDate\"\n [class.cal-past]=\"day.isPast\"\n [class.cal-today]=\"day.isToday\"\n [class.cal-future]=\"day.isFuture\"\n [class.cal-weekend]=\"day.isWeekend\"\n [ngClass]=\"day.cssClass\"\n (mwlClick)=\"dayHeaderClicked.emit({ day: day, sourceEvent: $event })\"\n mwlDroppable\n dragOverClass=\"cal-drag-over\"\n (drop)=\"\n eventDropped.emit({\n event: $event.dropData.event,\n newStart: day.date\n })\n \"\n (dragEnter)=\"dragEnter.emit({ date: day.date })\"\n tabindex=\"0\"\n role=\"columnheader\"\n >\n <b>{{ day.date | calendarDate: 'weekViewColumnHeader':locale }}</b\n ><br />\n <span>{{\n day.date | calendarDate: 'weekViewColumnSubHeader':locale\n }}</span>\n </div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n days: days,\n locale: locale,\n dayHeaderClicked: dayHeaderClicked,\n eventDropped: eventDropped,\n dragEnter: dragEnter,\n trackByWeekDayHeaderDate: trackByWeekDayHeaderDate\n }\"\n >\n </ng-template>\n "
2725 })
2726 ], CalendarWeekViewHeaderComponent);
2727 return CalendarWeekViewHeaderComponent;
2728}());
2729
2730var CalendarWeekViewEventComponent = /** @class */ (function () {
2731 function CalendarWeekViewEventComponent() {
2732 this.eventClicked = new EventEmitter();
2733 }
2734 __decorate([
2735 Input(),
2736 __metadata("design:type", String)
2737 ], CalendarWeekViewEventComponent.prototype, "locale", void 0);
2738 __decorate([
2739 Input(),
2740 __metadata("design:type", Object)
2741 ], CalendarWeekViewEventComponent.prototype, "weekEvent", void 0);
2742 __decorate([
2743 Input(),
2744 __metadata("design:type", Object)
2745 ], CalendarWeekViewEventComponent.prototype, "tooltipPlacement", void 0);
2746 __decorate([
2747 Input(),
2748 __metadata("design:type", Boolean)
2749 ], CalendarWeekViewEventComponent.prototype, "tooltipAppendToBody", void 0);
2750 __decorate([
2751 Input(),
2752 __metadata("design:type", Boolean)
2753 ], CalendarWeekViewEventComponent.prototype, "tooltipDisabled", void 0);
2754 __decorate([
2755 Input(),
2756 __metadata("design:type", Number)
2757 ], CalendarWeekViewEventComponent.prototype, "tooltipDelay", void 0);
2758 __decorate([
2759 Input(),
2760 __metadata("design:type", TemplateRef)
2761 ], CalendarWeekViewEventComponent.prototype, "customTemplate", void 0);
2762 __decorate([
2763 Input(),
2764 __metadata("design:type", TemplateRef)
2765 ], CalendarWeekViewEventComponent.prototype, "eventTitleTemplate", void 0);
2766 __decorate([
2767 Input(),
2768 __metadata("design:type", TemplateRef)
2769 ], CalendarWeekViewEventComponent.prototype, "eventActionsTemplate", void 0);
2770 __decorate([
2771 Input(),
2772 __metadata("design:type", TemplateRef)
2773 ], CalendarWeekViewEventComponent.prototype, "tooltipTemplate", void 0);
2774 __decorate([
2775 Input(),
2776 __metadata("design:type", Object)
2777 ], CalendarWeekViewEventComponent.prototype, "column", void 0);
2778 __decorate([
2779 Input(),
2780 __metadata("design:type", Number)
2781 ], CalendarWeekViewEventComponent.prototype, "daysInWeek", void 0);
2782 __decorate([
2783 Output(),
2784 __metadata("design:type", Object)
2785 ], CalendarWeekViewEventComponent.prototype, "eventClicked", void 0);
2786 CalendarWeekViewEventComponent = __decorate([
2787 Component({
2788 selector: 'mwl-calendar-week-view-event',
2789 template: "\n <ng-template\n #defaultTemplate\n let-weekEvent=\"weekEvent\"\n let-tooltipPlacement=\"tooltipPlacement\"\n let-eventClicked=\"eventClicked\"\n let-tooltipTemplate=\"tooltipTemplate\"\n let-tooltipAppendToBody=\"tooltipAppendToBody\"\n let-tooltipDisabled=\"tooltipDisabled\"\n let-tooltipDelay=\"tooltipDelay\"\n let-column=\"column\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n class=\"cal-event\"\n [ngStyle]=\"{\n backgroundColor: weekEvent.event.color?.secondary,\n borderColor: weekEvent.event.color?.primary\n }\"\n [mwlCalendarTooltip]=\"\n !tooltipDisabled\n ? (weekEvent.event.title\n | calendarEventTitle\n : (daysInWeek === 1 ? 'dayTooltip' : 'weekTooltip')\n : weekEvent.tempEvent || weekEvent.event)\n : ''\n \"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipEvent]=\"weekEvent.tempEvent || weekEvent.event\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n (mwlClick)=\"eventClicked.emit({ sourceEvent: $event })\"\n (mwlKeydownEnter)=\"eventClicked.emit({ sourceEvent: $event })\"\n tabindex=\"0\"\n role=\"application\"\n [attr.aria-label]=\"\n { event: weekEvent.tempEvent || weekEvent.event, locale: locale }\n | calendarA11y: 'eventDescription'\n \"\n >\n <mwl-calendar-event-actions\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventActionsTemplate\"\n >\n </mwl-calendar-event-actions>\n &ngsp;\n <mwl-calendar-event-title\n [event]=\"weekEvent.tempEvent || weekEvent.event\"\n [customTemplate]=\"eventTitleTemplate\"\n [view]=\"daysInWeek === 1 ? 'day' : 'week'\"\n >\n </mwl-calendar-event-title>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n weekEvent: weekEvent,\n tooltipPlacement: tooltipPlacement,\n eventClicked: eventClicked,\n tooltipTemplate: tooltipTemplate,\n tooltipAppendToBody: tooltipAppendToBody,\n tooltipDisabled: tooltipDisabled,\n tooltipDelay: tooltipDelay,\n column: column,\n daysInWeek: daysInWeek\n }\"\n >\n </ng-template>\n "
2790 })
2791 ], CalendarWeekViewEventComponent);
2792 return CalendarWeekViewEventComponent;
2793}());
2794
2795var CalendarWeekViewHourSegmentComponent = /** @class */ (function () {
2796 function CalendarWeekViewHourSegmentComponent() {
2797 }
2798 __decorate([
2799 Input(),
2800 __metadata("design:type", Object)
2801 ], CalendarWeekViewHourSegmentComponent.prototype, "segment", void 0);
2802 __decorate([
2803 Input(),
2804 __metadata("design:type", Number)
2805 ], CalendarWeekViewHourSegmentComponent.prototype, "segmentHeight", void 0);
2806 __decorate([
2807 Input(),
2808 __metadata("design:type", String)
2809 ], CalendarWeekViewHourSegmentComponent.prototype, "locale", void 0);
2810 __decorate([
2811 Input(),
2812 __metadata("design:type", Boolean)
2813 ], CalendarWeekViewHourSegmentComponent.prototype, "isTimeLabel", void 0);
2814 __decorate([
2815 Input(),
2816 __metadata("design:type", Number)
2817 ], CalendarWeekViewHourSegmentComponent.prototype, "daysInWeek", void 0);
2818 __decorate([
2819 Input(),
2820 __metadata("design:type", TemplateRef)
2821 ], CalendarWeekViewHourSegmentComponent.prototype, "customTemplate", void 0);
2822 CalendarWeekViewHourSegmentComponent = __decorate([
2823 Component({
2824 selector: 'mwl-calendar-week-view-hour-segment',
2825 template: "\n <ng-template\n #defaultTemplate\n let-segment=\"segment\"\n let-locale=\"locale\"\n let-segmentHeight=\"segmentHeight\"\n let-isTimeLabel=\"isTimeLabel\"\n let-daysInWeek=\"daysInWeek\"\n >\n <div\n [attr.aria-hidden]=\"\n {}\n | calendarA11y\n : (daysInWeek === 1\n ? 'hideDayHourSegment'\n : 'hideWeekHourSegment')\n \"\n class=\"cal-hour-segment\"\n [style.height.px]=\"segmentHeight\"\n [class.cal-hour-start]=\"segment.isStart\"\n [class.cal-after-hour-start]=\"!segment.isStart\"\n [ngClass]=\"segment.cssClass\"\n >\n <div class=\"cal-time\" *ngIf=\"isTimeLabel\">\n {{\n segment.displayDate\n | calendarDate\n : (daysInWeek === 1 ? 'dayViewHour' : 'weekViewHour')\n : locale\n }}\n </div>\n </div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n segment: segment,\n locale: locale,\n segmentHeight: segmentHeight,\n isTimeLabel: isTimeLabel,\n daysInWeek: daysInWeek\n }\"\n >\n </ng-template>\n "
2826 })
2827 ], CalendarWeekViewHourSegmentComponent);
2828 return CalendarWeekViewHourSegmentComponent;
2829}());
2830
2831var CalendarWeekViewCurrentTimeMarkerComponent = /** @class */ (function () {
2832 function CalendarWeekViewCurrentTimeMarkerComponent(dateAdapter, zone) {
2833 var _this = this;
2834 this.dateAdapter = dateAdapter;
2835 this.zone = zone;
2836 this.columnDate$ = new BehaviorSubject(this.columnDate);
2837 this.marker$ = this.zone.onStable.pipe(switchMap(function () { return interval(60 * 1000); }), startWith(0), switchMapTo(this.columnDate$), map(function (columnDate) {
2838 var startOfDay = _this.dateAdapter.setMinutes(_this.dateAdapter.setHours(columnDate, _this.dayStartHour), _this.dayStartMinute);
2839 var endOfDay = _this.dateAdapter.setMinutes(_this.dateAdapter.setHours(columnDate, _this.dayEndHour), _this.dayEndMinute);
2840 var hourHeightModifier = (_this.hourSegments * _this.hourSegmentHeight) / 60;
2841 var now = new Date();
2842 return {
2843 isVisible: _this.dateAdapter.isSameDay(columnDate, now) &&
2844 now >= startOfDay &&
2845 now <= endOfDay,
2846 top: _this.dateAdapter.differenceInMinutes(now, startOfDay) *
2847 hourHeightModifier,
2848 };
2849 }));
2850 }
2851 CalendarWeekViewCurrentTimeMarkerComponent.prototype.ngOnChanges = function (changes) {
2852 if (changes.columnDate) {
2853 this.columnDate$.next(changes.columnDate.currentValue);
2854 }
2855 };
2856 CalendarWeekViewCurrentTimeMarkerComponent.ctorParameters = function () { return [
2857 { type: DateAdapter },
2858 { type: NgZone }
2859 ]; };
2860 __decorate([
2861 Input(),
2862 __metadata("design:type", Date)
2863 ], CalendarWeekViewCurrentTimeMarkerComponent.prototype, "columnDate", void 0);
2864 __decorate([
2865 Input(),
2866 __metadata("design:type", Number)
2867 ], CalendarWeekViewCurrentTimeMarkerComponent.prototype, "dayStartHour", void 0);
2868 __decorate([
2869 Input(),
2870 __metadata("design:type", Number)
2871 ], CalendarWeekViewCurrentTimeMarkerComponent.prototype, "dayStartMinute", void 0);
2872 __decorate([
2873 Input(),
2874 __metadata("design:type", Number)
2875 ], CalendarWeekViewCurrentTimeMarkerComponent.prototype, "dayEndHour", void 0);
2876 __decorate([
2877 Input(),
2878 __metadata("design:type", Number)
2879 ], CalendarWeekViewCurrentTimeMarkerComponent.prototype, "dayEndMinute", void 0);
2880 __decorate([
2881 Input(),
2882 __metadata("design:type", Number)
2883 ], CalendarWeekViewCurrentTimeMarkerComponent.prototype, "hourSegments", void 0);
2884 __decorate([
2885 Input(),
2886 __metadata("design:type", Number)
2887 ], CalendarWeekViewCurrentTimeMarkerComponent.prototype, "hourSegmentHeight", void 0);
2888 __decorate([
2889 Input(),
2890 __metadata("design:type", TemplateRef)
2891 ], CalendarWeekViewCurrentTimeMarkerComponent.prototype, "customTemplate", void 0);
2892 CalendarWeekViewCurrentTimeMarkerComponent = __decorate([
2893 Component({
2894 selector: 'mwl-calendar-week-view-current-time-marker',
2895 template: "\n <ng-template\n #defaultTemplate\n let-columnDate=\"columnDate\"\n let-dayStartHour=\"dayStartHour\"\n let-dayStartMinute=\"dayStartMinute\"\n let-dayEndHour=\"dayEndHour\"\n let-dayEndMinute=\"dayEndMinute\"\n let-isVisible=\"isVisible\"\n let-topPx=\"topPx\"\n >\n <div\n class=\"cal-current-time-marker\"\n *ngIf=\"isVisible\"\n [style.top.px]=\"topPx\"\n ></div>\n </ng-template>\n <ng-template\n [ngTemplateOutlet]=\"customTemplate || defaultTemplate\"\n [ngTemplateOutletContext]=\"{\n columnDate: columnDate,\n dayStartHour: dayStartHour,\n dayStartMinute: dayStartMinute,\n dayEndHour: dayEndHour,\n dayEndMinute: dayEndMinute,\n isVisible: (marker$ | async)?.isVisible,\n topPx: (marker$ | async)?.top\n }\"\n >\n </ng-template>\n "
2896 }),
2897 __metadata("design:paramtypes", [DateAdapter, NgZone])
2898 ], CalendarWeekViewCurrentTimeMarkerComponent);
2899 return CalendarWeekViewCurrentTimeMarkerComponent;
2900}());
2901
2902var CalendarWeekModule = /** @class */ (function () {
2903 function CalendarWeekModule() {
2904 }
2905 CalendarWeekModule = __decorate([
2906 NgModule({
2907 imports: [
2908 CommonModule,
2909 ResizableModule,
2910 DragAndDropModule,
2911 CalendarCommonModule,
2912 ],
2913 declarations: [
2914 CalendarWeekViewComponent,
2915 CalendarWeekViewHeaderComponent,
2916 CalendarWeekViewEventComponent,
2917 CalendarWeekViewHourSegmentComponent,
2918 CalendarWeekViewCurrentTimeMarkerComponent,
2919 ],
2920 exports: [
2921 ResizableModule,
2922 DragAndDropModule,
2923 CalendarWeekViewComponent,
2924 CalendarWeekViewHeaderComponent,
2925 CalendarWeekViewEventComponent,
2926 CalendarWeekViewHourSegmentComponent,
2927 CalendarWeekViewCurrentTimeMarkerComponent,
2928 ],
2929 })
2930 ], CalendarWeekModule);
2931 return CalendarWeekModule;
2932}());
2933
2934/**
2935 * Shows all events on a given day. Example usage:
2936 *
2937 * ```typescript
2938 * <mwl-calendar-day-view
2939 * [viewDate]="viewDate"
2940 * [events]="events">
2941 * </mwl-calendar-day-view>
2942 * ```
2943 */
2944var CalendarDayViewComponent = /** @class */ (function () {
2945 function CalendarDayViewComponent() {
2946 /**
2947 * An array of events to display on view
2948 * The schema is available here: https://github.com/mattlewis92/calendar-utils/blob/c51689985f59a271940e30bc4e2c4e1fee3fcb5c/src/calendarUtils.ts#L49-L63
2949 */
2950 this.events = [];
2951 /**
2952 * The number of segments in an hour. Must divide equally into 60.
2953 */
2954 this.hourSegments = 2;
2955 /**
2956 * The height in pixels of each hour segment
2957 */
2958 this.hourSegmentHeight = 30;
2959 /**
2960 * The day start hours in 24 hour time. Must be 0-23
2961 */
2962 this.dayStartHour = 0;
2963 /**
2964 * The day start minutes. Must be 0-59
2965 */
2966 this.dayStartMinute = 0;
2967 /**
2968 * The day end hours in 24 hour time. Must be 0-23
2969 */
2970 this.dayEndHour = 23;
2971 /**
2972 * The day end minutes. Must be 0-59
2973 */
2974 this.dayEndMinute = 59;
2975 /**
2976 * The placement of the event tooltip
2977 */
2978 this.tooltipPlacement = 'auto';
2979 /**
2980 * Whether to append tooltips to the body or next to the trigger element
2981 */
2982 this.tooltipAppendToBody = true;
2983 /**
2984 * The delay in milliseconds before the tooltip should be displayed. If not provided the tooltip
2985 * will be displayed immediately.
2986 */
2987 this.tooltipDelay = null;
2988 /**
2989 * Whether to snap events to a grid when dragging
2990 */
2991 this.snapDraggedEvents = true;
2992 /**
2993 * Called when an event title is clicked
2994 */
2995 this.eventClicked = new EventEmitter();
2996 /**
2997 * Called when an hour segment is clicked
2998 */
2999 this.hourSegmentClicked = new EventEmitter();
3000 /**
3001 * Called when an event is resized or dragged and dropped
3002 */
3003 this.eventTimesChanged = new EventEmitter();
3004 /**
3005 * An output that will be called before the view is rendered for the current day.
3006 * If you add the `cssClass` property to an hour grid segment it will add that class to the hour segment in the template
3007 */
3008 this.beforeViewRender = new EventEmitter();
3009 }
3010 __decorate([
3011 Input(),
3012 __metadata("design:type", Date)
3013 ], CalendarDayViewComponent.prototype, "viewDate", void 0);
3014 __decorate([
3015 Input(),
3016 __metadata("design:type", Array)
3017 ], CalendarDayViewComponent.prototype, "events", void 0);
3018 __decorate([
3019 Input(),
3020 __metadata("design:type", Number)
3021 ], CalendarDayViewComponent.prototype, "hourSegments", void 0);
3022 __decorate([
3023 Input(),
3024 __metadata("design:type", Number)
3025 ], CalendarDayViewComponent.prototype, "hourSegmentHeight", void 0);
3026 __decorate([
3027 Input(),
3028 __metadata("design:type", Number)
3029 ], CalendarDayViewComponent.prototype, "dayStartHour", void 0);
3030 __decorate([
3031 Input(),
3032 __metadata("design:type", Number)
3033 ], CalendarDayViewComponent.prototype, "dayStartMinute", void 0);
3034 __decorate([
3035 Input(),
3036 __metadata("design:type", Number)
3037 ], CalendarDayViewComponent.prototype, "dayEndHour", void 0);
3038 __decorate([
3039 Input(),
3040 __metadata("design:type", Number)
3041 ], CalendarDayViewComponent.prototype, "dayEndMinute", void 0);
3042 __decorate([
3043 Input(),
3044 __metadata("design:type", Subject)
3045 ], CalendarDayViewComponent.prototype, "refresh", void 0);
3046 __decorate([
3047 Input(),
3048 __metadata("design:type", String)
3049 ], CalendarDayViewComponent.prototype, "locale", void 0);
3050 __decorate([
3051 Input(),
3052 __metadata("design:type", Number)
3053 ], CalendarDayViewComponent.prototype, "eventSnapSize", void 0);
3054 __decorate([
3055 Input(),
3056 __metadata("design:type", Object)
3057 ], CalendarDayViewComponent.prototype, "tooltipPlacement", void 0);
3058 __decorate([
3059 Input(),
3060 __metadata("design:type", TemplateRef)
3061 ], CalendarDayViewComponent.prototype, "tooltipTemplate", void 0);
3062 __decorate([
3063 Input(),
3064 __metadata("design:type", Boolean)
3065 ], CalendarDayViewComponent.prototype, "tooltipAppendToBody", void 0);
3066 __decorate([
3067 Input(),
3068 __metadata("design:type", Number)
3069 ], CalendarDayViewComponent.prototype, "tooltipDelay", void 0);
3070 __decorate([
3071 Input(),
3072 __metadata("design:type", TemplateRef)
3073 ], CalendarDayViewComponent.prototype, "hourSegmentTemplate", void 0);
3074 __decorate([
3075 Input(),
3076 __metadata("design:type", TemplateRef)
3077 ], CalendarDayViewComponent.prototype, "eventTemplate", void 0);
3078 __decorate([
3079 Input(),
3080 __metadata("design:type", TemplateRef)
3081 ], CalendarDayViewComponent.prototype, "eventTitleTemplate", void 0);
3082 __decorate([
3083 Input(),
3084 __metadata("design:type", TemplateRef)
3085 ], CalendarDayViewComponent.prototype, "eventActionsTemplate", void 0);
3086 __decorate([
3087 Input(),
3088 __metadata("design:type", Boolean)
3089 ], CalendarDayViewComponent.prototype, "snapDraggedEvents", void 0);
3090 __decorate([
3091 Input(),
3092 __metadata("design:type", TemplateRef)
3093 ], CalendarDayViewComponent.prototype, "allDayEventsLabelTemplate", void 0);
3094 __decorate([
3095 Input(),
3096 __metadata("design:type", TemplateRef)
3097 ], CalendarDayViewComponent.prototype, "currentTimeMarkerTemplate", void 0);
3098 __decorate([
3099 Output(),
3100 __metadata("design:type", Object)
3101 ], CalendarDayViewComponent.prototype, "eventClicked", void 0);
3102 __decorate([
3103 Output(),
3104 __metadata("design:type", Object)
3105 ], CalendarDayViewComponent.prototype, "hourSegmentClicked", void 0);
3106 __decorate([
3107 Output(),
3108 __metadata("design:type", Object)
3109 ], CalendarDayViewComponent.prototype, "eventTimesChanged", void 0);
3110 __decorate([
3111 Output(),
3112 __metadata("design:type", Object)
3113 ], CalendarDayViewComponent.prototype, "beforeViewRender", void 0);
3114 CalendarDayViewComponent = __decorate([
3115 Component({
3116 selector: 'mwl-calendar-day-view',
3117 template: "\n <mwl-calendar-week-view\n class=\"cal-day-view\"\n [daysInWeek]=\"1\"\n [viewDate]=\"viewDate\"\n [events]=\"events\"\n [hourSegments]=\"hourSegments\"\n [hourSegmentHeight]=\"hourSegmentHeight\"\n [dayStartHour]=\"dayStartHour\"\n [dayStartMinute]=\"dayStartMinute\"\n [dayEndHour]=\"dayEndHour\"\n [dayEndMinute]=\"dayEndMinute\"\n [refresh]=\"refresh\"\n [locale]=\"locale\"\n [eventSnapSize]=\"eventSnapSize\"\n [tooltipPlacement]=\"tooltipPlacement\"\n [tooltipTemplate]=\"tooltipTemplate\"\n [tooltipAppendToBody]=\"tooltipAppendToBody\"\n [tooltipDelay]=\"tooltipDelay\"\n [hourSegmentTemplate]=\"hourSegmentTemplate\"\n [eventTemplate]=\"eventTemplate\"\n [eventTitleTemplate]=\"eventTitleTemplate\"\n [eventActionsTemplate]=\"eventActionsTemplate\"\n [snapDraggedEvents]=\"snapDraggedEvents\"\n [allDayEventsLabelTemplate]=\"allDayEventsLabelTemplate\"\n [currentTimeMarkerTemplate]=\"currentTimeMarkerTemplate\"\n (eventClicked)=\"eventClicked.emit($event)\"\n (hourSegmentClicked)=\"hourSegmentClicked.emit($event)\"\n (eventTimesChanged)=\"eventTimesChanged.emit($event)\"\n (beforeViewRender)=\"beforeViewRender.emit($event)\"\n ></mwl-calendar-week-view>\n "
3118 })
3119 ], CalendarDayViewComponent);
3120 return CalendarDayViewComponent;
3121}());
3122
3123var CalendarDayModule = /** @class */ (function () {
3124 function CalendarDayModule() {
3125 }
3126 CalendarDayModule = __decorate([
3127 NgModule({
3128 imports: [CommonModule, CalendarCommonModule, CalendarWeekModule],
3129 declarations: [CalendarDayViewComponent],
3130 exports: [CalendarDayViewComponent],
3131 })
3132 ], CalendarDayModule);
3133 return CalendarDayModule;
3134}());
3135
3136/**
3137 * The main module of this library. Example usage:
3138 *
3139 * ```typescript
3140 * import { CalenderModule } from 'angular-calendar';
3141 *
3142 * @NgModule({
3143 * imports: [
3144 * CalenderModule.forRoot()
3145 * ]
3146 * })
3147 * class MyModule {}
3148 * ```
3149 *
3150 */
3151var CalendarModule = /** @class */ (function () {
3152 function CalendarModule() {
3153 }
3154 CalendarModule_1 = CalendarModule;
3155 CalendarModule.forRoot = function (dateAdapter, config) {
3156 if (config === void 0) { config = {}; }
3157 return {
3158 ngModule: CalendarModule_1,
3159 providers: [
3160 dateAdapter,
3161 config.eventTitleFormatter || CalendarEventTitleFormatter,
3162 config.dateFormatter || CalendarDateFormatter,
3163 config.utils || CalendarUtils,
3164 config.a11y || CalendarA11y,
3165 ],
3166 };
3167 };
3168 var CalendarModule_1;
3169 CalendarModule = CalendarModule_1 = __decorate([
3170 NgModule({
3171 imports: [
3172 CalendarCommonModule,
3173 CalendarMonthModule,
3174 CalendarWeekModule,
3175 CalendarDayModule,
3176 ],
3177 exports: [
3178 CalendarCommonModule,
3179 CalendarMonthModule,
3180 CalendarWeekModule,
3181 CalendarDayModule,
3182 ],
3183 })
3184 ], CalendarModule);
3185 return CalendarModule;
3186}());
3187
3188/*
3189 * Public API Surface of angular-calendar
3190 */
3191
3192/**
3193 * Generated bundle index. Do not edit.
3194 */
3195
3196export { CalendarA11y, CalendarAngularDateFormatter, CalendarCommonModule, CalendarDateFormatter, CalendarDayModule, CalendarDayViewComponent, CalendarEventTimesChangedEventType, CalendarEventTitleFormatter, CalendarModule, CalendarMomentDateFormatter, CalendarMonthModule, CalendarMonthViewComponent, CalendarNativeDateFormatter, CalendarUtils, CalendarView, CalendarWeekModule, CalendarWeekViewComponent, DateAdapter, MOMENT, collapseAnimation, getWeekViewPeriod, CalendarOpenDayEventsComponent as ɵa, CalendarEventActionsComponent as ɵb, CalendarEventTitleComponent as ɵc, CalendarTooltipWindowComponent as ɵd, CalendarTooltipDirective as ɵe, CalendarPreviousViewDirective as ɵf, CalendarNextViewDirective as ɵg, CalendarTodayDirective as ɵh, CalendarDatePipe as ɵi, CalendarEventTitlePipe as ɵj, CalendarA11yPipe as ɵk, ClickDirective as ɵl, KeydownEnterDirective as ɵm, CalendarMonthCellComponent as ɵn, CalendarMonthViewHeaderComponent as ɵo, CalendarWeekViewHeaderComponent as ɵp, CalendarWeekViewEventComponent as ɵq, CalendarWeekViewHourSegmentComponent as ɵr, CalendarWeekViewCurrentTimeMarkerComponent as ɵs };
3197//# sourceMappingURL=angular-calendar.js.map