@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.
Files changed (33) hide show
  1. package/esm2020/lib/components/calendar/calendar.component.mjs +223 -0
  2. package/esm2020/lib/components/calendar-event/calendar-event.component.mjs +21 -0
  3. package/esm2020/lib/components/month-selector/month-selector.component.mjs +82 -0
  4. package/esm2020/lib/components/more-events-modal/more-events-modal.component.mjs +38 -0
  5. package/esm2020/lib/components/smart-calendar/smart-calendar.component.mjs +19 -0
  6. package/esm2020/lib/pipes/translate-month.pipe.mjs +22 -0
  7. package/esm2020/lib/pipes/translate.pipe.mjs +20 -0
  8. package/esm2020/lib/services/translation.service.mjs +29 -0
  9. package/esm2020/lib/smart-angular-calendar.module.mjs +28 -7
  10. package/esm2020/lib/translations.mjs +66 -0
  11. package/esm2020/lib/types.mjs +2 -0
  12. package/esm2020/lib/utils/colors.mjs +13 -0
  13. package/esm2020/public-api.mjs +2 -2
  14. package/fesm2015/smart-solutions-tech-smart-angular-calendar.mjs +515 -21
  15. package/fesm2015/smart-solutions-tech-smart-angular-calendar.mjs.map +1 -1
  16. package/fesm2020/smart-solutions-tech-smart-angular-calendar.mjs +514 -21
  17. package/fesm2020/smart-solutions-tech-smart-angular-calendar.mjs.map +1 -1
  18. package/lib/components/calendar/calendar.component.d.ts +58 -0
  19. package/lib/components/calendar-event/calendar-event.component.d.ts +11 -0
  20. package/lib/components/month-selector/month-selector.component.d.ts +30 -0
  21. package/lib/components/more-events-modal/more-events-modal.component.d.ts +16 -0
  22. package/lib/components/smart-calendar/smart-calendar.component.d.ts +10 -0
  23. package/lib/pipes/translate-month.pipe.d.ts +10 -0
  24. package/lib/pipes/translate.pipe.d.ts +13 -0
  25. package/lib/services/translation.service.d.ts +12 -0
  26. package/lib/smart-angular-calendar.module.d.ts +9 -2
  27. package/lib/translations.d.ts +17 -0
  28. package/lib/types.d.ts +42 -0
  29. package/lib/utils/colors.d.ts +1 -0
  30. package/package.json +1 -1
  31. package/public-api.d.ts +1 -1
  32. package/esm2020/lib/smart-angular-calendar.component.mjs +0 -22
  33. 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