ngx-mat-tui-calendar
Version:
Angular Material Design wrapper, supporting theming, for the Toast UI Calendar, suitable for web-based scheduling, events, appointments, and day planner applications.
555 lines • 91.4 kB
JavaScript
import { Component, Output, EventEmitter, Input } from '@angular/core';
import { MatDialogConfig } from '@angular/material/dialog';
import distinctColors from 'distinct-colors';
import { v4 as uuidv4 } from 'uuid';
import { faCalendarCheck, faTable, faColumns, faListAlt, faForward, faBackward, faCaretLeft, faCaretRight, } from '@fortawesome/free-solid-svg-icons';
import { default as Calendar, } from 'tui-calendar';
// project
import { LocalDate } from './local-date.js';
import { NgxMatTuiCalendarEditorDialogComponent } from './ngx-mat-tui-calendar-editor-dialog/ngx-mat-tui-calendar-editor-dialog.component';
import * as i0 from "@angular/core";
import * as i1 from "@angular/material/dialog";
import * as i2 from "@angular/material/toolbar";
import * as i3 from "@angular/material/button";
import * as i4 from "@fortawesome/angular-fontawesome";
import * as i5 from "@angular/material/button-toggle";
import * as i6 from "./ngx-mat-tui-calendar-wrapper/ngx-mat-tui-calendar-wrapper.component";
import * as i7 from "@angular/common";
export class NgxMatTuiCalendarComponent {
constructor(dialog) {
this.dialog = dialog;
this.iconToday = faCalendarCheck;
// iconPrev = faCaretSquareLeft;
// iconNext = faCaretSquareRight;
this.iconPrev = faCaretLeft;
this.iconNext = faCaretRight;
this.iconLongPrev = faBackward;
this.iconLongNext = faForward;
this.iconByMonth = faTable;
this.iconByWeek = faColumns;
this.iconByDay = faListAlt;
this.userCreatedSchedule = new EventEmitter();
this.userUpdatedSchedule = new EventEmitter();
this.userDeletedSchedule = new EventEmitter();
// we slice off the first color since it is gray
this.colors = distinctColors({ lightMin: 70, count: 15 }).slice(1);
this.colorIndex = 0;
this.calendarIdDefault = "main";
}
ngOnInit() {
// console.warn(`calendar.component.ts: ngOnit`)
this.setOptions(this.options);
this.createTUICalendar(this.appliedOptions.ioptions);
this.bindCallbacks();
this.calendar.toggleScheduleView(true);
this.calendar.render(true);
this.calendar.toggleScheduleView(true);
}
ngOnChanges(changes) {
// console.warn(`ngOnChanges: `, changes);
// console.warn(`change.option:`, changes.options);
let options = changes.options.currentValue;
this.setOptions(options);
}
ngOnDestroy() {
this.calendar.destroy();
}
onCalendarLongPrev() {
let date = this.calendar.getDate().toDate();
let days = 0;
let months = 0;
let years = 0;
switch (this.calendar.getViewName()) {
case 'day':
days = -7;
break;
case 'week':
days = -28;
break;
case 'month':
years = -1;
break;
}
date.setFullYear(date.getFullYear() + years);
date.setMonth(date.getMonth() + months); // date class does the modular arithmetic
date.setDate(date.getDate() + days); // date class does the modular arithmetic
this.calendar.setDate(date);
this.calendar.toggleScheduleView(true);
}
onCalendarPrev() {
this.calendar.prev();
this.calendar.toggleScheduleView(true);
}
onCalendarToday() {
this.calendar.today();
this.calendar.toggleScheduleView(true);
}
onCalendarNext() {
this.calendar.next();
this.calendar.toggleScheduleView(true);
}
onCalendarLongNext() {
let date = this.calendar.getDate().toDate();
let days = 0;
let months = 0;
let years = 0;
switch (this.calendar.getViewName()) {
case 'day':
days = 7;
break;
case 'week':
days = 28;
break;
case 'month':
years = 1;
break;
}
date.setFullYear(date.getFullYear() + years);
date.setMonth(date.getMonth() + months); // date class does the modular arithmetic
date.setDate(date.getDate() + days); // date class does the modular arithmetic
this.calendar.setDate(date);
this.calendar.toggleScheduleView(true);
}
onMonthView() {
this.calendar.changeView('month');
this.calendar.render(true); // <-- so that selection is cleared
}
onWeekView() {
// console.log(`onWeekView`)
this.calendar.changeView('week');
this.calendar.render(true); // <-- so that selection is cleared
}
onDayView() {
this.calendar.changeView('day');
this.calendar.render(true); // <-- so that selection is cleared
}
getDate() {
let date = this.calendar.getDate();
let str = date.toDate().toLocaleDateString("en-US", {
year: 'numeric',
month: 'short',
});
return str;
}
createTUICalendar(iopts) {
let ioptions = this.preprocessIOptions(iopts);
// console.warn(`calendar.component.ts: createTUICalendar: ioptions:`, ioptions);
this.calendar = new Calendar('#calendar', ioptions);
// console.warn(`calendar.component.ts: createTUICalendar: this.calendar:`, this.calendar);
this.calendar.toggleScheduleView(true);
}
bindCallbacks() {
this.bindAfterRenderSchedule();
this.bindClickTimezonesCollapseBtn();
this.bindClickDayname();
this.bindClickMore();
this.bindClickSchedule();
this.bindBeforeCreateSchedule();
this.bindBeforeUpdateSchedule();
this.bindBeforeDeleteSchedule();
}
bindAfterRenderSchedule() {
let that = this;
this.calendar.on('afterRenderSchedule', function (event) {
// console.warn(`afterRenderSchedule`, event);
});
}
bindClickTimezonesCollapseBtn() {
let that = this;
this.calendar.on('clickTimezonesCollapseBtn', function (timezonesCollapsed) {
// console.warn(`clickTimezonesCollapseBtn`, timezonesCollapsed);
});
}
bindClickDayname() {
let that = this;
this.calendar.on('clickDayname', function (event) {
// console.warn(`clickDayname`, event);
});
}
bindClickMore() {
let that = this;
this.calendar.on('clickMore', function (event) {
// console.warn(`clickMore`, event);
});
}
bindClickSchedule() {
// only works if useDetailPopup: false,
let that = this;
this.calendar.on('clickSchedule', function (event) {
// console.warn(`clickSchedule`, event);
let schedule = Object.assign({}, event.schedule);
schedule.start = (new LocalDate(schedule.start)).toDate();
schedule.end = (new LocalDate(schedule.end)).toDate();
that.openPopupScheduleEditor(schedule);
});
}
bindBeforeCreateSchedule() {
let that = this;
this.calendar.on('beforeCreateSchedule', function (event) {
// console.log(`beforeCreateSchedule`, event);
let start = (new LocalDate(event.start)).toDate();
start.setHours(9);
let end = (new LocalDate(event.end)).toDate();
end.setHours(10);
that.openPopupScheduleEditor({
title: '',
start: start,
end: end,
id: null,
});
});
}
bindBeforeUpdateSchedule() {
let that = this;
this.calendar.on('beforeUpdateSchedule', function (event) {
// console.log(`beforeUpdateSchedule`, event);
that.updateScheduleAndNotifyParent(event);
});
}
bindBeforeDeleteSchedule() {
let that = this;
this.calendar.on('beforeDeleteSchedule', function (event) {
// console.log(`beforeDeleteSchedule`, event.schedule);
// console.log(`beforeDeleteSchedule`, event.schedule);
that.deleteScheduleAndNotifyParent({ id: event.schedule.id, calendarId: event.schedule.calendarId });
});
}
nextColor() {
let color = this.colors[this.colorIndex++].hex();
if (this.colorIndex >= this.colors.length)
this.colorIndex = 0;
return color;
}
createScheduleAndNotifyParent(args) {
let schedule = this.createSchedule(args);
this.userCreatedSchedule.emit(schedule);
return schedule;
}
createSchedules(schedules) {
let newSchedules = [];
for (let schedule of schedules) {
newSchedules.push(this.createSchedule(schedule));
}
return newSchedules;
}
createSchedule(args) {
// if (form.invalid) return;
// create a color
let color = this.nextColor();
// console.log(color);
// create an id
let id = (args.id == null) ? '' : args.id.toString();
if (id.length === 0) {
id = uuidv4();
}
let start = LocalDate.convertToJsDate(args.start);
let end = LocalDate.convertToJsDate(args.end);
let schedule = {
id,
calendarId: (args.calendarId == null) ? this.calendarIdDefault : args.calendarId,
title: args.title,
start: start,
end: end,
category: args.category,
isAllDay: args.isAllDay,
dueDateClass: '',
bgColor: color,
};
// console.log(`event-calendar.component.ts: createEvent:`, schedule);
this.calendar.createSchedules([schedule]);
return this.calendar.getSchedule(schedule.id, schedule.calendarId);
}
updateScheduleAndNotifyParent(args) {
let schedule = this.updateSchedule(args);
this.userUpdatedSchedule.emit(schedule);
return schedule;
}
updateSchedule(schedule) {
// console.log(`event-calendar.component.ts: updateSchedule:`, schedule);
let calendarId = (schedule.calendarId == null) ? this.calendarIdDefault : schedule.calendarId;
this.calendar.updateSchedule(schedule.id, calendarId, schedule, false);
return this.calendar.getSchedule(schedule.id, calendarId);
}
getSchedule(args) {
// console.log(`event-calendar.component.ts: getSchedule:`, schedule);
let calendarId = (args.calendarId == null) ? this.calendarIdDefault : args.calendarId;
return this.calendar.getSchedule(args.id, calendarId);
}
deleteScheduleAndNotifyParent(args) {
this.deleteSchedule(args);
let calendarId = (args.calendarId == null) ? this.calendarIdDefault : args.calendarId;
this.userDeletedSchedule.emit({ id: args.id, calendarId });
}
deleteSchedule(args) {
// console.log(`event-calendar.component.ts: deleteSchedule:`, schedule);
let calendarId = (args.calendarId == null) ? this.calendarIdDefault : args.calendarId;
this.calendar.deleteSchedule(args.id, calendarId, false);
}
deleteAllSchedules() {
this.calendar.clear();
}
openPopupScheduleEditor(schedule) {
// console.log('openPopupScheduleEditor: calevent:', schedule);
const dialogConfig = new MatDialogConfig();
if (this.appliedOptions.themeClass) {
dialogConfig.panelClass = this.appliedOptions.themeClass;
}
// console.warn(`options: `, this.appliedOptions);
dialogConfig.data = { schedule, darkMode: this.appliedOptions.darkMode, themeClass: this.appliedOptions.themeClass };
dialogConfig.autoFocus = true;
const dialogRef = this.dialog.open(NgxMatTuiCalendarEditorDialogComponent, dialogConfig);
// const dialogRef = this.dialog.open(NgxMatTuiCalendarScheduleEditorDialogComponent, {
// data: schedule,
// });
dialogRef.afterClosed().subscribe((result) => {
// console.log('openPopupScheduleEditor: The dialog was closed', result);
this.calendar.render(true); // <-- so that selection is cleared
if (result && result.schedule) {
let schedule = result.schedule;
if (result.performDelete == true) {
// delete
// console.log(`openPopupScheduleEditor:afterCLosed: deleteSchedule`);
this.deleteScheduleAndNotifyParent({ id: schedule.id, calendarId: schedule.calendarId });
}
else if (schedule.id == null) {
// console.log(`openPopupScheduleEditor:afterCLosed: addSchedule`);
this.createScheduleAndNotifyParent(schedule);
}
else {
// console.log(`openPopupScheduleEditor:afterCLosed: updateSchedule`);
this.updateScheduleAndNotifyParent(schedule);
}
}
});
}
setDefaultOptions() {
this.setOptions();
}
setOptions(o) {
const get = (object, path, defaultValue) => {
let value = path
.split('.')
.reduce((o, p) => o == null ? undefined : o[p], object);
return (value !== undefined) ? value : defaultValue;
};
let options = {
darkMode: get(o, "darkMode", false),
themeClass: get(o, "themeClass", null),
ioptions: (o && o.ioptions) ? this.setIOptions(o.ioptions) : this.getDefaultIOptions(),
buttons: {
previous: get(o, "buttons.previous", true),
next: get(o, "buttons.next", true),
today: get(o, "buttons.today", true),
longPrevious: get(o, "buttons.longPrevious", true),
longNext: get(o, "buttons.longNext", true),
month: get(o, "buttons.month", true),
week: get(o, "buttons.week", true),
day: get(o, "buttons.day", true),
}
};
this.appliedOptions = options;
// console.warn(`setOptions: `, this.appliedOptions);
}
setIOptions(ioptionsIn) {
let ioptions = this.preprocessIOptions(ioptionsIn);
if (this.calendar) {
this.calendar.setOptions(ioptions);
this.calendar.setTheme(ioptions.theme);
this.calendar.render(true);
this.calendar.toggleScheduleView(true);
}
return ioptions;
}
preprocessIOptions(ioptions) {
let defs = this.getDefaultIOptions();
if (ioptions == null) {
ioptions = defs;
}
else {
ioptions = Object.assign(Object.assign({}, defs), ioptions);
}
ioptions.useCreationPopup = false;
ioptions.useDetailPopup = false;
if (!ioptions.theme) {
ioptions.theme = this.getDefaultTheme();
}
return ioptions;
}
getDefaultIOptions() {
return {
defaultView: 'month',
taskView: true,
useCreationPopup: false,
useDetailPopup: false,
theme: this.getDefaultTheme(),
template: {
monthDayname: function (dayname) {
return '<span class="calendar-week-dayname-name">' + dayname.label + '</span>';
}
},
week: {
// startDayOfWeek: undefined,
// daynames: undefined,
narrowWeekend: false,
// workweek: true,
showTimezoneCollapseButton: true,
timezonesCollapsed: true,
hourStart: 7,
hourEnd: 20,
},
};
}
getColor(name) {
const el = document.getElementById(`theme-${name}`);
if (el) {
const style = window.getComputedStyle(el, null);
// console.warn(`theme-${name} color:`, style.color);
return style.color;
}
return '';
}
getDefaultTheme() {
function adjustHexOpacity(color, opacity) {
const r = parseInt(color.slice(1, 3), 16);
const g = parseInt(color.slice(3, 5), 16);
const b = parseInt(color.slice(5, 7), 16);
return 'rgba(' + r + ', ' + g + ', ' + b + ', ' + opacity + ')';
}
// default keys and styles
// TODO: apply Material Design Theme
let background = this.getColor("background");
let border = this.getColor("divider");
let borderLight = this.getColor("divider-light");
let shadow = this.getColor("divider");
let highlight = this.getColor("highlight");
let primary = this.getColor("primary");
let warn = this.getColor("warn");
let text = this.getColor("foreground");
let primaryShaded = this.getColor("primary-shaded");
// tui-full-calendar-weekday-schedule-title
//calendar-week-dayname-name
return {
'common.border': `1px solid ${border}`,
'common.backgroundColor': background,
'common.holiday.color': warn,
'common.saturday.color': text,
'common.dayname.color': text,
'common.today.color': '#0f0',
// creation guide style
'common.creationGuide.backgroundColor': primaryShaded,
'common.creationGuide.border': `1px solid ${highlight}`,
// month header 'dayname'
'month.dayname.height': '31px',
'month.dayname.borderLeft': `1px solid ${border}`,
'month.dayname.paddingLeft': '10px',
'month.dayname.paddingRight': '10px',
'month.dayname.backgroundColor': 'inherit',
'month.dayname.fontSize': '12px',
'month.dayname.fontWeight': 'normal',
'month.dayname.textAlign': 'left',
// month day grid cell 'day'
'month.holidayExceptThisMonth.color': 'rgba(255, 64, 64, 0.4)',
'month.dayExceptThisMonth.color': 'rgba(51, 51, 51, 0.4)',
'month.weekend.backgroundColor': 'inherit',
'month.day.fontSize': '14px',
'month.schedule.color': highlight,
// month schedule style
'month.schedule.borderRadius': '2px',
'month.schedule.height': '24px',
'month.schedule.marginTop': '2px',
'month.schedule.marginLeft': '8px',
'month.schedule.marginRight': '8px',
// month more view
'month.moreView.border': `1px solid ${border}`,
'month.moreView.boxShadow': `0 2px 6px 0 ${shadow}`,
'month.moreView.backgroundColor': background,
'month.moreView.paddingBottom': '17px',
'month.moreViewTitle.height': '44px',
'month.moreViewTitle.marginBottom': '12px',
'month.moreViewTitle.backgroundColor': 'inherit',
'month.moreViewTitle.borderBottom': 'none',
'month.moreViewTitle.padding': '12px 17px 0 17px',
'month.moreViewList.padding': '0 17px',
// week header 'dayname'
'week.dayname.height': '42px',
'week.dayname.borderTop': `1px solid ${border}`,
'week.dayname.borderBottom': `1px solid ${border}`,
'week.dayname.borderLeft': 'inherit',
'week.dayname.paddingLeft': '0',
'week.dayname.backgroundColor': 'inherit',
'week.dayname.textAlign': 'left',
'week.today.color': text,
'week.pastDay.color': borderLight,
// week vertical panel 'vpanel'
'week.vpanelSplitter.border': `1px solid ${border}`,
'week.vpanelSplitter.height': '3px',
// week daygrid 'daygrid'
'week.daygrid.borderRight': `1px solid ${border}`,
'week.daygrid.backgroundColor': background,
'week.daygridLeft.width': '72px',
'week.daygridLeft.backgroundColor': background,
'week.daygridLeft.paddingRight': '8px',
'week.daygridLeft.borderRight': `1px solid ${border}`,
'week.today.backgroundColor': primaryShaded,
'week.weekend.backgroundColor': 'inherit',
// week timegrid 'timegrid'
'week.timegridLeft.width': '72px',
'week.timegridLeft.backgroundColor': 'inherit',
'week.timegridLeft.borderRight': `1px solid ${border}`,
'week.timegridLeft.fontSize': '11px',
'week.timegridLeftTimezoneLabel.height': '40px',
'week.timegridLeftAdditionalTimezone.backgroundColor': background,
'week.timegridOneHour.height': '52px',
'week.timegridHalfHour.height': '26px',
'week.timegridHalfHour.borderBottom': 'none',
'week.timegridHorizontalLine.borderBottom': `1px solid ${border}`,
'week.timegrid.paddingRight': '8px',
'week.timegrid.borderRight': `1px solid ${border}`,
'week.timegridSchedule.borderRadius': '2px',
'week.timegridSchedule.paddingLeft': '2px',
// #515ce6 is a slate blue
'week.currentTime.color': highlight,
'week.currentTime.fontSize': '11px',
'week.currentTime.fontWeight': 'normal',
'week.pastTime.color': borderLight,
'week.pastTime.fontWeight': 'normal',
'week.futureTime.color': border,
'week.futureTime.fontWeight': 'normal',
'week.currentTimeLinePast.border': `1px dashed ${highlight}`,
'week.currentTimeLineBullet.backgroundColor': highlight,
'week.currentTimeLineToday.border': `1px solid ${highlight}`,
'week.currentTimeLineFuture.border': 'none',
// week creation guide style
'week.creationGuide.color': highlight,
'week.creationGuide.fontSize': '11px',
'week.creationGuide.fontWeight': 'bold',
// week daygrid schedule style
'week.dayGridSchedule.borderRadius': '2px',
'week.dayGridSchedule.height': '24px',
'week.dayGridSchedule.marginTop': '2px',
'week.dayGridSchedule.marginLeft': '8px',
'week.dayGridSchedule.marginRight': '8px'
};
}
}
NgxMatTuiCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NgxMatTuiCalendarComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
NgxMatTuiCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.13", type: NgxMatTuiCalendarComponent, selector: "ngx-mat-tui-calendar", inputs: { options: "options" }, outputs: { userCreatedSchedule: "userCreatedSchedule", userUpdatedSchedule: "userUpdatedSchedule", userDeletedSchedule: "userDeletedSchedule" }, usesOnChanges: true, ngImport: i0, template: "<section class=\"content-container\">\r\n <!-- These divs are here so that we can read the theme colors for the tui theme -->\r\n <!-- The outer div gives the default color for when user does not provide an Angular theme -->\r\n <div style=\"color: blue;\"> <div id=\"theme-primary\"></div></div>\r\n <div style=\"color: blue;\"> <div id=\"theme-highlight\"></div></div>\r\n <div style=\"color: blue;\"> <div id=\"theme-accent\"></div></div>\r\n <div style=\"color: red;\"> <div id=\"theme-warn\"></div></div>\r\n <div style=\"color: rgba(0, 0, 255, 0.2);\"> <div id=\"theme-primary-shaded\"></div></div>\r\n <div style=\"color: #3e3e3e;\"> <div id=\"theme-foreground\"></div></div>\r\n <div style=\"color: #e0e0e0;\"> <div id=\"theme-divider\"></div></div>\r\n <div style=\"color: white;\"> <div id=\"theme-background\"></div></div>\r\n \r\n <div class=\"calendar-container\">\r\n <!-- calendar titlebar -->\r\n <mat-toolbar class=\"menu-bar\" color=\"primary\">\r\n <!-- <div style=\"align-self: center;display: flex;\r\n align-items: center;\r\n justify-content: flex-start;\"> -->\r\n <div style=\"display: flex;\r\n flex-direction: row;\r\n justify-content: space-between;\r\n width: 100%; \">\r\n <div class=\"left-div\">\r\n <!-- LEFT -->\r\n <button mat-button *ngIf=\"appliedOptions.buttons.longPrevious\"\r\n class=\"navigation-button\"\r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 1.5rem !important;\" \r\n (click)=\"onCalendarLongPrev()\">\r\n <fa-icon [icon]=\"iconLongPrev\"></fa-icon>\r\n </button>\r\n <button mat-button *ngIf=\"appliedOptions.buttons.previous\"\r\n class=\"navigation-button\" \r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 2rem !important;\" \r\n (click)=\"onCalendarPrev()\">\r\n <fa-icon [icon]=\"iconPrev\"></fa-icon>\r\n </button>\r\n <button mat-button *ngIf=\"appliedOptions.buttons.today\"\r\n class=\"navigation-button\"\r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 1.7rem !important;\" \r\n (click)=\"onCalendarToday()\">\r\n <fa-icon [icon]=\"iconToday\"></fa-icon>\r\n </button>\r\n <button mat-button *ngIf=\"appliedOptions.buttons.next\"\r\n class=\"navigation-button\" \r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 2rem !important;\" \r\n (click)=\"onCalendarNext()\">\r\n <fa-icon [icon]=\"iconNext\"></fa-icon>\r\n </button>\r\n <button mat-button *ngIf=\"appliedOptions.buttons.longNext\"\r\n class=\"navigation-button\"\r\n style=\"margin-left: 0px; margin-right: 0px; font-size: 1.5rem !important;\" \r\n (click)=\"onCalendarLongNext()\">\r\n <fa-icon [icon]=\"iconLongNext\"></fa-icon>\r\n </button>\r\n </div>\r\n <div class=\"center-div\">\r\n <!-- CENTER -->\r\n <span class=\"event-calendar-title\">{{ getDate() }}</span>\r\n </div>\r\n <div class=\"right-div\">\r\n \r\n <!-- RIGHT -->\r\n <mat-button-toggle-group [hidden]=\"!appliedOptions.buttons.month && !appliedOptions.buttons.week && !appliedOptions.buttons.day\"\r\n class=\"view-button\" value=\"month\" id=\"@+id/toggleButton\" layout_width=\"wrap_content\"\r\n layout_height=\"wrap_content\">\r\n <mat-button-toggle *ngIf=\"appliedOptions.buttons.month\" mat-button value=\"month\" class=\"view-button\" (click)=\"onMonthView()\">\r\n <fa-icon [icon]=\"iconByMonth\"></fa-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"appliedOptions.buttons.week\" mat-button value=\"week\" class=\"view-button\" (click)=\"onWeekView()\">\r\n <fa-icon [icon]=\"iconByWeek\"></fa-icon>\r\n </mat-button-toggle>\r\n <mat-button-toggle *ngIf=\"appliedOptions.buttons.day\" mat-button value=\"day\" class=\"view-button\" (click)=\"onDayView()\">\r\n <fa-icon [icon]=\"iconByDay\"></fa-icon>\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n </div>\r\n </div>\r\n </mat-toolbar>\r\n <ngx-mat-tui-calendar-wrapper></ngx-mat-tui-calendar-wrapper>\r\n </div>\r\n \r\n </section>\r\n", styles: [".calendar-container{transform-origin:top left}.menu-bar{display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:2rem!important}.mat-button{font-size:1.1rem!important}.mat-button.navigation-button{padding:0;min-width:32px}.left-div{width:33%;float:left;display:flex;white-space:nowrap;vertical-align:middle}.center-div{width:33%;float:right;text-align:center;white-space:nowrap;vertical-align:middle}.event-calendar-title{font-size:2rem;vertical-align:middle}.right-div{width:33%;display:flex;white-space:nowrap;vertical-align:middle;flex-flow:row-reverse}@media screen and (max-width: 599px){.left-div{transform:scale(.75);transform-origin:center left}.center-div{transform:scale(.5)}.right-div{transform:scale(1);transform-origin:center right}.right-div .mat-button-toggle-group.view-button{font-size:1.1rem!important}.right-div ::ng-deep .mat-button-toggle-label-content{padding:0 8px!important}}.mat-button-toggle-group.view-button{height:36px;font-size:1.25rem!important}.view-button{align-items:center}::ng-deep .mat-button-toggle-label-content{padding:0 10px!important}\n"], components: [{ type: i2.MatToolbar, selector: "mat-toolbar", inputs: ["color"], exportAs: ["matToolbar"] }, { type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4.FaIconComponent, selector: "fa-icon", inputs: ["classes", "icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "transform", "a11yRole"] }, { type: i5.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-labelledby", "tabIndex", "appearance", "checked", "disabled", "id", "name", "aria-label", "value"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { type: i6.NgxMatTuiCalendarWrapperComponent, selector: "ngx-mat-tui-calendar-wrapper" }], directives: [{ type: i7.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i5.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.13", ngImport: i0, type: NgxMatTuiCalendarComponent, decorators: [{
type: Component,
args: [{
selector: 'ngx-mat-tui-calendar',
templateUrl: './ngx-mat-tui-calendar.component.html',
styleUrls: [
'./ngx-mat-tui-calendar.component.scss'
],
}]
}], ctorParameters: function () { return [{ type: i1.MatDialog }]; }, propDecorators: { userCreatedSchedule: [{
type: Output
}], userUpdatedSchedule: [{
type: Output
}], userDeletedSchedule: [{
type: Output
}], options: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LW1hdC10dWktY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LW1hdC10dWktY2FsZW5kYXIvc3JjL2xpYi9uZ3gtbWF0LXR1aS1jYWxlbmRhci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtbWF0LXR1aS1jYWxlbmRhci9zcmMvbGliL25neC1tYXQtdHVpLWNhbGVuZGFyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQXFCLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxRSxNQUFNLGVBQWUsQ0FBQztBQUM3SixPQUFPLEVBQWEsZUFBZSxFQUFnQixNQUFNLDBCQUEwQixDQUFDO0FBRXBGLE9BQU8sY0FBYyxNQUFNLGlCQUFpQixDQUFDO0FBRTdDLE9BQU8sRUFBRSxFQUFFLElBQUksTUFBTSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXBDLE9BQU8sRUFDTCxlQUFlLEVBR2YsT0FBTyxFQUNQLFNBQVMsRUFFVCxTQUFTLEVBQ1QsU0FBUyxFQUVULFVBQVUsRUFDVixXQUFXLEVBQ1gsWUFBWSxHQUNiLE1BQU0sbUNBQW1DLENBQUM7QUFDM0MsT0FBTyxFQUNMLE9BQU8sSUFBSSxRQUFRLEdBYXBCLE1BQU0sY0FBYyxDQUFDO0FBRXRCLFdBQVc7QUFDWCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDNUMsT0FBTyxFQUFFLHNDQUFzQyxFQUFFLE1BQU0sbUZBQW1GLENBQUM7Ozs7Ozs7OztBQVczSSxNQUFNLE9BQU8sMEJBQTBCO0lBc0JyQyxZQUFtQixNQUFpQjtRQUFqQixXQUFNLEdBQU4sTUFBTSxDQUFXO1FBckJwQyxjQUFTLEdBQUcsZUFBZSxDQUFDO1FBQzVCLGdDQUFnQztRQUNoQyxpQ0FBaUM7UUFDakMsYUFBUSxHQUFHLFdBQVcsQ0FBQztR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