@smart-solutions-tech/smart-angular-calendar 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/components/calendar/calendar.component.mjs +223 -0
- package/esm2020/lib/components/calendar-event/calendar-event.component.mjs +21 -0
- package/esm2020/lib/components/month-selector/month-selector.component.mjs +82 -0
- package/esm2020/lib/components/more-events-modal/more-events-modal.component.mjs +38 -0
- package/esm2020/lib/components/smart-calendar/smart-calendar.component.mjs +19 -0
- package/esm2020/lib/pipes/translate-month.pipe.mjs +22 -0
- package/esm2020/lib/pipes/translate.pipe.mjs +20 -0
- package/esm2020/lib/services/translation.service.mjs +29 -0
- package/esm2020/lib/smart-angular-calendar.module.mjs +28 -7
- package/esm2020/lib/translations.mjs +66 -0
- package/esm2020/lib/types.mjs +2 -0
- package/esm2020/lib/utils/colors.mjs +13 -0
- package/esm2020/public-api.mjs +2 -2
- package/fesm2015/smart-solutions-tech-smart-angular-calendar.mjs +515 -21
- package/fesm2015/smart-solutions-tech-smart-angular-calendar.mjs.map +1 -1
- package/fesm2020/smart-solutions-tech-smart-angular-calendar.mjs +514 -21
- package/fesm2020/smart-solutions-tech-smart-angular-calendar.mjs.map +1 -1
- package/lib/components/calendar/calendar.component.d.ts +58 -0
- package/lib/components/calendar-event/calendar-event.component.d.ts +11 -0
- package/lib/components/month-selector/month-selector.component.d.ts +30 -0
- package/lib/components/more-events-modal/more-events-modal.component.d.ts +16 -0
- package/lib/components/smart-calendar/smart-calendar.component.d.ts +10 -0
- package/lib/pipes/translate-month.pipe.d.ts +10 -0
- package/lib/pipes/translate.pipe.d.ts +13 -0
- package/lib/services/translation.service.d.ts +12 -0
- package/lib/smart-angular-calendar.module.d.ts +9 -2
- package/lib/translations.d.ts +17 -0
- package/lib/types.d.ts +42 -0
- package/lib/utils/colors.d.ts +1 -0
- package/package.json +1 -1
- package/public-api.d.ts +1 -1
- package/esm2020/lib/smart-angular-calendar.component.mjs +0 -22
- package/lib/smart-angular-calendar.component.d.ts +0 -8
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { Component, EventEmitter, HostListener, Input, Output, ViewChild } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "@angular/common";
|
|
4
|
+
import * as i2 from "../calendar-event/calendar-event.component";
|
|
5
|
+
import * as i3 from "../more-events-modal/more-events-modal.component";
|
|
6
|
+
import * as i4 from "../month-selector/month-selector.component";
|
|
7
|
+
import * as i5 from "../../pipes/translate.pipe";
|
|
8
|
+
import * as i6 from "../../pipes/translate-month.pipe";
|
|
9
|
+
export class CalendarComponent {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.currentMonth = {
|
|
12
|
+
year: new Date().getFullYear(),
|
|
13
|
+
month: new Date().getMonth() + 1
|
|
14
|
+
};
|
|
15
|
+
this.events = [];
|
|
16
|
+
this.startAt = 'sunday';
|
|
17
|
+
this.monthChange = new EventEmitter();
|
|
18
|
+
this.dayCells = [];
|
|
19
|
+
this.weekDays = [
|
|
20
|
+
{ tag: 'sun' },
|
|
21
|
+
{ tag: 'mon' },
|
|
22
|
+
{ tag: 'tue' },
|
|
23
|
+
{ tag: 'wed' },
|
|
24
|
+
{ tag: 'thu' },
|
|
25
|
+
{ tag: 'fri' },
|
|
26
|
+
{ tag: 'sat' },
|
|
27
|
+
];
|
|
28
|
+
this.showMoreEventsModal = false;
|
|
29
|
+
this.moreEventsModalEvents = [];
|
|
30
|
+
this.currentMonthTitle = ``;
|
|
31
|
+
this.showDateSelector = false;
|
|
32
|
+
this.resizeListener = () => {
|
|
33
|
+
this.setCalendarBodyHeight();
|
|
34
|
+
this.setMaxEventsInDayCell();
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
onDocumentClick(event) {
|
|
38
|
+
if (!this.showDateSelector)
|
|
39
|
+
return;
|
|
40
|
+
const dropdown = this.dateSelectorDropdown?.nativeElement;
|
|
41
|
+
const button = document.querySelector('.btn-date-selector');
|
|
42
|
+
if (dropdown && !dropdown.contains(event.target) && button && !button.contains(event.target)) {
|
|
43
|
+
this.showDateSelector = false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
isToday(date) {
|
|
47
|
+
const today = new Date();
|
|
48
|
+
return date.getDate() === today.getDate() &&
|
|
49
|
+
date.getMonth() === today.getMonth() &&
|
|
50
|
+
date.getFullYear() === today.getFullYear();
|
|
51
|
+
}
|
|
52
|
+
getEventsForDay(date) {
|
|
53
|
+
return this.events.filter(event => {
|
|
54
|
+
const eventStart = new Date(event.start);
|
|
55
|
+
const eventEnd = event.end ? new Date(event.end) : eventStart;
|
|
56
|
+
return date >= new Date(eventStart.getFullYear(), eventStart.getMonth(), eventStart.getDate()) &&
|
|
57
|
+
date <= new Date(eventEnd.getFullYear(), eventEnd.getMonth(), eventEnd.getDate());
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
initDaysCells() {
|
|
61
|
+
const daysInMonth = new Date(this.currentMonth.year, this.currentMonth.month, 0).getDate();
|
|
62
|
+
const firstDayOfWeek = new Date(this.currentMonth.year, this.currentMonth.month - 1, 1).getDay();
|
|
63
|
+
const prevDaysCount = this.startAt === 'monday' ? (firstDayOfWeek === 0 ? 6 : firstDayOfWeek - 1) : firstDayOfWeek;
|
|
64
|
+
// const nextDaysCount = (7 - ((prevDaysCount + daysInMonth) % 7)) % 7;
|
|
65
|
+
const nextDaysCount = 42 - (prevDaysCount + daysInMonth); // Always show 6 weeks
|
|
66
|
+
this.dayCells = [];
|
|
67
|
+
for (let i = 0; i < prevDaysCount; i++) {
|
|
68
|
+
const date = new Date(this.currentMonth.year, this.currentMonth.month - 1, i - prevDaysCount + 1);
|
|
69
|
+
const _events = this.getEventsForDay(date);
|
|
70
|
+
this.dayCells.push({
|
|
71
|
+
date,
|
|
72
|
+
events: _events,
|
|
73
|
+
isOutsideMonth: true,
|
|
74
|
+
isToday: this.isToday(date)
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
for (let day = 1; day <= daysInMonth; day++) {
|
|
78
|
+
const date = new Date(this.currentMonth.year, this.currentMonth.month - 1, day);
|
|
79
|
+
const _events = this.getEventsForDay(date);
|
|
80
|
+
this.dayCells.push({
|
|
81
|
+
date,
|
|
82
|
+
events: _events,
|
|
83
|
+
isToday: this.isToday(date)
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
for (let i = 1; i <= nextDaysCount; i++) {
|
|
87
|
+
const date = new Date(this.currentMonth.year, this.currentMonth.month - 1, daysInMonth + i);
|
|
88
|
+
const _events = this.getEventsForDay(date);
|
|
89
|
+
this.dayCells.push({
|
|
90
|
+
date,
|
|
91
|
+
events: _events,
|
|
92
|
+
isOutsideMonth: true,
|
|
93
|
+
isToday: this.isToday(date)
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
setCalendarBodyHeight() {
|
|
98
|
+
this.calendarBodyHeight = this.calendarBodyRef.nativeElement.clientHeight;
|
|
99
|
+
}
|
|
100
|
+
setMaxEventsInDayCell() {
|
|
101
|
+
const element = document.getElementsByClassName('events-list')[0];
|
|
102
|
+
console.log(element);
|
|
103
|
+
if (element) {
|
|
104
|
+
const eventItemHeight = 22;
|
|
105
|
+
this.maxEventsInDayCell = Math.floor(element.clientHeight / eventItemHeight) - 1;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
openMoreEventsModal(date, events) {
|
|
109
|
+
this.moreEventsModalDate = date;
|
|
110
|
+
this.moreEventsModalEvents = events;
|
|
111
|
+
this.showMoreEventsModal = true;
|
|
112
|
+
}
|
|
113
|
+
closeMoreEventsModal() {
|
|
114
|
+
this.showMoreEventsModal = false;
|
|
115
|
+
this.moreEventsModalDate = undefined;
|
|
116
|
+
this.moreEventsModalEvents = [];
|
|
117
|
+
}
|
|
118
|
+
nextMonth() {
|
|
119
|
+
const oldMonth = { ...this.currentMonth };
|
|
120
|
+
if (this.currentMonth.month === 12) {
|
|
121
|
+
this.currentMonth.month = 1;
|
|
122
|
+
this.currentMonth.year += 1;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
this.currentMonth.month += 1;
|
|
126
|
+
}
|
|
127
|
+
this.initDaysCells();
|
|
128
|
+
this.monthChange.emit({
|
|
129
|
+
newMonth: { ...this.currentMonth },
|
|
130
|
+
oldMonth
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
prevMonth() {
|
|
134
|
+
const oldMonth = { ...this.currentMonth };
|
|
135
|
+
if (this.currentMonth.month === 1) {
|
|
136
|
+
this.currentMonth.month = 12;
|
|
137
|
+
this.currentMonth.year -= 1;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
this.currentMonth.month -= 1;
|
|
141
|
+
}
|
|
142
|
+
this.initDaysCells();
|
|
143
|
+
this.monthChange.emit({
|
|
144
|
+
newMonth: { ...this.currentMonth },
|
|
145
|
+
oldMonth
|
|
146
|
+
});
|
|
147
|
+
}
|
|
148
|
+
goToToday() {
|
|
149
|
+
const today = new Date();
|
|
150
|
+
const oldMonth = { ...this.currentMonth };
|
|
151
|
+
this.currentMonth.year = today.getFullYear();
|
|
152
|
+
this.currentMonth.month = today.getMonth() + 1;
|
|
153
|
+
this.initDaysCells();
|
|
154
|
+
this.monthChange.emit({
|
|
155
|
+
newMonth: { ...this.currentMonth },
|
|
156
|
+
oldMonth
|
|
157
|
+
});
|
|
158
|
+
}
|
|
159
|
+
toggleDateSelector() {
|
|
160
|
+
this.showDateSelector = !this.showDateSelector;
|
|
161
|
+
}
|
|
162
|
+
onMonthSelected(newMonth) {
|
|
163
|
+
const oldMonth = { ...this.currentMonth };
|
|
164
|
+
this.currentMonth = newMonth;
|
|
165
|
+
this.initDaysCells();
|
|
166
|
+
this.monthChange.emit({
|
|
167
|
+
newMonth: { ...this.currentMonth },
|
|
168
|
+
oldMonth
|
|
169
|
+
});
|
|
170
|
+
this.showDateSelector = false;
|
|
171
|
+
}
|
|
172
|
+
ngOnInit() {
|
|
173
|
+
if (this.startAt === 'monday') {
|
|
174
|
+
this.weekDays = [
|
|
175
|
+
{ tag: 'mon' },
|
|
176
|
+
{ tag: 'tue' },
|
|
177
|
+
{ tag: 'wed' },
|
|
178
|
+
{ tag: 'thu' },
|
|
179
|
+
{ tag: 'fri' },
|
|
180
|
+
{ tag: 'sat' },
|
|
181
|
+
{ tag: 'sun' },
|
|
182
|
+
];
|
|
183
|
+
}
|
|
184
|
+
this.initDaysCells();
|
|
185
|
+
}
|
|
186
|
+
ngAfterViewInit() {
|
|
187
|
+
window.addEventListener('resize', this.resizeListener);
|
|
188
|
+
setTimeout(() => {
|
|
189
|
+
this.setCalendarBodyHeight();
|
|
190
|
+
this.setMaxEventsInDayCell();
|
|
191
|
+
});
|
|
192
|
+
}
|
|
193
|
+
onDestroy() {
|
|
194
|
+
window.removeEventListener('resize', this.resizeListener);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
CalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
198
|
+
CalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CalendarComponent, selector: "lib-calendar", inputs: { currentMonth: "currentMonth", events: "events", startAt: "startAt" }, outputs: { monthChange: "monthChange" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, viewQueries: [{ propertyName: "calendarRef", first: true, predicate: ["calendar"], descendants: true }, { propertyName: "calendarBodyRef", first: true, predicate: ["calendarBody"], descendants: true }, { propertyName: "dateSelectorDropdown", first: true, predicate: ["dateSelectorDropdown"], descendants: true }], ngImport: i0, template: "<div class=\"calendar-component\">\r\n <div class=\"header\">\r\n <div class=\"nav-controls\">\r\n <button class=\"btn-prev\" (click)=\"prevMonth()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn-today\" (click)=\"goToToday()\">{{'today' | translate}}</button>\r\n\r\n <button class=\"btn-next\" (click)=\"nextMonth()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"spacer\"></div>\r\n\r\n <div class=\"date-selector-container\">\r\n <button class=\"btn-date-selector\" (click)=\"toggleDateSelector()\">\r\n <span>{{ currentMonth.month | translateMonth}} - {{ currentMonth.year }}</span>\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path d=\"M480-360 280-560h400L480-360Z\" />\r\n </svg>\r\n </button>\r\n\r\n <div class=\"date-selector-dropdown\" *ngIf=\"showDateSelector\" #dateSelectorDropdown>\r\n <lib-month-selector [selectedMonth]=\"currentMonth\"\r\n (monthSelected)=\"onMonthSelected($event)\"></lib-month-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"spacer\"></div>\r\n\r\n <div class=\"view-selector\">\r\n <button class=\"btn-view active\">\r\n <!-- month view -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path\r\n d=\"M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z\" />\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn-view\">\r\n <!-- week view -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path\r\n d=\"M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm360-80h100v-480H520v480Zm-180 0h100v-480H340v480Zm-180 0h100v-480H160v480Zm540 0h100v-480H700v480Z\" />\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn-view\">\r\n <!-- day view -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path\r\n d=\"M120-160v-80h720v80H120Zm0-560v-80h720v80H120Zm80 400q-33 0-56.5-23.5T120-400v-160q0-33 23.5-56.5T200-640h560q33 0 56.5 23.5T840-560v160q0 33-23.5 56.5T760-320H200Zm0-80h560v-160H200v160Zm0-160v160-160Z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"body\" #calendarBody>\r\n <div class=\"week-days\">\r\n <div class=\"week-day\" *ngFor=\"let day of weekDays\">\r\n {{ day.tag | translate | slice:0:3 }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"days-grid\">\r\n <div class=\"day-cell\" *ngFor=\"let day of dayCells; let i = index\"\r\n [ngClass]=\"{'outside-month': day.isOutsideMonth, 'is-today': day.isToday}\">\r\n <div class=\"day-number\">\r\n {{ day.date.getDate() }}\r\n </div>\r\n\r\n <div class=\"events-list\">\r\n <lib-calendar-event *ngFor=\"let event of day.events | slice:0:maxEventsInDayCell\"\r\n [event]=\"event\"></lib-calendar-event>\r\n\r\n <div class=\"more-events\" *ngIf=\"day.events.length > (maxEventsInDayCell || 0)\"\r\n (click)=\"openMoreEventsModal(day.date, day.events)\">\r\n {{'nMoreEvents' | translate: {n:(day.events.length - (maxEventsInDayCell || 0))} }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"footer\">\r\n Footer\r\n </div>\r\n\r\n <lib-more-events-modal *ngIf=\"showMoreEventsModal && moreEventsModalDate\" [events]=\"moreEventsModalEvents\"\r\n [date]=\"moreEventsModalDate\" (close)=\"closeMoreEventsModal()\"\r\n (eventClick)=\"closeMoreEventsModal()\"></lib-more-events-modal>\r\n</div>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.calendar-component{display:flex;flex-direction:column;width:100%;height:100%}.header{flex-shrink:0;display:flex;align-items:center;gap:16px;padding:2px 16px}.header .spacer{flex:1 1 auto}.header .nav-controls{display:flex;align-items:center}.header .nav-controls .btn-prev,.header .nav-controls .btn-next{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;background:none;border-radius:50%;cursor:pointer;-webkit-user-select:none;user-select:none}.header .nav-controls .btn-prev:hover,.header .nav-controls .btn-next:hover{background-color:#eee}.header .nav-controls .btn-today{display:flex;align-items:center;height:30px;padding:0 12px;border:none;background:none;border-radius:50px;cursor:pointer;font-weight:600;-webkit-user-select:none;user-select:none}.header .nav-controls .btn-today:hover{background-color:#eee}.header .view-selector{display:flex;align-items:center}.header .view-selector .btn-view{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:1px solid #cccccc;background:none;cursor:pointer;-webkit-user-select:none;user-select:none}.header .view-selector .btn-view:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-right:none}.header .view-selector .btn-view:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-left:none}.header .view-selector .btn-view:hover{background-color:#eee}.header .view-selector .btn-view svg{width:22px;height:22px}.header .view-selector .btn-view.active{background-color:#0000001a}.header .date-selector-container{position:relative}.header .date-selector-container .date-selector-dropdown{position:absolute;top:100%;left:50%;transform:translate(-50%);background-color:#fff;border-radius:4px;box-shadow:0 2px 24px #0000004d;z-index:3}.header .date-selector-container .date-selector-dropdown:before{content:\"\";position:absolute;top:-6px;left:50%;transform:translate(-50%) rotate(45deg);width:12px;height:12px;background-color:#fff;border-radius:2px}.header .btn-date-selector{display:flex;align-items:center;gap:8px;height:30px;padding:0 8px 0 12px;border:none;background:none;border-radius:50px;cursor:pointer;font-weight:600;-webkit-user-select:none;user-select:none}.header .btn-date-selector:hover{background-color:#eee}.body{flex:1 1 0;display:flex;flex-direction:column;width:100%;min-height:0;height:100%}.week-days{flex-shrink:0;display:grid;grid-template-columns:repeat(7,1fr);width:100%;background-color:#f4f4f4}.week-day{display:flex;align-items:center;justify-content:center;padding:4px;background-color:#fff;font-size:14px;color:#00000080}.days-grid{flex:1 1 0;display:grid;grid-template-columns:repeat(7,1fr);gap:1px;grid-auto-rows:1fr;width:100%;padding:1px;background-color:#f4f4f4;min-height:0;height:100%}.day-cell{display:flex;flex-direction:column;gap:4px;padding:4px;background-color:#fff;overflow:hidden}.day-cell .day-number{display:flex;align-items:center;justify-content:center;width:fit-content;aspect-ratio:1;padding:2px;border-radius:50%;font-size:12px;line-height:16px;font-weight:600;-webkit-user-select:none;user-select:none}.day-cell.outside-month{background-color:#f8f8f8}.day-cell.is-today .day-number{background-color:#007bff;color:#fff}.day-cell .events-list{flex:1 1 auto;display:flex;flex-direction:column;gap:2px;overflow:hidden;min-height:0;max-height:100%}.day-cell .events-list .more-events{padding:2px 8px;border-radius:4px;font-size:12px;color:#555;cursor:pointer}.day-cell .events-list .more-events:hover{background-color:#eee}.footer{flex-shrink:0;background-color:#add8e6}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.CalendarEventComponent, selector: "lib-calendar-event", inputs: ["event"] }, { kind: "component", type: i3.MoreEventsModalComponent, selector: "lib-more-events-modal", inputs: ["events", "date"], outputs: ["close", "eventClick"] }, { kind: "component", type: i4.MonthSelectorComponent, selector: "lib-month-selector", inputs: ["selectedMonth"], outputs: ["monthSelected"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i5.TranslatePipe, name: "translate" }, { kind: "pipe", type: i6.TranslateMonthPipe, name: "translateMonth" }] });
|
|
199
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarComponent, decorators: [{
|
|
200
|
+
type: Component,
|
|
201
|
+
args: [{ selector: 'lib-calendar', template: "<div class=\"calendar-component\">\r\n <div class=\"header\">\r\n <div class=\"nav-controls\">\r\n <button class=\"btn-prev\" (click)=\"prevMonth()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn-today\" (click)=\"goToToday()\">{{'today' | translate}}</button>\r\n\r\n <button class=\"btn-next\" (click)=\"nextMonth()\">\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"spacer\"></div>\r\n\r\n <div class=\"date-selector-container\">\r\n <button class=\"btn-date-selector\" (click)=\"toggleDateSelector()\">\r\n <span>{{ currentMonth.month | translateMonth}} - {{ currentMonth.year }}</span>\r\n\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path d=\"M480-360 280-560h400L480-360Z\" />\r\n </svg>\r\n </button>\r\n\r\n <div class=\"date-selector-dropdown\" *ngIf=\"showDateSelector\" #dateSelectorDropdown>\r\n <lib-month-selector [selectedMonth]=\"currentMonth\"\r\n (monthSelected)=\"onMonthSelected($event)\"></lib-month-selector>\r\n </div>\r\n </div>\r\n\r\n <div class=\"spacer\"></div>\r\n\r\n <div class=\"view-selector\">\r\n <button class=\"btn-view active\">\r\n <!-- month view -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path\r\n d=\"M200-80q-33 0-56.5-23.5T120-160v-560q0-33 23.5-56.5T200-800h40v-80h80v80h320v-80h80v80h40q33 0 56.5 23.5T840-720v560q0 33-23.5 56.5T760-80H200Zm0-80h560v-400H200v400Zm0-480h560v-80H200v80Zm0 0v-80 80Zm280 240q-17 0-28.5-11.5T440-440q0-17 11.5-28.5T480-480q17 0 28.5 11.5T520-440q0 17-11.5 28.5T480-400Zm-160 0q-17 0-28.5-11.5T280-440q0-17 11.5-28.5T320-480q17 0 28.5 11.5T360-440q0 17-11.5 28.5T320-400Zm320 0q-17 0-28.5-11.5T600-440q0-17 11.5-28.5T640-480q17 0 28.5 11.5T680-440q0 17-11.5 28.5T640-400ZM480-240q-17 0-28.5-11.5T440-280q0-17 11.5-28.5T480-320q17 0 28.5 11.5T520-280q0 17-11.5 28.5T480-240Zm-160 0q-17 0-28.5-11.5T280-280q0-17 11.5-28.5T320-320q17 0 28.5 11.5T360-280q0 17-11.5 28.5T320-240Zm320 0q-17 0-28.5-11.5T600-280q0-17 11.5-28.5T640-320q17 0 28.5 11.5T680-280q0 17-11.5 28.5T640-240Z\" />\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn-view\">\r\n <!-- week view -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path\r\n d=\"M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm360-80h100v-480H520v480Zm-180 0h100v-480H340v480Zm-180 0h100v-480H160v480Zm540 0h100v-480H700v480Z\" />\r\n </svg>\r\n </button>\r\n\r\n <button class=\"btn-view\">\r\n <!-- day view -->\r\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\r\n fill=\"currentColor\">\r\n <path\r\n d=\"M120-160v-80h720v80H120Zm0-560v-80h720v80H120Zm80 400q-33 0-56.5-23.5T120-400v-160q0-33 23.5-56.5T200-640h560q33 0 56.5 23.5T840-560v160q0 33-23.5 56.5T760-320H200Zm0-80h560v-160H200v160Zm0-160v160-160Z\" />\r\n </svg>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div class=\"body\" #calendarBody>\r\n <div class=\"week-days\">\r\n <div class=\"week-day\" *ngFor=\"let day of weekDays\">\r\n {{ day.tag | translate | slice:0:3 }}\r\n </div>\r\n </div>\r\n\r\n <div class=\"days-grid\">\r\n <div class=\"day-cell\" *ngFor=\"let day of dayCells; let i = index\"\r\n [ngClass]=\"{'outside-month': day.isOutsideMonth, 'is-today': day.isToday}\">\r\n <div class=\"day-number\">\r\n {{ day.date.getDate() }}\r\n </div>\r\n\r\n <div class=\"events-list\">\r\n <lib-calendar-event *ngFor=\"let event of day.events | slice:0:maxEventsInDayCell\"\r\n [event]=\"event\"></lib-calendar-event>\r\n\r\n <div class=\"more-events\" *ngIf=\"day.events.length > (maxEventsInDayCell || 0)\"\r\n (click)=\"openMoreEventsModal(day.date, day.events)\">\r\n {{'nMoreEvents' | translate: {n:(day.events.length - (maxEventsInDayCell || 0))} }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"footer\">\r\n Footer\r\n </div>\r\n\r\n <lib-more-events-modal *ngIf=\"showMoreEventsModal && moreEventsModalDate\" [events]=\"moreEventsModalEvents\"\r\n [date]=\"moreEventsModalDate\" (close)=\"closeMoreEventsModal()\"\r\n (eventClick)=\"closeMoreEventsModal()\"></lib-more-events-modal>\r\n</div>", styles: ["*{box-sizing:border-box;margin:0;padding:0}.calendar-component{display:flex;flex-direction:column;width:100%;height:100%}.header{flex-shrink:0;display:flex;align-items:center;gap:16px;padding:2px 16px}.header .spacer{flex:1 1 auto}.header .nav-controls{display:flex;align-items:center}.header .nav-controls .btn-prev,.header .nav-controls .btn-next{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:none;background:none;border-radius:50%;cursor:pointer;-webkit-user-select:none;user-select:none}.header .nav-controls .btn-prev:hover,.header .nav-controls .btn-next:hover{background-color:#eee}.header .nav-controls .btn-today{display:flex;align-items:center;height:30px;padding:0 12px;border:none;background:none;border-radius:50px;cursor:pointer;font-weight:600;-webkit-user-select:none;user-select:none}.header .nav-controls .btn-today:hover{background-color:#eee}.header .view-selector{display:flex;align-items:center}.header .view-selector .btn-view{display:flex;align-items:center;justify-content:center;width:30px;height:30px;border:1px solid #cccccc;background:none;cursor:pointer;-webkit-user-select:none;user-select:none}.header .view-selector .btn-view:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-right:none}.header .view-selector .btn-view:last-child{border-top-right-radius:4px;border-bottom-right-radius:4px;border-left:none}.header .view-selector .btn-view:hover{background-color:#eee}.header .view-selector .btn-view svg{width:22px;height:22px}.header .view-selector .btn-view.active{background-color:#0000001a}.header .date-selector-container{position:relative}.header .date-selector-container .date-selector-dropdown{position:absolute;top:100%;left:50%;transform:translate(-50%);background-color:#fff;border-radius:4px;box-shadow:0 2px 24px #0000004d;z-index:3}.header .date-selector-container .date-selector-dropdown:before{content:\"\";position:absolute;top:-6px;left:50%;transform:translate(-50%) rotate(45deg);width:12px;height:12px;background-color:#fff;border-radius:2px}.header .btn-date-selector{display:flex;align-items:center;gap:8px;height:30px;padding:0 8px 0 12px;border:none;background:none;border-radius:50px;cursor:pointer;font-weight:600;-webkit-user-select:none;user-select:none}.header .btn-date-selector:hover{background-color:#eee}.body{flex:1 1 0;display:flex;flex-direction:column;width:100%;min-height:0;height:100%}.week-days{flex-shrink:0;display:grid;grid-template-columns:repeat(7,1fr);width:100%;background-color:#f4f4f4}.week-day{display:flex;align-items:center;justify-content:center;padding:4px;background-color:#fff;font-size:14px;color:#00000080}.days-grid{flex:1 1 0;display:grid;grid-template-columns:repeat(7,1fr);gap:1px;grid-auto-rows:1fr;width:100%;padding:1px;background-color:#f4f4f4;min-height:0;height:100%}.day-cell{display:flex;flex-direction:column;gap:4px;padding:4px;background-color:#fff;overflow:hidden}.day-cell .day-number{display:flex;align-items:center;justify-content:center;width:fit-content;aspect-ratio:1;padding:2px;border-radius:50%;font-size:12px;line-height:16px;font-weight:600;-webkit-user-select:none;user-select:none}.day-cell.outside-month{background-color:#f8f8f8}.day-cell.is-today .day-number{background-color:#007bff;color:#fff}.day-cell .events-list{flex:1 1 auto;display:flex;flex-direction:column;gap:2px;overflow:hidden;min-height:0;max-height:100%}.day-cell .events-list .more-events{padding:2px 8px;border-radius:4px;font-size:12px;color:#555;cursor:pointer}.day-cell .events-list .more-events:hover{background-color:#eee}.footer{flex-shrink:0;background-color:#add8e6}\n"] }]
|
|
202
|
+
}], ctorParameters: function () { return []; }, propDecorators: { currentMonth: [{
|
|
203
|
+
type: Input
|
|
204
|
+
}], events: [{
|
|
205
|
+
type: Input
|
|
206
|
+
}], startAt: [{
|
|
207
|
+
type: Input
|
|
208
|
+
}], monthChange: [{
|
|
209
|
+
type: Output
|
|
210
|
+
}], calendarRef: [{
|
|
211
|
+
type: ViewChild,
|
|
212
|
+
args: ['calendar']
|
|
213
|
+
}], calendarBodyRef: [{
|
|
214
|
+
type: ViewChild,
|
|
215
|
+
args: ['calendarBody']
|
|
216
|
+
}], dateSelectorDropdown: [{
|
|
217
|
+
type: ViewChild,
|
|
218
|
+
args: ['dateSelectorDropdown', { static: false }]
|
|
219
|
+
}], onDocumentClick: [{
|
|
220
|
+
type: HostListener,
|
|
221
|
+
args: ['document:click', ['$event']]
|
|
222
|
+
}] } });
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvY2FsZW5kYXIvY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFpQixTQUFTLEVBQWMsWUFBWSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7Ozs7QUFRbkksTUFBTSxPQUFPLGlCQUFpQjtJQXVENUI7UUFyRFMsaUJBQVksR0FBb0M7WUFDdkQsSUFBSSxFQUFFLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFO1lBQzlCLEtBQUssRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUM7U0FDakMsQ0FBQztRQUVPLFdBQU0sR0FBb0IsRUFBRSxDQUFDO1FBRTdCLFlBQU8sR0FBd0IsUUFBUSxDQUFDO1FBRXZDLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBR3BDLENBQUM7UUFxQkwsYUFBUSxHQUFjLEVBQUUsQ0FBQztRQUV6QixhQUFRLEdBQWM7WUFDcEIsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ2QsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ2QsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ2QsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ2QsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ2QsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFO1lBQ2QsRUFBRSxHQUFHLEVBQUUsS0FBSyxF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Uzt1QkFBQyxzQkFBc0IsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7Z0JBR3BELGVBQWU7c0JBRGQsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBIb3N0TGlzdGVuZXIsIElucHV0LCBPbkluaXQsIE91dHB1dCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENhbGVuZGFyRXZlbnQsIERheUNlbGwsIFdlZWtEYXkgfSBmcm9tICcuLi8uLi90eXBlcyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jYWxlbmRhcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCB7XHJcblxyXG4gIEBJbnB1dCgpIGN1cnJlbnRNb250aDogeyB5ZWFyOiBudW1iZXIsIG1vbnRoOiBudW1iZXIgfSA9IHtcclxuICAgIHllYXI6IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKSxcclxuICAgIG1vbnRoOiBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxXHJcbiAgfTtcclxuXHJcbiAgQElucHV0KCkgZXZlbnRzOiBDYWxlbmRhckV2ZW50W10gPSBbXTtcclxuXHJcbiAgQElucHV0KCkgc3RhcnRBdDogJ21vbmRheScgfCAnc3VuZGF5JyA9ICdzdW5kYXknO1xyXG5cclxuICBAT3V0cHV0KCkgbW9udGhDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIG5ld01vbnRoOiB7IHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciB9LFxyXG4gICAgb2xkTW9udGg6IHsgeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyIH1cclxuICB9PigpO1xyXG5cclxuICBAVmlld0NoaWxkKCdjYWxlbmRhcicpIGNhbGVuZGFyUmVmITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdjYWxlbmRhckJvZHknKSBjYWxlbmRhckJvZHlSZWYhOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ2RhdGVTZWxlY3RvckRyb3Bkb3duJywgeyBzdGF0aWM6IGZhbHNlIH0pIGRhdGVTZWxlY3RvckRyb3Bkb3duITogRWxlbWVudFJlZjtcclxuXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxyXG4gIG9uRG9jdW1lbnRDbGljayhldmVudDogTW91c2VFdmVudCkge1xyXG4gICAgaWYgKCF0aGlzLnNob3dEYXRlU2VsZWN0b3IpIHJldHVybjtcclxuICAgIGNvbnN0IGRyb3Bkb3duID0gdGhpcy5kYXRlU2VsZWN0b3JEcm9wZG93bj8ubmF0aXZlRWxlbWVudDtcclxuICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5idG4tZGF0ZS1zZWxlY3RvcicpO1xyXG4gICAgaWYgKGRyb3Bkb3duICYmICFkcm9wZG93bi5jb250YWlucyhldmVudC50YXJnZXQpICYmIGJ1dHRvbiAmJiAhYnV0dG9uLmNvbnRhaW5zKGV2ZW50LnRhcmdldCBhcyBOb2RlKSkge1xyXG4gICAgICB0aGlzLnNob3dEYXRlU2VsZWN0b3IgPSBmYWxzZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGNhbGVuZGFyV2lkdGg/OiBudW1iZXI7XHJcbiAgY29sdW1uV2lkdGg/OiBudW1iZXI7XHJcbiAgY2FsZW5kYXJCb2R5SGVpZ2h0PzogbnVtYmVyO1xyXG4gIG1heEV2ZW50c0luRGF5Q2VsbD86IG51bWJlcjtcclxuXHJcbiAgZGF5Q2VsbHM6IERheUNlbGxbXSA9IFtdO1xyXG5cclxuICB3ZWVrRGF5czogV2Vla0RheVtdID0gW1xyXG4gICAgeyB0YWc6ICdzdW4nIH0sXHJcbiAgICB7IHRhZzogJ21vbicgfSxcclxuICAgIHsgdGFnOiAndHVlJyB9LFxyXG4gICAgeyB0YWc6ICd3ZWQnIH0sXHJcbiAgICB7IHRhZzogJ3RodScgfSxcclxuICAgIHsgdGFnOiAnZnJpJyB9LFxyXG4gICAgeyB0YWc6ICdzYXQnIH0sXHJcbiAgXTtcclxuXHJcbiAgc2hvd01vcmVFdmVudHNNb2RhbDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIG1vcmVFdmVudHNNb2RhbERhdGU/OiBEYXRlO1xyXG4gIG1vcmVFdmVudHNNb2RhbEV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW107XHJcblxyXG4gIGN1cnJlbnRNb250aFRpdGxlOiBzdHJpbmcgPSBgYDtcclxuXHJcbiAgc2hvd0RhdGVTZWxlY3RvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBpc1RvZGF5KGRhdGU6IERhdGUpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpICYmXHJcbiAgICAgIGRhdGUuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJlxyXG4gICAgICBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCk7XHJcbiAgfVxyXG5cclxuICBnZXRFdmVudHNGb3JEYXkoZGF0ZTogRGF0ZSk6IENhbGVuZGFyRXZlbnRbXSB7XHJcbiAgICByZXR1cm4gdGhpcy5ldmVudHMuZmlsdGVyKGV2ZW50ID0+IHtcclxuICAgICAgY29uc3QgZXZlbnRTdGFydCA9IG5ldyBEYXRlKGV2ZW50LnN0YXJ0KTtcclxuICAgICAgY29uc3QgZXZlbnRFbmQgPSBldmVudC5lbmQgPyBuZXcgRGF0ZShldmVudC5lbmQpIDogZXZlbnRTdGFydDtcclxuXHJcbiAgICAgIHJldHVybiBkYXRlID49IG5ldyBEYXRlKGV2ZW50U3RhcnQuZ2V0RnVsbFllYXIoKSwgZXZlbnRTdGFydC5nZXRNb250aCgpLCBldmVudFN0YXJ0LmdldERhdGUoKSkgJiZcclxuICAgICAgICBkYXRlIDw9IG5ldyBEYXRlKGV2ZW50RW5kLmdldEZ1bGxZZWFyKCksIGV2ZW50RW5kLmdldE1vbnRoKCksIGV2ZW50RW5kLmdldERhdGUoKSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGluaXREYXlzQ2VsbHMoKSB7XHJcbiAgICBjb25zdCBkYXlzSW5Nb250aCA9IG5ldyBEYXRlKHRoaXMuY3VycmVudE1vbnRoLnllYXIsIHRoaXMuY3VycmVudE1vbnRoLm1vbnRoLCAwKS5nZXREYXRlKCk7XHJcbiAgICBjb25zdCBmaXJzdERheU9mV2VlayA9IG5ldyBEYXRlKHRoaXMuY3VycmVudE1vbnRoLnllYXIsIHRoaXMuY3VycmVudE1vbnRoLm1vbnRoIC0gMSwgMSkuZ2V0RGF5KCk7XHJcbiAgICBjb25zdCBwcmV2RGF5c0NvdW50ID0gdGhpcy5zdGFydEF0ID09PSAnbW9uZGF5JyA/IChmaXJzdERheU9mV2VlayA9PT0gMCA/IDYgOiBmaXJzdERheU9mV2VlayAtIDEpIDogZmlyc3REYXlPZldlZWs7XHJcbiAgICAvLyBjb25zdCBuZXh0RGF5c0NvdW50ID0gKDcgLSAoKHByZXZEYXlzQ291bnQgKyBkYXlzSW5Nb250aCkgJSA3KSkgJSA3O1xyXG4gICAgY29uc3QgbmV4dERheXNDb3VudCA9IDQyIC0gKHByZXZEYXlzQ291bnQgKyBkYXlzSW5Nb250aCk7IC8vIEFsd2F5cyBzaG93IDYgd2Vla3NcclxuXHJcbiAgICB0aGlzLmRheUNlbGxzID0gW107XHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmV2RGF5c0NvdW50OyBpKyspIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VycmVudE1vbnRoLnllYXIsIHRoaXMuY3VycmVudE1vbnRoLm1vbnRoIC0gMSwgaSAtIHByZXZEYXlzQ291bnQgKyAxKTtcclxuICAgICAgY29uc3QgX2V2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzRm9yRGF5KGRhdGUpO1xyXG5cclxuICAgICAgdGhpcy5kYXlDZWxscy5wdXNoKHtcclxuICAgICAgICBkYXRlLFxyXG4gICAgICAgIGV2ZW50czogX2V2ZW50cyxcclxuICAgICAgICBpc091dHNpZGVNb250aDogdHJ1ZSxcclxuICAgICAgICBpc1RvZGF5OiB0aGlzLmlzVG9kYXkoZGF0ZSlcclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgZm9yIChsZXQgZGF5ID0gMTsgZGF5IDw9IGRheXNJbk1vbnRoOyBkYXkrKykge1xyXG4gICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodGhpcy5jdXJyZW50TW9udGgueWVhciwgdGhpcy5jdXJyZW50TW9udGgubW9udGggLSAxLCBkYXkpO1xyXG4gICAgICBjb25zdCBfZXZlbnRzID0gdGhpcy5nZXRFdmVudHNGb3JEYXkoZGF0ZSk7XHJcblxyXG4gICAgICB0aGlzLmRheUNlbGxzLnB1c2goe1xyXG4gICAgICAgIGRhdGUsXHJcbiAgICAgICAgZXZlbnRzOiBfZXZlbnRzLFxyXG4gICAgICAgIGlzVG9kYXk6IHRoaXMuaXNUb2RheShkYXRlKVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBuZXh0RGF5c0NvdW50OyBpKyspIHtcclxuICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHRoaXMuY3VycmVudE1vbnRoLnllYXIsIHRoaXMuY3VycmVudE1vbnRoLm1vbnRoIC0gMSwgZGF5c0luTW9udGggKyBpKTtcclxuICAgICAgY29uc3QgX2V2ZW50cyA9IHRoaXMuZ2V0RXZlbnRzRm9yRGF5KGRhdGUpO1xyXG5cclxuICAgICAgdGhpcy5kYXlDZWxscy5wdXNoKHtcclxuICAgICAgICBkYXRlLFxyXG4gICAgICAgIGV2ZW50czogX2V2ZW50cyxcclxuICAgICAgICBpc091dHNpZGVNb250aDogdHJ1ZSxcclxuICAgICAgICBpc1RvZGF5OiB0aGlzLmlzVG9kYXkoZGF0ZSlcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzZXRDYWxlbmRhckJvZHlIZWlnaHQoKSB7XHJcbiAgICB0aGlzLmNhbGVuZGFyQm9keUhlaWdodCA9IHRoaXMuY2FsZW5kYXJCb2R5UmVmLm5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gIH1cclxuXHJcbiAgc2V0TWF4RXZlbnRzSW5EYXlDZWxsKCkge1xyXG4gICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2V2ZW50cy1saXN0JylbMF0gYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICBjb25zb2xlLmxvZyhlbGVtZW50KTtcclxuXHJcbiAgICBpZiAoZWxlbWVudCkge1xyXG4gICAgICBjb25zdCBldmVudEl0ZW1IZWlnaHQgPSAyMjtcclxuICAgICAgdGhpcy5tYXhFdmVudHNJbkRheUNlbGwgPSBNYXRoLmZsb29yKGVsZW1lbnQuY2xpZW50SGVpZ2h0IC8gZXZlbnRJdGVtSGVpZ2h0KSAtIDE7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBvcGVuTW9yZUV2ZW50c01vZGFsKGRhdGU6IERhdGUsIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdKSB7XHJcbiAgICB0aGlzLm1vcmVFdmVudHNNb2RhbERhdGUgPSBkYXRlO1xyXG4gICAgdGhpcy5tb3JlRXZlbnRzTW9kYWxFdmVudHMgPSBldmVudHM7XHJcbiAgICB0aGlzLnNob3dNb3JlRXZlbnRzTW9kYWwgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgY2xvc2VNb3JlRXZlbnRzTW9kYWwoKSB7XHJcbiAgICB0aGlzLnNob3dNb3JlRXZlbnRzTW9kYWwgPSBmYWxzZTtcclxuICAgIHRoaXMubW9yZUV2ZW50c01vZGFsRGF0ZSA9IHVuZGVmaW5lZDtcclxuICAgIHRoaXMubW9yZUV2ZW50c01vZGFsRXZlbnRzID0gW107XHJcbiAgfVxyXG5cclxuICBuZXh0TW9udGgoKSB7XHJcbiAgICBjb25zdCBvbGRNb250aCA9IHsgLi4udGhpcy5jdXJyZW50TW9udGggfTtcclxuXHJcbiAgICBpZiAodGhpcy5jdXJyZW50TW9udGgubW9udGggPT09IDEyKSB7XHJcbiAgICAgIHRoaXMuY3VycmVudE1vbnRoLm1vbnRoID0gMTtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGgueWVhciArPSAxO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5jdXJyZW50TW9udGgubW9udGggKz0gMTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmluaXREYXlzQ2VsbHMoKTtcclxuXHJcbiAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBuZXdNb250aDogeyAuLi50aGlzLmN1cnJlbnRNb250aCB9LFxyXG4gICAgICBvbGRNb250aFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcmV2TW9udGgoKSB7XHJcbiAgICBjb25zdCBvbGRNb250aCA9IHsgLi4udGhpcy5jdXJyZW50TW9udGggfTtcclxuICAgIGlmICh0aGlzLmN1cnJlbnRNb250aC5tb250aCA9PT0gMSkge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aC5tb250aCA9IDEyO1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aC55ZWFyIC09IDE7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmN1cnJlbnRNb250aC5tb250aCAtPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdERheXNDZWxscygpO1xyXG5cclxuICAgIHRoaXMubW9udGhDaGFuZ2UuZW1pdCh7XHJcbiAgICAgIG5ld01vbnRoOiB7IC4uLnRoaXMuY3VycmVudE1vbnRoIH0sXHJcbiAgICAgIG9sZE1vbnRoXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdvVG9Ub2RheSgpIHtcclxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcclxuICAgIGNvbnN0IG9sZE1vbnRoID0geyAuLi50aGlzLmN1cnJlbnRNb250aCB9O1xyXG5cclxuICAgIHRoaXMuY3VycmVudE1vbnRoLnllYXIgPSB0b2RheS5nZXRGdWxsWWVhcigpO1xyXG4gICAgdGhpcy5jdXJyZW50TW9udGgubW9udGggPSB0b2RheS5nZXRNb250aCgpICsgMTtcclxuXHJcbiAgICB0aGlzLmluaXREYXlzQ2VsbHMoKTtcclxuXHJcbiAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBuZXdNb250aDogeyAuLi50aGlzLmN1cnJlbnRNb250aCB9LFxyXG4gICAgICBvbGRNb250aFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVEYXRlU2VsZWN0b3IoKSB7XHJcbiAgICB0aGlzLnNob3dEYXRlU2VsZWN0b3IgPSAhdGhpcy5zaG93RGF0ZVNlbGVjdG9yO1xyXG4gIH1cclxuXHJcbiAgb25Nb250aFNlbGVjdGVkKG5ld01vbnRoOiB7IHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciB9KSB7XHJcbiAgICBjb25zdCBvbGRNb250aCA9IHsgLi4udGhpcy5jdXJyZW50TW9udGggfTtcclxuICAgIHRoaXMuY3VycmVudE1vbnRoID0gbmV3TW9udGg7XHJcbiAgICB0aGlzLmluaXREYXlzQ2VsbHMoKTtcclxuXHJcbiAgICB0aGlzLm1vbnRoQ2hhbmdlLmVtaXQoe1xyXG4gICAgICBuZXdNb250aDogeyAuLi50aGlzLmN1cnJlbnRNb250aCB9LFxyXG4gICAgICBvbGRNb250aFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zaG93RGF0ZVNlbGVjdG9yID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICByZXNpemVMaXN0ZW5lciA9ICgpID0+IHtcclxuICAgIHRoaXMuc2V0Q2FsZW5kYXJCb2R5SGVpZ2h0KCk7XHJcbiAgICB0aGlzLnNldE1heEV2ZW50c0luRGF5Q2VsbCgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5zdGFydEF0ID09PSAnbW9uZGF5Jykge1xyXG4gICAgICB0aGlzLndlZWtEYXlzID0gW1xyXG4gICAgICAgIHsgdGFnOiAnbW9uJyB9LFxyXG4gICAgICAgIHsgdGFnOiAndHVlJyB9LFxyXG4gICAgICAgIHsgdGFnOiAnd2VkJyB9LFxyXG4gICAgICAgIHsgdGFnOiAndGh1JyB9LFxyXG4gICAgICAgIHsgdGFnOiAnZnJpJyB9LFxyXG4gICAgICAgIHsgdGFnOiAnc2F0JyB9LFxyXG4gICAgICAgIHsgdGFnOiAnc3VuJyB9LFxyXG4gICAgICBdO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdERheXNDZWxscygpO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIHRoaXMucmVzaXplTGlzdGVuZXIpO1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICB0aGlzLnNldENhbGVuZGFyQm9keUhlaWdodCgpO1xyXG4gICAgICB0aGlzLnNldE1heEV2ZW50c0luRGF5Q2VsbCgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBvbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5yZXNpemVMaXN0ZW5lcik7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgY2xhc3M9XCJjYWxlbmRhci1jb21wb25lbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwibmF2LWNvbnRyb2xzXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tcHJldlwiIChjbGljayk9XCJwcmV2TW9udGgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNTYwLTI0MCAzMjAtNDgwbDI0MC0yNDAgNTYgNTYtMTg0IDE4NCAxODQgMTg0LTU2IDU2WlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXRvZGF5XCIgKGNsaWNrKT1cImdvVG9Ub2RheSgpXCI+e3sndG9kYXknIHwgdHJhbnNsYXRlfX08L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tbmV4dFwiIChjbGljayk9XCJuZXh0TW9udGgoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNTA0LTQ4MCAzMjAtNjY0bDU2LTU2IDI0MCAyNDAtMjQwIDI0MC01Ni01NiAxODQtMTg0WlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtc2VsZWN0b3ItY29udGFpbmVyXCI+XHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tZGF0ZS1zZWxlY3RvclwiIChjbGljayk9XCJ0b2dnbGVEYXRlU2VsZWN0b3IoKVwiPlxyXG4gICAgICAgICAgICAgICAgPHNwYW4+e3sgY3VycmVudE1vbnRoLm1vbnRoIHwgdHJhbnNsYXRlTW9udGh9fSAtIHt7IGN1cnJlbnRNb250aC55ZWFyIH19PC9zcGFuPlxyXG5cclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQ4MC0zNjAgMjgwLTU2MGg0MDBMNDgwLTM2MFpcIiAvPlxyXG4gICAgICAgICAgICAgICAgPC9zdmc+XHJcbiAgICAgICAgICAgIDwvYnV0dG9uPlxyXG5cclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRhdGUtc2VsZWN0b3ItZHJvcGRvd25cIiAqbmdJZj1cInNob3dEYXRlU2VsZWN0b3JcIiAjZGF0ZVNlbGVjdG9yRHJvcGRvd24+XHJcbiAgICAgICAgICAgICAgICA8bGliLW1vbnRoLXNlbGVjdG9yIFtzZWxlY3RlZE1vbnRoXT1cImN1cnJlbnRNb250aFwiXHJcbiAgICAgICAgICAgICAgICAgICAgKG1vbnRoU2VsZWN0ZWQpPVwib25Nb250aFNlbGVjdGVkKCRldmVudClcIj48L2xpYi1tb250aC1zZWxlY3Rvcj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJzcGFjZXJcIj48L2Rpdj5cclxuXHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInZpZXctc2VsZWN0b3JcIj5cclxuICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi12aWV3IGFjdGl2ZVwiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBtb250aCB2aWV3IC0tPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMjAwLTgwcS0zMyAwLTU2LjUtMjMuNVQxMjAtMTYwdi01NjBxMC0zMyAyMy41LTU2LjVUMjAwLTgwMGg0MHYtODBoODB2ODBoMzIwdi04MGg4MHY4MGg0MHEzMyAwIDU2LjUgMjMuNVQ4NDAtNzIwdjU2MHEwIDMzLTIzLjUgNTYuNVQ3NjAtODBIMjAwWm0wLTgwaDU2MHYtNDAwSDIwMHY0MDBabTAtNDgwaDU2MHYtODBIMjAwdjgwWm0wIDB2LTgwIDgwWm0yODAgMjQwcS0xNyAwLTI4LjUtMTEuNVQ0NDAtNDQwcTAtMTcgMTEuNS0yOC41VDQ4MC00ODBxMTcgMCAyOC41IDExLjVUNTIwLTQ0MHEwIDE3LTExLjUgMjguNVQ0ODAtNDAwWm0tMTYwIDBxLTE3IDAtMjguNS0xMS41VDI4MC00NDBxMC0xNyAxMS41LTI4LjVUMzIwLTQ4MHExNyAwIDI4LjUgMTEuNVQzNjAtNDQwcTAgMTctMTEuNSAyOC41VDMyMC00MDBabTMyMCAwcS0xNyAwLTI4LjUtMTEuNVQ2MDAtNDQwcTAtMTcgMTEuNS0yOC41VDY0MC00ODBxMTcgMCAyOC41IDExLjVUNjgwLTQ0MHEwIDE3LTExLjUgMjguNVQ2NDAtNDAwWk00ODAtMjQwcS0xNyAwLTI4LjUtMTEuNVQ0NDAtMjgwcTAtMTcgMTEuNS0yOC41VDQ4MC0zMjBxMTcgMCAyOC41IDExLjVUNTIwLTI4MHEwIDE3LTExLjUgMjguNVQ0ODAtMjQwWm0tMTYwIDBxLTE3IDAtMjguNS0xMS41VDI4MC0yODBxMC0xNyAxMS41LTI4LjVUMzIwLTMyMHExNyAwIDI4LjUgMTEuNVQzNjAtMjgwcTAgMTctMTEuNSAyOC41VDMyMC0yNDBabTMyMCAwcS0xNyAwLTI4LjUtMTEuNVQ2MDAtMjgwcTAtMTcgMTEuNS0yOC41VDY0MC0zMjBxMTcgMCAyOC41IDExLjVUNjgwLTI4MHEwIDE3LTExLjUgMjguNVQ2NDAtMjQwWlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcblxyXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXZpZXdcIj5cclxuICAgICAgICAgICAgICAgIDwhLS0gd2VlayB2aWV3IC0tPlxyXG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxwYXRoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTYwLTE2MHEtMzMgMC01Ni41LTIzLjVUODAtMjQwdi00ODBxMC0zMyAyMy41LTU2LjVUMTYwLTgwMGg2NDBxMzMgMCA1Ni41IDIzLjVUODgwLTcyMHY0ODBxMCAzMy0yMy41IDU2LjVUODAwLTE2MEgxNjBabTM2MC04MGgxMDB2LTQ4MEg1MjB2NDgwWm0tMTgwIDBoMTAwdi00ODBIMzQwdjQ4MFptLTE4MCAwaDEwMHYtNDgwSDE2MHY0ODBabTU0MCAwaDEwMHYtNDgwSDcwMHY0ODBaXCIgLz5cclxuICAgICAgICAgICAgICAgIDwvc3ZnPlxyXG4gICAgICAgICAgICA8L2J1dHRvbj5cclxuXHJcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tdmlld1wiPlxyXG4gICAgICAgICAgICAgICAgPCEtLSBkYXkgdmlldyAtLT5cclxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIGhlaWdodD1cIjI0cHhcIiB2aWV3Qm94PVwiMCAtOTYwIDk2MCA5NjBcIiB3aWR0aD1cIjI0cHhcIlxyXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cclxuICAgICAgICAgICAgICAgICAgICA8cGF0aFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkPVwiTTEyMC0xNjB2LTgwaDcyMHY4MEgxMjBabTAtNTYwdi04MGg3MjB2ODBIMTIwWm04MCA0MDBxLTMzIDAtNTYuNS0yMy41VDEyMC00MDB2LTE2MHEwLTMzIDIzLjUtNTYuNVQyMDAtNjQwaDU2MHEzMyAwIDU2LjUgMjMuNVQ4NDAtNTYwdjE2MHEwIDMzLTIzLjUgNTYuNVQ3NjAtMzIwSDIwMFptMC04MGg1NjB2LTE2MEgyMDB2MTYwWm0wLTE2MHYxNjAtMTYwWlwiIC8+XHJcbiAgICAgICAgICAgICAgICA8L3N2Zz5cclxuICAgICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwiYm9keVwiICNjYWxlbmRhckJvZHk+XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cIndlZWstZGF5c1wiPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwid2Vlay1kYXlcIiAqbmdGb3I9XCJsZXQgZGF5IG9mIHdlZWtEYXlzXCI+XHJcbiAgICAgICAgICAgICAgICB7eyBkYXkudGFnIHwgdHJhbnNsYXRlIHwgc2xpY2U6MDozIH19XHJcbiAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgIDwvZGl2PlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZGF5cy1ncmlkXCI+XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXktY2VsbFwiICpuZ0Zvcj1cImxldCBkYXkgb2YgZGF5Q2VsbHM7IGxldCBpID0gaW5kZXhcIlxyXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydvdXRzaWRlLW1vbnRoJzogZGF5LmlzT3V0c2lkZU1vbnRoLCAnaXMtdG9kYXknOiBkYXkuaXNUb2RheX1cIj5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkYXktbnVtYmVyXCI+XHJcbiAgICAgICAgICAgICAgICAgICAge3sgZGF5LmRhdGUuZ2V0RGF0ZSgpIH19XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRzLWxpc3RcIj5cclxuICAgICAgICAgICAgICAgICAgICA8bGliLWNhbGVuZGFyLWV2ZW50ICpuZ0Zvcj1cImxldCBldmVudCBvZiBkYXkuZXZlbnRzIHwgc2xpY2U6MDptYXhFdmVudHNJbkRheUNlbGxcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBbZXZlbnRdPVwiZXZlbnRcIj48L2xpYi1jYWxlbmRhci1ldmVudD5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1vcmUtZXZlbnRzXCIgKm5nSWY9XCJkYXkuZXZlbnRzLmxlbmd0aCA+IChtYXhFdmVudHNJbkRheUNlbGwgfHwgMClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk1vcmVFdmVudHNNb2RhbChkYXkuZGF0ZSwgZGF5LmV2ZW50cylcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3snbk1vcmVFdmVudHMnIHwgdHJhbnNsYXRlOiB7bjooZGF5LmV2ZW50cy5sZW5ndGggLSAobWF4RXZlbnRzSW5EYXlDZWxsIHx8IDApKX0gfX1cclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJmb290ZXJcIj5cclxuICAgICAgICBGb290ZXJcclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxsaWItbW9yZS1ldmVudHMtbW9kYWwgKm5nSWY9XCJzaG93TW9yZUV2ZW50c01vZGFsICYmIG1vcmVFdmVudHNNb2RhbERhdGVcIiBbZXZlbnRzXT1cIm1vcmVFdmVudHNNb2RhbEV2ZW50c1wiXHJcbiAgICAgICAgW2RhdGVdPVwibW9yZUV2ZW50c01vZGFsRGF0ZVwiIChjbG9zZSk9XCJjbG9zZU1vcmVFdmVudHNNb2RhbCgpXCJcclxuICAgICAgICAoZXZlbnRDbGljayk9XCJjbG9zZU1vcmVFdmVudHNNb2RhbCgpXCI+PC9saWItbW9yZS1ldmVudHMtbW9kYWw+XHJcbjwvZGl2PiJdfQ==
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import { isDarkColor } from '../../utils/colors';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
export class CalendarEventComponent {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.isDarkColor = false;
|
|
8
|
+
}
|
|
9
|
+
ngOnInit() {
|
|
10
|
+
this.isDarkColor = isDarkColor(this.event.color || '#000000');
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
CalendarEventComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarEventComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
14
|
+
CalendarEventComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CalendarEventComponent, selector: "lib-calendar-event", inputs: { event: "event" }, ngImport: i0, template: "<div class=\"calendar-event-component\" style=\"--color: {{ event.color }};\" [ngClass]=\"{'dark-color': isDarkColor}\"\r\n [title]=\"event.title\">\r\n <div class=\"event-title\">{{ event.title }}</div>\r\n</div>", styles: [".calendar-event-component{position:relative;z-index:1;background-color:var(--color, rgba(0, 0, 0, .05));border-radius:4px;padding:2px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;color:#212121}.calendar-event-component.dark-color{color:#fafafa}.event-title{font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }] });
|
|
15
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarEventComponent, decorators: [{
|
|
16
|
+
type: Component,
|
|
17
|
+
args: [{ selector: 'lib-calendar-event', template: "<div class=\"calendar-event-component\" style=\"--color: {{ event.color }};\" [ngClass]=\"{'dark-color': isDarkColor}\"\r\n [title]=\"event.title\">\r\n <div class=\"event-title\">{{ event.title }}</div>\r\n</div>", styles: [".calendar-event-component{position:relative;z-index:1;background-color:var(--color, rgba(0, 0, 0, .05));border-radius:4px;padding:2px 8px;cursor:pointer;-webkit-user-select:none;user-select:none;color:#212121}.calendar-event-component.dark-color{color:#fafafa}.event-title{font-size:12px;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}\n"] }]
|
|
18
|
+
}], ctorParameters: function () { return []; }, propDecorators: { event: [{
|
|
19
|
+
type: Input
|
|
20
|
+
}] } });
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItZXZlbnQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvY2FsZW5kYXItZXZlbnQvY2FsZW5kYXItZXZlbnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvY2FsZW5kYXItZXZlbnQvY2FsZW5kYXItZXZlbnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFekQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLG9CQUFvQixDQUFDOzs7QUFPakQsTUFBTSxPQUFPLHNCQUFzQjtJQU1qQztRQUZBLGdCQUFXLEdBQVksS0FBSyxDQUFDO0lBRWIsQ0FBQztJQUVqQixRQUFRO1FBQ04sSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDLENBQUM7SUFDaEUsQ0FBQzs7bUhBVlUsc0JBQXNCO3VHQUF0QixzQkFBc0Isc0ZDVG5DLDZOQUdNOzJGRE1PLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxvQkFBb0I7MEVBTXJCLEtBQUs7c0JBQWIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDYWxlbmRhckV2ZW50IH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xyXG5pbXBvcnQgeyBpc0RhcmtDb2xvciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbG9ycyc7XHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2xpYi1jYWxlbmRhci1ldmVudCcsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2NhbGVuZGFyLWV2ZW50LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci1ldmVudC5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckV2ZW50Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcclxuXHJcbiAgQElucHV0KCkgZXZlbnQhOiBDYWxlbmRhckV2ZW50O1xyXG5cclxuICBpc0RhcmtDb2xvcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHsgfVxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNEYXJrQ29sb3IgPSBpc0RhcmtDb2xvcih0aGlzLmV2ZW50LmNvbG9yIHx8ICcjMDAwMDAwJyk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGNsYXNzPVwiY2FsZW5kYXItZXZlbnQtY29tcG9uZW50XCIgc3R5bGU9XCItLWNvbG9yOiB7eyBldmVudC5jb2xvciB9fTtcIiBbbmdDbGFzc109XCJ7J2RhcmstY29sb3InOiBpc0RhcmtDb2xvcn1cIlxyXG4gICAgW3RpdGxlXT1cImV2ZW50LnRpdGxlXCI+XHJcbiAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtdGl0bGVcIj57eyBldmVudC50aXRsZSB9fTwvZGl2PlxyXG48L2Rpdj4iXX0=
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { MONTHS } from '../../translations';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "../../pipes/translate-month.pipe";
|
|
6
|
+
export class MonthSelectorComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.monthSelected = new EventEmitter();
|
|
9
|
+
this.mode = 'decade';
|
|
10
|
+
this.currentYear = new Date().getFullYear();
|
|
11
|
+
this.currentMonth = new Date().getMonth() + 1;
|
|
12
|
+
this.selectedMonth = { year: new Date().getFullYear(), month: new Date().getMonth() + 1 };
|
|
13
|
+
this.selectedYear = new Date().getFullYear();
|
|
14
|
+
this.currentDecadeStart = Math.floor(this.selectedYear / 10) * 10;
|
|
15
|
+
this.years = [];
|
|
16
|
+
this.months = Object.keys(MONTHS).map(key => Number(key));
|
|
17
|
+
}
|
|
18
|
+
ngOnInit() {
|
|
19
|
+
setTimeout(() => {
|
|
20
|
+
this.selectedYear = this.selectedMonth.year;
|
|
21
|
+
this.selectDecadeByYear(this.selectedYear);
|
|
22
|
+
this.setYears();
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
toggleMode(event) {
|
|
26
|
+
event.stopPropagation();
|
|
27
|
+
this.mode = this.mode === 'year' ? 'decade' : 'year';
|
|
28
|
+
}
|
|
29
|
+
setYears() {
|
|
30
|
+
this.years = [];
|
|
31
|
+
for (let i = this.currentDecadeStart; i < this.currentDecadeStart + 10; i++) {
|
|
32
|
+
this.years.push(i);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
;
|
|
36
|
+
next(event) {
|
|
37
|
+
event.stopPropagation();
|
|
38
|
+
if (this.mode === 'year') {
|
|
39
|
+
this.selectedYear++;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
this.currentDecadeStart += 10;
|
|
43
|
+
this.setYears();
|
|
44
|
+
this.selectedYear = this.currentDecadeStart;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
previous(event) {
|
|
48
|
+
event.stopPropagation();
|
|
49
|
+
if (this.mode === 'year') {
|
|
50
|
+
this.selectedYear--;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
this.currentDecadeStart -= 10;
|
|
54
|
+
this.setYears();
|
|
55
|
+
this.selectedYear = this.currentDecadeStart;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
selectYear(event, year) {
|
|
59
|
+
event.stopPropagation();
|
|
60
|
+
this.selectedYear = year;
|
|
61
|
+
this.mode = 'year';
|
|
62
|
+
}
|
|
63
|
+
selectDecadeByYear(year) {
|
|
64
|
+
this.currentDecadeStart = Math.floor(year / 10) * 10;
|
|
65
|
+
this.setYears();
|
|
66
|
+
this.mode = 'decade';
|
|
67
|
+
}
|
|
68
|
+
selectMonth(month) {
|
|
69
|
+
this.monthSelected.emit({ year: this.selectedYear, month });
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
MonthSelectorComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MonthSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
73
|
+
MonthSelectorComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MonthSelectorComponent, selector: "lib-month-selector", inputs: { selectedMonth: "selectedMonth" }, outputs: { monthSelected: "monthSelected" }, ngImport: i0, template: "<div class=\"month-selector-component\">\n <div class=\"header\">\n <button class=\"btn-range\" *ngIf=\"mode === 'decade'\" (click)=\"toggleMode($event)\">\n <span>{{currentDecadeStart}} - {{currentDecadeStart + 9}}</span>\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\n fill=\"currentColor\">\n <path d=\"M480-360 280-560h400L480-360Z\" />\n </svg>\n </button>\n\n <button class=\"btn-range\" *ngIf=\"mode === 'year'\" (click)=\"toggleMode($event)\">\n <span>{{selectedYear}}</span>\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"transform: rotate(180deg);\" height=\"24px\"\n viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M480-360 280-560h400L480-360Z\" />\n </svg>\n </button>\n\n <div class=\"nav-controls\">\n <button class=\"btn-prev\" (click)=\"previous($event)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\n fill=\"currentColor\">\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\n </svg>\n </button>\n\n <button class=\"btn-next\" (click)=\"next($event)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\n fill=\"currentColor\">\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\n </svg>\n </button>\n </div>\n </div>\n\n <div class=\"years-grid\" *ngIf=\"mode === 'decade'\">\n <button class=\"btn-year\" *ngFor=\"let year of years\"\n [ngClass]=\"{selected: year === selectedYear, current: year === currentYear }\"\n (click)=\"selectYear($event, year)\">\n {{ year }}\n </button>\n </div>\n\n <div class=\"months-grid\" *ngIf=\"mode === 'year'\">\n <button class=\"btn-month\" *ngFor=\"let month of months\"\n [ngClass]=\"{selected: month === selectedMonth.month && selectedYear === selectedMonth.year, current: currentYear === selectedYear && month === currentMonth}\"\n (click)=\"selectMonth(month)\">\n {{ month | translateMonth | slice:0:3 }}\n </button>\n </div>\n</div>", styles: [".month-selector-component{display:flex;flex-direction:column;width:280px;-webkit-user-select:none;user-select:none}.header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px}.btn-range{display:flex;align-items:center;height:32px;padding:0 4px 0 12px;background:none;border:none;border-radius:50px;cursor:pointer;font-weight:600}.btn-range:hover{background-color:#0000000a}.btn-range span{white-space:nowrap}.nav-controls{display:flex;align-items:center}.btn-prev,.btn-next{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:none;border:none;border-radius:50%;cursor:pointer}.btn-prev:hover,.btn-next:hover{background-color:#0000000a}.years-grid,.months-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:0 16px 16px}.btn-month,.btn-year{display:flex;align-items:center;justify-content:center;padding:6px 12px;border:none;background:none;border-radius:50px;font-size:14px;cursor:pointer}.btn-month:hover,.btn-year:hover{background-color:#0000000a}.btn-month.selected,.btn-year.selected{border:1px solid rgba(0,0,0,.12)}.btn-month.current,.btn-year.current{background-color:#0000001f}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.SlicePipe, name: "slice" }, { kind: "pipe", type: i2.TranslateMonthPipe, name: "translateMonth" }] });
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MonthSelectorComponent, decorators: [{
|
|
75
|
+
type: Component,
|
|
76
|
+
args: [{ selector: 'lib-month-selector', template: "<div class=\"month-selector-component\">\n <div class=\"header\">\n <button class=\"btn-range\" *ngIf=\"mode === 'decade'\" (click)=\"toggleMode($event)\">\n <span>{{currentDecadeStart}} - {{currentDecadeStart + 9}}</span>\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\n fill=\"currentColor\">\n <path d=\"M480-360 280-560h400L480-360Z\" />\n </svg>\n </button>\n\n <button class=\"btn-range\" *ngIf=\"mode === 'year'\" (click)=\"toggleMode($event)\">\n <span>{{selectedYear}}</span>\n\n <svg xmlns=\"http://www.w3.org/2000/svg\" style=\"transform: rotate(180deg);\" height=\"24px\"\n viewBox=\"0 -960 960 960\" width=\"24px\" fill=\"currentColor\">\n <path d=\"M480-360 280-560h400L480-360Z\" />\n </svg>\n </button>\n\n <div class=\"nav-controls\">\n <button class=\"btn-prev\" (click)=\"previous($event)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\n fill=\"currentColor\">\n <path d=\"M560-240 320-480l240-240 56 56-184 184 184 184-56 56Z\" />\n </svg>\n </button>\n\n <button class=\"btn-next\" (click)=\"next($event)\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" height=\"24px\" viewBox=\"0 -960 960 960\" width=\"24px\"\n fill=\"currentColor\">\n <path d=\"M504-480 320-664l56-56 240 240-240 240-56-56 184-184Z\" />\n </svg>\n </button>\n </div>\n </div>\n\n <div class=\"years-grid\" *ngIf=\"mode === 'decade'\">\n <button class=\"btn-year\" *ngFor=\"let year of years\"\n [ngClass]=\"{selected: year === selectedYear, current: year === currentYear }\"\n (click)=\"selectYear($event, year)\">\n {{ year }}\n </button>\n </div>\n\n <div class=\"months-grid\" *ngIf=\"mode === 'year'\">\n <button class=\"btn-month\" *ngFor=\"let month of months\"\n [ngClass]=\"{selected: month === selectedMonth.month && selectedYear === selectedMonth.year, current: currentYear === selectedYear && month === currentMonth}\"\n (click)=\"selectMonth(month)\">\n {{ month | translateMonth | slice:0:3 }}\n </button>\n </div>\n</div>", styles: [".month-selector-component{display:flex;flex-direction:column;width:280px;-webkit-user-select:none;user-select:none}.header{display:flex;align-items:center;justify-content:space-between;padding:8px 16px}.btn-range{display:flex;align-items:center;height:32px;padding:0 4px 0 12px;background:none;border:none;border-radius:50px;cursor:pointer;font-weight:600}.btn-range:hover{background-color:#0000000a}.btn-range span{white-space:nowrap}.nav-controls{display:flex;align-items:center}.btn-prev,.btn-next{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:none;border:none;border-radius:50%;cursor:pointer}.btn-prev:hover,.btn-next:hover{background-color:#0000000a}.years-grid,.months-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding:0 16px 16px}.btn-month,.btn-year{display:flex;align-items:center;justify-content:center;padding:6px 12px;border:none;background:none;border-radius:50px;font-size:14px;cursor:pointer}.btn-month:hover,.btn-year:hover{background-color:#0000000a}.btn-month.selected,.btn-year.selected{border:1px solid rgba(0,0,0,.12)}.btn-month.current,.btn-year.current{background-color:#0000001f}\n"] }]
|
|
77
|
+
}], ctorParameters: function () { return []; }, propDecorators: { monthSelected: [{
|
|
78
|
+
type: Output
|
|
79
|
+
}], selectedMonth: [{
|
|
80
|
+
type: Input
|
|
81
|
+
}] } });
|
|
82
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9udGgtc2VsZWN0b3IuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvbW9udGgtc2VsZWN0b3IvbW9udGgtc2VsZWN0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvbW9udGgtc2VsZWN0b3IvbW9udGgtc2VsZWN0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvRSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFPNUMsTUFBTSxPQUFPLHNCQUFzQjtJQWVqQztRQWJVLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQW1DLENBQUM7UUFFOUUsU0FBSSxHQUFzQixRQUFRLENBQUM7UUFDbkMsZ0JBQVcsR0FBVyxJQUFJLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQy9DLGlCQUFZLEdBQVcsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFDeEMsa0JBQWEsR0FBb0MsRUFBRSxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUUvSCxpQkFBWSxHQUFXLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDaEQsdUJBQWtCLEdBQVcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FB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QkFMbEMsU0FBUzsrQkFDRSxvQkFBb0I7MEVBTXBCLGFBQWE7c0JBQXRCLE1BQU07Z0JBS0UsYUFBYTtzQkFBckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1PTlRIUyB9IGZyb20gJy4uLy4uL3RyYW5zbGF0aW9ucyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1tb250aC1zZWxlY3RvcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb250aC1zZWxlY3Rvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vbnRoLXNlbGVjdG9yLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTW9udGhTZWxlY3RvckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgQE91dHB1dCgpIG1vbnRoU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHsgeWVhcjogbnVtYmVyLCBtb250aDogbnVtYmVyIH0+KCk7XG5cbiAgbW9kZTogJ3llYXInIHwgJ2RlY2FkZScgPSAnZGVjYWRlJztcbiAgY3VycmVudFllYXI6IG51bWJlciA9IG5ldyBEYXRlKCkuZ2V0RnVsbFllYXIoKTtcbiAgY3VycmVudE1vbnRoOiBudW1iZXIgPSBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxO1xuICBASW5wdXQoKSBzZWxlY3RlZE1vbnRoOiB7IHllYXI6IG51bWJlciwgbW9udGg6IG51bWJlciB9ID0geyB5ZWFyOiBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCksIG1vbnRoOiBuZXcgRGF0ZSgpLmdldE1vbnRoKCkgKyAxIH07XG5cbiAgc2VsZWN0ZWRZZWFyOiBudW1iZXIgPSBuZXcgRGF0ZSgpLmdldEZ1bGxZZWFyKCk7XG4gIGN1cnJlbnREZWNhZGVTdGFydDogbnVtYmVyID0gTWF0aC5mbG9vcih0aGlzLnNlbGVjdGVkWWVhciAvIDEwKSAqIDEwO1xuXG4gIHllYXJzOiBudW1iZXJbXSA9IFtdO1xuICBtb250aHMgPSBPYmplY3Qua2V5cyhNT05USFMpLm1hcChrZXkgPT4gTnVtYmVyKGtleSkpO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuc2VsZWN0ZWRNb250aC55ZWFyO1xuXG4gICAgICB0aGlzLnNlbGVjdERlY2FkZUJ5WWVhcih0aGlzLnNlbGVjdGVkWWVhcik7XG4gICAgICB0aGlzLnNldFllYXJzKCk7XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVNb2RlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgdGhpcy5tb2RlID0gdGhpcy5tb2RlID09PSAneWVhcicgPyAnZGVjYWRlJyA6ICd5ZWFyJztcbiAgfVxuXG4gIHNldFllYXJzKCkge1xuICAgIHRoaXMueWVhcnMgPSBbXTtcbiAgICBmb3IgKGxldCBpID0gdGhpcy5jdXJyZW50RGVjYWRlU3RhcnQ7IGkgPCB0aGlzLmN1cnJlbnREZWNhZGVTdGFydCArIDEwOyBpKyspIHtcbiAgICAgIHRoaXMueWVhcnMucHVzaChpKTtcbiAgICB9XG4gIH07XG5cbiAgbmV4dChldmVudDogTW91c2VFdmVudCkge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgaWYgKHRoaXMubW9kZSA9PT0gJ3llYXInKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhcisrO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmN1cnJlbnREZWNhZGVTdGFydCArPSAxMDtcbiAgICAgIHRoaXMuc2V0WWVhcnMoKTtcbiAgICAgIHRoaXMuc2VsZWN0ZWRZZWFyID0gdGhpcy5jdXJyZW50RGVjYWRlU3RhcnQ7XG4gICAgfVxuICB9XG5cbiAgcHJldmlvdXMoZXZlbnQ6IE1vdXNlRXZlbnQpIHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgIGlmICh0aGlzLm1vZGUgPT09ICd5ZWFyJykge1xuICAgICAgdGhpcy5zZWxlY3RlZFllYXItLTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jdXJyZW50RGVjYWRlU3RhcnQgLT0gMTA7XG4gICAgICB0aGlzLnNldFllYXJzKCk7XG4gICAgICB0aGlzLnNlbGVjdGVkWWVhciA9IHRoaXMuY3VycmVudERlY2FkZVN0YXJ0O1xuICAgIH1cbiAgfVxuXG4gIHNlbGVjdFllYXIoZXZlbnQ6IE1vdXNlRXZlbnQsIHllYXI6IG51bWJlcik6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgdGhpcy5zZWxlY3RlZFllYXIgPSB5ZWFyO1xuICAgIHRoaXMubW9kZSA9ICd5ZWFyJztcbiAgfVxuXG4gIHNlbGVjdERlY2FkZUJ5WWVhcih5ZWFyOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnREZWNhZGVTdGFydCA9IE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwO1xuICAgIHRoaXMuc2V0WWVhcnMoKTtcbiAgICB0aGlzLm1vZGUgPSAnZGVjYWRlJztcbiAgfVxuXG4gIHNlbGVjdE1vbnRoKG1vbnRoOiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLm1vbnRoU2VsZWN0ZWQuZW1pdCh7IHllYXI6IHRoaXMuc2VsZWN0ZWRZZWFyLCBtb250aCB9KTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwibW9udGgtc2VsZWN0b3ItY29tcG9uZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cImhlYWRlclwiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXJhbmdlXCIgKm5nSWY9XCJtb2RlID09PSAnZGVjYWRlJ1wiIChjbGljayk9XCJ0b2dnbGVNb2RlKCRldmVudClcIj5cbiAgICAgICAgICAgIDxzcGFuPnt7Y3VycmVudERlY2FkZVN0YXJ0fX0gLSB7e2N1cnJlbnREZWNhZGVTdGFydCArIDl9fTwvc3Bhbj5cblxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXG4gICAgICAgICAgICAgICAgZmlsbD1cImN1cnJlbnRDb2xvclwiPlxuICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNDgwLTM2MCAyODAtNTYwaDQwMEw0ODAtMzYwWlwiIC8+XG4gICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgPC9idXR0b24+XG5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1yYW5nZVwiICpuZ0lmPVwibW9kZSA9PT0gJ3llYXInXCIgKGNsaWNrKT1cInRvZ2dsZU1vZGUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgPHNwYW4+e3tzZWxlY3RlZFllYXJ9fTwvc3Bhbj5cblxuICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgc3R5bGU9XCJ0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpO1wiIGhlaWdodD1cIjI0cHhcIlxuICAgICAgICAgICAgICAgIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTQ4MC0zNjAgMjgwLTU2MGg0MDBMNDgwLTM2MFpcIiAvPlxuICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgIDxkaXYgY2xhc3M9XCJuYXYtY29udHJvbHNcIj5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tcHJldlwiIChjbGljayk9XCJwcmV2aW91cygkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk01NjAtMjQwIDMyMC00ODBsMjQwLTI0MCA1NiA1Ni0xODQgMTg0IDE4NCAxODQtNTYgNTZaXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuXG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLW5leHRcIiAoY2xpY2spPVwibmV4dCgkZXZlbnQpXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgaGVpZ2h0PVwiMjRweFwiIHZpZXdCb3g9XCIwIC05NjAgOTYwIDk2MFwiIHdpZHRoPVwiMjRweFwiXG4gICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk01MDQtNDgwIDMyMC02NjRsNTYtNTYgMjQwIDI0MC0yNDAgMjQwLTU2LTU2IDE4NC0xODRaXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJ5ZWFycy1ncmlkXCIgKm5nSWY9XCJtb2RlID09PSAnZGVjYWRlJ1wiPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYnRuLXllYXJcIiAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyc1wiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7c2VsZWN0ZWQ6IHllYXIgPT09IHNlbGVjdGVkWWVhciwgY3VycmVudDogeWVhciA9PT0gY3VycmVudFllYXIgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0WWVhcigkZXZlbnQsIHllYXIpXCI+XG4gICAgICAgICAgICB7eyB5ZWFyIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1vbnRocy1ncmlkXCIgKm5nSWY9XCJtb2RlID09PSAneWVhcidcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImJ0bi1tb250aFwiICpuZ0Zvcj1cImxldCBtb250aCBvZiBtb250aHNcIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwie3NlbGVjdGVkOiBtb250aCA9PT0gc2VsZWN0ZWRNb250aC5tb250aCAmJiBzZWxlY3RlZFllYXIgPT09IHNlbGVjdGVkTW9udGgueWVhciwgY3VycmVudDogY3VycmVudFllYXIgPT09IHNlbGVjdGVkWWVhciAmJiBtb250aCA9PT0gY3VycmVudE1vbnRofVwiXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9udGgobW9udGgpXCI+XG4gICAgICAgICAgICB7eyBtb250aCB8IHRyYW5zbGF0ZU1vbnRoIHwgc2xpY2U6MDozIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Component, EventEmitter, Input, Output } from '@angular/core';
|
|
2
|
+
import { isDarkColor } from '../../utils/colors';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common";
|
|
5
|
+
import * as i2 from "../../pipes/translate.pipe";
|
|
6
|
+
export class MoreEventsModalComponent {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.events = [];
|
|
9
|
+
this.close = new EventEmitter();
|
|
10
|
+
this.eventClick = new EventEmitter();
|
|
11
|
+
}
|
|
12
|
+
ngOnInit() {
|
|
13
|
+
}
|
|
14
|
+
isDarkColor(color) {
|
|
15
|
+
return isDarkColor(color || '#ffffff');
|
|
16
|
+
}
|
|
17
|
+
onClose() {
|
|
18
|
+
this.close.emit();
|
|
19
|
+
}
|
|
20
|
+
onEventClick(event) {
|
|
21
|
+
this.eventClick.emit(event);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
MoreEventsModalComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MoreEventsModalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
25
|
+
MoreEventsModalComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MoreEventsModalComponent, selector: "lib-more-events-modal", inputs: { events: "events", date: "date" }, outputs: { close: "close", eventClick: "eventClick" }, ngImport: i0, template: "<div class=\"more-events-modal-component\">\n <div class=\"backdrop\" (click)=\"onClose()\"></div>\n\n <div class=\"modal\">\n <div class=\"header\">\n <div class=\"title\">{{'moreEvents' | translate}}</div>\n <div class=\"subtitle\">{{date.toLocaleDateString()}}</div>\n\n <button class=\"btn-close\" (click)=\"onClose()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n class=\"feather feather-x\" fill=\"yellow\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <div class=\"events-list\">\n <div class=\"event-item\" *ngFor=\"let event of events\" style=\"--color: {{event.color}};\"\n [ngClass]=\"{'is-dark':isDarkColor(event.color)}\" (click)=\"onEventClick(event)\">\n <div class=\"event-title\">{{ event.title }}</div>\n </div>\n </div>\n </div>\n</div>", styles: [".more-events-modal-component{position:absolute;top:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;width:100%;height:100%;box-shadow:0 2px 8px #00000026}.more-events-modal-component .backdrop{position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;background-color:#00000080;cursor:pointer}.modal{z-index:2;display:flex;flex-direction:column;max-width:400px;width:100%;max-height:80%;margin:24px;background-color:#fff;border-radius:8px}.header{position:relative;display:flex;flex-direction:column;padding:16px 64px 16px 16px}.title{font-size:18px;font-weight:700}.subtitle{font-size:13px;color:#666}.btn-close{position:absolute;top:8px;right:8px;display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:none;border:none;border-radius:50%;cursor:pointer}.btn-close:hover{background-color:#f0f0f0}.events-list{flex:1 1 auto;display:flex;flex-direction:column;gap:4px;padding:0 16px 16px;overflow-y:auto}.events-list .event-item{display:flex;padding:8px;background-color:var(--color, #e2e2e2);border-radius:4px;color:#212121;cursor:pointer;-webkit-user-select:none;user-select:none}.events-list .event-item.is-dark{color:#fafafa}\n"], dependencies: [{ kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i2.TranslatePipe, name: "translate" }] });
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MoreEventsModalComponent, decorators: [{
|
|
27
|
+
type: Component,
|
|
28
|
+
args: [{ selector: 'lib-more-events-modal', template: "<div class=\"more-events-modal-component\">\n <div class=\"backdrop\" (click)=\"onClose()\"></div>\n\n <div class=\"modal\">\n <div class=\"header\">\n <div class=\"title\">{{'moreEvents' | translate}}</div>\n <div class=\"subtitle\">{{date.toLocaleDateString()}}</div>\n\n <button class=\"btn-close\" (click)=\"onClose()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\" fill=\"none\"\n stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"\n class=\"feather feather-x\" fill=\"yellow\">\n <line x1=\"18\" y1=\"6\" x2=\"6\" y2=\"18\"></line>\n <line x1=\"6\" y1=\"6\" x2=\"18\" y2=\"18\"></line>\n </svg>\n </button>\n </div>\n\n <div class=\"events-list\">\n <div class=\"event-item\" *ngFor=\"let event of events\" style=\"--color: {{event.color}};\"\n [ngClass]=\"{'is-dark':isDarkColor(event.color)}\" (click)=\"onEventClick(event)\">\n <div class=\"event-title\">{{ event.title }}</div>\n </div>\n </div>\n </div>\n</div>", styles: [".more-events-modal-component{position:absolute;top:0;left:0;z-index:1;display:flex;align-items:center;justify-content:center;width:100%;height:100%;box-shadow:0 2px 8px #00000026}.more-events-modal-component .backdrop{position:absolute;top:0;left:0;z-index:1;width:100%;height:100%;background-color:#00000080;cursor:pointer}.modal{z-index:2;display:flex;flex-direction:column;max-width:400px;width:100%;max-height:80%;margin:24px;background-color:#fff;border-radius:8px}.header{position:relative;display:flex;flex-direction:column;padding:16px 64px 16px 16px}.title{font-size:18px;font-weight:700}.subtitle{font-size:13px;color:#666}.btn-close{position:absolute;top:8px;right:8px;display:flex;align-items:center;justify-content:center;width:36px;height:36px;background:none;border:none;border-radius:50%;cursor:pointer}.btn-close:hover{background-color:#f0f0f0}.events-list{flex:1 1 auto;display:flex;flex-direction:column;gap:4px;padding:0 16px 16px;overflow-y:auto}.events-list .event-item{display:flex;padding:8px;background-color:var(--color, #e2e2e2);border-radius:4px;color:#212121;cursor:pointer;-webkit-user-select:none;user-select:none}.events-list .event-item.is-dark{color:#fafafa}\n"] }]
|
|
29
|
+
}], ctorParameters: function () { return []; }, propDecorators: { events: [{
|
|
30
|
+
type: Input
|
|
31
|
+
}], date: [{
|
|
32
|
+
type: Input
|
|
33
|
+
}], close: [{
|
|
34
|
+
type: Output
|
|
35
|
+
}], eventClick: [{
|
|
36
|
+
type: Output
|
|
37
|
+
}] } });
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9yZS1ldmVudHMtbW9kYWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvbW9yZS1ldmVudHMtbW9kYWwvbW9yZS1ldmVudHMtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvbW9yZS1ldmVudHMtbW9kYWwvbW9yZS1ldmVudHMtbW9kYWwuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFVLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7Ozs7QUFPakQsTUFBTSxPQUFPLHdCQUF3QjtJQVFuQztRQU5TLFdBQU0sR0FBb0IsRUFBRSxDQUFDO1FBRzVCLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQzNCLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBaUIsQ0FBQztJQUV6QyxDQUFDO0lBRWpCLFFBQVE7SUFDUixDQUFDO0lBRUQsV0FBVyxDQUFDLEtBQWM7UUFDeEIsT0FBTyxXQUFXLENBQUMsS0FBSyxJQUFJLFNBQVMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQW9CO1FBQy9CLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7O3FIQXZCVSx3QkFBd0I7eUdBQXhCLHdCQUF3QixnS0NUckMsc3VDQXlCTTsyRkRoQk8sd0JBQXdCO2tCQUxwQyxTQUFTOytCQUNFLHVCQUF1QjswRUFNeEIsTUFBTTtzQkFBZCxLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFFSSxLQUFLO3NCQUFkLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENhbGVuZGFyRXZlbnQgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBpc0RhcmtDb2xvciB9IGZyb20gJy4uLy4uL3V0aWxzL2NvbG9ycyc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1tb3JlLWV2ZW50cy1tb2RhbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9tb3JlLWV2ZW50cy1tb2RhbC5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL21vcmUtZXZlbnRzLW1vZGFsLmNvbXBvbmVudC5zY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgTW9yZUV2ZW50c01vZGFsQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBASW5wdXQoKSBldmVudHM6IENhbGVuZGFyRXZlbnRbXSA9IFtdO1xuICBASW5wdXQoKSBkYXRlITogRGF0ZTtcblxuICBAT3V0cHV0KCkgY2xvc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBldmVudENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxDYWxlbmRhckV2ZW50PigpO1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gIH1cblxuICBpc0RhcmtDb2xvcihjb2xvcj86IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBpc0RhcmtDb2xvcihjb2xvciB8fCAnI2ZmZmZmZicpO1xuICB9XG5cbiAgb25DbG9zZSgpIHtcbiAgICB0aGlzLmNsb3NlLmVtaXQoKTtcbiAgfVxuXG4gIG9uRXZlbnRDbGljayhldmVudDogQ2FsZW5kYXJFdmVudCkge1xuICAgIHRoaXMuZXZlbnRDbGljay5lbWl0KGV2ZW50KTtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwibW9yZS1ldmVudHMtbW9kYWwtY29tcG9uZW50XCI+XG4gICAgPGRpdiBjbGFzcz1cImJhY2tkcm9wXCIgKGNsaWNrKT1cIm9uQ2xvc2UoKVwiPjwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPnt7J21vcmVFdmVudHMnIHwgdHJhbnNsYXRlfX08L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdWJ0aXRsZVwiPnt7ZGF0ZS50b0xvY2FsZURhdGVTdHJpbmcoKX19PC9kaXY+XG5cbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJidG4tY2xvc2VcIiAoY2xpY2spPVwib25DbG9zZSgpXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCJcbiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiY3VycmVudENvbG9yXCIgc3Ryb2tlLXdpZHRoPVwiMlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmVhdGhlciBmZWF0aGVyLXhcIiBmaWxsPVwieWVsbG93XCI+XG4gICAgICAgICAgICAgICAgICAgIDxsaW5lIHgxPVwiMThcIiB5MT1cIjZcIiB4Mj1cIjZcIiB5Mj1cIjE4XCI+PC9saW5lPlxuICAgICAgICAgICAgICAgICAgICA8bGluZSB4MT1cIjZcIiB5MT1cIjZcIiB4Mj1cIjE4XCIgeTI9XCIxOFwiPjwvbGluZT5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnRzLWxpc3RcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJldmVudC1pdGVtXCIgKm5nRm9yPVwibGV0IGV2ZW50IG9mIGV2ZW50c1wiIHN0eWxlPVwiLS1jb2xvcjoge3tldmVudC5jb2xvcn19O1wiXG4gICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydpcy1kYXJrJzppc0RhcmtDb2xvcihldmVudC5jb2xvcil9XCIgKGNsaWNrKT1cIm9uRXZlbnRDbGljayhldmVudClcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZXZlbnQtdGl0bGVcIj57eyBldmVudC50aXRsZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Component, Input } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../calendar/calendar.component";
|
|
4
|
+
export class SmartCalendarComponent {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.events = [];
|
|
7
|
+
}
|
|
8
|
+
ngOnInit() {
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
SmartCalendarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SmartCalendarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
12
|
+
SmartCalendarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SmartCalendarComponent, selector: "smart-calendar", inputs: { events: "events" }, ngImport: i0, template: "<div class=\"smart-calendar-component\">\n <lib-calendar [events]=\"events\"></lib-calendar>\n</div>", styles: [".smart-calendar-component{width:100%;height:100%;background-color:#fff;border:1px solid #dddddd}\n"], dependencies: [{ kind: "component", type: i1.CalendarComponent, selector: "lib-calendar", inputs: ["currentMonth", "events", "startAt"], outputs: ["monthChange"] }] });
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SmartCalendarComponent, decorators: [{
|
|
14
|
+
type: Component,
|
|
15
|
+
args: [{ selector: 'smart-calendar', template: "<div class=\"smart-calendar-component\">\n <lib-calendar [events]=\"events\"></lib-calendar>\n</div>", styles: [".smart-calendar-component{width:100%;height:100%;background-color:#fff;border:1px solid #dddddd}\n"] }]
|
|
16
|
+
}], ctorParameters: function () { return []; }, propDecorators: { events: [{
|
|
17
|
+
type: Input
|
|
18
|
+
}] } });
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnQtY2FsZW5kYXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvc21hcnQtY2FsZW5kYXIvc21hcnQtY2FsZW5kYXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc21hcnQtYW5ndWxhci1jYWxlbmRhci9zcmMvbGliL2NvbXBvbmVudHMvc21hcnQtY2FsZW5kYXIvc21hcnQtY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7OztBQVF6RCxNQUFNLE9BQU8sc0JBQXNCO0lBSWpDO1FBRlMsV0FBTSxHQUFvQixFQUFFLENBQUM7SUFFdEIsQ0FBQztJQUVqQixRQUFRO0lBQ1IsQ0FBQzs7bUhBUFUsc0JBQXNCO3VHQUF0QixzQkFBc0Isb0ZDUm5DLHlHQUVNOzJGRE1PLHNCQUFzQjtrQkFMbEMsU0FBUzsrQkFDRSxnQkFBZ0I7MEVBTWpCLE1BQU07c0JBQWQsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ2FsZW5kYXJFdmVudCB9IGZyb20gJy4uLy4uL3R5cGVzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc21hcnQtY2FsZW5kYXInLFxuICB0ZW1wbGF0ZVVybDogJy4vc21hcnQtY2FsZW5kYXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9zbWFydC1jYWxlbmRhci5jb21wb25lbnQuc2NzcyddXG59KVxuZXhwb3J0IGNsYXNzIFNtYXJ0Q2FsZW5kYXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBJbnB1dCgpIGV2ZW50czogQ2FsZW5kYXJFdmVudFtdID0gW107XG5cbiAgY29uc3RydWN0b3IoKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgfVxuXG59XG4iLCI8ZGl2IGNsYXNzPVwic21hcnQtY2FsZW5kYXItY29tcG9uZW50XCI+XG4gICAgPGxpYi1jYWxlbmRhciBbZXZlbnRzXT1cImV2ZW50c1wiPjwvbGliLWNhbGVuZGFyPlxuPC9kaXY+Il19
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import { MONTHS } from '../translations';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "../services/translation.service";
|
|
5
|
+
export class TranslateMonthPipe {
|
|
6
|
+
constructor(translationService) {
|
|
7
|
+
this.translationService = translationService;
|
|
8
|
+
}
|
|
9
|
+
transform(value) {
|
|
10
|
+
const monthTag = MONTHS[value];
|
|
11
|
+
return this.translationService.translate(monthTag);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
TranslateMonthPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TranslateMonthPipe, deps: [{ token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
15
|
+
TranslateMonthPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: TranslateMonthPipe, name: "translateMonth" });
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TranslateMonthPipe, decorators: [{
|
|
17
|
+
type: Pipe,
|
|
18
|
+
args: [{
|
|
19
|
+
name: 'translateMonth'
|
|
20
|
+
}]
|
|
21
|
+
}], ctorParameters: function () { return [{ type: i1.TranslationService }]; } });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLW1vbnRoLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1hbmd1bGFyLWNhbGVuZGFyL3NyYy9saWIvcGlwZXMvdHJhbnNsYXRlLW1vbnRoLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDOzs7QUFNekMsTUFBTSxPQUFPLGtCQUFrQjtJQUU3QixZQUNVLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQzVDLENBQUM7SUFFTCxTQUFTLENBQUMsS0FBYTtRQUNyQixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsS0FBNEIsQ0FBQyxDQUFDO1FBRXRELE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQyxRQUFlLENBQUMsQ0FBQztJQUM1RCxDQUFDOzsrR0FWVSxrQkFBa0I7NkdBQWxCLGtCQUFrQjsyRkFBbEIsa0JBQWtCO2tCQUg5QixJQUFJO21CQUFDO29CQUNKLElBQUksRUFBRSxnQkFBZ0I7aUJBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUGlwZSwgUGlwZVRyYW5zZm9ybSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTU9OVEhTIH0gZnJvbSAnLi4vdHJhbnNsYXRpb25zJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3RyYW5zbGF0aW9uLnNlcnZpY2UnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICd0cmFuc2xhdGVNb250aCdcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNsYXRlTW9udGhQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGlvblNlcnZpY2U6IFRyYW5zbGF0aW9uU2VydmljZVxuICApIHsgfVxuXG4gIHRyYW5zZm9ybSh2YWx1ZTogbnVtYmVyKTogc3RyaW5nIHtcbiAgICBjb25zdCBtb250aFRhZyA9IE1PTlRIU1t2YWx1ZSBhcyBrZXlvZiB0eXBlb2YgTU9OVEhTXTtcblxuICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uU2VydmljZS50cmFuc2xhdGUobW9udGhUYWcgYXMgYW55KTtcbiAgfVxuXG59XG4iXX0=
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Pipe } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../services/translation.service";
|
|
4
|
+
export class TranslatePipe {
|
|
5
|
+
constructor(translationService) {
|
|
6
|
+
this.translationService = translationService;
|
|
7
|
+
}
|
|
8
|
+
transform(tag, args) {
|
|
9
|
+
return this.translationService.translate(tag, args);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
TranslatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TranslatePipe, deps: [{ token: i1.TranslationService }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
13
|
+
TranslatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: TranslatePipe, name: "translate" });
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TranslatePipe, decorators: [{
|
|
15
|
+
type: Pipe,
|
|
16
|
+
args: [{
|
|
17
|
+
name: 'translate'
|
|
18
|
+
}]
|
|
19
|
+
}], ctorParameters: function () { return [{ type: i1.TranslationService }]; } });
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsYXRlLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zbWFydC1hbmd1bGFyLWNhbGVuZGFyL3NyYy9saWIvcGlwZXMvdHJhbnNsYXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLElBQUksRUFBaUIsTUFBTSxlQUFlLENBQUM7OztBQVFwRCxNQUFNLE9BQU8sYUFBYTtJQUV4QixZQUNVLGtCQUFzQztRQUF0Qyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO0lBQzVDLENBQUM7SUFFTCxTQUFTLENBQUMsR0FBc0IsRUFBRSxJQUE2QjtRQUM3RCxPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsR0FBd0IsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMzRSxDQUFDOzswR0FSVSxhQUFhO3dHQUFiLGFBQWE7MkZBQWIsYUFBYTtrQkFIekIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsV0FBVztpQkFDbEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgVFJBTlNMQVRJT05TIGZyb20gJy4uL3RyYW5zbGF0aW9ucyc7XG5pbXBvcnQgeyBUcmFuc2xhdGlvblNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy90cmFuc2xhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICd0cmFuc2xhdGUnXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbGF0ZVBpcGUgaW1wbGVtZW50cyBQaXBlVHJhbnNmb3JtIHtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHRyYW5zbGF0aW9uU2VydmljZTogVHJhbnNsYXRpb25TZXJ2aWNlXG4gICkgeyB9XG5cbiAgdHJhbnNmb3JtKHRhZzoga2V5b2YgVHJhbnNsYXRpb24sIGFyZ3M/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9KTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvblNlcnZpY2UudHJhbnNsYXRlKHRhZyBhcyBrZXlvZiBUcmFuc2xhdGlvbiwgYXJncyk7XG4gIH1cblxufVxuIl19
|