@bimeister/pupakit.calendar
Version:
PupaKit Calendar
46 lines • 13.3 kB
JavaScript
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';
import { isNil } from '@bimeister/utilities';
import { getDateFromCalendarDay } from '../../declarations/functions/get-date-from-calendar-day.function';
import '../../declarations/interfaces/calendar-day.interface';
import '../../declarations/interfaces/calendar-month.interface';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
import * as i2 from "@bimeister/pupakit.common";
import * as i3 from "../calendar-day/calendar-day.component";
import * as i4 from "../calendar-week/calendar-week.component";
import * as i5 from "../calendar-cell/calendar-cell.component";
import * as i6 from "../calendar-cell-empty/calendar-cell-empty.component";
import * as i7 from "../calendar-cell-separator/calendar-cell-separator.component";
import * as i8 from "../../pipes/month-day-cells.pipe";
import * as i9 from "../../pipes/is-day-selected.pipe";
import * as i10 from "../../pipes/day-position-in-date-range.pipe";
import * as i11 from "../../pipes/is-empty-day-in-date-range.pipe";
export class CalendarMonthComponent {
constructor() {
this.isCurrent = false;
this.selectedDates = [];
this.selectDate = new EventEmitter();
this.currentDayNumber = new Date().getDate();
}
handleSelectDay(calendarDay) {
if (isNil(calendarDay)) {
return;
}
this.selectDate.emit(getDateFromCalendarDay(calendarDay));
}
}
CalendarMonthComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarMonthComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
CalendarMonthComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: CalendarMonthComponent, selector: "pupa-calendar-month", inputs: { calendarMonth: "calendarMonth", isCurrent: "isCurrent", selectedDates: "selectedDates" }, outputs: { selectDate: "selectDate" }, ngImport: i0, template: "<pupa-calendar-week *ngFor=\"let week of calendarMonth | monthDayCells\">\n <ng-container *ngFor=\"let cell of week; let isLast = last\">\n <ng-container\n *ngIf=\"cell.isEmpty\"\n [ngTemplateOutlet]=\"emptyWeekPart\"\n [ngTemplateOutletContext]=\"{ isLast: isLast, cellIndex: cell.index }\"\n >\n </ng-container>\n\n <ng-container\n *ngIf=\"!cell.isEmpty\"\n [ngTemplateOutlet]=\"weekPart\"\n [ngTemplateOutletContext]=\"{ isLast: isLast, cell: cell }\"\n >\n </ng-container>\n </ng-container>\n</pupa-calendar-week>\n\n<ng-template #weekPart let-cell=\"cell\" let-isLast=\"isLast\">\n <ng-container *pupaLet=\"cell.calendarDay | dayPositionInDateRange : selectedDates as positionInRange\">\n <pupa-calendar-cell [positionInRange]=\"positionInRange\">\n <pupa-calendar-day\n (select)=\"handleSelectDay(cell.calendarDay)\"\n [value]=\"cell.calendarDay.day\"\n [isCurrent]=\"isCurrent && cell.isCurrent\"\n [isSelected]=\"cell.calendarDay | isDaySelected : selectedDates\"\n ></pupa-calendar-day>\n </pupa-calendar-cell>\n\n <pupa-calendar-cell-separator\n *ngIf=\"!isLast\"\n [isInRange]=\"positionInRange === 'inside' || positionInRange === 'first'\"\n ></pupa-calendar-cell-separator>\n </ng-container>\n</ng-template>\n\n<ng-template #emptyWeekPart let-cellIndex=\"cellIndex\" let-isLast=\"isLast\">\n <ng-container *pupaLet=\"cellIndex | isEmptyDayInDateRange : calendarMonth : selectedDates as isInRange\">\n <pupa-calendar-cell-empty [isInRange]=\"isInRange\"></pupa-calendar-cell-empty>\n\n <pupa-calendar-cell-separator *ngIf=\"!isLast\" [isInRange]=\"isInRange\"></pupa-calendar-cell-separator>\n </ng-container>\n</ng-template>\n", styles: [":host{height:100%;width:100%;display:block}\n"], dependencies: [{ kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.LetDirective, selector: "[pupaLet]", inputs: ["pupaLet"] }, { kind: "component", type: i3.CalendarDayComponent, selector: "pupa-calendar-day", inputs: ["value", "isDisabled", "isEmpty", "isCurrent", "isSelected"], outputs: ["select"] }, { kind: "component", type: i4.CalendarWeekComponent, selector: "pupa-calendar-week" }, { kind: "component", type: i5.CalendarCellComponent, selector: "pupa-calendar-cell", inputs: ["positionInRange"] }, { kind: "component", type: i6.CalendarCellEmptyComponent, selector: "pupa-calendar-cell-empty", inputs: ["isInRange"] }, { kind: "component", type: i7.CalendarCellSeparatorComponent, selector: "pupa-calendar-cell-separator", inputs: ["isInRange"] }, { kind: "pipe", type: i8.MonthDayCellsPipe, name: "monthDayCells" }, { kind: "pipe", type: i9.IsDaySelectedPipe, name: "isDaySelected" }, { kind: "pipe", type: i10.DayPositionInDateRangePipe, name: "dayPositionInDateRange" }, { kind: "pipe", type: i11.IsEmptyDayInDateRangePipe, name: "isEmptyDayInDateRange" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CalendarMonthComponent, decorators: [{
type: Component,
args: [{ selector: 'pupa-calendar-month', encapsulation: ViewEncapsulation.Emulated, changeDetection: ChangeDetectionStrategy.OnPush, template: "<pupa-calendar-week *ngFor=\"let week of calendarMonth | monthDayCells\">\n <ng-container *ngFor=\"let cell of week; let isLast = last\">\n <ng-container\n *ngIf=\"cell.isEmpty\"\n [ngTemplateOutlet]=\"emptyWeekPart\"\n [ngTemplateOutletContext]=\"{ isLast: isLast, cellIndex: cell.index }\"\n >\n </ng-container>\n\n <ng-container\n *ngIf=\"!cell.isEmpty\"\n [ngTemplateOutlet]=\"weekPart\"\n [ngTemplateOutletContext]=\"{ isLast: isLast, cell: cell }\"\n >\n </ng-container>\n </ng-container>\n</pupa-calendar-week>\n\n<ng-template #weekPart let-cell=\"cell\" let-isLast=\"isLast\">\n <ng-container *pupaLet=\"cell.calendarDay | dayPositionInDateRange : selectedDates as positionInRange\">\n <pupa-calendar-cell [positionInRange]=\"positionInRange\">\n <pupa-calendar-day\n (select)=\"handleSelectDay(cell.calendarDay)\"\n [value]=\"cell.calendarDay.day\"\n [isCurrent]=\"isCurrent && cell.isCurrent\"\n [isSelected]=\"cell.calendarDay | isDaySelected : selectedDates\"\n ></pupa-calendar-day>\n </pupa-calendar-cell>\n\n <pupa-calendar-cell-separator\n *ngIf=\"!isLast\"\n [isInRange]=\"positionInRange === 'inside' || positionInRange === 'first'\"\n ></pupa-calendar-cell-separator>\n </ng-container>\n</ng-template>\n\n<ng-template #emptyWeekPart let-cellIndex=\"cellIndex\" let-isLast=\"isLast\">\n <ng-container *pupaLet=\"cellIndex | isEmptyDayInDateRange : calendarMonth : selectedDates as isInRange\">\n <pupa-calendar-cell-empty [isInRange]=\"isInRange\"></pupa-calendar-cell-empty>\n\n <pupa-calendar-cell-separator *ngIf=\"!isLast\" [isInRange]=\"isInRange\"></pupa-calendar-cell-separator>\n </ng-container>\n</ng-template>\n", styles: [":host{height:100%;width:100%;display:block}\n"] }]
}], propDecorators: { calendarMonth: [{
type: Input
}], isCurrent: [{
type: Input
}], selectedDates: [{
type: Input
}], selectDate: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItbW9udGguY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXItbW9udGgvY2FsZW5kYXItbW9udGguY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvY2FsZW5kYXItbW9udGgvY2FsZW5kYXItbW9udGguY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuSCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDN0MsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0VBQWtFLENBQUM7QUFDMUcsT0FBNEIsc0RBQXNELENBQUM7QUFDbkYsT0FBOEIsd0RBQXdELENBQUM7Ozs7Ozs7Ozs7Ozs7QUFTdkYsTUFBTSxPQUFPLHNCQUFzQjtJQVBuQztRQVNrQixjQUFTLEdBQVksS0FBSyxDQUFDO1FBQzNCLGtCQUFhLEdBQVcsRUFBRSxDQUFDO1FBRWpCLGVBQVUsR0FBdUIsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUVwRSxxQkFBZ0IsR0FBVyxJQUFJLElBQUksRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBU2pFO0lBUFEsZUFBZSxDQUFDLFdBQStCO1FBQ3BELElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxFQUFFO1lBQ3RCLE9BQU87U0FDUjtRQUVELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs7b0hBZlUsc0JBQXNCO3dHQUF0QixzQkFBc0Isc01DYm5DLGl1REEyQ0E7NEZEOUJhLHNCQUFzQjtrQkFQbEMsU0FBUzsrQkFDRSxxQkFBcUIsaUJBR2hCLGlCQUFpQixDQUFDLFFBQVEsbUJBQ3hCLHVCQUF1QixDQUFDLE1BQU07OEJBRy9CLGFBQWE7c0JBQTVCLEtBQUs7Z0JBQ1UsU0FBUztzQkFBeEIsS0FBSztnQkFDVSxhQUFhO3NCQUE1QixLQUFLO2dCQUVvQixVQUFVO3NCQUFuQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3RW5jYXBzdWxhdGlvbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNOaWwgfSBmcm9tICdAYmltZWlzdGVyL3V0aWxpdGllcyc7XG5pbXBvcnQgeyBnZXREYXRlRnJvbUNhbGVuZGFyRGF5IH0gZnJvbSAnLi4vLi4vZGVjbGFyYXRpb25zL2Z1bmN0aW9ucy9nZXQtZGF0ZS1mcm9tLWNhbGVuZGFyLWRheS5mdW5jdGlvbic7XG5pbXBvcnQgeyBDYWxlbmRhckRheSB9IGZyb20gJy4uLy4uL2RlY2xhcmF0aW9ucy9pbnRlcmZhY2VzL2NhbGVuZGFyLWRheS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb250aCB9IGZyb20gJy4uLy4uL2RlY2xhcmF0aW9ucy9pbnRlcmZhY2VzL2NhbGVuZGFyLW1vbnRoLmludGVyZmFjZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3B1cGEtY2FsZW5kYXItbW9udGgnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItbW9udGguY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci1tb250aC5jb21wb25lbnQuc2NzcyddLFxuICBlbmNhcHN1bGF0aW9uOiBWaWV3RW5jYXBzdWxhdGlvbi5FbXVsYXRlZCxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIENhbGVuZGFyTW9udGhDb21wb25lbnQge1xuICBASW5wdXQoKSBwdWJsaWMgY2FsZW5kYXJNb250aDogQ2FsZW5kYXJNb250aDtcbiAgQElucHV0KCkgcHVibGljIGlzQ3VycmVudDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBwdWJsaWMgc2VsZWN0ZWREYXRlczogRGF0ZVtdID0gW107XG5cbiAgQE91dHB1dCgpIHB1YmxpYyByZWFkb25seSBzZWxlY3REYXRlOiBFdmVudEVtaXR0ZXI8RGF0ZT4gPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGN1cnJlbnREYXlOdW1iZXI6IG51bWJlciA9IG5ldyBEYXRlKCkuZ2V0RGF0ZSgpO1xuXG4gIHB1YmxpYyBoYW5kbGVTZWxlY3REYXkoY2FsZW5kYXJEYXk6IENhbGVuZGFyRGF5IHwgbnVsbCk6IHZvaWQge1xuICAgIGlmIChpc05pbChjYWxlbmRhckRheSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnNlbGVjdERhdGUuZW1pdChnZXREYXRlRnJvbUNhbGVuZGFyRGF5KGNhbGVuZGFyRGF5KSk7XG4gIH1cbn1cbiIsIjxwdXBhLWNhbGVuZGFyLXdlZWsgKm5nRm9yPVwibGV0IHdlZWsgb2YgY2FsZW5kYXJNb250aCB8IG1vbnRoRGF5Q2VsbHNcIj5cbiAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgY2VsbCBvZiB3ZWVrOyBsZXQgaXNMYXN0ID0gbGFzdFwiPlxuICAgIDxuZy1jb250YWluZXJcbiAgICAgICpuZ0lmPVwiY2VsbC5pc0VtcHR5XCJcbiAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImVtcHR5V2Vla1BhcnRcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXNMYXN0OiBpc0xhc3QsIGNlbGxJbmRleDogY2VsbC5pbmRleCB9XCJcbiAgICA+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8bmctY29udGFpbmVyXG4gICAgICAqbmdJZj1cIiFjZWxsLmlzRW1wdHlcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRdPVwid2Vla1BhcnRcIlxuICAgICAgW25nVGVtcGxhdGVPdXRsZXRDb250ZXh0XT1cInsgaXNMYXN0OiBpc0xhc3QsIGNlbGw6IGNlbGwgfVwiXG4gICAgPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvcHVwYS1jYWxlbmRhci13ZWVrPlxuXG48bmctdGVtcGxhdGUgI3dlZWtQYXJ0IGxldC1jZWxsPVwiY2VsbFwiIGxldC1pc0xhc3Q9XCJpc0xhc3RcIj5cbiAgPG5nLWNvbnRhaW5lciAqcHVwYUxldD1cImNlbGwuY2FsZW5kYXJEYXkgfCBkYXlQb3NpdGlvbkluRGF0ZVJhbmdlIDogc2VsZWN0ZWREYXRlcyBhcyBwb3NpdGlvbkluUmFuZ2VcIj5cbiAgICA8cHVwYS1jYWxlbmRhci1jZWxsIFtwb3NpdGlvbkluUmFuZ2VdPVwicG9zaXRpb25JblJhbmdlXCI+XG4gICAgICA8cHVwYS1jYWxlbmRhci1kYXlcbiAgICAgICAgKHNlbGVjdCk9XCJoYW5kbGVTZWxlY3REYXkoY2VsbC5jYWxlbmRhckRheSlcIlxuICAgICAgICBbdmFsdWVdPVwiY2VsbC5jYWxlbmRhckRheS5kYXlcIlxuICAgICAgICBbaXNDdXJyZW50XT1cImlzQ3VycmVudCAmJiBjZWxsLmlzQ3VycmVudFwiXG4gICAgICAgIFtpc1NlbGVjdGVkXT1cImNlbGwuY2FsZW5kYXJEYXkgfCBpc0RheVNlbGVjdGVkIDogc2VsZWN0ZWREYXRlc1wiXG4gICAgICA+PC9wdXBhLWNhbGVuZGFyLWRheT5cbiAgICA8L3B1cGEtY2FsZW5kYXItY2VsbD5cblxuICAgIDxwdXBhLWNhbGVuZGFyLWNlbGwtc2VwYXJhdG9yXG4gICAgICAqbmdJZj1cIiFpc0xhc3RcIlxuICAgICAgW2lzSW5SYW5nZV09XCJwb3NpdGlvbkluUmFuZ2UgPT09ICdpbnNpZGUnIHx8IHBvc2l0aW9uSW5SYW5nZSA9PT0gJ2ZpcnN0J1wiXG4gICAgPjwvcHVwYS1jYWxlbmRhci1jZWxsLXNlcGFyYXRvcj5cbiAgPC9uZy1jb250YWluZXI+XG48L25nLXRlbXBsYXRlPlxuXG48bmctdGVtcGxhdGUgI2VtcHR5V2Vla1BhcnQgbGV0LWNlbGxJbmRleD1cImNlbGxJbmRleFwiIGxldC1pc0xhc3Q9XCJpc0xhc3RcIj5cbiAgPG5nLWNvbnRhaW5lciAqcHVwYUxldD1cImNlbGxJbmRleCB8IGlzRW1wdHlEYXlJbkRhdGVSYW5nZSA6IGNhbGVuZGFyTW9udGggOiBzZWxlY3RlZERhdGVzIGFzIGlzSW5SYW5nZVwiPlxuICAgIDxwdXBhLWNhbGVuZGFyLWNlbGwtZW1wdHkgW2lzSW5SYW5nZV09XCJpc0luUmFuZ2VcIj48L3B1cGEtY2FsZW5kYXItY2VsbC1lbXB0eT5cblxuICAgIDxwdXBhLWNhbGVuZGFyLWNlbGwtc2VwYXJhdG9yICpuZ0lmPVwiIWlzTGFzdFwiIFtpc0luUmFuZ2VdPVwiaXNJblJhbmdlXCI+PC9wdXBhLWNhbGVuZGFyLWNlbGwtc2VwYXJhdG9yPlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=