barsa-calendar 0.0.2

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 (56) hide show
  1. package/README.md +25 -0
  2. package/esm2020/barsa-calendar.mjs +5 -0
  3. package/esm2020/lib/barsa-calendar.module.mjs +106 -0
  4. package/esm2020/lib/calendar-container/calendar-container.component.mjs +190 -0
  5. package/esm2020/lib/calendar-header/calendar-header.component.mjs +61 -0
  6. package/esm2020/lib/calendar-list/calendar-list.component.mjs +19 -0
  7. package/esm2020/lib/calendar-list-container/calendar-list-container.component.mjs +30 -0
  8. package/esm2020/lib/calendar-list-item/calendar-list-item.component.mjs +14 -0
  9. package/esm2020/lib/calendar-month/calendar-month.component.mjs +244 -0
  10. package/esm2020/lib/calendar-selection-days/calendar-selection-days.component.mjs +193 -0
  11. package/esm2020/lib/calendar-week/calendar-week.component.mjs +182 -0
  12. package/esm2020/lib/constants.mjs +4 -0
  13. package/esm2020/lib/date-time-picker/date-time-picker.component.mjs +324 -0
  14. package/esm2020/lib/day-event-list/day-event-list.component.mjs +53 -0
  15. package/esm2020/lib/day-number-box/day-number-box.component.mjs +105 -0
  16. package/esm2020/lib/days-in-week.pipe.mjs +17 -0
  17. package/esm2020/lib/equal-date.pipe.mjs +23 -0
  18. package/esm2020/lib/event-button/event-button.component.mjs +70 -0
  19. package/esm2020/lib/event-date.pipe.mjs +24 -0
  20. package/esm2020/lib/event-preview/event-preview.component.mjs +60 -0
  21. package/esm2020/lib/event-time.pipe.mjs +22 -0
  22. package/esm2020/lib/from-to-time.pipe.mjs +23 -0
  23. package/esm2020/lib/models.mjs +14 -0
  24. package/esm2020/lib/month-days/month-days.component.mjs +220 -0
  25. package/esm2020/lib/services/calendar.service.mjs +610 -0
  26. package/esm2020/public-api.mjs +21 -0
  27. package/fesm2015/barsa-calendar.mjs +2447 -0
  28. package/fesm2015/barsa-calendar.mjs.map +1 -0
  29. package/fesm2020/barsa-calendar.mjs +2455 -0
  30. package/fesm2020/barsa-calendar.mjs.map +1 -0
  31. package/index.d.ts +5 -0
  32. package/lib/barsa-calendar.module.d.ts +33 -0
  33. package/lib/calendar-container/calendar-container.component.d.ts +73 -0
  34. package/lib/calendar-header/calendar-header.component.d.ts +29 -0
  35. package/lib/calendar-list/calendar-list.component.d.ts +8 -0
  36. package/lib/calendar-list-container/calendar-list-container.component.d.ts +14 -0
  37. package/lib/calendar-list-item/calendar-list-item.component.d.ts +7 -0
  38. package/lib/calendar-month/calendar-month.component.d.ts +70 -0
  39. package/lib/calendar-selection-days/calendar-selection-days.component.d.ts +47 -0
  40. package/lib/calendar-week/calendar-week.component.d.ts +57 -0
  41. package/lib/constants.d.ts +1 -0
  42. package/lib/date-time-picker/date-time-picker.component.d.ts +98 -0
  43. package/lib/day-event-list/day-event-list.component.d.ts +20 -0
  44. package/lib/day-number-box/day-number-box.component.d.ts +30 -0
  45. package/lib/days-in-week.pipe.d.ts +9 -0
  46. package/lib/equal-date.pipe.d.ts +8 -0
  47. package/lib/event-button/event-button.component.d.ts +26 -0
  48. package/lib/event-date.pipe.d.ts +9 -0
  49. package/lib/event-preview/event-preview.component.d.ts +19 -0
  50. package/lib/event-time.pipe.d.ts +9 -0
  51. package/lib/from-to-time.pipe.d.ts +9 -0
  52. package/lib/models.d.ts +107 -0
  53. package/lib/month-days/month-days.component.d.ts +69 -0
  54. package/lib/services/calendar.service.d.ts +70 -0
  55. package/package.json +31 -0
  56. package/public-api.d.ts +17 -0
@@ -0,0 +1,2455 @@
1
+ import * as i0 from '@angular/core';
2
+ import { Injectable, Optional, Inject, Pipe, EventEmitter, Component, ChangeDetectionStrategy, HostBinding, Input, Output, HostListener, ViewChild, Self, NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
3
+ import { takeUntil, distinctUntilChanged, map, switchMap } from 'rxjs/operators';
4
+ import * as i2 from 'barsa-novin-ray-core';
5
+ import { BaseComponent, getDateService, getUniqueId, PreventDefaulEvent, DateService, BarsaApi, ReportViewBaseComponent, LogService, BarsaNovinRayCoreModule } from 'barsa-novin-ray-core';
6
+ import { BehaviorSubject, combineLatest, of } from 'rxjs';
7
+ import * as i3 from '@angular/common';
8
+ import { CommonModule, TitleCasePipe } from '@angular/common';
9
+ import * as i4 from '@fundamental-ngx/core/button';
10
+ import * as i5$1 from '@fundamental-ngx/core/popover';
11
+ import { PopoverModule } from '@fundamental-ngx/core/popover';
12
+ import * as i6 from '@fundamental-ngx/core/toolbar';
13
+ import * as i7 from '@fundamental-ngx/platform/button';
14
+ import moment from 'moment';
15
+ import * as i6$1 from '@fundamental-ngx/core/table';
16
+ import * as i2$3 from '@fundamental-ngx/core';
17
+ import { PopoverComponent, FdDate, DatetimeAdapter, FdDatetimeAdapter, TimeI18n, TimeComponent, FundamentalNgxCoreModule } from '@fundamental-ngx/core';
18
+ import * as i2$1 from '@fundamental-ngx/core/avatar';
19
+ import * as i3$1 from '@fundamental-ngx/core/icon';
20
+ import * as i4$1 from '@fundamental-ngx/core/layout-panel';
21
+ import * as i5 from '@fundamental-ngx/core/quick-view';
22
+ import { QuickViewModule } from '@fundamental-ngx/core/quick-view';
23
+ import * as i2$2 from '@fundamental-ngx/core/bar';
24
+ import * as i3$2 from '@fundamental-ngx/core/list';
25
+ import * as i4$2 from '@angular/forms';
26
+ import { FormsModule } from '@angular/forms';
27
+ import * as i7$1 from '@fundamental-ngx/core/input-group';
28
+ import * as i9 from '@fundamental-ngx/core/time';
29
+ import * as i2$4 from '@fundamental-ngx/core/menu';
30
+ import * as i3$3 from '@fundamental-ngx/core/title';
31
+ import * as i4$3 from '@fundamental-ngx/core/split-button';
32
+ import { FundamentalNgxPlatformModule } from '@fundamental-ngx/platform';
33
+ import { CardModule } from '@fundamental-ngx/core/card';
34
+
35
+ var DayStatus;
36
+ (function (DayStatus) {
37
+ DayStatus[DayStatus["Open"] = 0] = "Open";
38
+ DayStatus[DayStatus["Completed"] = 1] = "Completed";
39
+ DayStatus[DayStatus["Failed"] = 2] = "Failed";
40
+ })(DayStatus || (DayStatus = {}));
41
+ class CalendarMonthInfo {
42
+ get daysInWeek() {
43
+ const start = this.selectedWeek * 7;
44
+ const days = this.days.slice(start, start + 7);
45
+ return days;
46
+ }
47
+ }
48
+
49
+ class CalendarService extends BaseComponent {
50
+ constructor(_logService, culture) {
51
+ super();
52
+ this._logService = _logService;
53
+ this._calendarsSource = new BehaviorSubject([]);
54
+ this._modeSource = new BehaviorSubject('month');
55
+ this._currentMonthIndexSource = new BehaviorSubject(-1);
56
+ this._weekModeDaysSource = new BehaviorSubject([]);
57
+ this._daysSource = new BehaviorSubject([]);
58
+ this._dateService = getDateService(_logService, culture);
59
+ this.days$ = this._daysSource.asObservable();
60
+ this.mode$ = this._modeSource.asObservable();
61
+ this.weekModeDays$ = this._weekModeDaysSource.asObservable();
62
+ this.calendars$ = this._calendarsSource.asObservable();
63
+ this.currentMonthIndex$ = this._currentMonthIndexSource.asObservable();
64
+ this._initilize();
65
+ }
66
+ get todayMonthInfo() {
67
+ return this._todayMonthInfo;
68
+ }
69
+ get selectedMonth() {
70
+ return this._selectedSource.getValue();
71
+ }
72
+ get calendars() {
73
+ return this._calendarsSource.getValue();
74
+ }
75
+ get weeksCount() {
76
+ return this._daysSource.getValue().length / 7;
77
+ }
78
+ get days() {
79
+ return this._daysSource.getValue();
80
+ }
81
+ get Months() {
82
+ return this._dateService.monthNames();
83
+ }
84
+ loadMonthByDate(value) {
85
+ const monthInfo = this._dateService.getDateInfo(value);
86
+ this.loadMonth(monthInfo);
87
+ }
88
+ setDateService(primaryCalendarType) {
89
+ let dateService = this._dateService;
90
+ switch (primaryCalendarType) {
91
+ case 'Persian':
92
+ dateService = getDateService(this._logService, 'fa-IR');
93
+ break;
94
+ case 'Gregorian':
95
+ dateService = getDateService(this._logService, 'en-US');
96
+ break;
97
+ case 'Arabic':
98
+ dateService = getDateService(this._logService, 'ar-AE');
99
+ break;
100
+ }
101
+ this._dateService = dateService;
102
+ this._initilize();
103
+ }
104
+ setDays(days) {
105
+ this._daysSource.next(days);
106
+ }
107
+ prepareWeek(monthInfo, startIndex, daysCount) {
108
+ const startDays = monthInfo.days.slice(startIndex, startIndex + daysCount);
109
+ this._weekModeDaysSource.next(startDays);
110
+ }
111
+ setSelected(selected) {
112
+ this._selectedSource.next(selected);
113
+ }
114
+ weekDaysMin() {
115
+ return this._dateService.weekdaysMin();
116
+ }
117
+ weekDays() {
118
+ return this._dateService.weekDays();
119
+ }
120
+ gotoToday() {
121
+ this.loadMonth(this._todayMonthInfo.dateInfo, 0);
122
+ this.setMode(this._modeSource.getValue(), this._todayMonthInfo.days.find((c) => c.isToday), this._weekModeDaysSource.getValue().length);
123
+ }
124
+ rangeSelect(startDay, endDay, monthInfo) {
125
+ const diff = endDay.index - startDay.index;
126
+ if (diff < 7) {
127
+ this.setMode('week', startDay, diff + 1);
128
+ }
129
+ else {
130
+ const diff2 = diff + 1;
131
+ this.setMode('customMonth');
132
+ this.setMonth(monthInfo, startDay, diff2);
133
+ }
134
+ }
135
+ setMonth(monthInfo, startDay, diff = 0) {
136
+ if (startDay && diff > 0) {
137
+ const startIndex = startDay.index;
138
+ this.loadCalendarMonthInfo(monthInfo);
139
+ this.setDays(monthInfo.days.slice(startIndex, startIndex + diff));
140
+ }
141
+ else {
142
+ this.loadCalendarMonthInfo(monthInfo);
143
+ this.setDays(monthInfo.days);
144
+ // else if (mode === 'month') {
145
+ // startDay = daysLoaded[0];
146
+ // if (startDay) this.loadMonth(startDay.monthDateInfo);
147
+ // }
148
+ }
149
+ }
150
+ setMode(mode, startDay, daysCount) {
151
+ const oldMode = this._modeSource.getValue();
152
+ this._modeSource.next(mode);
153
+ if (mode === 'month') {
154
+ this.setMonth(this.selectedMonth, startDay);
155
+ return;
156
+ }
157
+ else if (mode === 'customMonth') {
158
+ this.setMonth(this.selectedMonth, startDay, this.days.length);
159
+ return;
160
+ }
161
+ const daysLoaded = this._weekModeDaysSource.getValue();
162
+ daysCount = daysCount ?? (mode === 'week' ? 7 : 1);
163
+ let startIndex = 0;
164
+ if (!startDay) {
165
+ if (mode === 'week' || mode === 'day') {
166
+ if (oldMode === 'month') {
167
+ startDay = this.selectedMonth.days.find((c) => c.isStartOfMonth);
168
+ }
169
+ else if (oldMode === 'customMonth') {
170
+ startDay = this.days[0];
171
+ }
172
+ else {
173
+ startDay = daysLoaded[0];
174
+ }
175
+ }
176
+ }
177
+ if (startDay) {
178
+ if (startDay.monthDateInfo.month !== this.selectedMonth.dateInfo.month ||
179
+ startDay.monthDateInfo.year !== this.selectedMonth.dateInfo.year) {
180
+ this.loadMonth(startDay.monthDateInfo);
181
+ }
182
+ startIndex = this.selectedMonth.days.findIndex((c) => c.month === startDay?.month && c.dayInMonth === startDay.dayInMonth);
183
+ }
184
+ this.prepareWeek(this._selectedSource.getValue(), startIndex, daysCount);
185
+ }
186
+ fillWeek(week, daysCount = 7) {
187
+ const arr = Object.values(week);
188
+ arr.forEach((element) => {
189
+ for (const el of element) {
190
+ const valueDate = el.end;
191
+ if (valueDate && this._dateService.getMoment(valueDate).isBefore(this.today, 'day')) {
192
+ el.opacity = 0.5;
193
+ }
194
+ }
195
+ for (let i = element.length; i < daysCount; i++) {
196
+ element.push({ colSpan: 1 });
197
+ }
198
+ });
199
+ }
200
+ sortTasks(calendarTasks, calendarFields) {
201
+ const startDateField = calendarFields.StartDate;
202
+ const endDateField = calendarFields.EndDate;
203
+ calendarTasks.sort((taskA, taskB) => (taskA[startDateField] < taskB[startDateField] ? -1 : 1));
204
+ calendarTasks.sort((taskA, taskB) => {
205
+ const taskAStartDate = taskA[startDateField];
206
+ const taskBStartDate = taskB[startDateField];
207
+ const momentTaskAStartDate = this._dateService.getMoment(taskAStartDate);
208
+ const momentTaskBStartDate = this._dateService.getMoment(taskBStartDate);
209
+ if (momentTaskAStartDate.isSame(momentTaskBStartDate, 'day')) {
210
+ const taskAEndDate = taskA[endDateField];
211
+ const taskBEndDate = taskB[endDateField];
212
+ const dayADiff = momentTaskAStartDate.diff(taskAEndDate, 'day');
213
+ const dayBDiff = momentTaskBStartDate.diff(taskBEndDate, 'day');
214
+ if (dayADiff > dayBDiff) {
215
+ return 1;
216
+ }
217
+ if (dayADiff < dayBDiff) {
218
+ return -1;
219
+ }
220
+ return 0;
221
+ }
222
+ {
223
+ return 0;
224
+ }
225
+ });
226
+ return calendarTasks;
227
+ }
228
+ createWeekTask(days, moDataList, calendarFields, taskHeight) {
229
+ const week = {};
230
+ days.forEach((day, dayIndex) => {
231
+ let counter = 0;
232
+ moDataList.forEach((event) => {
233
+ const counterIndex = counter.toString();
234
+ if (!week[counterIndex]) {
235
+ week[counterIndex] = [];
236
+ }
237
+ else if (week[counterIndex].length > dayIndex) {
238
+ counter++;
239
+ return;
240
+ }
241
+ for (let m = week[counterIndex].length; m < dayIndex; m++) {
242
+ week[counterIndex].push({ colSpan: 1 });
243
+ }
244
+ // agar week[counter] colspan ja dasht anjam gardad.
245
+ const newTask = { colSpan: 1 };
246
+ const momentDay = this._dateService.getMoment(day.date);
247
+ const momentOfStartEvent = this._dateService.getMoment(event[calendarFields.StartDate]);
248
+ const endDate = event[calendarFields.EndDate];
249
+ const momentOfEndEvent = this._dateService.getMoment(endDate);
250
+ const diff = Math.abs(momentOfStartEvent.diff(momentOfEndEvent, 'day'));
251
+ if (diff === 0 && momentDay.isSame(momentOfStartEvent, 'day')) {
252
+ newTask.colSpan = 1;
253
+ const startMinuteTop = (event.$StartDateInfo.minutes * taskHeight) / 60;
254
+ newTask.top = event.$StartDateInfo.hour * taskHeight + startMinuteTop;
255
+ const endMinuteTop = (event.$EndDateInfo.minutes * taskHeight) / 60;
256
+ newTask.height =
257
+ (event.$EndDateInfo.hour - event.$StartDateInfo.hour) * taskHeight +
258
+ endMinuteTop -
259
+ startMinuteTop;
260
+ newTask.event = event;
261
+ newTask.enddayIsInRow = true;
262
+ newTask.startdayIsInRow = true;
263
+ newTask.isStartDay = true;
264
+ newTask.isEndDay = true;
265
+ newTask.start = newTask.end = day.date;
266
+ newTask.inDay =
267
+ event.$StartDateInfo.hour > 0 ||
268
+ event.$StartDateInfo.minutes > 0 ||
269
+ event.$EndDateInfo.hour > 0 ||
270
+ event.$EndDateInfo.minutes > 0;
271
+ week[counterIndex].splice(dayIndex, 0, newTask);
272
+ day.tasks.push(newTask);
273
+ counter++;
274
+ }
275
+ else {
276
+ let diffFromEndOfEvent = 0;
277
+ let diffFromStartOfEvent = 0;
278
+ const isBetween = momentDay.isSameOrAfter(momentOfStartEvent, 'day') &&
279
+ momentDay.isSameOrBefore(momentOfEndEvent, 'day');
280
+ if (isBetween) {
281
+ diffFromEndOfEvent = 0;
282
+ if (diff === 0) {
283
+ newTask.colSpan = 1;
284
+ newTask.event = event;
285
+ }
286
+ else {
287
+ diffFromEndOfEvent = Math.abs(momentDay.diff(momentOfEndEvent, 'day'));
288
+ diffFromStartOfEvent = Math.abs(momentDay.diff(momentOfStartEvent, 'day'));
289
+ const isStartDay = momentDay.isSame(momentOfStartEvent, 'day');
290
+ const isEndDay = momentDay.isSame(momentOfEndEvent, 'day');
291
+ let colSpan = diff;
292
+ if (!isStartDay) {
293
+ colSpan = diffFromEndOfEvent;
294
+ }
295
+ else {
296
+ colSpan = diff + 1; // include the start
297
+ }
298
+ newTask.colSpan = this._calcColSpan(colSpan, dayIndex, days.length);
299
+ newTask.isStartDay = isStartDay;
300
+ newTask.isEndDay = isEndDay;
301
+ newTask.isMiddle = !isStartDay && !isEndDay;
302
+ newTask.event = event;
303
+ }
304
+ if (newTask.isStartDay || dayIndex === 0) {
305
+ for (let span = 0; span < newTask.colSpan; span++) {
306
+ const taskIndex = dayIndex + span;
307
+ if (taskIndex > days.length - 1) {
308
+ break;
309
+ }
310
+ const taskDayInfo = days[taskIndex];
311
+ const taskInfo = {
312
+ ...newTask,
313
+ start: taskDayInfo.date,
314
+ end: endDate,
315
+ isStartDay: span === 0 ? newTask.isStartDay : null,
316
+ startTask: event.$StartDayInfo,
317
+ endTask: event.$EndDayInfo,
318
+ startdayIsInRow: dayIndex - diffFromStartOfEvent > -1,
319
+ enddayIsInRow: !!days[diffFromEndOfEvent],
320
+ isMiddle: span === 0
321
+ ? newTask.isMiddle
322
+ : this._dateService
323
+ .getMoment(taskDayInfo.date)
324
+ .isBetween(momentOfStartEvent, momentOfEndEvent, 'day'),
325
+ isEndDay: span === 0
326
+ ? newTask.isEndDay
327
+ : Math.abs(this._dateService
328
+ .getMoment(taskDayInfo.date)
329
+ .diff(momentOfEndEvent, 'day')) <= 1,
330
+ colSpan: span === 0 ? newTask.colSpan : null
331
+ };
332
+ week[counter.toString()].splice(taskIndex, 0, taskInfo);
333
+ taskDayInfo.tasks.push(taskInfo);
334
+ }
335
+ counter++;
336
+ }
337
+ }
338
+ }
339
+ });
340
+ });
341
+ return week;
342
+ }
343
+ loadNext() {
344
+ const mode = this._modeSource.getValue();
345
+ const selectedMonth = this._selectedSource.getValue();
346
+ switch (mode) {
347
+ case 'customMonth':
348
+ case 'month':
349
+ {
350
+ const days = this.days;
351
+ const newDays = this._loadNextMonth(days, selectedMonth);
352
+ this.setDays(newDays);
353
+ }
354
+ break;
355
+ case 'week':
356
+ case 'day':
357
+ {
358
+ const days = this._weekModeDaysSource.getValue();
359
+ const newDays = this._loadNextWeek(days, selectedMonth);
360
+ this._weekModeDaysSource.next(newDays);
361
+ }
362
+ break;
363
+ break;
364
+ case 'list':
365
+ break;
366
+ }
367
+ }
368
+ gotoMonth(monthName, monthIndex) {
369
+ const selectedMonth = this.selectedMonth.dateInfo.month;
370
+ const val = monthIndex - selectedMonth;
371
+ this.loadMonth(this.selectedMonth.dateInfo, val);
372
+ }
373
+ gotoYear(year) {
374
+ const selectedYear = this.selectedMonth.dateInfo.year;
375
+ const val = year - selectedYear;
376
+ this.increaseYear(val);
377
+ }
378
+ loadNextYear() {
379
+ this.increaseYear(1);
380
+ }
381
+ loadPrevYear() {
382
+ this.increaseYear(-1);
383
+ }
384
+ increaseYear(value) {
385
+ const selectedYear = this.selectedMonth.dateInfo.moment.toDate();
386
+ selectedYear.setFullYear(selectedYear.getFullYear() + value); // next year
387
+ this.loadMonthByDate(selectedYear);
388
+ }
389
+ loadPrevious() {
390
+ const mode = this._modeSource.getValue();
391
+ const selectedMonth = this._selectedSource.getValue();
392
+ switch (mode) {
393
+ case 'customMonth':
394
+ case 'month':
395
+ {
396
+ const days = this.days;
397
+ const newDays = this._loadPrevMonth(days, selectedMonth);
398
+ this.setDays(newDays);
399
+ }
400
+ break;
401
+ case 'week':
402
+ case 'day':
403
+ {
404
+ const days = this._weekModeDaysSource.getValue();
405
+ const newDays = this._loadPrevWeek(days, selectedMonth);
406
+ this._weekModeDaysSource.next(newDays);
407
+ }
408
+ break;
409
+ break;
410
+ case 'list':
411
+ break;
412
+ }
413
+ }
414
+ loadMonth(dateInfo, addMonth = 0) {
415
+ let loadedMonthDate = this._dateService.getMoment(dateInfo.date);
416
+ if (addMonth > 0) {
417
+ loadedMonthDate = this._dateService.addMonth(loadedMonthDate, addMonth);
418
+ }
419
+ if (addMonth < 0) {
420
+ loadedMonthDate = this._dateService.subtractMonth(loadedMonthDate, Math.abs(addMonth));
421
+ }
422
+ let loadedCalendarMonthInfo = this.calendars.find((c) => c.dateInfo.moment.isSame(loadedMonthDate, 'day'));
423
+ if (!loadedCalendarMonthInfo) {
424
+ loadedCalendarMonthInfo = this.getMonthInfo(loadedMonthDate, this.today);
425
+ }
426
+ this.loadCalendarMonthInfo(loadedCalendarMonthInfo);
427
+ return loadedCalendarMonthInfo;
428
+ }
429
+ loadCalendarMonthInfo(loadedCalendarMonthInfo) {
430
+ const calendarsInfo = [...this.calendars];
431
+ const exists = calendarsInfo.find((c) => c.dateInfo.year === loadedCalendarMonthInfo.dateInfo.year &&
432
+ c.dateInfo.month === loadedCalendarMonthInfo.dateInfo.month);
433
+ if (!exists) {
434
+ calendarsInfo.push(loadedCalendarMonthInfo);
435
+ this._calendarsSource.next(calendarsInfo);
436
+ }
437
+ this.setSelected(loadedCalendarMonthInfo);
438
+ }
439
+ addCalendarMonthInfo(calendarMonthInfo) {
440
+ const newList = this.calendars;
441
+ newList.push(calendarMonthInfo);
442
+ this._calendarsSource.next(newList);
443
+ }
444
+ getNumber(value) {
445
+ const find = ['۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹'];
446
+ const replace = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'];
447
+ let replaceString = value;
448
+ let regex;
449
+ for (let i = 0; i < find.length; i++) {
450
+ regex = new RegExp(find[i], 'g');
451
+ replaceString = replaceString.replace(regex, replace[i]);
452
+ }
453
+ return Number(replaceString);
454
+ }
455
+ _initilize() {
456
+ this.today = this._dateService.getMoment(new Date());
457
+ const todayMonthInfo = this.getCalendarMonthInfo(new Date());
458
+ this.todayDay = todayMonthInfo.days.find((c) => c.isToday);
459
+ this._selectedSource = new BehaviorSubject(todayMonthInfo);
460
+ this.selected$ = this._selectedSource.asObservable();
461
+ this._calendarsSource.next([todayMonthInfo]);
462
+ this.setDays(todayMonthInfo.days);
463
+ this.setSelected(todayMonthInfo);
464
+ this._currentMonthIndexSource.next(todayMonthInfo.dateInfo.month);
465
+ this._todayMonthInfo = todayMonthInfo;
466
+ this.calendars$.pipe(takeUntil(this._onDestroy$)).subscribe();
467
+ }
468
+ _calcColSpan(diff, dayIndex, maxColSpan) {
469
+ if (diff === 0) {
470
+ return 2;
471
+ }
472
+ if (Math.floor(diff / maxColSpan) > 0) {
473
+ return maxColSpan;
474
+ }
475
+ if (dayIndex + diff > maxColSpan) {
476
+ return maxColSpan - dayIndex;
477
+ }
478
+ return diff;
479
+ }
480
+ _loadNextMonth(days, monthInfo) {
481
+ const daysCount = days.length;
482
+ let lastDay = days[daysCount - 1];
483
+ const lastDayIndex = monthInfo.days.findIndex((c) => c.dayInMonth === lastDay.dayInMonth && c.month === lastDay.month);
484
+ let newDays = lastDayIndex > -1 ? monthInfo.days.slice(lastDayIndex + 1, lastDayIndex + 1 + daysCount) : [];
485
+ if (newDays.length < daysCount) {
486
+ // we move to next month
487
+ if (newDays.length > 0) {
488
+ lastDay = newDays[newDays.length - 1];
489
+ }
490
+ const needCountDay = daysCount - newDays.length;
491
+ const nextMonth = this.loadMonth(monthInfo.dateInfo, 1);
492
+ let startPosition = 0;
493
+ if (needCountDay < 42) {
494
+ startPosition = nextMonth.days.findIndex((c) => c.dayInMonth === lastDay.dayInMonth && c.month === lastDay.month);
495
+ if (startPosition === -1) {
496
+ startPosition = 0;
497
+ }
498
+ else {
499
+ startPosition++;
500
+ }
501
+ }
502
+ const nextDays = nextMonth.days.slice(startPosition, startPosition + needCountDay);
503
+ newDays = [...newDays, ...nextDays];
504
+ }
505
+ return newDays;
506
+ }
507
+ _loadNextWeek(days, monthInfo) {
508
+ const daysCount = days.length;
509
+ const lastDay = days[daysCount - 1];
510
+ const lastDayIndex = monthInfo.days.findIndex((c) => c.dayInMonth === lastDay.dayInMonth && c.month === lastDay.month);
511
+ let newDays = monthInfo.days.slice(lastDayIndex + 1, lastDayIndex + 1 + daysCount);
512
+ if (newDays.length < daysCount) {
513
+ // we move to next month
514
+ let lastNewDay = newDays[newDays.length - 1];
515
+ if (!lastNewDay) {
516
+ lastNewDay = lastDay;
517
+ }
518
+ const nextMonth = this.loadMonth(monthInfo.dateInfo, 1);
519
+ const lastDayIndex2 = nextMonth.days.findIndex((c) => c.dayInMonth === lastNewDay.dayInMonth && c.month === lastNewDay.month);
520
+ newDays = newDays.concat(nextMonth.days.slice(lastDayIndex2 + 1, lastDayIndex2 + 1 + (daysCount - newDays.length)));
521
+ }
522
+ return newDays;
523
+ }
524
+ _loadPrevMonth(days, monthInfo) {
525
+ const daysCount = days.length;
526
+ let firstDay = days[0];
527
+ const firstDayIndex = monthInfo.days.findIndex((c) => c.dayInMonth === firstDay.dayInMonth && c.month === firstDay.month);
528
+ let newDays = monthInfo.days.slice(firstDayIndex - daysCount > 0 ? firstDayIndex - daysCount : 0, firstDayIndex);
529
+ if (newDays.length < daysCount) {
530
+ // we move to prev month
531
+ if (newDays.length > 0) {
532
+ firstDay = newDays[0];
533
+ }
534
+ const needCountDay = daysCount - newDays.length;
535
+ const prevMonth = this.loadMonth(monthInfo.dateInfo, -1);
536
+ let endPosition = prevMonth.days.length;
537
+ if (needCountDay < 42) {
538
+ endPosition = prevMonth.days.findIndex((c) => c.dayInMonth === firstDay.dayInMonth && c.month === firstDay.month);
539
+ if (endPosition === -1) {
540
+ endPosition = prevMonth.days.length;
541
+ }
542
+ }
543
+ const prevDays = prevMonth.days.slice(endPosition - needCountDay, endPosition);
544
+ newDays = [...prevDays, ...newDays];
545
+ }
546
+ return newDays;
547
+ }
548
+ _loadPrevWeek(days, monthInfo) {
549
+ const daysCount = days.length;
550
+ const firstDay = days[0];
551
+ const firstDayIndex = monthInfo.days.findIndex((c) => c.dayInMonth === firstDay.dayInMonth && c.month === firstDay.month);
552
+ const partIndexPrev = firstDayIndex - daysCount;
553
+ let newDays = [];
554
+ if (partIndexPrev < 0) {
555
+ newDays = firstDayIndex - 1 >= 0 ? monthInfo.days.slice(0, firstDayIndex - 1) : [];
556
+ }
557
+ else {
558
+ newDays = monthInfo.days.slice(firstDayIndex - daysCount, firstDayIndex);
559
+ }
560
+ if (newDays.length < daysCount) {
561
+ // we move to prev month
562
+ let firstNewDay = newDays[0];
563
+ if (!firstNewDay) {
564
+ firstNewDay = firstDay;
565
+ }
566
+ const prevMonth = this.loadMonth(monthInfo.dateInfo, -1);
567
+ const firstDayIndex2 = prevMonth.days.findIndex((c) => c.dayInMonth === firstNewDay.dayInMonth && c.month === firstNewDay.month);
568
+ newDays = newDays.concat(prevMonth.days.slice(firstDayIndex2 - (daysCount - newDays.length), firstDayIndex2));
569
+ }
570
+ return newDays;
571
+ }
572
+ getCalendarMonthInfo(date) {
573
+ const startOfMonth = this._dateService.startOfMonth(date);
574
+ const momentDate = this._dateService.getMoment(date);
575
+ return this.getMonthInfo(startOfMonth, momentDate);
576
+ }
577
+ getMonthInfo(date, today) {
578
+ const days = [];
579
+ const activeDate = this._dateService.getMoment(date);
580
+ const startOfMonth = this._dateService.startOfMonth(activeDate);
581
+ const endOfMonth = this._dateService.endOfMonth(activeDate);
582
+ const dateInfo = this._dateService.getDateInfo(activeDate);
583
+ const dayInWeek = this._dateService.day(startOfMonth) + 1; // we add 1 to the dayInWeek because it's starts with zero
584
+ let weekCounter = 0;
585
+ let dayCounter = 0;
586
+ for (let i = 0; i < 42; i++) {
587
+ const dateOfStartOfMonth = new Date(startOfMonth);
588
+ dateOfStartOfMonth.setDate(dateOfStartOfMonth.getDate() + i - dayInWeek);
589
+ const { day, isInMonth } = this._getDay(dateOfStartOfMonth, activeDate, today, endOfMonth, startOfMonth, dateInfo, i);
590
+ days.push(day);
591
+ dayCounter++;
592
+ if (isInMonth && dayCounter > weekCounter * 7) {
593
+ weekCounter++;
594
+ }
595
+ }
596
+ // const endOfMonthIndex = days.findIndex((c) => c.isEndOfMonth);
597
+ // if (endOfMonthIndex > -1 && days.length - endOfMonthIndex > 7) {
598
+ // // days.splice(days.length - 7, 7);
599
+ // }
600
+ const calendarInfo = new CalendarMonthInfo();
601
+ calendarInfo.id = getUniqueId(3);
602
+ calendarInfo.dateInfo = dateInfo;
603
+ calendarInfo.days = days;
604
+ calendarInfo.weeksCount = weekCounter;
605
+ // this.cdr.detectChanges();
606
+ return calendarInfo;
607
+ }
608
+ _getDay(date, activeDate, today, endOfMonth, startOfMonth, dateInfo, i) {
609
+ const isInMonth = this._dateService.isSame(date, activeDate, 'month');
610
+ const momentOfDate = this._dateService.getMoment(date);
611
+ const isToday = momentOfDate.isSame(today, 'day');
612
+ const dayInMonth = this._dateService.strDate(date);
613
+ const dayInWeek = this._dateService.day(date);
614
+ const isEndOfMonth = momentOfDate.isSame(endOfMonth, 'day');
615
+ const isStartOfMonth = momentOfDate.isSame(startOfMonth, 'day');
616
+ const monthDateInfo = isInMonth ? dateInfo : this._dateService.getDateInfo(date);
617
+ const day = {
618
+ index: i,
619
+ date,
620
+ dayInWeek,
621
+ status: DayStatus.Open,
622
+ dayInMonth,
623
+ dayInMonthN: this.getNumber(dayInMonth),
624
+ isToday,
625
+ isInMonth,
626
+ isEndOfMonth,
627
+ isStartOfMonth,
628
+ momentOfDate,
629
+ month: monthDateInfo.month,
630
+ year: monthDateInfo.year,
631
+ monthName: monthDateInfo.monthName,
632
+ dayName: momentOfDate.format('dddd'),
633
+ tasks: [],
634
+ monthDateInfo,
635
+ row: Math.floor(i / 7 + 1),
636
+ col: 6 - (i % 7)
637
+ };
638
+ return { day, isInMonth };
639
+ }
640
+ }
641
+ CalendarService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarService, deps: [{ token: i2.LogService }, { token: 'Date_Culture', optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
642
+ CalendarService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarService });
643
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarService, decorators: [{
644
+ type: Injectable
645
+ }], ctorParameters: function () { return [{ type: i2.LogService }, { type: undefined, decorators: [{
646
+ type: Optional
647
+ }, {
648
+ type: Inject,
649
+ args: ['Date_Culture']
650
+ }] }]; } });
651
+
652
+ class DaysInWeekPipe {
653
+ constructor() { }
654
+ transform(days, weekNumber) {
655
+ return days.slice(7 * weekNumber, 7 * weekNumber + 7);
656
+ }
657
+ }
658
+ DaysInWeekPipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DaysInWeekPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
659
+ DaysInWeekPipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: DaysInWeekPipe, name: "daysInWeek" });
660
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DaysInWeekPipe, decorators: [{
661
+ type: Pipe,
662
+ args: [{
663
+ name: 'daysInWeek'
664
+ }]
665
+ }], ctorParameters: function () { return []; } });
666
+
667
+ class DayNumberBoxComponent extends BaseComponent {
668
+ constructor() {
669
+ super(...arguments);
670
+ this.dayClick = new EventEmitter();
671
+ this.dayMouseDown = new EventEmitter();
672
+ this.dayMouseUp = new EventEmitter();
673
+ this.dayMouseMove = new EventEmitter();
674
+ this._cursor = 'default';
675
+ this._hover = '';
676
+ this._itemInRange = false;
677
+ this._isActive = false;
678
+ }
679
+ mouseup() {
680
+ this.dayMouseUp.emit(this.day);
681
+ }
682
+ mousedown() {
683
+ this.dayMouseDown.emit(this.day);
684
+ }
685
+ mousemove() {
686
+ this.dayMouseMove.emit(this.day);
687
+ }
688
+ onClick() {
689
+ this.dayClick.emit(this.day);
690
+ }
691
+ ngOnInit() {
692
+ super.ngOnInit();
693
+ this._cursor = this.isPickerMode ? 'pointer' : 'default';
694
+ this.display = this.isSingleDay ? 'inline-block' : 'flex';
695
+ this._hover = this.isPickerMode ? 'hover' : '';
696
+ }
697
+ ngOnChanges(changes) {
698
+ super.ngOnChanges(changes);
699
+ const { itemInRange, isActive } = changes;
700
+ if (itemInRange) {
701
+ this._itemInRange = itemInRange.currentValue;
702
+ }
703
+ if (isActive) {
704
+ this._isActive = isActive.currentValue;
705
+ }
706
+ }
707
+ onDayBoxNumberClick(e, day) {
708
+ // change calendar mode to Day
709
+ PreventDefaulEvent(e);
710
+ this.dayClick.emit(day);
711
+ }
712
+ }
713
+ DayNumberBoxComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DayNumberBoxComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
714
+ DayNumberBoxComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: DayNumberBoxComponent, selector: "bc-day-number-box", inputs: { isWeekMode: "isWeekMode", isSingleDay: "isSingleDay", day: "day", isPickerMode: "isPickerMode", itemInRange: "itemInRange", isActive: "isActive" }, outputs: { dayClick: "dayClick", dayMouseDown: "dayMouseDown", dayMouseUp: "dayMouseUp", dayMouseMove: "dayMouseMove" }, host: { listeners: { "mouseup": "mouseup()", "mousedown": "mousedown()", "mousemove": "mousemove()", "click": "onClick()" }, properties: { "style.display": "this.display", "style.cursor": "this._cursor", "class": "this._hover", "class.fd-calendar__item--range": "this._itemInRange", "class.is-active": "this._isActive" } }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<button\r\n fd-button\r\n (click)=\"onDayBoxNumberClick($event, day)\"\r\n [style.width]=\"isSingleDay ? 'auto' : '100%'\"\r\n [style.maxWidth]=\"isSingleDay ? 'auto' : '100%'\"\r\n>\r\n <div\r\n [ngClass]=\"{\r\n 'fd-avatar--s': isWeekMode,\r\n 'fd-avatar--xs': !isWeekMode || (day.isToday && isPickerMode),\r\n 'fd-avatar': !isPickerMode || day.isToday,\r\n 'fd-avatar--circle': !isPickerMode || day.isToday\r\n }\"\r\n [class.not-today]=\"!day.isToday\"\r\n [style.fontSize]=\"isWeekMode ? '1.7rem' : null\"\r\n >\r\n <span>{{ day.dayInMonth }}</span>\r\n </div>\r\n</button>\r\n", styles: [":host{position:relative;height:100%;justify-content:center}button{justify-content:center;flex-direction:column;align-items:center;background-color:transparent;border:none;height:100%;max-height:100%}button.hover:hover .not-today{color:var(--sapButton_Hover_TextColor, #0854a0);background-color:var(--sapButton_Hover_Background, #ebf5fe);cursor:pointer}button div{cursor:pointer}button .not-today{background-color:transparent;color:var(--sapList_HeaderTextColor, #32363a)}button .not-today:hover{color:var(--sapButton_Hover_TextColor, #0854a0);background-color:var(--sapButton_Hover_Background, #ebf5fe);cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
715
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DayNumberBoxComponent, decorators: [{
716
+ type: Component,
717
+ args: [{ selector: 'bc-day-number-box', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\r\n fd-button\r\n (click)=\"onDayBoxNumberClick($event, day)\"\r\n [style.width]=\"isSingleDay ? 'auto' : '100%'\"\r\n [style.maxWidth]=\"isSingleDay ? 'auto' : '100%'\"\r\n>\r\n <div\r\n [ngClass]=\"{\r\n 'fd-avatar--s': isWeekMode,\r\n 'fd-avatar--xs': !isWeekMode || (day.isToday && isPickerMode),\r\n 'fd-avatar': !isPickerMode || day.isToday,\r\n 'fd-avatar--circle': !isPickerMode || day.isToday\r\n }\"\r\n [class.not-today]=\"!day.isToday\"\r\n [style.fontSize]=\"isWeekMode ? '1.7rem' : null\"\r\n >\r\n <span>{{ day.dayInMonth }}</span>\r\n </div>\r\n</button>\r\n", styles: [":host{position:relative;height:100%;justify-content:center}button{justify-content:center;flex-direction:column;align-items:center;background-color:transparent;border:none;height:100%;max-height:100%}button.hover:hover .not-today{color:var(--sapButton_Hover_TextColor, #0854a0);background-color:var(--sapButton_Hover_Background, #ebf5fe);cursor:pointer}button div{cursor:pointer}button .not-today{background-color:transparent;color:var(--sapList_HeaderTextColor, #32363a)}button .not-today:hover{color:var(--sapButton_Hover_TextColor, #0854a0);background-color:var(--sapButton_Hover_Background, #ebf5fe);cursor:pointer}\n"] }]
718
+ }], propDecorators: { display: [{
719
+ type: HostBinding,
720
+ args: ['style.display']
721
+ }], isWeekMode: [{
722
+ type: Input
723
+ }], isSingleDay: [{
724
+ type: Input
725
+ }], day: [{
726
+ type: Input
727
+ }], isPickerMode: [{
728
+ type: Input
729
+ }], itemInRange: [{
730
+ type: Input
731
+ }], isActive: [{
732
+ type: Input
733
+ }], dayClick: [{
734
+ type: Output
735
+ }], dayMouseDown: [{
736
+ type: Output
737
+ }], dayMouseUp: [{
738
+ type: Output
739
+ }], dayMouseMove: [{
740
+ type: Output
741
+ }], _cursor: [{
742
+ type: HostBinding,
743
+ args: ['style.cursor']
744
+ }], _hover: [{
745
+ type: HostBinding,
746
+ args: ['class']
747
+ }], _itemInRange: [{
748
+ type: HostBinding,
749
+ args: ['class.fd-calendar__item--range']
750
+ }], _isActive: [{
751
+ type: HostBinding,
752
+ args: ['class.is-active']
753
+ }], mouseup: [{
754
+ type: HostListener,
755
+ args: ['mouseup']
756
+ }], mousedown: [{
757
+ type: HostListener,
758
+ args: ['mousedown']
759
+ }], mousemove: [{
760
+ type: HostListener,
761
+ args: ['mousemove']
762
+ }], onClick: [{
763
+ type: HostListener,
764
+ args: ['click']
765
+ }] } });
766
+
767
+ function getPadedTime(value) {
768
+ return String(value.toString().padStart(2, '0'));
769
+ }
770
+
771
+ class EventDatePipe {
772
+ constructor() { }
773
+ transform(from, to, onlyTime = false) {
774
+ const showTime = from.hour || from.minutes || to.hour || to.minutes > 0;
775
+ const fromTime = `${getPadedTime(from.hour)}:${getPadedTime(from.minutes)}`;
776
+ const toTime = `${getPadedTime(to.hour)}:${getPadedTime(to.hour)}`;
777
+ if (onlyTime) {
778
+ return `${fromTime}`;
779
+ }
780
+ return `${from.strDay} ${from.monthName} ${from.strYear}${showTime ? `, ${fromTime}` : ''} – ${to.strDay} ${to.monthName} ${to.strYear}${showTime ? `, ${toTime}` : ''}`;
781
+ }
782
+ }
783
+ EventDatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EventDatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
784
+ EventDatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: EventDatePipe, name: "eventDate" });
785
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EventDatePipe, decorators: [{
786
+ type: Pipe,
787
+ args: [{
788
+ name: 'eventDate'
789
+ }]
790
+ }], ctorParameters: function () { return []; } });
791
+
792
+ class EventPreviewComponent extends BaseComponent {
793
+ constructor() {
794
+ super(...arguments);
795
+ this.deleteEvent = new EventEmitter();
796
+ this.editEvent = new EventEmitter();
797
+ }
798
+ onDelete(event, popover, popover2) {
799
+ this.deleteEvent.emit(event);
800
+ this._closePopover(popover);
801
+ this._closePopover(popover2);
802
+ }
803
+ onEdit(event, popover, popover2) {
804
+ this.editEvent.emit(event);
805
+ this._closePopover(popover);
806
+ this._closePopover(popover2);
807
+ }
808
+ onClosePopover(popover) {
809
+ this._closePopover(popover);
810
+ }
811
+ _closePopover(popover) {
812
+ if (popover) {
813
+ popover.close();
814
+ }
815
+ }
816
+ }
817
+ EventPreviewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EventPreviewComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
818
+ EventPreviewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: EventPreviewComponent, selector: "bc-event-preview", inputs: { event: "event", calendarFields: "calendarFields", popover: "popover", popover2: "popover2", canEdit: "canEdit", canDelete: "canDelete" }, outputs: { deleteEvent: "deleteEvent", editEvent: "editEvent" }, usesInheritance: true, ngImport: i0, template: "<fd-layout-panel style=\"min-width: 400px\">\n <fd-layout-panel-header>\n <fd-layout-panel-actions>\n <fd-toolbar [clearBorder]=\"true\" [fdType]=\"'transparent'\">\n <fdp-button\n *ngIf=\"canEdit\"\n fd-toolbar-item\n glyph=\"edit\"\n buttonType=\"transparent\"\n (click)=\"onEdit(event, popover, popover2)\"\n ></fdp-button>\n <fdp-button\n *ngIf=\"canDelete\"\n fd-toolbar-item\n glyph=\"delete\"\n buttonType=\"transparent\"\n (click)=\"onDelete(event, popover, popover2)\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n glyph=\"decline\"\n buttonType=\"transparent\"\n (click)=\"onClosePopover(popover)\"\n ></fdp-button>\n </fd-toolbar>\n </fd-layout-panel-actions>\n </fd-layout-panel-header>\n <fd-layout-panel-body>\n <fd-quick-view>\n <fd-quick-view-subheader>\n <fd-avatar\n size=\"xs\"\n glyph=\"color-fill\"\n [transparent]=\"true\"\n [style.color]=\"event[calendarFields.Color] ? event[calendarFields.Color] : ''\"\n ></fd-avatar>\n <fd-quick-view-subheader-title>\n {{ event[calendarFields.Title] }}\n </fd-quick-view-subheader-title>\n <fd-quick-view-subheader-subtitle>\n <span>{{ event.$StartDateInfo | eventDate: event.$EndDateInfo }} </span>\n </fd-quick-view-subheader-subtitle>\n </fd-quick-view-subheader>\n\n <fd-quick-view-group>\n <fd-quick-view-group-item *ngIf=\"event | barsaVisibleValue: calendarFields.Notes as notes\">\n <fd-quick-view-group-item-label>\n <fd-icon glyph=\"text-align-justified\"></fd-icon>\n </fd-quick-view-group-item-label>\n <fd-quick-view-group-item-content>\n <div fd-quick-view-group-item-content-element style=\"white-space: normal\">\n {{ notes }}\n </div>\n </fd-quick-view-group-item-content>\n </fd-quick-view-group-item>\n <fd-quick-view-group-item>\n <fd-quick-view-group-item-label>\n <fd-icon glyph=\"appointment\"></fd-icon>\n </fd-quick-view-group-item-label>\n <fd-quick-view-group-item-content>\n <span>\u06A9\u0627\u0631\u0628\u0631</span>\n </fd-quick-view-group-item-content>\n </fd-quick-view-group-item>\n </fd-quick-view-group>\n </fd-quick-view>\n </fd-layout-panel-body>\n</fd-layout-panel>\n", styles: [":host{display:block;width:460px}:host ::ng-deep .fd-form-item{flex-direction:row}:host fd-avatar{min-width:1rem;width:1rem}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$1.AvatarComponent, selector: "fd-avatar", inputs: ["class", "id", "ariaLabel", "ariaLabelledby", "label", "size", "glyph", "zoomGlyph", "circle", "transparent", "contain", "placeholder", "tile", "border", "colorAccent", "random", "clickable", "backgroundImage", "image", "alterIcon", "backupImage"], outputs: ["avatarClicked", "zoomGlyphClicked"] }, { kind: "component", type: i3$1.IconComponent, selector: "fd-icon", inputs: ["glyph", "font", "class", "ariaLabel"] }, { kind: "component", type: i4$1.LayoutPanelComponent, selector: "fd-layout-panel", inputs: ["backgroundImage"] }, { kind: "component", type: i4$1.LayoutPanelHeaderComponent, selector: "fd-layout-panel-header" }, { kind: "component", type: i4$1.LayoutPanelActionsComponent, selector: "fd-layout-panel-actions" }, { kind: "component", type: i4$1.LayoutPanelBodyComponent, selector: "fd-layout-panel-body", inputs: ["bleed"] }, { kind: "component", type: i5.QuickViewComponent, selector: "fd-quick-view", inputs: ["id"] }, { kind: "component", type: i5.QuickViewSubheaderComponent, selector: "fd-quick-view-subheader" }, { kind: "component", type: i5.QuickViewSubheaderTitleComponent, selector: "fd-quick-view-subheader-title" }, { kind: "component", type: i5.QuickViewSubheaderSubtitleComponent, selector: "fd-quick-view-subheader-subtitle" }, { kind: "component", type: i5.QuickViewGroupComponent, selector: "fd-quick-view-group" }, { kind: "component", type: i5.QuickViewGroupItemComponent, selector: "fd-quick-view-group-item", inputs: ["id"] }, { kind: "component", type: i5.QuickViewGroupItemLabelComponent, selector: "fd-quick-view-group-item-label" }, { kind: "component", type: i5.QuickViewGroupItemContentComponent, selector: "fd-quick-view-group-item-content" }, { kind: "directive", type: i5.QuickViewGroupItemContentElementDirective, selector: "[fd-quick-view-group-item-content-element]" }, { kind: "component", type: i6.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i6.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i7.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "pipe", type: i2.VisibleValuePipe, name: "barsaVisibleValue" }, { kind: "pipe", type: EventDatePipe, name: "eventDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
819
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EventPreviewComponent, decorators: [{
820
+ type: Component,
821
+ args: [{ selector: 'bc-event-preview', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-layout-panel style=\"min-width: 400px\">\n <fd-layout-panel-header>\n <fd-layout-panel-actions>\n <fd-toolbar [clearBorder]=\"true\" [fdType]=\"'transparent'\">\n <fdp-button\n *ngIf=\"canEdit\"\n fd-toolbar-item\n glyph=\"edit\"\n buttonType=\"transparent\"\n (click)=\"onEdit(event, popover, popover2)\"\n ></fdp-button>\n <fdp-button\n *ngIf=\"canDelete\"\n fd-toolbar-item\n glyph=\"delete\"\n buttonType=\"transparent\"\n (click)=\"onDelete(event, popover, popover2)\"\n ></fdp-button>\n <fdp-button\n fd-toolbar-item\n glyph=\"decline\"\n buttonType=\"transparent\"\n (click)=\"onClosePopover(popover)\"\n ></fdp-button>\n </fd-toolbar>\n </fd-layout-panel-actions>\n </fd-layout-panel-header>\n <fd-layout-panel-body>\n <fd-quick-view>\n <fd-quick-view-subheader>\n <fd-avatar\n size=\"xs\"\n glyph=\"color-fill\"\n [transparent]=\"true\"\n [style.color]=\"event[calendarFields.Color] ? event[calendarFields.Color] : ''\"\n ></fd-avatar>\n <fd-quick-view-subheader-title>\n {{ event[calendarFields.Title] }}\n </fd-quick-view-subheader-title>\n <fd-quick-view-subheader-subtitle>\n <span>{{ event.$StartDateInfo | eventDate: event.$EndDateInfo }} </span>\n </fd-quick-view-subheader-subtitle>\n </fd-quick-view-subheader>\n\n <fd-quick-view-group>\n <fd-quick-view-group-item *ngIf=\"event | barsaVisibleValue: calendarFields.Notes as notes\">\n <fd-quick-view-group-item-label>\n <fd-icon glyph=\"text-align-justified\"></fd-icon>\n </fd-quick-view-group-item-label>\n <fd-quick-view-group-item-content>\n <div fd-quick-view-group-item-content-element style=\"white-space: normal\">\n {{ notes }}\n </div>\n </fd-quick-view-group-item-content>\n </fd-quick-view-group-item>\n <fd-quick-view-group-item>\n <fd-quick-view-group-item-label>\n <fd-icon glyph=\"appointment\"></fd-icon>\n </fd-quick-view-group-item-label>\n <fd-quick-view-group-item-content>\n <span>\u06A9\u0627\u0631\u0628\u0631</span>\n </fd-quick-view-group-item-content>\n </fd-quick-view-group-item>\n </fd-quick-view-group>\n </fd-quick-view>\n </fd-layout-panel-body>\n</fd-layout-panel>\n", styles: [":host{display:block;width:460px}:host ::ng-deep .fd-form-item{flex-direction:row}:host fd-avatar{min-width:1rem;width:1rem}\n"] }]
822
+ }], propDecorators: { event: [{
823
+ type: Input
824
+ }], calendarFields: [{
825
+ type: Input
826
+ }], popover: [{
827
+ type: Input
828
+ }], popover2: [{
829
+ type: Input
830
+ }], canEdit: [{
831
+ type: Input
832
+ }], canDelete: [{
833
+ type: Input
834
+ }], deleteEvent: [{
835
+ type: Output
836
+ }], editEvent: [{
837
+ type: Output
838
+ }] } });
839
+
840
+ class EventTimePipe {
841
+ constructor() { }
842
+ transform(task, calendarFields) {
843
+ const event = task.event;
844
+ const dateInfo = event.$StartDateInfo;
845
+ const showTime = dateInfo.hour || dateInfo.minutes > 0;
846
+ const fromTime = `${getPadedTime(dateInfo.hour)}:${getPadedTime(dateInfo.minutes)}`;
847
+ return `${showTime ? fromTime : ''} ${event[calendarFields.Title]}`;
848
+ }
849
+ }
850
+ EventTimePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EventTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
851
+ EventTimePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: EventTimePipe, name: "eventTime" });
852
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EventTimePipe, decorators: [{
853
+ type: Pipe,
854
+ args: [{
855
+ name: 'eventTime'
856
+ }]
857
+ }], ctorParameters: function () { return []; } });
858
+
859
+ class EventButtonComponent extends BaseComponent {
860
+ constructor(_el) {
861
+ super();
862
+ this._el = _el;
863
+ this.deleteEvent = new EventEmitter();
864
+ this.editEvent = new EventEmitter();
865
+ this.openPopoverChange = new EventEmitter();
866
+ this.opacity = 1;
867
+ this._rtl = true;
868
+ }
869
+ ngOnInit() {
870
+ super.ngOnInit();
871
+ this._rtl = this.rtl;
872
+ this.opacity = this.task.opacity ?? 1;
873
+ if (!this.buttonTemplate) {
874
+ this.buttonTemplate = this.defaultButtonTemplate;
875
+ }
876
+ }
877
+ onPopOverOpenChange(isOpen) {
878
+ this.openPopoverChange.emit(isOpen);
879
+ }
880
+ }
881
+ EventButtonComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EventButtonComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
882
+ EventButtonComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: EventButtonComponent, selector: "bc-event-button", inputs: { buttonTemplate: "buttonTemplate", calendarFields: "calendarFields", task: "task", rtl: "rtl", canDelete: "canDelete", canEdit: "canEdit", deviceSize: "deviceSize" }, outputs: { deleteEvent: "deleteEvent", editEvent: "editEvent", openPopoverChange: "openPopoverChange" }, host: { properties: { "style.opacity": "this.opacity", "attr.rtl": "this._rtl" } }, viewQueries: [{ propertyName: "defaultButtonTemplate", first: true, predicate: ["defaultButton"], descendants: true, static: true }, { propertyName: "popoverComponent", first: true, predicate: PopoverComponent, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: "<span [ngClass]=\"{ 'end-day': rtl, 'start-day': !rtl }\" *ngIf=\"!task.startdayIsInRow\"></span>\n<ng-container\n *ngTemplateOutlet=\"\n buttonTemplate;\n context: {\n $implicit: task,\n calendarFields: calendarFields,\n popover: popover\n }\n \"\n></ng-container>\n<span [ngClass]=\"{ 'start-day': rtl, 'end-day': !rtl }\" *ngIf=\"!task.enddayIsInRow\"></span>\n\n<fd-popover\n #popover\n placement=\"bottom\"\n [mobile]=\"deviceSize === 's'\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [title]=\"task.event[calendarFields.Title]\"\n (isOpenChange)=\"onPopOverOpenChange($event)\"\n>\n <bc-event-preview\n [event]=\"task.event\"\n [calendarFields]=\"calendarFields\"\n [popover]=\"popover\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-preview>\n</fd-popover>\n\n<ng-template #defaultButton let-task let-popover=\"popover\" let-calendarFields=\"calendarFields\">\n <button\n fd-button\n [compact]=\"true\"\n [fdPopoverTrigger]=\"popover\"\n [fdType]=\"task.inDay ? 'standard' : 'emphasized'\"\n [label]=\"task | eventTime: calendarFields\"\n [style.background-color]=\"task.event[calendarFields.Color]\"\n class=\"task-title\"\n ></button>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:row;align-items:stretch;justify-content:stretch;width:100%;height:100%;padding-top:1px}:host[rtl=true]{padding-right:3px}:host[rtl=false]{padding-left:3px}.task-title{justify-content:start!important;font-weight:400}button{flex-grow:1;border-radius:0!important;height:100%;max-height:100%;min-height:100%;border:none}.start-day{width:0;height:0;border-top:10px solid transparent;border-right:10px solid var(--sapButton_Emphasized_Background, #0a6ed1);border-bottom:10px solid transparent;height:100%}.end-day{width:0;height:0;border-top:10px solid transparent;border-left:10px solid var(--sapButton_Emphasized_Background, #0a6ed1);border-bottom:10px solid transparent;height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i4.DeprecatedButtonContentDensityDirective, selector: "[fd-button][compact]" }, { kind: "component", type: i5$1.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "directive", type: i5$1.PopoverTriggerDirective, selector: "[fdPopoverTrigger], [fd-popover-trigger]", inputs: ["fdPopoverTrigger"] }, { kind: "component", type: EventPreviewComponent, selector: "bc-event-preview", inputs: ["event", "calendarFields", "popover", "popover2", "canEdit", "canDelete"], outputs: ["deleteEvent", "editEvent"] }, { kind: "pipe", type: EventTimePipe, name: "eventTime" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
883
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EventButtonComponent, decorators: [{
884
+ type: Component,
885
+ args: [{ selector: 'bc-event-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<span [ngClass]=\"{ 'end-day': rtl, 'start-day': !rtl }\" *ngIf=\"!task.startdayIsInRow\"></span>\n<ng-container\n *ngTemplateOutlet=\"\n buttonTemplate;\n context: {\n $implicit: task,\n calendarFields: calendarFields,\n popover: popover\n }\n \"\n></ng-container>\n<span [ngClass]=\"{ 'start-day': rtl, 'end-day': !rtl }\" *ngIf=\"!task.enddayIsInRow\"></span>\n\n<fd-popover\n #popover\n placement=\"bottom\"\n [mobile]=\"deviceSize === 's'\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [title]=\"task.event[calendarFields.Title]\"\n (isOpenChange)=\"onPopOverOpenChange($event)\"\n>\n <bc-event-preview\n [event]=\"task.event\"\n [calendarFields]=\"calendarFields\"\n [popover]=\"popover\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-preview>\n</fd-popover>\n\n<ng-template #defaultButton let-task let-popover=\"popover\" let-calendarFields=\"calendarFields\">\n <button\n fd-button\n [compact]=\"true\"\n [fdPopoverTrigger]=\"popover\"\n [fdType]=\"task.inDay ? 'standard' : 'emphasized'\"\n [label]=\"task | eventTime: calendarFields\"\n [style.background-color]=\"task.event[calendarFields.Color]\"\n class=\"task-title\"\n ></button>\n</ng-template>\n", styles: [":host{display:flex;flex-direction:row;align-items:stretch;justify-content:stretch;width:100%;height:100%;padding-top:1px}:host[rtl=true]{padding-right:3px}:host[rtl=false]{padding-left:3px}.task-title{justify-content:start!important;font-weight:400}button{flex-grow:1;border-radius:0!important;height:100%;max-height:100%;min-height:100%;border:none}.start-day{width:0;height:0;border-top:10px solid transparent;border-right:10px solid var(--sapButton_Emphasized_Background, #0a6ed1);border-bottom:10px solid transparent;height:100%}.end-day{width:0;height:0;border-top:10px solid transparent;border-left:10px solid var(--sapButton_Emphasized_Background, #0a6ed1);border-bottom:10px solid transparent;height:100%}\n"] }]
886
+ }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { defaultButtonTemplate: [{
887
+ type: ViewChild,
888
+ args: ['defaultButton', { static: true }]
889
+ }], popoverComponent: [{
890
+ type: ViewChild,
891
+ args: [PopoverComponent, { static: true }]
892
+ }], buttonTemplate: [{
893
+ type: Input
894
+ }], calendarFields: [{
895
+ type: Input
896
+ }], task: [{
897
+ type: Input
898
+ }], rtl: [{
899
+ type: Input
900
+ }], canDelete: [{
901
+ type: Input
902
+ }], canEdit: [{
903
+ type: Input
904
+ }], deviceSize: [{
905
+ type: Input
906
+ }], deleteEvent: [{
907
+ type: Output
908
+ }], editEvent: [{
909
+ type: Output
910
+ }], openPopoverChange: [{
911
+ type: Output
912
+ }], opacity: [{
913
+ type: HostBinding,
914
+ args: ['style.opacity']
915
+ }], _rtl: [{
916
+ type: HostBinding,
917
+ args: ['attr.rtl']
918
+ }] } });
919
+
920
+ class DayEventListComponent extends BaseComponent {
921
+ constructor() {
922
+ super(...arguments);
923
+ this.deleteEvent = new EventEmitter();
924
+ this.editEvent = new EventEmitter();
925
+ this.openPopOver = new EventEmitter();
926
+ }
927
+ onClosePopover(popover, popover2) {
928
+ popover.close();
929
+ if (popover2) {
930
+ popover2.close();
931
+ }
932
+ }
933
+ }
934
+ DayEventListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DayEventListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
935
+ DayEventListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: DayEventListComponent, selector: "bc-day-event-list", inputs: { day: "day", deviceSize: "deviceSize", weekDays: "weekDays", calendarFields: "calendarFields", rtl: "rtl", canDelete: "canDelete", canEdit: "canEdit", popover: "popover" }, outputs: { deleteEvent: "deleteEvent", editEvent: "editEvent", openPopOver: "openPopOver" }, usesInheritance: true, ngImport: i0, template: "<div fd-bar [barDesign]=\"'header-with-subheader'\">\n <div fd-bar-left>\n <fd-bar-element>\n <fdp-button glyph=\"decline\" [buttonType]=\"'transparent'\" (click)=\"onClosePopover(popover)\"></fdp-button>\n </fd-bar-element>\n </div>\n <div fd-bar-middle>\n <fd-bar-element>\n {{ weekDays[day.dayInWeek] }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element> </fd-bar-element>\n </div>\n</div>\n<div fd-bar [barDesign]=\"'subheader'\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <bc-day-number-box [day]=\"day\" [isWeekMode]=\"true\"></bc-day-number-box>\n </fd-bar-element>\n </div>\n</div>\n<ul fd-list>\n <li fd-list-item *ngFor=\"let task of day.tasks\" class=\"task-start-end\" (click)=\"popoverPreview.open()\">\n <span [ngClass]=\"{ 'end-day': rtl, 'start-day': !rtl }\" *ngIf=\"task.isMiddle && !task.isStartDay\"></span>\n <span class=\"middle-day\">{{ task.event[calendarFields.Title] }}</span>\n <span\n [ngClass]=\"{ 'start-day': rtl, 'end-day': !rtl }\"\n *ngIf=\"(task.isMiddle || task.isStartDay) && !task.isEndDay\"\n ></span>\n <fd-popover\n #popoverPreview\n placement=\"bottom\"\n [mobile]=\"deviceSize === 's'\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [title]=\"task.event[calendarFields.Title]\"\n >\n <bc-event-preview\n [event]=\"task.event\"\n [calendarFields]=\"calendarFields\"\n [popover]=\"popoverPreview\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [popover2]=\"popover\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-preview>\n </fd-popover>\n </li>\n</ul>\n", styles: [".task-start-end{cursor:pointer}.start-day{width:0;height:0;border-top:10px solid transparent;border-right:10px solid var(--sapButton_Emphasized_BorderColor, #0a6ed1);border-bottom:10px solid transparent}.middle-day{width:100%;min-width:200px;height:20px;background-color:var(--sapButton_Emphasized_Background, #0a6ed1);color:var(--sapButton_Emphasized_TextColor, #fff);text-align:center}.end-day{width:0;height:0;border-top:10px solid transparent;border-left:10px solid var(--sapButton_Emphasized_BorderColor, #0a6ed1);border-bottom:10px solid transparent}.event-list-number-day{width:40px;height:40px;flex-grow:0;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-grow:0!important}.event-list-number-day:hover{color:var(--sapButton_Hover_TextColor, #0854a0);background-color:var(--sapButton_Hover_Background, #ebf5fe);cursor:pointer}::ng-deep .fd-form-item{flex-direction:row!important}\n"], dependencies: [{ kind: "directive", type: i3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$2.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i2$2.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i2$2.BarMiddleDirective, selector: "[fd-bar-middle]" }, { kind: "directive", type: i2$2.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "directive", type: i2$2.BarElementDirective, selector: "fd-bar-element", inputs: ["fullWidth", "isTitle"] }, { kind: "component", type: i3$2.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline"], outputs: ["focusEscapeList"] }, { kind: "component", type: i3$2.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "ariaDescribedBy", "noData", "action", "interactive", "growing", "counter", "unread", "selectedListItemScreenReaderText", "navigatedListItemScreenReaderText", "navigatableListItemScreenReaderText"], outputs: ["keyDown"] }, { kind: "component", type: i5$1.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i7.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: EventPreviewComponent, selector: "bc-event-preview", inputs: ["event", "calendarFields", "popover", "popover2", "canEdit", "canDelete"], outputs: ["deleteEvent", "editEvent"] }, { kind: "component", type: DayNumberBoxComponent, selector: "bc-day-number-box", inputs: ["isWeekMode", "isSingleDay", "day", "isPickerMode", "itemInRange", "isActive"], outputs: ["dayClick", "dayMouseDown", "dayMouseUp", "dayMouseMove"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
936
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DayEventListComponent, decorators: [{
937
+ type: Component,
938
+ args: [{ selector: 'bc-day-event-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div fd-bar [barDesign]=\"'header-with-subheader'\">\n <div fd-bar-left>\n <fd-bar-element>\n <fdp-button glyph=\"decline\" [buttonType]=\"'transparent'\" (click)=\"onClosePopover(popover)\"></fdp-button>\n </fd-bar-element>\n </div>\n <div fd-bar-middle>\n <fd-bar-element>\n {{ weekDays[day.dayInWeek] }}\n </fd-bar-element>\n </div>\n <div fd-bar-right>\n <fd-bar-element> </fd-bar-element>\n </div>\n</div>\n<div fd-bar [barDesign]=\"'subheader'\">\n <div fd-bar-middle>\n <fd-bar-element [fullWidth]=\"true\">\n <bc-day-number-box [day]=\"day\" [isWeekMode]=\"true\"></bc-day-number-box>\n </fd-bar-element>\n </div>\n</div>\n<ul fd-list>\n <li fd-list-item *ngFor=\"let task of day.tasks\" class=\"task-start-end\" (click)=\"popoverPreview.open()\">\n <span [ngClass]=\"{ 'end-day': rtl, 'start-day': !rtl }\" *ngIf=\"task.isMiddle && !task.isStartDay\"></span>\n <span class=\"middle-day\">{{ task.event[calendarFields.Title] }}</span>\n <span\n [ngClass]=\"{ 'start-day': rtl, 'end-day': !rtl }\"\n *ngIf=\"(task.isMiddle || task.isStartDay) && !task.isEndDay\"\n ></span>\n <fd-popover\n #popoverPreview\n placement=\"bottom\"\n [mobile]=\"deviceSize === 's'\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [title]=\"task.event[calendarFields.Title]\"\n >\n <bc-event-preview\n [event]=\"task.event\"\n [calendarFields]=\"calendarFields\"\n [popover]=\"popoverPreview\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [popover2]=\"popover\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-preview>\n </fd-popover>\n </li>\n</ul>\n", styles: [".task-start-end{cursor:pointer}.start-day{width:0;height:0;border-top:10px solid transparent;border-right:10px solid var(--sapButton_Emphasized_BorderColor, #0a6ed1);border-bottom:10px solid transparent}.middle-day{width:100%;min-width:200px;height:20px;background-color:var(--sapButton_Emphasized_Background, #0a6ed1);color:var(--sapButton_Emphasized_TextColor, #fff);text-align:center}.end-day{width:0;height:0;border-top:10px solid transparent;border-left:10px solid var(--sapButton_Emphasized_BorderColor, #0a6ed1);border-bottom:10px solid transparent}.event-list-number-day{width:40px;height:40px;flex-grow:0;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-grow:0!important}.event-list-number-day:hover{color:var(--sapButton_Hover_TextColor, #0854a0);background-color:var(--sapButton_Hover_Background, #ebf5fe);cursor:pointer}::ng-deep .fd-form-item{flex-direction:row!important}\n"] }]
939
+ }], propDecorators: { day: [{
940
+ type: Input
941
+ }], deviceSize: [{
942
+ type: Input
943
+ }], weekDays: [{
944
+ type: Input
945
+ }], calendarFields: [{
946
+ type: Input
947
+ }], rtl: [{
948
+ type: Input
949
+ }], canDelete: [{
950
+ type: Input
951
+ }], canEdit: [{
952
+ type: Input
953
+ }], popover: [{
954
+ type: Input
955
+ }], deleteEvent: [{
956
+ type: Output
957
+ }], editEvent: [{
958
+ type: Output
959
+ }], openPopOver: [{
960
+ type: Output
961
+ }] } });
962
+
963
+ class EqualDatePipe {
964
+ constructor() { }
965
+ transform(value, secondValue) {
966
+ if ((value && !secondValue) || (!value && secondValue)) {
967
+ return false;
968
+ }
969
+ const yearEqual = value.getFullYear() === secondValue?.getFullYear();
970
+ const monthEqual = value.getMonth() === secondValue?.getMonth();
971
+ const dayEqual = value.getDate() === secondValue?.getDate();
972
+ return yearEqual && monthEqual && dayEqual;
973
+ }
974
+ }
975
+ EqualDatePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EqualDatePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
976
+ EqualDatePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: EqualDatePipe, name: "equalDate" });
977
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: EqualDatePipe, decorators: [{
978
+ type: Pipe,
979
+ args: [{
980
+ name: 'equalDate'
981
+ }]
982
+ }], ctorParameters: function () { return []; } });
983
+
984
+ class CalendarMonthComponent extends BaseComponent {
985
+ constructor(daysInWeek, _cdr, _calendarService) {
986
+ super();
987
+ this.daysInWeek = daysInWeek;
988
+ this._cdr = _cdr;
989
+ this._calendarService = _calendarService;
990
+ this.datePicker = false;
991
+ this.rangePicker = false;
992
+ this.canDelete = false;
993
+ this.canAdd = false;
994
+ this.canEdit = false;
995
+ this.editEvent = new EventEmitter();
996
+ this.deleteEvent = new EventEmitter();
997
+ this.daySelect = new EventEmitter();
998
+ this.dayClick = new EventEmitter();
999
+ this.dayMouseMove = new EventEmitter();
1000
+ this.dayMouseUp = new EventEmitter();
1001
+ this.dayMouseDown = new EventEmitter();
1002
+ this.showEvent = new EventEmitter();
1003
+ this.taskHeight = 30;
1004
+ this._hasPopoverOpened = [];
1005
+ }
1006
+ ngOnChanges(changes) {
1007
+ super.ngOnChanges(changes);
1008
+ let needToDetectChange = false;
1009
+ const { containerHeight, deviceSize, moDataList, days, monthWeeksCount, startSelectedDayIndex, endSelectedDayIndex } = changes;
1010
+ if (containerHeight && !containerHeight.firstChange) {
1011
+ this.fitToContainer(changes.containerHeight.currentValue);
1012
+ }
1013
+ if (deviceSize && !deviceSize.firstChange) {
1014
+ this.prepareWeekDays(changes.deviceSize.currentValue);
1015
+ }
1016
+ if (moDataList && !moDataList.firstChange) {
1017
+ this._prepareDaysTasks(changes.moDataList.currentValue);
1018
+ needToDetectChange = true;
1019
+ }
1020
+ if (days && !days.firstChange) {
1021
+ this.fitToContainer(this.containerHeight);
1022
+ this._prepareDaysTasks(this.moDataList);
1023
+ needToDetectChange = true;
1024
+ }
1025
+ if (monthWeeksCount && !monthWeeksCount.firstChange) {
1026
+ this.fitToContainer(this.containerHeight);
1027
+ this._prepareDaysTasks(this.moDataList);
1028
+ needToDetectChange = true;
1029
+ }
1030
+ if ((startSelectedDayIndex && !startSelectedDayIndex.firstChange) ||
1031
+ (endSelectedDayIndex && !endSelectedDayIndex.firstChange)) {
1032
+ needToDetectChange = true;
1033
+ }
1034
+ if (needToDetectChange) {
1035
+ this._cdr.detectChanges();
1036
+ }
1037
+ }
1038
+ ngOnInit() {
1039
+ super.ngOnInit();
1040
+ this.isPickerMode = this.datePicker || this.rangePicker;
1041
+ this.prepareWeekDays(this.deviceSize);
1042
+ this._prepareDaysTasks(this.moDataList);
1043
+ this.fitToContainer(this.containerHeight);
1044
+ }
1045
+ onDayBoxSelect(day) {
1046
+ this._fireDaySelect(day);
1047
+ }
1048
+ onDaySelect(weekIndex, dayIndex) {
1049
+ if (!this.canAdd) {
1050
+ return;
1051
+ }
1052
+ const day = this.days[weekIndex * 7 + dayIndex];
1053
+ this._fireDaySelect(day);
1054
+ }
1055
+ onOpenPopoverChange(isOpen) {
1056
+ this._openPopover(isOpen);
1057
+ }
1058
+ onMoreButton(e, popover) {
1059
+ this._preventEvent(e);
1060
+ popover.open();
1061
+ }
1062
+ onTask(e, task) {
1063
+ this.showEvent.emit(task);
1064
+ }
1065
+ onDayClick(day) {
1066
+ this.selected = day;
1067
+ this.dayClick.emit(day);
1068
+ }
1069
+ onDayMouseMove(day) {
1070
+ this.dayMouseMove.emit(day);
1071
+ }
1072
+ onDayMouseDown(day) {
1073
+ this.dayMouseDown.emit(day);
1074
+ }
1075
+ onDayMouseUp(day) {
1076
+ this.dayMouseUp.emit(day);
1077
+ }
1078
+ _preventEvent(e) {
1079
+ e.stopPropagation();
1080
+ e.preventDefault();
1081
+ }
1082
+ _fireDaySelect(day) {
1083
+ if (this._hasPopoverOpened.length === 0) {
1084
+ this.daySelect.emit(moment(day.date));
1085
+ }
1086
+ }
1087
+ _openPopover(isOpen) {
1088
+ if (isOpen) {
1089
+ this._hasPopoverOpened.push(true);
1090
+ }
1091
+ else {
1092
+ setTimeout(() => {
1093
+ this._hasPopoverOpened = [];
1094
+ }, 0);
1095
+ }
1096
+ }
1097
+ prepareWeekDays(deviceSize) {
1098
+ if (deviceSize !== 's' && deviceSize !== 'm') {
1099
+ this.selectedWeekDays = this.weekDays;
1100
+ }
1101
+ else {
1102
+ this.selectedWeekDays = this.weekDaysMin;
1103
+ }
1104
+ }
1105
+ fitToContainer(containerHeight) {
1106
+ let _weeksCount;
1107
+ if (this.monthWeeksCount > 0) {
1108
+ const weeksCount = this.monthWeeksCount;
1109
+ _weeksCount = weeksCount;
1110
+ }
1111
+ else {
1112
+ _weeksCount = this.days.length / 7;
1113
+ }
1114
+ this.numberOfWeek = Array.from(Array(_weeksCount).keys());
1115
+ this.numberOfWeek = this.numberOfWeek.map((value) => value);
1116
+ if (this.isPickerMode) {
1117
+ this.dayHeight = 40;
1118
+ return;
1119
+ }
1120
+ this.dayHeight = Math.floor(containerHeight / (_weeksCount + 1));
1121
+ this.maxTaskCount = Math.floor((this.dayHeight - this.taskHeight) / this.taskHeight);
1122
+ if (this.maxTaskCount > 0) {
1123
+ this.maxRowTasks = new Array(this.maxTaskCount).fill(0).map((x, i) => i);
1124
+ }
1125
+ }
1126
+ _prepareDaysTasks(calendarTasks) {
1127
+ if (this.isPickerMode) {
1128
+ this.weekTasksArray = {};
1129
+ return;
1130
+ }
1131
+ const calendarFields = this.calendarFields;
1132
+ // Sort all Tasks
1133
+ const moDataList = this._calendarService.sortTasks(calendarTasks, calendarFields);
1134
+ this.days.forEach((day) => (day.tasks = []));
1135
+ const weekTasksArray = [];
1136
+ for (let j = 0; j < this.days.length / 7; j++) {
1137
+ const days = this.daysInWeek.transform(this.days, j);
1138
+ const week = this._calendarService.createWeekTask(days, moDataList, calendarFields, 0);
1139
+ weekTasksArray.push(week);
1140
+ }
1141
+ weekTasksArray.forEach((week) => {
1142
+ const arr = Object.values(week);
1143
+ for (let i = arr.length; i < this.maxTaskCount; i++) {
1144
+ week[i.toString()] = [];
1145
+ }
1146
+ });
1147
+ // به ازای هر ردیف تسک باید تعداد 7 ستون اضافه گردد و برای ستونی که تسکی ندارد یک جای خالی colspan 1 میگذاریم
1148
+ weekTasksArray.forEach((week) => {
1149
+ this._calendarService.fillWeek(week);
1150
+ });
1151
+ this.weekTasksArray = weekTasksArray;
1152
+ }
1153
+ }
1154
+ CalendarMonthComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarMonthComponent, deps: [{ token: DaysInWeekPipe }, { token: i0.ChangeDetectorRef }, { token: CalendarService }], target: i0.ɵɵFactoryTarget.Component });
1155
+ CalendarMonthComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarMonthComponent, selector: "bc-calendar-month", inputs: { monthWeeksCount: "monthWeeksCount", weekDays: "weekDays", weekDaysMin: "weekDaysMin", today: "today", containerHeight: "containerHeight", days: "days", calendarFields: "calendarFields", rtl: "rtl", deviceSize: "deviceSize", moDataList: "moDataList", datePicker: "datePicker", rangePicker: "rangePicker", canDelete: "canDelete", canAdd: "canAdd", canEdit: "canEdit", selectedDate: "selectedDate", startSelectedDayIndex: "startSelectedDayIndex", endSelectedDayIndex: "endSelectedDayIndex" }, outputs: { editEvent: "editEvent", deleteEvent: "deleteEvent", daySelect: "daySelect", dayClick: "dayClick", dayMouseMove: "dayMouseMove", dayMouseUp: "dayMouseUp", dayMouseDown: "dayMouseDown", showEvent: "showEvent" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<table fd-table class=\"table-header\" [compact]=\"true\" [attr.picker]=\"datePicker\">\n <thead fd-table-header>\n <tr fd-table-row>\n <th\n class=\"weekday-header\"\n *ngFor=\"let weekDay of selectedWeekDays\"\n fd-table-cell\n [class.noborder]=\"isPickerMode\"\n >\n {{ weekDay }}\n </th>\n </tr>\n </thead>\n <tbody fd-table-body>\n <ng-container *ngFor=\"let weekDay of numberOfWeek\">\n <tr fd-table-row>\n <td\n [style.height.px]=\"dayHeight\"\n fd-table-cell\n colspan=\"7\"\n [style.border]=\"isPickerMode ? 'none' : null\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n renderTasks;\n context: {\n $implicit: isPickerMode ? null : moDataList[weekDay],\n weekIndex: weekDay,\n days: days | daysInWeek: weekDay,\n maxRowTasks: maxRowTasks,\n weekDays: weekDays,\n calendarFields: calendarFields,\n rtl: rtl,\n isPickerMode: isPickerMode\n }\n \"\n ></ng-container>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>\n<ng-template\n #renderTasks\n let-task\n let-weekIndex=\"weekIndex\"\n let-weekDays=\"weekDays\"\n let-days=\"days\"\n let-maxRowTasks=\"maxRowTasks\"\n let-calendarFields=\"calendarFields\"\n let-deviceSize=\"deviceSize\"\n let-rtl=\"rtl\"\n let-isPickerMode=\"isPickerMode\"\n>\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\n <tbody>\n <tr fd-table-row class=\"row-day-number\" [attr.rtl]=\"rtl\">\n <td fd-table-cell *ngFor=\"let day of days\" [class.noborder]=\"isPickerMode\">\n <bc-day-number-box\n [class.fd-calendar__item]=\"isPickerMode\"\n [class.fd-calendar__item--other-month]=\"isPickerMode && !day.isInMonth\"\n [class.fd-calendar__item--weekend]=\"isPickerMode && day.isWeekend\"\n [isPickerMode]=\"isPickerMode\"\n [day]=\"day\"\n [isActive]=\"\n day.index === startSelectedDayIndex || day.index === endSelectedDayIndex || day.date\n | equalDate: selectedDate\n \"\n [itemInRange]=\"\n startSelectedDayIndex !== undefined &&\n endSelectedDayIndex !== undefined &&\n day.index >= startSelectedDayIndex &&\n day.index <= endSelectedDayIndex\n \"\n (dayClick)=\"onDayClick(day)\"\n (dayMouseMove)=\"onDayMouseMove(day)\"\n (dayMouseDown)=\"onDayMouseDown(day)\"\n (dayMouseUp)=\"onDayMouseUp(day)\"\n ></bc-day-number-box>\n </td>\n </tr>\n <ng-container *ngIf=\"!isPickerMode\">\n <ng-container\n *ngTemplateOutlet=\"\n renderDayTasks;\n context: {\n $implicit: weekTasksArray[weekIndex],\n maxRowTasks: maxRowTasks,\n weekIndex: weekIndex,\n deviceSize: deviceSize,\n calendarFields: calendarFields,\n weekDays: weekDays\n }\n \"\n ></ng-container>\n <tr fd-table-row>\n <td fd-table-cell *ngFor=\"let day of days\" class=\"more-fd\" (click)=\"onDayBoxSelect(day)\">\n <ng-container *ngIf=\"maxRowTasks?.length < day.tasks.length\">\n <button\n fd-button\n (click)=\"onMoreButton($event, popover)\"\n [fdType]=\"'transparent'\"\n [compact]=\"true\"\n >\n {{ day.tasks?.length - maxRowTasks?.length }}\n {{ 'More' | bbbTranslate }}\n </button>\n <fd-popover\n #popover\n [mobile]=\"deviceSize === 's'\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n (isOpenChange)=\"onOpenPopoverChange($event)\"\n >\n <bc-day-event-list\n [day]=\"day\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n [weekDays]=\"weekDays\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [popover]=\"popover\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-day-event-list>\n </fd-popover>\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n</ng-template>\n\n<ng-template\n #renderDayTasks\n let-weekTasks\n let-maxRowTasks=\"maxRowTasks\"\n let-weekIndex=\"weekIndex\"\n let-deviceSize=\"deviceSize\"\n let-calendarFields=\"calendarFields\"\n let-weekDays=\"weekDays\"\n>\n <tr fd-table-row *ngFor=\"let rowTask of maxRowTasks; let i = index\">\n <ng-container *ngIf=\"!weekTasks[i] || weekTasks[i].length === 0\">\n <td fd-table-cell *ngFor=\"let day of weekDays\"></td>\n </ng-container>\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\n <td fd-table-cell [attr.colspan]=\"task.colSpan\" *ngIf=\"task.colSpan\">\n <ng-container *ngIf=\"task.event; else newDaySelect\">\n <bc-event-button\n [task]=\"task\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\n ></bc-event-button>\n </ng-container>\n <ng-template #newDaySelect>\n <div style=\"width: 100%; height: 100%\" (click)=\"onDaySelect(weekIndex, dayIndex)\"></div>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n</ng-template>\n", styles: [":host{display:block}table{table-layout:fixed}.table-header td{padding:0!important}.table-content{width:100%;height:100%;border:none;border-spacing:0}.table-content td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:1.425rem}.table-content .row-day-number[rtl=true] td:first-child{border-right:none}.table-content .row-day-number[rtl=\"fa;se\"] td:first-child{border-left:none}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}.weekday-header,.row-day-number td{width:100%}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.more-fd{text-align:center!important}.more-fd button{font-size:12px}.fd-calendar__item{font-size:.875rem;font-size:var(--sapFontSize, .875rem);line-height:1.4;line-height:var(--sapContent_LineHeight, 1.4);color:#32363a;color:var(--sapTextColor, #32363a);font-family:\"72\",\"72full\",Arial,Helvetica,sans-serif;font-family:var(--sapFontFamily, \"72\", \"72full\", Arial, Helvetica, sans-serif);font-weight:400;box-sizing:border-box;padding:0;border:0;overflow:hidden;position:relative;height:2.75rem;margin:.0625rem;min-width:2.125rem;border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background-color:#fafafa;background-color:var(--sapLegend_WorkingBackground, #fafafa);flex:1 1 .375rem;border:none!important;padding:1px!important}.fd-calendar__item.fd-calendar__item--other-month{background-color:var(--sapList_Background, #fff)}.fd-calendar__item.fd-calendar__item--weekend{background-color:var(--sapLegend_NotWorkingBackground, #dedede)}.fd-calendar__item.is-active{background-color:var(--sapContent_Selected_Background, #0854a0);border:var(--fdCalendar_Active_Item_Border, none)}.fd-calendar__item.is-active ::ng-deep span{color:var(--sapContent_Selected_TextColor, #fff)}.fd-calendar__item.fd-calendar__item--range{border:.0625rem solid var(--sapList_SelectionBorderColor, #0854a0);background-color:var(--sapList_SelectionBackgroundColor, #e5f0fa)}.noborder{border:none!important}table[picker=true] thead,table[picker=true] tbody{border:none}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i4.DeprecatedButtonContentDensityDirective, selector: "[fd-button][compact]" }, { kind: "component", type: i5$1.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i6$1.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i6$1.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i6$1.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i6$1.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i6$1.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "tabindex", "hoverable", "fitContent", "noPadding", "noData", "key", "cellFocusedEventAnnouncer"] }, { kind: "directive", type: i6$1.DeprecatedTableCompactDirective, selector: "table[fd-table][compact]" }, { kind: "component", type: DayNumberBoxComponent, selector: "bc-day-number-box", inputs: ["isWeekMode", "isSingleDay", "day", "isPickerMode", "itemInRange", "isActive"], outputs: ["dayClick", "dayMouseDown", "dayMouseUp", "dayMouseMove"] }, { kind: "component", type: EventButtonComponent, selector: "bc-event-button", inputs: ["buttonTemplate", "calendarFields", "task", "rtl", "canDelete", "canEdit", "deviceSize"], outputs: ["deleteEvent", "editEvent", "openPopoverChange"] }, { kind: "component", type: DayEventListComponent, selector: "bc-day-event-list", inputs: ["day", "deviceSize", "weekDays", "calendarFields", "rtl", "canDelete", "canEdit", "popover"], outputs: ["deleteEvent", "editEvent", "openPopOver"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: DaysInWeekPipe, name: "daysInWeek" }, { kind: "pipe", type: EqualDatePipe, name: "equalDate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1156
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarMonthComponent, decorators: [{
1157
+ type: Component,
1158
+ args: [{ selector: 'bc-calendar-month', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table fd-table class=\"table-header\" [compact]=\"true\" [attr.picker]=\"datePicker\">\n <thead fd-table-header>\n <tr fd-table-row>\n <th\n class=\"weekday-header\"\n *ngFor=\"let weekDay of selectedWeekDays\"\n fd-table-cell\n [class.noborder]=\"isPickerMode\"\n >\n {{ weekDay }}\n </th>\n </tr>\n </thead>\n <tbody fd-table-body>\n <ng-container *ngFor=\"let weekDay of numberOfWeek\">\n <tr fd-table-row>\n <td\n [style.height.px]=\"dayHeight\"\n fd-table-cell\n colspan=\"7\"\n [style.border]=\"isPickerMode ? 'none' : null\"\n >\n <ng-container\n *ngTemplateOutlet=\"\n renderTasks;\n context: {\n $implicit: isPickerMode ? null : moDataList[weekDay],\n weekIndex: weekDay,\n days: days | daysInWeek: weekDay,\n maxRowTasks: maxRowTasks,\n weekDays: weekDays,\n calendarFields: calendarFields,\n rtl: rtl,\n isPickerMode: isPickerMode\n }\n \"\n ></ng-container>\n </td>\n </tr>\n </ng-container>\n </tbody>\n</table>\n<ng-template\n #renderTasks\n let-task\n let-weekIndex=\"weekIndex\"\n let-weekDays=\"weekDays\"\n let-days=\"days\"\n let-maxRowTasks=\"maxRowTasks\"\n let-calendarFields=\"calendarFields\"\n let-deviceSize=\"deviceSize\"\n let-rtl=\"rtl\"\n let-isPickerMode=\"isPickerMode\"\n>\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\n <tbody>\n <tr fd-table-row class=\"row-day-number\" [attr.rtl]=\"rtl\">\n <td fd-table-cell *ngFor=\"let day of days\" [class.noborder]=\"isPickerMode\">\n <bc-day-number-box\n [class.fd-calendar__item]=\"isPickerMode\"\n [class.fd-calendar__item--other-month]=\"isPickerMode && !day.isInMonth\"\n [class.fd-calendar__item--weekend]=\"isPickerMode && day.isWeekend\"\n [isPickerMode]=\"isPickerMode\"\n [day]=\"day\"\n [isActive]=\"\n day.index === startSelectedDayIndex || day.index === endSelectedDayIndex || day.date\n | equalDate: selectedDate\n \"\n [itemInRange]=\"\n startSelectedDayIndex !== undefined &&\n endSelectedDayIndex !== undefined &&\n day.index >= startSelectedDayIndex &&\n day.index <= endSelectedDayIndex\n \"\n (dayClick)=\"onDayClick(day)\"\n (dayMouseMove)=\"onDayMouseMove(day)\"\n (dayMouseDown)=\"onDayMouseDown(day)\"\n (dayMouseUp)=\"onDayMouseUp(day)\"\n ></bc-day-number-box>\n </td>\n </tr>\n <ng-container *ngIf=\"!isPickerMode\">\n <ng-container\n *ngTemplateOutlet=\"\n renderDayTasks;\n context: {\n $implicit: weekTasksArray[weekIndex],\n maxRowTasks: maxRowTasks,\n weekIndex: weekIndex,\n deviceSize: deviceSize,\n calendarFields: calendarFields,\n weekDays: weekDays\n }\n \"\n ></ng-container>\n <tr fd-table-row>\n <td fd-table-cell *ngFor=\"let day of days\" class=\"more-fd\" (click)=\"onDayBoxSelect(day)\">\n <ng-container *ngIf=\"maxRowTasks?.length < day.tasks.length\">\n <button\n fd-button\n (click)=\"onMoreButton($event, popover)\"\n [fdType]=\"'transparent'\"\n [compact]=\"true\"\n >\n {{ day.tasks?.length - maxRowTasks?.length }}\n {{ 'More' | bbbTranslate }}\n </button>\n <fd-popover\n #popover\n [mobile]=\"deviceSize === 's'\"\n placement=\"bottom\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n (isOpenChange)=\"onOpenPopoverChange($event)\"\n >\n <bc-day-event-list\n [day]=\"day\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n [weekDays]=\"weekDays\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [popover]=\"popover\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-day-event-list>\n </fd-popover>\n </ng-container>\n </td>\n </tr>\n </ng-container>\n </tbody>\n </table>\n</ng-template>\n\n<ng-template\n #renderDayTasks\n let-weekTasks\n let-maxRowTasks=\"maxRowTasks\"\n let-weekIndex=\"weekIndex\"\n let-deviceSize=\"deviceSize\"\n let-calendarFields=\"calendarFields\"\n let-weekDays=\"weekDays\"\n>\n <tr fd-table-row *ngFor=\"let rowTask of maxRowTasks; let i = index\">\n <ng-container *ngIf=\"!weekTasks[i] || weekTasks[i].length === 0\">\n <td fd-table-cell *ngFor=\"let day of weekDays\"></td>\n </ng-container>\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\n <td fd-table-cell [attr.colspan]=\"task.colSpan\" *ngIf=\"task.colSpan\">\n <ng-container *ngIf=\"task.event; else newDaySelect\">\n <bc-event-button\n [task]=\"task\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\n ></bc-event-button>\n </ng-container>\n <ng-template #newDaySelect>\n <div style=\"width: 100%; height: 100%\" (click)=\"onDaySelect(weekIndex, dayIndex)\"></div>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n</ng-template>\n", styles: [":host{display:block}table{table-layout:fixed}.table-header td{padding:0!important}.table-content{width:100%;height:100%;border:none;border-spacing:0}.table-content td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:1.425rem}.table-content .row-day-number[rtl=true] td:first-child{border-right:none}.table-content .row-day-number[rtl=\"fa;se\"] td:first-child{border-left:none}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}.weekday-header,.row-day-number td{width:100%}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.more-fd{text-align:center!important}.more-fd button{font-size:12px}.fd-calendar__item{font-size:.875rem;font-size:var(--sapFontSize, .875rem);line-height:1.4;line-height:var(--sapContent_LineHeight, 1.4);color:#32363a;color:var(--sapTextColor, #32363a);font-family:\"72\",\"72full\",Arial,Helvetica,sans-serif;font-family:var(--sapFontFamily, \"72\", \"72full\", Arial, Helvetica, sans-serif);font-weight:400;box-sizing:border-box;padding:0;border:0;overflow:hidden;position:relative;height:2.75rem;margin:.0625rem;min-width:2.125rem;border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background-color:#fafafa;background-color:var(--sapLegend_WorkingBackground, #fafafa);flex:1 1 .375rem;border:none!important;padding:1px!important}.fd-calendar__item.fd-calendar__item--other-month{background-color:var(--sapList_Background, #fff)}.fd-calendar__item.fd-calendar__item--weekend{background-color:var(--sapLegend_NotWorkingBackground, #dedede)}.fd-calendar__item.is-active{background-color:var(--sapContent_Selected_Background, #0854a0);border:var(--fdCalendar_Active_Item_Border, none)}.fd-calendar__item.is-active ::ng-deep span{color:var(--sapContent_Selected_TextColor, #fff)}.fd-calendar__item.fd-calendar__item--range{border:.0625rem solid var(--sapList_SelectionBorderColor, #0854a0);background-color:var(--sapList_SelectionBackgroundColor, #e5f0fa)}.noborder{border:none!important}table[picker=true] thead,table[picker=true] tbody{border:none}\n"] }]
1159
+ }], ctorParameters: function () { return [{ type: DaysInWeekPipe }, { type: i0.ChangeDetectorRef }, { type: CalendarService }]; }, propDecorators: { monthWeeksCount: [{
1160
+ type: Input
1161
+ }], weekDays: [{
1162
+ type: Input
1163
+ }], weekDaysMin: [{
1164
+ type: Input
1165
+ }], today: [{
1166
+ type: Input
1167
+ }], containerHeight: [{
1168
+ type: Input
1169
+ }], days: [{
1170
+ type: Input
1171
+ }], calendarFields: [{
1172
+ type: Input
1173
+ }], rtl: [{
1174
+ type: Input
1175
+ }], deviceSize: [{
1176
+ type: Input
1177
+ }], moDataList: [{
1178
+ type: Input
1179
+ }], datePicker: [{
1180
+ type: Input
1181
+ }], rangePicker: [{
1182
+ type: Input
1183
+ }], canDelete: [{
1184
+ type: Input
1185
+ }], canAdd: [{
1186
+ type: Input
1187
+ }], canEdit: [{
1188
+ type: Input
1189
+ }], selectedDate: [{
1190
+ type: Input
1191
+ }], startSelectedDayIndex: [{
1192
+ type: Input
1193
+ }], endSelectedDayIndex: [{
1194
+ type: Input
1195
+ }], editEvent: [{
1196
+ type: Output
1197
+ }], deleteEvent: [{
1198
+ type: Output
1199
+ }], daySelect: [{
1200
+ type: Output
1201
+ }], dayClick: [{
1202
+ type: Output
1203
+ }], dayMouseMove: [{
1204
+ type: Output
1205
+ }], dayMouseUp: [{
1206
+ type: Output
1207
+ }], dayMouseDown: [{
1208
+ type: Output
1209
+ }], showEvent: [{
1210
+ type: Output
1211
+ }] } });
1212
+
1213
+ class CalendarSelectionDaysComponent extends BaseComponent {
1214
+ constructor(_calendarService, _portalService) {
1215
+ super();
1216
+ this._calendarService = _calendarService;
1217
+ this.rangeChange = new EventEmitter();
1218
+ this.selectionMode = 'day';
1219
+ this.months = [];
1220
+ this._isMouseDown = false;
1221
+ this.rtl$ = _portalService.rtl$;
1222
+ this.width$ = _portalService.deviceSize$.pipe(distinctUntilChanged(), map((deviceSize) => {
1223
+ switch (deviceSize) {
1224
+ case 'l':
1225
+ case 'xl':
1226
+ return 480;
1227
+ case 's':
1228
+ return 320;
1229
+ default:
1230
+ return 480;
1231
+ }
1232
+ }));
1233
+ this.weekDaysMin = this._calendarService.weekDaysMin();
1234
+ this.weekDays = this._calendarService.weekDays();
1235
+ this.selectedMonth$ = this._calendarService.selected$;
1236
+ this.today = this._calendarService.today;
1237
+ this.months = this._calendarService.Months;
1238
+ this._prepareYear(this._calendarService.selectedMonth.dateInfo.year);
1239
+ }
1240
+ ngOnChanges(changes) {
1241
+ super.ngOnChanges(changes);
1242
+ const { monthInfo } = changes;
1243
+ if (monthInfo) {
1244
+ this._calendarService.loadCalendarMonthInfo(monthInfo.currentValue);
1245
+ }
1246
+ }
1247
+ onMonthSelected(monthName, index) {
1248
+ this._calendarService.gotoMonth(monthName, index);
1249
+ }
1250
+ onYearSelected(year) {
1251
+ this._calendarService.gotoYear(+year);
1252
+ }
1253
+ onPrevTap() {
1254
+ if (this.selectionMode === 'day') {
1255
+ this._calendarService.loadPrevious();
1256
+ }
1257
+ else if (this.selectionMode === 'month') {
1258
+ this._calendarService.loadPrevYear();
1259
+ }
1260
+ else if (this.selectionMode === 'year') {
1261
+ this._prepareYear(Number(this.years[0]) - 20);
1262
+ }
1263
+ }
1264
+ onNextTap() {
1265
+ if (this.selectionMode === 'day') {
1266
+ this._calendarService.loadNext();
1267
+ }
1268
+ else if (this.selectionMode === 'month') {
1269
+ this._calendarService.loadNextYear();
1270
+ }
1271
+ else if (this.selectionMode === 'year') {
1272
+ this._prepareYear(Number(this.years[this.years.length - 1]) + 1);
1273
+ }
1274
+ }
1275
+ onToday() {
1276
+ this._calendarService.gotoToday();
1277
+ }
1278
+ onDayMouseMove(day, monthInfo) {
1279
+ if (this._isMouseDown) {
1280
+ const { endDay, startDay } = this.getStartAndEndDay(monthInfo, day);
1281
+ this.startSelectedDayIndex = startDay?.index;
1282
+ this.endSelectedDayIndex = endDay?.index;
1283
+ console.log('-move-', this.startSelectedDay?.index, this.endSelectedDay?.index);
1284
+ }
1285
+ }
1286
+ onDayMouseDown(day) {
1287
+ this._isMouseDown = true;
1288
+ this.startSelectedDay = null;
1289
+ this.endSelectedDay = null;
1290
+ this.startSelectedDay = day;
1291
+ this.startSelectedDayIndex = day.index;
1292
+ }
1293
+ onDayMouseUp(day, monthInfo, popover) {
1294
+ this._isMouseDown = false;
1295
+ const { endDay, startDay } = this.getStartAndEndDay(monthInfo, day);
1296
+ this.startSelectedDay = startDay;
1297
+ this.endSelectedDay = endDay;
1298
+ this._setFirstAndEndDay(monthInfo, popover);
1299
+ }
1300
+ onDayClick(day, monthInfo, popover) {
1301
+ this.startSelectedDay = this.endSelectedDay = day;
1302
+ this._setFirstAndEndDay(monthInfo, popover);
1303
+ }
1304
+ _prepareYear(from) {
1305
+ const years = [];
1306
+ for (let i = 0; i < 20; i++) {
1307
+ years.push(`${from + i}`);
1308
+ }
1309
+ this.years = years;
1310
+ }
1311
+ getStartAndEndDay(monthInfo, day) {
1312
+ let startDay = null;
1313
+ let endDay = null;
1314
+ if (this.startSelectedDay && !this.endSelectedDay) {
1315
+ if (day && this.startSelectedDay.date > day.date) {
1316
+ startDay = day;
1317
+ endDay = this.startSelectedDay;
1318
+ }
1319
+ else {
1320
+ startDay = this.startSelectedDay;
1321
+ endDay = day;
1322
+ }
1323
+ }
1324
+ else if (this.startSelectedDay && this.endSelectedDay) {
1325
+ if (day && this.startSelectedDay.date < day.date) {
1326
+ startDay = this.startSelectedDay;
1327
+ endDay = day;
1328
+ }
1329
+ else {
1330
+ startDay = day;
1331
+ endDay = this.endSelectedDay;
1332
+ }
1333
+ }
1334
+ console.log('-2-', startDay, endDay);
1335
+ if (startDay && endDay) {
1336
+ const diff = Math.abs(startDay.momentOfDate.diff(endDay.momentOfDate, 'day'));
1337
+ if (diff > 6) {
1338
+ startDay = monthInfo.days[Math.floor(startDay.index / 7) * 7];
1339
+ // const end = endDay.index % 7;
1340
+ const indexEnd = Math.ceil((endDay.index + 1) / 7);
1341
+ // if (end > 0) {
1342
+ // indexEnd++;
1343
+ // }
1344
+ endDay = monthInfo.days[indexEnd * 7 - 1];
1345
+ console.log('-3-', startDay, endDay);
1346
+ }
1347
+ }
1348
+ return { endDay, startDay };
1349
+ }
1350
+ _setFirstAndEndDay(monthInfo, popover) {
1351
+ console.log('-finish-', this.startSelectedDay, this.endSelectedDay);
1352
+ if (this.startSelectedDay && this.endSelectedDay) {
1353
+ if (popover) {
1354
+ popover.close();
1355
+ }
1356
+ this.rangeChange.emit({
1357
+ startDay: this.startSelectedDay,
1358
+ endDay: this.endSelectedDay,
1359
+ monthInfo
1360
+ });
1361
+ }
1362
+ }
1363
+ }
1364
+ CalendarSelectionDaysComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarSelectionDaysComponent, deps: [{ token: CalendarService, self: true }, { token: i2.PortalService }], target: i0.ɵɵFactoryTarget.Component });
1365
+ CalendarSelectionDaysComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarSelectionDaysComponent, selector: "bc-calendar-selection-days", inputs: { startSelectedDayIndex: "startSelectedDayIndex", endSelectedDayIndex: "endSelectedDayIndex", monthInfo: "monthInfo" }, outputs: { rangeChange: "rangeChange" }, providers: [
1366
+ {
1367
+ provide: DateService,
1368
+ useFactory: getDateService
1369
+ },
1370
+ CalendarService
1371
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<fdp-button glyph=\"calendar\" buttonType=\"transparent\" [fdPopoverTrigger]=\"popover\"></fdp-button>\n<fd-popover #popover [focusTrapped]=\"true\" [focusAutoCapture]=\"true\" [mobile]=\"(deviceSize$ | async) === 's'\">\n <fd-popover-body [style.width.px]=\"width$ | async\">\n <ng-container\n *ngTemplateOutlet=\"\n month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize$ | async,\n popover: popover\n }\n \"\n >\n </ng-container>\n </fd-popover-body>\n</fd-popover>\n\n<ng-template\n #month\n let-selectedMonth\n let-width=\"width\"\n let-height=\"height\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-popover=\"popover\"\n>\n <fd-toolbar [fdType]=\"'transparent'\">\n <fdp-button fd-toolbar-item [label]=\"'DateR_Today' | bbbTranslate\" (click)=\"onToday()\"></fdp-button>\n <fdp-button\n buttonType=\"transparent\"\n fd-toolbar-item\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\n (click)=\"onPrevTap()\"\n ></fdp-button>\n <fdp-button\n buttonType=\"transparent\"\n fd-toolbar-item\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\n (click)=\"onNextTap()\"\n ></fdp-button>\n <div class=\"month-years-wrapper\" fd-title fd-toolbar-item>\n <button\n *ngIf=\"selectionMode === 'day' || selectionMode === 'month'\"\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.monthName\"\n (click)=\"selectionMode = 'month'\"\n ></button>\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.year\"\n (click)=\"selectionMode = 'year'\"\n ></button>\n </div>\n </fd-toolbar>\n <ng-container [ngSwitch]=\"selectionMode\">\n <ng-container *ngSwitchCase=\"'month'\">\n <div class=\"month-year-selection-wrapper\">\n <button\n style=\"flex-grow: 1; width: 33%\"\n *ngFor=\"let month of months; let i = index\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.monthName === month ? 'emphasized' : 'transparent'\"\n [label]=\"month\"\n (click)=\"selectionMode = 'day'; onMonthSelected(month, i)\"\n ></button>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <div class=\"month-year-selection-wrapper\">\n <button\n style=\"flex-grow: 1; width: 25%\"\n *ngFor=\"let year of years\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.year === +year ? 'emphasized' : 'transparent'\"\n [label]=\"year\"\n (click)=\"selectionMode = 'day'; onYearSelected(year)\"\n ></button>\n </div>\n </ng-container>\n <bc-calendar-month\n *ngSwitchDefault\n [style.width]=\"width\"\n [containerHeight]=\"height\"\n [containerWidth]=\"width\"\n [rtl]=\"rtl\"\n [monthWeeksCount]=\"6\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [datePicker]=\"true\"\n [dateRange]=\"true\"\n [days]=\"selectedMonth.days\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event, selectedMonth, popover)\"\n (dayMouseMove)=\"onDayMouseMove($event, selectedMonth)\"\n (dayMouseUp)=\"onDayMouseUp($event, selectedMonth, popover)\"\n (dayMouseDown)=\"onDayMouseDown($event)\"\n [startSelectedDayIndex]=\"startSelectedDayIndex\"\n [endSelectedDayIndex]=\"endSelectedDayIndex\"\n ></bc-calendar-month>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i5$1.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "component", type: i5$1.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "directive", type: i5$1.PopoverTriggerDirective, selector: "[fdPopoverTrigger], [fd-popover-trigger]", inputs: ["fdPopoverTrigger"] }, { kind: "component", type: i6.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i6.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i7.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: CalendarMonthComponent, selector: "bc-calendar-month", inputs: ["monthWeeksCount", "weekDays", "weekDaysMin", "today", "containerHeight", "days", "calendarFields", "rtl", "deviceSize", "moDataList", "datePicker", "rangePicker", "canDelete", "canAdd", "canEdit", "selectedDate", "startSelectedDayIndex", "endSelectedDayIndex"], outputs: ["editEvent", "deleteEvent", "daySelect", "dayClick", "dayMouseMove", "dayMouseUp", "dayMouseDown", "showEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1372
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarSelectionDaysComponent, decorators: [{
1373
+ type: Component,
1374
+ args: [{ selector: 'bc-calendar-selection-days', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
1375
+ {
1376
+ provide: DateService,
1377
+ useFactory: getDateService
1378
+ },
1379
+ CalendarService
1380
+ ], template: "<fdp-button glyph=\"calendar\" buttonType=\"transparent\" [fdPopoverTrigger]=\"popover\"></fdp-button>\n<fd-popover #popover [focusTrapped]=\"true\" [focusAutoCapture]=\"true\" [mobile]=\"(deviceSize$ | async) === 's'\">\n <fd-popover-body [style.width.px]=\"width$ | async\">\n <ng-container\n *ngTemplateOutlet=\"\n month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize$ | async,\n popover: popover\n }\n \"\n >\n </ng-container>\n </fd-popover-body>\n</fd-popover>\n\n<ng-template\n #month\n let-selectedMonth\n let-width=\"width\"\n let-height=\"height\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-popover=\"popover\"\n>\n <fd-toolbar [fdType]=\"'transparent'\">\n <fdp-button fd-toolbar-item [label]=\"'DateR_Today' | bbbTranslate\" (click)=\"onToday()\"></fdp-button>\n <fdp-button\n buttonType=\"transparent\"\n fd-toolbar-item\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\n (click)=\"onPrevTap()\"\n ></fdp-button>\n <fdp-button\n buttonType=\"transparent\"\n fd-toolbar-item\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\n (click)=\"onNextTap()\"\n ></fdp-button>\n <div class=\"month-years-wrapper\" fd-title fd-toolbar-item>\n <button\n *ngIf=\"selectionMode === 'day' || selectionMode === 'month'\"\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.monthName\"\n (click)=\"selectionMode = 'month'\"\n ></button>\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.year\"\n (click)=\"selectionMode = 'year'\"\n ></button>\n </div>\n </fd-toolbar>\n <ng-container [ngSwitch]=\"selectionMode\">\n <ng-container *ngSwitchCase=\"'month'\">\n <div class=\"month-year-selection-wrapper\">\n <button\n style=\"flex-grow: 1; width: 33%\"\n *ngFor=\"let month of months; let i = index\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.monthName === month ? 'emphasized' : 'transparent'\"\n [label]=\"month\"\n (click)=\"selectionMode = 'day'; onMonthSelected(month, i)\"\n ></button>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <div class=\"month-year-selection-wrapper\">\n <button\n style=\"flex-grow: 1; width: 25%\"\n *ngFor=\"let year of years\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.year === +year ? 'emphasized' : 'transparent'\"\n [label]=\"year\"\n (click)=\"selectionMode = 'day'; onYearSelected(year)\"\n ></button>\n </div>\n </ng-container>\n <bc-calendar-month\n *ngSwitchDefault\n [style.width]=\"width\"\n [containerHeight]=\"height\"\n [containerWidth]=\"width\"\n [rtl]=\"rtl\"\n [monthWeeksCount]=\"6\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [datePicker]=\"true\"\n [dateRange]=\"true\"\n [days]=\"selectedMonth.days\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event, selectedMonth, popover)\"\n (dayMouseMove)=\"onDayMouseMove($event, selectedMonth)\"\n (dayMouseUp)=\"onDayMouseUp($event, selectedMonth, popover)\"\n (dayMouseDown)=\"onDayMouseDown($event)\"\n [startSelectedDayIndex]=\"startSelectedDayIndex\"\n [endSelectedDayIndex]=\"endSelectedDayIndex\"\n ></bc-calendar-month>\n </ng-container>\n</ng-template>\n" }]
1381
+ }], ctorParameters: function () { return [{ type: CalendarService, decorators: [{
1382
+ type: Self
1383
+ }] }, { type: i2.PortalService }]; }, propDecorators: { startSelectedDayIndex: [{
1384
+ type: Input
1385
+ }], endSelectedDayIndex: [{
1386
+ type: Input
1387
+ }], monthInfo: [{
1388
+ type: Input
1389
+ }], rangeChange: [{
1390
+ type: Output
1391
+ }] } });
1392
+
1393
+ class TimeConfigI18n {
1394
+ constructor(_bbbTranslate) {
1395
+ this._bbbTranslate = _bbbTranslate;
1396
+ /** Aria label for the 'increase hours' button */
1397
+ this.increaseHoursLabel = 'Increase hours';
1398
+ /** label for the 'hours' column */
1399
+ this.hoursLabel = this._bbbTranslate.transform('Hours');
1400
+ /** Aria label for the 'decrease hours' button */
1401
+ this.decreaseHoursLabel = 'Decrease hours';
1402
+ /** Aria label for the 'increase minutes' button */
1403
+ this.increaseMinutesLabel = 'Increase minutes';
1404
+ /** label for the 'minutes' column */
1405
+ this.minutesLabel = this._bbbTranslate.transform('Minutes');
1406
+ /** Aria label for the 'decrease minutes' button */
1407
+ this.decreaseMinutesLabel = 'Decrease minutes';
1408
+ /** Aria label for the 'increase seconds' button */
1409
+ this.increaseSecondsLabel = 'Increase seconds';
1410
+ /** label for the 'seconds' column */
1411
+ this.secondsLabel = this._bbbTranslate.transform('Sec');
1412
+ /** Aria label for the 'decrease seconds' button */
1413
+ this.decreaseSecondsLabel = 'Decrease seconds';
1414
+ /** Aria label for the 'increase period' button */
1415
+ this.increasePeriodLabel = 'Increase period';
1416
+ /** label for the 'period' column */
1417
+ this.periodLabel = 'Period';
1418
+ /** Aria label for the 'decrease period' button */
1419
+ this.decreasePeriodLabel = 'Decrease period';
1420
+ }
1421
+ }
1422
+ TimeConfigI18n.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TimeConfigI18n, deps: [{ token: i2.BbbTranslatePipe }], target: i0.ɵɵFactoryTarget.Injectable });
1423
+ TimeConfigI18n.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TimeConfigI18n });
1424
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: TimeConfigI18n, decorators: [{
1425
+ type: Injectable
1426
+ }], ctorParameters: function () { return [{ type: i2.BbbTranslatePipe }]; } });
1427
+ class DateTimePickerComponent extends BaseComponent {
1428
+ constructor(_datetimeAdapter, _logService, _portalService) {
1429
+ super();
1430
+ this._datetimeAdapter = _datetimeAdapter;
1431
+ this._logService = _logService;
1432
+ this.rtl = true;
1433
+ this.rangeChange = new EventEmitter();
1434
+ this.valueChange = new EventEmitter();
1435
+ this.valueCaption = '';
1436
+ this.selectionMode = 'day';
1437
+ this.todayIndex = -1;
1438
+ this.isValid = true;
1439
+ this.months = [];
1440
+ this.rtl$ = _portalService.rtl$;
1441
+ this.width$ = _portalService.deviceSize$.pipe(distinctUntilChanged(), map((deviceSize) => {
1442
+ if (!this.showDate) {
1443
+ return 260;
1444
+ }
1445
+ switch (deviceSize) {
1446
+ case 'l':
1447
+ case 'xl':
1448
+ return 560;
1449
+ case 's':
1450
+ return 320;
1451
+ default:
1452
+ return 520;
1453
+ }
1454
+ }));
1455
+ this.height = 420;
1456
+ }
1457
+ ngOnInit() {
1458
+ super.ngOnInit();
1459
+ let culture = 'en-US';
1460
+ switch (this.primaryCalendarType) {
1461
+ case 'HijriShamsi':
1462
+ culture = 'fa-IR';
1463
+ break;
1464
+ }
1465
+ this.culture = culture;
1466
+ this._calendarService = new CalendarService(this._logService, culture);
1467
+ this.weekDaysMin = this._calendarService.weekDaysMin();
1468
+ this.weekDays = this._calendarService.weekDays();
1469
+ this.selectedMonth$ = this._calendarService.selected$;
1470
+ this.today = this._calendarService.today;
1471
+ if (this.value) {
1472
+ this.timeValue = FdDate.getFdDateByDate(this.value);
1473
+ this._setCaption(this.value);
1474
+ this._calendarService.loadMonthByDate(this.value);
1475
+ }
1476
+ else {
1477
+ this.timeValue = FdDate.getFdDateByDate(new Date());
1478
+ }
1479
+ // if (this.isRangePicker) {
1480
+ // if (this.startRangeDate) {
1481
+ // this._calendarService.loadMonthByDate(this.startRangeDate);
1482
+ // }
1483
+ // if (this.endRangeDate) {
1484
+ // }
1485
+ // } else {
1486
+ // this._calendarService.loadMonthByDate(this.value);
1487
+ // }
1488
+ this.months = this._calendarService.Months;
1489
+ this._prepareYear(this._calendarService.selectedMonth.dateInfo.year);
1490
+ }
1491
+ onOpenPopover(popover) {
1492
+ if (this.readonly || this.disabled) {
1493
+ return;
1494
+ }
1495
+ if (this.timeComponent) {
1496
+ setTimeout(() => this.timeComponent.refreshColumns(), 0);
1497
+ }
1498
+ popover.open();
1499
+ }
1500
+ onMonthSelected(monthName, index) {
1501
+ this._calendarService.gotoMonth(monthName, index);
1502
+ }
1503
+ onYearSelected(year) {
1504
+ this._calendarService.gotoYear(+year);
1505
+ }
1506
+ onCaptionChanged(e) {
1507
+ if (e.length < 10) {
1508
+ return;
1509
+ }
1510
+ const englishDateStr = BarsaApi.Common.Util.ReplaceFaToArCharchter(e);
1511
+ const moment = this._calendarService._dateService.stringToMoment(englishDateStr, 'jYYYY/jM/jD');
1512
+ const isValid = moment.isValid();
1513
+ const date = moment.toDate();
1514
+ if (isValid) {
1515
+ this.startSelectedDay = this.endSelectedDay = null;
1516
+ this._raisValueChanged(date, false);
1517
+ }
1518
+ this.isValid = isValid;
1519
+ }
1520
+ onPrevTap() {
1521
+ if (this.selectionMode === 'day') {
1522
+ this._calendarService.loadPrevious();
1523
+ }
1524
+ else if (this.selectionMode === 'month') {
1525
+ this._calendarService.loadPrevYear();
1526
+ }
1527
+ else if (this.selectionMode === 'year') {
1528
+ this._prepareYear(Number(this.years[0]) - 20);
1529
+ }
1530
+ }
1531
+ onNextTap() {
1532
+ if (this.selectionMode === 'day') {
1533
+ this._calendarService.loadNext();
1534
+ }
1535
+ else if (this.selectionMode === 'month') {
1536
+ this._calendarService.loadNextYear();
1537
+ }
1538
+ else if (this.selectionMode === 'year') {
1539
+ this._prepareYear(Number(this.years[this.years.length - 1]) + 1);
1540
+ }
1541
+ }
1542
+ onToday() {
1543
+ const today = new Date();
1544
+ this.timeValue = this._datetimeAdapter.setTime(this.timeValue, today.getHours(), today.getMinutes(), today.getSeconds());
1545
+ if (this._calendarService.todayDay) {
1546
+ this.startSelectedDay = this._calendarService.todayDay;
1547
+ }
1548
+ this._calendarService.gotoToday();
1549
+ }
1550
+ onDayClick(day, popover) {
1551
+ this.isValid = true;
1552
+ this.startSelectedDay = this.endSelectedDay = day;
1553
+ if (this.showTime) {
1554
+ return;
1555
+ }
1556
+ this._setFirstAndEndDay(day, popover);
1557
+ }
1558
+ onPopoverOpenChange(isOpen) {
1559
+ if (isOpen) {
1560
+ this._lastValue = this.value;
1561
+ }
1562
+ else {
1563
+ this._lastValue = undefined;
1564
+ }
1565
+ }
1566
+ onOk(popover) {
1567
+ popover.close();
1568
+ this.value = this.showDate ? this.startSelectedDay?.date ?? this.value : new Date();
1569
+ this.value?.setHours(this.timeValue.hour);
1570
+ this.value?.setMinutes(this.timeValue.minute);
1571
+ this.value?.setSeconds(this.timeValue.second);
1572
+ this._raisValueChanged(this.value);
1573
+ }
1574
+ onCancel(popover) {
1575
+ if (this._lastValue !== this.value) {
1576
+ this.value = this._lastValue;
1577
+ this._setCaption(this.value);
1578
+ }
1579
+ popover.close();
1580
+ }
1581
+ _prepareYear(from) {
1582
+ const years = [];
1583
+ for (let i = 0; i < 20; i++) {
1584
+ years.push(`${from + i}`);
1585
+ }
1586
+ this.years = years;
1587
+ }
1588
+ _setCaption(value) {
1589
+ if (!value) {
1590
+ this.valueCaption = '';
1591
+ return;
1592
+ }
1593
+ let formatPattern = this.formatPattern.replace('YYYY', 'jYYYY');
1594
+ formatPattern = formatPattern.replace('MM', 'jMM');
1595
+ formatPattern = formatPattern.replace('DD', 'jDD');
1596
+ this.valueCaption = this._calendarService._dateService.getMoment(value).format(formatPattern);
1597
+ }
1598
+ _raisValueChanged(date, setCaption = true) {
1599
+ this.value = date;
1600
+ if (setCaption) {
1601
+ this._setCaption(date);
1602
+ }
1603
+ this.valueChange.emit(date);
1604
+ }
1605
+ _setFirstAndEndDay(day, popover) {
1606
+ if (popover) {
1607
+ popover.close();
1608
+ }
1609
+ if (!this.isRangePicker) {
1610
+ this._raisValueChanged(day.date);
1611
+ return;
1612
+ }
1613
+ if (this.startSelectedDay) {
1614
+ this.endSelectedDay = day;
1615
+ }
1616
+ else {
1617
+ this.startSelectedDay = day;
1618
+ }
1619
+ if (this.startSelectedDay && this.endSelectedDay && this.startSelectedDay.date > this.endSelectedDay.date) {
1620
+ const temp = this.startSelectedDay;
1621
+ this.startSelectedDay = this.endSelectedDay;
1622
+ this.endSelectedDay = temp;
1623
+ }
1624
+ if (this.startSelectedDay && this.endSelectedDay) {
1625
+ this.rangeChange.emit({
1626
+ startDay: this.startSelectedDay.date,
1627
+ endDay: this.endSelectedDay.date
1628
+ });
1629
+ }
1630
+ }
1631
+ }
1632
+ DateTimePickerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DateTimePickerComponent, deps: [{ token: i2$3.DatetimeAdapter }, { token: i2.LogService }, { token: i2.PortalService }], target: i0.ɵɵFactoryTarget.Component });
1633
+ DateTimePickerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: DateTimePickerComponent, selector: "bc-date-time-picker", inputs: { placeholder: "placeholder", primaryCalendarType: "primaryCalendarType", formatPattern: "formatPattern", value: "value", timeValue: "timeValue", startRangeDate: "startRangeDate", endRangeDate: "endRangeDate", isRangePicker: "isRangePicker", showTime: "showTime", showDate: "showDate", rtl: "rtl", readonly: "readonly", disabled: "disabled" }, outputs: { rangeChange: "rangeChange", valueChange: "valueChange" }, providers: [
1634
+ {
1635
+ provide: DatetimeAdapter,
1636
+ useClass: FdDatetimeAdapter
1637
+ },
1638
+ {
1639
+ provide: TimeI18n,
1640
+ useClass: TimeConfigI18n
1641
+ },
1642
+ {
1643
+ provide: DateService,
1644
+ useFactory: getDateService
1645
+ },
1646
+ CalendarService
1647
+ ], viewQueries: [{ propertyName: "timeComponent", first: true, predicate: TimeComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<fd-input-group\n placement=\"after\"\n glyph=\"calendar\"\n glyphAriaLabel=\"select day\"\n [placeholder]=\"placeholder\"\n ariaLabelledby=\"fd-input-group-icon-label-2\"\n [button]=\"true\"\n [state]=\"isValid ? 'success' : 'error'\"\n [showFocus]=\"true\"\n (addOnButtonClicked)=\"onOpenPopover(popover)\"\n [ngModel]=\"value | dateTimeToCaption: formatPattern:culture:showDate:showTime\"\n (ngModelChange)=\"onCaptionChanged($event)\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n>\n</fd-input-group>\n<fd-popover\n #popover\n (isOpenChange)=\"onPopoverOpenChange($event)\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [mobile]=\"(deviceSize$ | async) === 's'\"\n>\n <fd-popover-body [style.width.px]=\"width$ | async\">\n <ng-container\n *ngTemplateOutlet=\"\n month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize$ | async,\n popover: popover\n }\n \"\n >\n </ng-container>\n <div fd-popover-body-footer *ngIf=\"showTime\">\n <div fd-bar [barDesign]=\"'footer'\">\n <div fd-bar-left *ngIf=\"rtl\">\n <container *ngTemplateOutlet=\"footerButtons\"></container>\n </div>\n <div fd-bar-right *ngIf=\"!rtl\">\n <container *ngTemplateOutlet=\"footerButtons\"></container>\n </div>\n </div>\n </div>\n </fd-popover-body>\n</fd-popover>\n<ng-template #footerButtons>\n <fd-button-bar [label]=\"'Cancel' | bbbTranslate\" (click)=\"onCancel(popover)\"></fd-button-bar>\n <fd-button-bar [label]=\"'Ok' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onOk(popover)\"></fd-button-bar>\n</ng-template>\n<ng-template\n #month\n let-selectedMonth\n let-width=\"width\"\n let-height=\"height\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-popover=\"popover\"\n>\n <fd-toolbar [fdType]=\"'transparent'\">\n <button\n fd-button\n fd-toolbar-item\n [label]=\"(showDate ? 'DateR_Today' : 'Now') | bbbTranslate\"\n (click)=\"onToday()\"\n ></button>\n <button\n *ngIf=\"showDate\"\n fd-button\n fd-toolbar-item\n [fdType]=\"'transparent'\"\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\n (click)=\"onPrevTap()\"\n ></button>\n <button\n *ngIf=\"showDate\"\n fd-button\n fd-toolbar-item\n [fdType]=\"'transparent'\"\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\n (click)=\"onNextTap()\"\n ></button>\n <div class=\"month-years-wrapper\" *ngIf=\"showDate\" fd-title fd-toolbar-item>\n <button\n *ngIf=\"selectionMode === 'day' || selectionMode === 'month'\"\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.monthName\"\n (click)=\"selectionMode = 'month'\"\n ></button>\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.year\"\n (click)=\"selectionMode = 'year'\"\n ></button>\n </div>\n </fd-toolbar>\n <div style=\"display: flex\">\n <ng-container [ngSwitch]=\"selectionMode\">\n <ng-container *ngSwitchCase=\"'month'\">\n <div class=\"month-year-selection-wrapper\">\n <button\n style=\"flex-grow: 1; width: 33%\"\n *ngFor=\"let month of months; let i = index\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.monthName === month ? 'emphasized' : 'transparent'\"\n [label]=\"month\"\n (click)=\"selectionMode = 'day'; onMonthSelected(month, i)\"\n ></button>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <div class=\"month-year-selection-wrapper\">\n <button\n style=\"flex-grow: 1; width: 25%\"\n *ngFor=\"let year of years\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.year === +year ? 'emphasized' : 'transparent'\"\n [label]=\"year\"\n (click)=\"selectionMode = 'day'; onYearSelected(year)\"\n ></button>\n </div>\n </ng-container>\n <div *ngSwitchDefault style=\"display: flex\">\n <bc-calendar-month\n *ngIf=\"showDate\"\n [style.width]=\"width\"\n [containerHeight]=\"height\"\n [containerWidth]=\"width\"\n [rtl]=\"rtl\"\n [monthWeeksCount]=\"selectedMonth.weeksCount\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [datePicker]=\"true\"\n [dateRange]=\"true\"\n [selectedDate]=\"startSelectedDay ? startSelectedDay.date : value\"\n [days]=\"selectedMonth.days\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event, popover)\"\n ></bc-calendar-month>\n <div class=\"seperator\"></div>\n <fd-time\n *ngIf=\"showTime\"\n [(ngModel)]=\"timeValue\"\n [compact]=\"(deviceSize$ | async) !== 's'\"\n [displaySeconds]=\"false\"\n ></fd-time>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host{display:block}fd-popover{display:block}fd-input-group ::ng-deep input{direction:ltr}fd-time ::ng-deep .fd-time{padding-top:0}.seperator{border-left:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "directive", type: i4$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2$2.BarComponent, selector: "[fd-bar]", inputs: ["class", "barDesign", "inPage", "inHomePage", "size"] }, { kind: "directive", type: i2$2.BarLeftDirective, selector: "[fd-bar-left]" }, { kind: "directive", type: i2$2.BarRightDirective, selector: "[fd-bar-right]" }, { kind: "component", type: i2$2.ButtonBarComponent, selector: "fd-button-bar", inputs: ["fullWidth", "fdType", "title", "ariaLabel", "ariaLabelledby", "id"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "component", type: i7$1.InputGroupComponent, selector: "fd-input-group", inputs: ["inputTemplate", "placement", "required", "inline", "placeholder", "addOnText", "buttonFocusable", "type", "glyph", "button", "disabled", "readonly", "state", "isControl", "showFocus", "isExpanded", "glyphAriaLabel", "iconTitle", "ariaLabelledby", "ariaLabelledBy"], outputs: ["addOnButtonClicked", "search"] }, { kind: "component", type: i5$1.PopoverBodyComponent, selector: "fd-popover-body" }, { kind: "directive", type: i5$1.PopoverBodyFooterDirective, selector: "[fdPopoverBodyFooter], [fd-popover-body-footer]" }, { kind: "component", type: i5$1.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i9.TimeComponent, selector: "fd-time", inputs: ["meridian", "validate", "keepTwoDigits", "disabled", "displaySeconds", "displayMinutes", "displayHours", "tablet", "elementsAtOnce", "time", "spinnerButtons"] }, { kind: "directive", type: i9.DeprecatedTimeContentDensityDirective, selector: "fd-time-column[compact], fd-time[compact]" }, { kind: "component", type: i6.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i6.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: CalendarMonthComponent, selector: "bc-calendar-month", inputs: ["monthWeeksCount", "weekDays", "weekDaysMin", "today", "containerHeight", "days", "calendarFields", "rtl", "deviceSize", "moDataList", "datePicker", "rangePicker", "canDelete", "canAdd", "canEdit", "selectedDate", "startSelectedDayIndex", "endSelectedDayIndex"], outputs: ["editEvent", "deleteEvent", "daySelect", "dayClick", "dayMouseMove", "dayMouseUp", "dayMouseDown", "showEvent"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: i2.DateTimeToCaptionPipe, name: "dateTimeToCaption" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1648
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: DateTimePickerComponent, decorators: [{
1649
+ type: Component,
1650
+ args: [{ selector: 'bc-date-time-picker', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
1651
+ {
1652
+ provide: DatetimeAdapter,
1653
+ useClass: FdDatetimeAdapter
1654
+ },
1655
+ {
1656
+ provide: TimeI18n,
1657
+ useClass: TimeConfigI18n
1658
+ },
1659
+ {
1660
+ provide: DateService,
1661
+ useFactory: getDateService
1662
+ },
1663
+ CalendarService
1664
+ ], template: "<fd-input-group\n placement=\"after\"\n glyph=\"calendar\"\n glyphAriaLabel=\"select day\"\n [placeholder]=\"placeholder\"\n ariaLabelledby=\"fd-input-group-icon-label-2\"\n [button]=\"true\"\n [state]=\"isValid ? 'success' : 'error'\"\n [showFocus]=\"true\"\n (addOnButtonClicked)=\"onOpenPopover(popover)\"\n [ngModel]=\"value | dateTimeToCaption: formatPattern:culture:showDate:showTime\"\n (ngModelChange)=\"onCaptionChanged($event)\"\n [disabled]=\"disabled\"\n [readonly]=\"readonly\"\n>\n</fd-input-group>\n<fd-popover\n #popover\n (isOpenChange)=\"onPopoverOpenChange($event)\"\n [focusTrapped]=\"true\"\n [focusAutoCapture]=\"true\"\n [mobile]=\"(deviceSize$ | async) === 's'\"\n>\n <fd-popover-body [style.width.px]=\"width$ | async\">\n <ng-container\n *ngTemplateOutlet=\"\n month;\n context: {\n $implicit: selectedMonth$ | async,\n width: width$ | async,\n height: height,\n rtl: rtl$ | async,\n weekDays: weekDays,\n weekDaysMin: weekDaysMin,\n today: today,\n deviceSize: deviceSize$ | async,\n popover: popover\n }\n \"\n >\n </ng-container>\n <div fd-popover-body-footer *ngIf=\"showTime\">\n <div fd-bar [barDesign]=\"'footer'\">\n <div fd-bar-left *ngIf=\"rtl\">\n <container *ngTemplateOutlet=\"footerButtons\"></container>\n </div>\n <div fd-bar-right *ngIf=\"!rtl\">\n <container *ngTemplateOutlet=\"footerButtons\"></container>\n </div>\n </div>\n </div>\n </fd-popover-body>\n</fd-popover>\n<ng-template #footerButtons>\n <fd-button-bar [label]=\"'Cancel' | bbbTranslate\" (click)=\"onCancel(popover)\"></fd-button-bar>\n <fd-button-bar [label]=\"'Ok' | bbbTranslate\" fdType=\"emphasized\" (click)=\"onOk(popover)\"></fd-button-bar>\n</ng-template>\n<ng-template\n #month\n let-selectedMonth\n let-width=\"width\"\n let-height=\"height\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-popover=\"popover\"\n>\n <fd-toolbar [fdType]=\"'transparent'\">\n <button\n fd-button\n fd-toolbar-item\n [label]=\"(showDate ? 'DateR_Today' : 'Now') | bbbTranslate\"\n (click)=\"onToday()\"\n ></button>\n <button\n *ngIf=\"showDate\"\n fd-button\n fd-toolbar-item\n [fdType]=\"'transparent'\"\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\n (click)=\"onPrevTap()\"\n ></button>\n <button\n *ngIf=\"showDate\"\n fd-button\n fd-toolbar-item\n [fdType]=\"'transparent'\"\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\n (click)=\"onNextTap()\"\n ></button>\n <div class=\"month-years-wrapper\" *ngIf=\"showDate\" fd-title fd-toolbar-item>\n <button\n *ngIf=\"selectionMode === 'day' || selectionMode === 'month'\"\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.monthName\"\n (click)=\"selectionMode = 'month'\"\n ></button>\n <button\n fd-button\n [fdType]=\"'transparent'\"\n [label]=\"selectedMonth.dateInfo.year\"\n (click)=\"selectionMode = 'year'\"\n ></button>\n </div>\n </fd-toolbar>\n <div style=\"display: flex\">\n <ng-container [ngSwitch]=\"selectionMode\">\n <ng-container *ngSwitchCase=\"'month'\">\n <div class=\"month-year-selection-wrapper\">\n <button\n style=\"flex-grow: 1; width: 33%\"\n *ngFor=\"let month of months; let i = index\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.monthName === month ? 'emphasized' : 'transparent'\"\n [label]=\"month\"\n (click)=\"selectionMode = 'day'; onMonthSelected(month, i)\"\n ></button>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'year'\">\n <div class=\"month-year-selection-wrapper\">\n <button\n style=\"flex-grow: 1; width: 25%\"\n *ngFor=\"let year of years\"\n fd-button\n [fdType]=\"selectedMonth.dateInfo.year === +year ? 'emphasized' : 'transparent'\"\n [label]=\"year\"\n (click)=\"selectionMode = 'day'; onYearSelected(year)\"\n ></button>\n </div>\n </ng-container>\n <div *ngSwitchDefault style=\"display: flex\">\n <bc-calendar-month\n *ngIf=\"showDate\"\n [style.width]=\"width\"\n [containerHeight]=\"height\"\n [containerWidth]=\"width\"\n [rtl]=\"rtl\"\n [monthWeeksCount]=\"selectedMonth.weeksCount\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [datePicker]=\"true\"\n [dateRange]=\"true\"\n [selectedDate]=\"startSelectedDay ? startSelectedDay.date : value\"\n [days]=\"selectedMonth.days\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event, popover)\"\n ></bc-calendar-month>\n <div class=\"seperator\"></div>\n <fd-time\n *ngIf=\"showTime\"\n [(ngModel)]=\"timeValue\"\n [compact]=\"(deviceSize$ | async) !== 's'\"\n [displaySeconds]=\"false\"\n ></fd-time>\n </div>\n </ng-container>\n </div>\n</ng-template>\n", styles: [":host{display:block}fd-popover{display:block}fd-input-group ::ng-deep input{direction:ltr}fd-time ::ng-deep .fd-time{padding-top:0}.seperator{border-left:.0625rem solid var(--sapPageFooter_BorderColor, #d9d9d9)}\n"] }]
1665
+ }], ctorParameters: function () { return [{ type: i2$3.DatetimeAdapter }, { type: i2.LogService }, { type: i2.PortalService }]; }, propDecorators: { placeholder: [{
1666
+ type: Input
1667
+ }], primaryCalendarType: [{
1668
+ type: Input
1669
+ }], formatPattern: [{
1670
+ type: Input
1671
+ }], value: [{
1672
+ type: Input
1673
+ }], timeValue: [{
1674
+ type: Input
1675
+ }], startRangeDate: [{
1676
+ type: Input
1677
+ }], endRangeDate: [{
1678
+ type: Input
1679
+ }], isRangePicker: [{
1680
+ type: Input
1681
+ }], showTime: [{
1682
+ type: Input
1683
+ }], showDate: [{
1684
+ type: Input
1685
+ }], rtl: [{
1686
+ type: Input
1687
+ }], readonly: [{
1688
+ type: Input
1689
+ }], disabled: [{
1690
+ type: Input
1691
+ }], rangeChange: [{
1692
+ type: Output
1693
+ }], valueChange: [{
1694
+ type: Output
1695
+ }], timeComponent: [{
1696
+ type: ViewChild,
1697
+ args: [TimeComponent]
1698
+ }] } });
1699
+
1700
+ class MonthDaysComponent extends BaseComponent {
1701
+ constructor(daysInWeek, _cdr, _calendarService) {
1702
+ super();
1703
+ this.daysInWeek = daysInWeek;
1704
+ this._cdr = _cdr;
1705
+ this._calendarService = _calendarService;
1706
+ this.datePicker = false;
1707
+ this.rangePicker = false;
1708
+ this.editEvent = new EventEmitter();
1709
+ this.deleteEvent = new EventEmitter();
1710
+ this.daySelect = new EventEmitter();
1711
+ this.dayClick = new EventEmitter();
1712
+ this.dayMouseMove = new EventEmitter();
1713
+ this.dayMouseUp = new EventEmitter();
1714
+ this.dayMouseDown = new EventEmitter();
1715
+ this.showEvent = new EventEmitter();
1716
+ this.taskHeight = 30;
1717
+ this._hasPopoverOpened = [];
1718
+ }
1719
+ ngOnChanges(changes) {
1720
+ super.ngOnChanges(changes);
1721
+ if (changes.containerHeight && !changes.containerHeight.firstChange) {
1722
+ this.fitToContainer(changes.containerHeight.currentValue);
1723
+ }
1724
+ if (changes.deviceSize && !changes.deviceSize.firstChange) {
1725
+ this.prepareWeekDays(changes.deviceSize.currentValue);
1726
+ }
1727
+ if (changes.moDataList && !changes.moDataList.firstChange) {
1728
+ this._prepareDaysTasks(changes.moDataList.currentValue);
1729
+ this._cdr.detectChanges();
1730
+ }
1731
+ if (changes.monthInfo && !changes.monthInfo.firstChange) {
1732
+ this._prepareDaysTasks(this.moDataList);
1733
+ this._cdr.detectChanges();
1734
+ }
1735
+ if (changes.monthWeeksCount && !changes.monthWeeksCount.firstChange) {
1736
+ this.fitToContainer(this.containerHeight);
1737
+ this._prepareDaysTasks(this.moDataList);
1738
+ this._cdr.detectChanges();
1739
+ }
1740
+ }
1741
+ ngOnInit() {
1742
+ super.ngOnInit();
1743
+ this.isPickerMode = this.datePicker || this.rangePicker;
1744
+ this.prepareWeekDays(this.deviceSize);
1745
+ this._prepareDaysTasks(this.moDataList);
1746
+ this.fitToContainer(this.containerHeight);
1747
+ }
1748
+ onDayBoxSelect(day) {
1749
+ this._fireDaySelect(day);
1750
+ }
1751
+ onDaySelect(weekIndex, dayIndex) {
1752
+ const day = this.days[weekIndex * 7 + dayIndex];
1753
+ this._fireDaySelect(day);
1754
+ }
1755
+ onOpenPopoverChange(isOpen) {
1756
+ this._openPopover(isOpen);
1757
+ }
1758
+ onMoreButton(e, popover) {
1759
+ this._preventEvent(e);
1760
+ popover.open();
1761
+ }
1762
+ onTask(e, task) {
1763
+ this.showEvent.emit(task);
1764
+ }
1765
+ onDayClick(day) {
1766
+ this.selected = day;
1767
+ this.dayClick.emit(day);
1768
+ }
1769
+ onDayMouseMove(day) {
1770
+ this.dayMouseMove.emit(day);
1771
+ }
1772
+ onDayMouseDown(day) {
1773
+ this.dayMouseDown.emit(day);
1774
+ }
1775
+ onDayMouseUp(day) {
1776
+ this.dayMouseUp.emit(day);
1777
+ }
1778
+ _preventEvent(e) {
1779
+ e.stopPropagation();
1780
+ e.preventDefault();
1781
+ }
1782
+ _fireDaySelect(day) {
1783
+ if (this._hasPopoverOpened.length === 0) {
1784
+ this.daySelect.emit(moment(day.date));
1785
+ }
1786
+ }
1787
+ _openPopover(isOpen) {
1788
+ if (isOpen) {
1789
+ this._hasPopoverOpened.push(true);
1790
+ }
1791
+ else {
1792
+ setTimeout(() => {
1793
+ this._hasPopoverOpened = [];
1794
+ }, 0);
1795
+ }
1796
+ }
1797
+ prepareWeekDays(deviceSize) {
1798
+ if (deviceSize !== 's' && deviceSize !== 'm') {
1799
+ this.selectedWeekDays = this.weekDays;
1800
+ }
1801
+ else {
1802
+ this.selectedWeekDays = this.weekDaysMin;
1803
+ }
1804
+ }
1805
+ fitToContainer(containerHeight) {
1806
+ let _weeksCount;
1807
+ let _firstWeekIndex;
1808
+ if (this.monthWeeksCount?.weeksCount > 0) {
1809
+ const { weeksCount, firstWeekIndex } = this.monthWeeksCount;
1810
+ _weeksCount = weeksCount;
1811
+ _firstWeekIndex = firstWeekIndex;
1812
+ }
1813
+ else {
1814
+ _weeksCount = this.days.length / 7;
1815
+ _firstWeekIndex = 0;
1816
+ }
1817
+ this.numberOfWeek = Array.from(Array(_weeksCount).keys());
1818
+ this.numberOfWeek = this.numberOfWeek.map((value) => value + _firstWeekIndex);
1819
+ if (this.isPickerMode) {
1820
+ this.dayHeight = 40;
1821
+ return;
1822
+ }
1823
+ this.dayHeight = Math.floor(containerHeight / _weeksCount) + 1;
1824
+ this.maxTaskCount = Math.floor((this.dayHeight - this.taskHeight) / this.taskHeight);
1825
+ this.maxRowTasks = new Array(this.maxTaskCount).fill(0).map((x, i) => i);
1826
+ }
1827
+ _prepareDaysTasks(calendarTasks) {
1828
+ if (this.isPickerMode) {
1829
+ this.weekTasksArray = {};
1830
+ return;
1831
+ }
1832
+ const calendarFields = this.calendarFields;
1833
+ // Sort all Tasks
1834
+ const moDataList = this._calendarService.sortTasks(calendarTasks, calendarFields);
1835
+ this.days.forEach((day) => (day.tasks = []));
1836
+ const weekTasksArray = [];
1837
+ for (let j = 0; j < this.days.length / 7; j++) {
1838
+ const days = this.daysInWeek.transform(this.days, j);
1839
+ const week = this._calendarService.createWeekTask(days, moDataList, calendarFields, 0);
1840
+ weekTasksArray.push(week);
1841
+ }
1842
+ weekTasksArray.forEach((week) => {
1843
+ const arr = Object.values(week);
1844
+ for (let i = arr.length; i < this.maxTaskCount; i++) {
1845
+ week[i.toString()] = [];
1846
+ }
1847
+ });
1848
+ // به ازای هر ردیف تسک باید تعداد 7 ستون اضافه گردد و برای ستونی که تسکی ندارد یک جای خالی colspan 1 میگذاریم
1849
+ weekTasksArray.forEach((week) => {
1850
+ this._calendarService.fillWeek(week);
1851
+ });
1852
+ this.weekTasksArray = weekTasksArray;
1853
+ }
1854
+ }
1855
+ MonthDaysComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: MonthDaysComponent, deps: [{ token: DaysInWeekPipe }, { token: i0.ChangeDetectorRef }, { token: CalendarService }], target: i0.ɵɵFactoryTarget.Component });
1856
+ MonthDaysComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: MonthDaysComponent, selector: "bc-month-days", inputs: { monthWeeksCount: "monthWeeksCount", weekDays: "weekDays", weekDaysMin: "weekDaysMin", today: "today", containerHeight: "containerHeight", days: "days", calendarFields: "calendarFields", rtl: "rtl", deviceSize: "deviceSize", moDataList: "moDataList", datePicker: "datePicker", rangePicker: "rangePicker", startSelectedDayIndex: "startSelectedDayIndex", endSelectedDayIndex: "endSelectedDayIndex" }, outputs: { editEvent: "editEvent", deleteEvent: "deleteEvent", daySelect: "daySelect", dayClick: "dayClick", dayMouseMove: "dayMouseMove", dayMouseUp: "dayMouseUp", dayMouseDown: "dayMouseDown", showEvent: "showEvent" }, usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<table fd-table class=\"table-header\" [compact]=\"true\">\r\n <thead fd-table-header>\r\n <tr fd-table-row>\r\n <th\r\n class=\"weekday-header\"\r\n *ngFor=\"let weekDay of selectedWeekDays\"\r\n fd-table-cell\r\n [class.noborder]=\"isPickerMode\"\r\n >\r\n {{ weekDay }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody fd-table-body>\r\n <ng-container *ngFor=\"let weekDay of numberOfWeek\">\r\n <tr fd-table-row>\r\n <td\r\n [style.height.px]=\"dayHeight\"\r\n fd-table-cell\r\n colspan=\"7\"\r\n [style.border]=\"isPickerMode ? 'none' : null\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderTasks;\r\n context: {\r\n $implicit: isPickerMode ? null : moDataList[weekDay],\r\n weekIndex: weekDay,\r\n days: days | daysInWeek: weekDay,\r\n maxRowTasks: maxRowTasks,\r\n weekDays: weekDays,\r\n calendarFields: calendarFields,\r\n rtl: rtl,\r\n isPickerMode: isPickerMode\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n</table>\r\n<ng-template\r\n #renderTasks\r\n let-task\r\n let-weekIndex=\"weekIndex\"\r\n let-weekDays=\"weekDays\"\r\n let-days=\"days\"\r\n let-maxRowTasks=\"maxRowTasks\"\r\n let-calendarFields=\"calendarFields\"\r\n let-deviceSize=\"deviceSize\"\r\n let-rtl=\"rtl\"\r\n let-isPickerMode=\"isPickerMode\"\r\n>\r\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\r\n <tbody>\r\n <tr fd-table-row class=\"row-day-number\">\r\n <td fd-table-cell *ngFor=\"let day of days | daysInWeek: weekIndex\" [class.noborder]=\"isPickerMode\">\r\n <bc-day-number-box\r\n [class.fd-calendar__item]=\"isPickerMode\"\r\n [class.fd-calendar__item--other-month]=\"isPickerMode && !day.isInMonth\"\r\n [class.fd-calendar__item--weekend]=\"isPickerMode && day.isWeekend\"\r\n [isPickerMode]=\"isPickerMode\"\r\n [day]=\"day\"\r\n [class.is-active]=\"day.index === startSelectedDayIndex || day.index === endSelectedDayIndex\"\r\n [class.fd-calendar__item--range]=\"\r\n startSelectedDayIndex &&\r\n endSelectedDayIndex &&\r\n day.index > startSelectedDayIndex &&\r\n day.index < endSelectedDayIndex\r\n \"\r\n (dayClick)=\"onDayClick(day)\"\r\n (dayMouseMove)=\"onDayMouseMove(day)\"\r\n (dayMouseDown)=\"onDayMouseDown(day)\"\r\n (dayMouseUp)=\"onDayMouseUp(day)\"\r\n ></bc-day-number-box>\r\n </td>\r\n </tr>\r\n <ng-container *ngIf=\"!isPickerMode\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderDayTasks;\r\n context: {\r\n $implicit: weekTasksArray[weekIndex],\r\n maxRowTasks: maxRowTasks,\r\n weekIndex: weekIndex,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n weekDays: weekDays\r\n }\r\n \"\r\n ></ng-container>\r\n <tr fd-table-row>\r\n <td fd-table-cell *ngFor=\"let day of days\" class=\"more-fd\" (click)=\"onDayBoxSelect(day)\">\r\n <ng-container *ngIf=\"maxRowTasks.length < day.tasks.length\">\r\n <button\r\n fd-button\r\n (click)=\"onMoreButton($event, popover)\"\r\n [fdType]=\"'transparent'\"\r\n [compact]=\"true\"\r\n >\r\n {{ day.tasks?.length - maxRowTasks.length }}\r\n {{ 'More' | bbbTranslate }}\r\n </button>\r\n <fd-popover\r\n #popover\r\n [mobile]=\"deviceSize === 's'\"\r\n placement=\"bottom\"\r\n [focusTrapped]=\"true\"\r\n [focusAutoCapture]=\"true\"\r\n (isOpenChange)=\"onOpenPopoverChange($event)\"\r\n >\r\n <bc-day-event-list\r\n [day]=\"day\"\r\n [calendarFields]=\"calendarFields\"\r\n [deviceSize]=\"deviceSize\"\r\n [weekDays]=\"weekDays\"\r\n [rtl]=\"rtl\"\r\n [popover]=\"popover\"\r\n (deleteEvent)=\"deleteEvent.emit($event)\"\r\n (editEvent)=\"editEvent.emit($event)\"\r\n ></bc-day-event-list>\r\n </fd-popover>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</ng-template>\r\n\r\n<ng-template\r\n #renderDayTasks\r\n let-weekTasks\r\n let-maxRowTasks=\"maxRowTasks\"\r\n let-weekIndex=\"weekIndex\"\r\n let-deviceSize=\"deviceSize\"\r\n let-calendarFields=\"calendarFields\"\r\n let-weekDays=\"weekDays\"\r\n>\r\n <tr fd-table-row *ngFor=\"let rowTask of maxRowTasks; let i = index\">\r\n <ng-container *ngIf=\"!weekTasks[i] || weekTasks[i].length === 0\">\r\n <td fd-table-cell *ngFor=\"let day of weekDays\"></td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\r\n <td fd-table-cell [attr.colspan]=\"task.colSpan\" *ngIf=\"task.colSpan\">\r\n <ng-container *ngIf=\"task.event; else newDaySelect\">\r\n <bc-event-button\r\n [task]=\"task\"\r\n [rtl]=\"rtl\"\r\n [calendarFields]=\"calendarFields\"\r\n [deviceSize]=\"deviceSize\"\r\n (deleteEvent)=\"deleteEvent.emit($event)\"\r\n (editEvent)=\"editEvent.emit($event)\"\r\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\r\n ></bc-event-button>\r\n </ng-container>\r\n <ng-template #newDaySelect>\r\n <div style=\"width: 100%; height: 100%\" (click)=\"onDaySelect(weekIndex, dayIndex)\"></div>\r\n </ng-template>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n</ng-template>\r\n", styles: [":host{display:block}table{table-layout:fixed}.table-header td{padding:0!important}.table-content{width:100%;height:100%;border:none;border-spacing:0}.table-content td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:1.425rem}.table-content .row-day-number td:first-child{border-right:none}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}.weekday-header,.row-day-number td{width:100%}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.more-fd{text-align:center!important}.more-fd button{font-size:12px}.fd-calendar__item{font-size:.875rem;font-size:var(--sapFontSize, .875rem);line-height:1.4;line-height:var(--sapContent_LineHeight, 1.4);color:#32363a;color:var(--sapTextColor, #32363a);font-family:\"72\",\"72full\",Arial,Helvetica,sans-serif;font-family:var(--sapFontFamily, \"72\", \"72full\", Arial, Helvetica, sans-serif);font-weight:400;box-sizing:border-box;padding:0;border:0;overflow:hidden;position:relative;height:2.75rem;margin:.0625rem;min-width:2.125rem;border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background-color:#fafafa;background-color:var(--sapLegend_WorkingBackground, #fafafa);flex:1 1 .375rem;border:none!important;padding:1px!important}.fd-calendar__item.fd-calendar__item--other-month{background-color:var(--sapList_Background, #fff)}.fd-calendar__item.fd-calendar__item--weekend{background-color:var(--sapLegend_NotWorkingBackground, #dedede)}.fd-calendar__item.is-active{background-color:var(--sapContent_Selected_Background, #0854a0);border:var(--fdCalendar_Active_Item_Border, none)}.fd-calendar__item.is-active ::ng-deep span{color:var(--sapContent_Selected_TextColor, #fff)}.fd-calendar__item.fd-calendar__item--range{border:.0625rem solid var(--sapList_SelectionBorderColor, #0854a0);background-color:var(--sapList_SelectionBackgroundColor, #e5f0fa)}.noborder{border:none!important}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i4.DeprecatedButtonContentDensityDirective, selector: "[fd-button][compact]" }, { kind: "component", type: i5$1.PopoverComponent, selector: "fd-popover", inputs: ["title", "trigger", "fixedPosition", "id", "mobile", "mobileConfig"] }, { kind: "component", type: i6$1.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i6$1.TableHeaderDirective, selector: "[fdTableHeader], [fd-table-header]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i6$1.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i6$1.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i6$1.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "tabindex", "hoverable", "fitContent", "noPadding", "noData", "key", "cellFocusedEventAnnouncer"] }, { kind: "directive", type: i6$1.DeprecatedTableCompactDirective, selector: "table[fd-table][compact]" }, { kind: "component", type: DayNumberBoxComponent, selector: "bc-day-number-box", inputs: ["isWeekMode", "isSingleDay", "day", "isPickerMode", "itemInRange", "isActive"], outputs: ["dayClick", "dayMouseDown", "dayMouseUp", "dayMouseMove"] }, { kind: "component", type: EventButtonComponent, selector: "bc-event-button", inputs: ["buttonTemplate", "calendarFields", "task", "rtl", "canDelete", "canEdit", "deviceSize"], outputs: ["deleteEvent", "editEvent", "openPopoverChange"] }, { kind: "component", type: DayEventListComponent, selector: "bc-day-event-list", inputs: ["day", "deviceSize", "weekDays", "calendarFields", "rtl", "canDelete", "canEdit", "popover"], outputs: ["deleteEvent", "editEvent", "openPopOver"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }, { kind: "pipe", type: DaysInWeekPipe, name: "daysInWeek" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1857
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: MonthDaysComponent, decorators: [{
1858
+ type: Component,
1859
+ args: [{ selector: 'bc-month-days', changeDetection: ChangeDetectionStrategy.OnPush, template: "<table fd-table class=\"table-header\" [compact]=\"true\">\r\n <thead fd-table-header>\r\n <tr fd-table-row>\r\n <th\r\n class=\"weekday-header\"\r\n *ngFor=\"let weekDay of selectedWeekDays\"\r\n fd-table-cell\r\n [class.noborder]=\"isPickerMode\"\r\n >\r\n {{ weekDay }}\r\n </th>\r\n </tr>\r\n </thead>\r\n <tbody fd-table-body>\r\n <ng-container *ngFor=\"let weekDay of numberOfWeek\">\r\n <tr fd-table-row>\r\n <td\r\n [style.height.px]=\"dayHeight\"\r\n fd-table-cell\r\n colspan=\"7\"\r\n [style.border]=\"isPickerMode ? 'none' : null\"\r\n >\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderTasks;\r\n context: {\r\n $implicit: isPickerMode ? null : moDataList[weekDay],\r\n weekIndex: weekDay,\r\n days: days | daysInWeek: weekDay,\r\n maxRowTasks: maxRowTasks,\r\n weekDays: weekDays,\r\n calendarFields: calendarFields,\r\n rtl: rtl,\r\n isPickerMode: isPickerMode\r\n }\r\n \"\r\n ></ng-container>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n</table>\r\n<ng-template\r\n #renderTasks\r\n let-task\r\n let-weekIndex=\"weekIndex\"\r\n let-weekDays=\"weekDays\"\r\n let-days=\"days\"\r\n let-maxRowTasks=\"maxRowTasks\"\r\n let-calendarFields=\"calendarFields\"\r\n let-deviceSize=\"deviceSize\"\r\n let-rtl=\"rtl\"\r\n let-isPickerMode=\"isPickerMode\"\r\n>\r\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\r\n <tbody>\r\n <tr fd-table-row class=\"row-day-number\">\r\n <td fd-table-cell *ngFor=\"let day of days | daysInWeek: weekIndex\" [class.noborder]=\"isPickerMode\">\r\n <bc-day-number-box\r\n [class.fd-calendar__item]=\"isPickerMode\"\r\n [class.fd-calendar__item--other-month]=\"isPickerMode && !day.isInMonth\"\r\n [class.fd-calendar__item--weekend]=\"isPickerMode && day.isWeekend\"\r\n [isPickerMode]=\"isPickerMode\"\r\n [day]=\"day\"\r\n [class.is-active]=\"day.index === startSelectedDayIndex || day.index === endSelectedDayIndex\"\r\n [class.fd-calendar__item--range]=\"\r\n startSelectedDayIndex &&\r\n endSelectedDayIndex &&\r\n day.index > startSelectedDayIndex &&\r\n day.index < endSelectedDayIndex\r\n \"\r\n (dayClick)=\"onDayClick(day)\"\r\n (dayMouseMove)=\"onDayMouseMove(day)\"\r\n (dayMouseDown)=\"onDayMouseDown(day)\"\r\n (dayMouseUp)=\"onDayMouseUp(day)\"\r\n ></bc-day-number-box>\r\n </td>\r\n </tr>\r\n <ng-container *ngIf=\"!isPickerMode\">\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n renderDayTasks;\r\n context: {\r\n $implicit: weekTasksArray[weekIndex],\r\n maxRowTasks: maxRowTasks,\r\n weekIndex: weekIndex,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n weekDays: weekDays\r\n }\r\n \"\r\n ></ng-container>\r\n <tr fd-table-row>\r\n <td fd-table-cell *ngFor=\"let day of days\" class=\"more-fd\" (click)=\"onDayBoxSelect(day)\">\r\n <ng-container *ngIf=\"maxRowTasks.length < day.tasks.length\">\r\n <button\r\n fd-button\r\n (click)=\"onMoreButton($event, popover)\"\r\n [fdType]=\"'transparent'\"\r\n [compact]=\"true\"\r\n >\r\n {{ day.tasks?.length - maxRowTasks.length }}\r\n {{ 'More' | bbbTranslate }}\r\n </button>\r\n <fd-popover\r\n #popover\r\n [mobile]=\"deviceSize === 's'\"\r\n placement=\"bottom\"\r\n [focusTrapped]=\"true\"\r\n [focusAutoCapture]=\"true\"\r\n (isOpenChange)=\"onOpenPopoverChange($event)\"\r\n >\r\n <bc-day-event-list\r\n [day]=\"day\"\r\n [calendarFields]=\"calendarFields\"\r\n [deviceSize]=\"deviceSize\"\r\n [weekDays]=\"weekDays\"\r\n [rtl]=\"rtl\"\r\n [popover]=\"popover\"\r\n (deleteEvent)=\"deleteEvent.emit($event)\"\r\n (editEvent)=\"editEvent.emit($event)\"\r\n ></bc-day-event-list>\r\n </fd-popover>\r\n </ng-container>\r\n </td>\r\n </tr>\r\n </ng-container>\r\n </tbody>\r\n </table>\r\n</ng-template>\r\n\r\n<ng-template\r\n #renderDayTasks\r\n let-weekTasks\r\n let-maxRowTasks=\"maxRowTasks\"\r\n let-weekIndex=\"weekIndex\"\r\n let-deviceSize=\"deviceSize\"\r\n let-calendarFields=\"calendarFields\"\r\n let-weekDays=\"weekDays\"\r\n>\r\n <tr fd-table-row *ngFor=\"let rowTask of maxRowTasks; let i = index\">\r\n <ng-container *ngIf=\"!weekTasks[i] || weekTasks[i].length === 0\">\r\n <td fd-table-cell *ngFor=\"let day of weekDays\"></td>\r\n </ng-container>\r\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\r\n <td fd-table-cell [attr.colspan]=\"task.colSpan\" *ngIf=\"task.colSpan\">\r\n <ng-container *ngIf=\"task.event; else newDaySelect\">\r\n <bc-event-button\r\n [task]=\"task\"\r\n [rtl]=\"rtl\"\r\n [calendarFields]=\"calendarFields\"\r\n [deviceSize]=\"deviceSize\"\r\n (deleteEvent)=\"deleteEvent.emit($event)\"\r\n (editEvent)=\"editEvent.emit($event)\"\r\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\r\n ></bc-event-button>\r\n </ng-container>\r\n <ng-template #newDaySelect>\r\n <div style=\"width: 100%; height: 100%\" (click)=\"onDaySelect(weekIndex, dayIndex)\"></div>\r\n </ng-template>\r\n </td>\r\n </ng-container>\r\n </tr>\r\n</ng-template>\r\n", styles: [":host{display:block}table{table-layout:fixed}.table-header td{padding:0!important}.table-content{width:100%;height:100%;border:none;border-spacing:0}.table-content td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:1.425rem}.table-content .row-day-number td:first-child{border-right:none}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}.weekday-header,.row-day-number td{width:100%}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.more-fd{text-align:center!important}.more-fd button{font-size:12px}.fd-calendar__item{font-size:.875rem;font-size:var(--sapFontSize, .875rem);line-height:1.4;line-height:var(--sapContent_LineHeight, 1.4);color:#32363a;color:var(--sapTextColor, #32363a);font-family:\"72\",\"72full\",Arial,Helvetica,sans-serif;font-family:var(--sapFontFamily, \"72\", \"72full\", Arial, Helvetica, sans-serif);font-weight:400;box-sizing:border-box;padding:0;border:0;overflow:hidden;position:relative;height:2.75rem;margin:.0625rem;min-width:2.125rem;border-radius:.25rem;border-radius:var(--sapElement_BorderCornerRadius, .25rem);background-color:#fafafa;background-color:var(--sapLegend_WorkingBackground, #fafafa);flex:1 1 .375rem;border:none!important;padding:1px!important}.fd-calendar__item.fd-calendar__item--other-month{background-color:var(--sapList_Background, #fff)}.fd-calendar__item.fd-calendar__item--weekend{background-color:var(--sapLegend_NotWorkingBackground, #dedede)}.fd-calendar__item.is-active{background-color:var(--sapContent_Selected_Background, #0854a0);border:var(--fdCalendar_Active_Item_Border, none)}.fd-calendar__item.is-active ::ng-deep span{color:var(--sapContent_Selected_TextColor, #fff)}.fd-calendar__item.fd-calendar__item--range{border:.0625rem solid var(--sapList_SelectionBorderColor, #0854a0);background-color:var(--sapList_SelectionBackgroundColor, #e5f0fa)}.noborder{border:none!important}\n"] }]
1860
+ }], ctorParameters: function () { return [{ type: DaysInWeekPipe }, { type: i0.ChangeDetectorRef }, { type: CalendarService }]; }, propDecorators: { monthWeeksCount: [{
1861
+ type: Input
1862
+ }], weekDays: [{
1863
+ type: Input
1864
+ }], weekDaysMin: [{
1865
+ type: Input
1866
+ }], today: [{
1867
+ type: Input
1868
+ }], containerHeight: [{
1869
+ type: Input
1870
+ }], days: [{
1871
+ type: Input
1872
+ }], calendarFields: [{
1873
+ type: Input
1874
+ }], rtl: [{
1875
+ type: Input
1876
+ }], deviceSize: [{
1877
+ type: Input
1878
+ }], moDataList: [{
1879
+ type: Input
1880
+ }], datePicker: [{
1881
+ type: Input
1882
+ }], rangePicker: [{
1883
+ type: Input
1884
+ }], startSelectedDayIndex: [{
1885
+ type: Input
1886
+ }], endSelectedDayIndex: [{
1887
+ type: Input
1888
+ }], editEvent: [{
1889
+ type: Output
1890
+ }], deleteEvent: [{
1891
+ type: Output
1892
+ }], daySelect: [{
1893
+ type: Output
1894
+ }], dayClick: [{
1895
+ type: Output
1896
+ }], dayMouseMove: [{
1897
+ type: Output
1898
+ }], dayMouseUp: [{
1899
+ type: Output
1900
+ }], dayMouseDown: [{
1901
+ type: Output
1902
+ }], showEvent: [{
1903
+ type: Output
1904
+ }] } });
1905
+
1906
+ class CalendarHeaderComponent extends BaseComponent {
1907
+ constructor() {
1908
+ super(...arguments);
1909
+ this.hideMode = false;
1910
+ this.prevTap = new EventEmitter();
1911
+ this.nextTap = new EventEmitter();
1912
+ this.modeChange = new EventEmitter();
1913
+ this.rangeChange = new EventEmitter();
1914
+ this.today = new EventEmitter();
1915
+ this.monthName = '';
1916
+ }
1917
+ onModeChange(mode) {
1918
+ this.modeChange.emit(mode);
1919
+ }
1920
+ onRangeChange(range) {
1921
+ this.rangeChange.emit(range);
1922
+ }
1923
+ onPrint() { }
1924
+ }
1925
+ CalendarHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarHeaderComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
1926
+ CalendarHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarHeaderComponent, selector: "bc-calendar-header", inputs: { monthInfo: "monthInfo", weekModeDays: "weekModeDays", hideMode: "hideMode", modeTitle: "modeTitle", title: "title", rtl: "rtl", mode: "mode" }, outputs: { prevTap: "prevTap", nextTap: "nextTap", modeChange: "modeChange", rangeChange: "rangeChange", today: "today" }, usesInheritance: true, ngImport: i0, template: "<fd-toolbar [shouldOverflow]=\"true\" [fdType]=\"'transparent'\">\r\n <fdp-button fd-toolbar-item [label]=\"'DateR_Today' | bbbTranslate\" (click)=\"today.emit()\"></fdp-button>\r\n <fdp-button\r\n buttonType=\"transparent\"\r\n fd-toolbar-item\r\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\r\n (click)=\"prevTap.emit()\"\r\n ></fdp-button>\r\n <fdp-button\r\n buttonType=\"transparent\"\r\n fd-toolbar-item\r\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\r\n (click)=\"nextTap.emit()\"\r\n ></fdp-button>\r\n <h3 fd-title fd-toolbar-item>{{ title }}</h3>\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <fdp-button fd-toolbar-item glyph=\"print\" (click)=\"onPrint()\" buttonType=\"transparent\"></fdp-button>\r\n <bc-calendar-selection-days\r\n fd-toolbar-item\r\n [monthInfo]=\"monthInfo\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n\r\n <fd-split-button\r\n *ngIf=\"!hideMode\"\r\n fd-toolbar-item\r\n [fixedWidth]=\"false\"\r\n [mainAction]=\"{\r\n mainActionTitle: modeTitle,\r\n keepMainAction: true\r\n }\"\r\n >\r\n <fd-menu>\r\n <li fd-menu-item (click)=\"onModeChange('day')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Day' | bbbTranslate }}</span>\r\n </div>\r\n </li>\r\n <li fd-menu-item (click)=\"onModeChange('week')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Week' | bbbTranslate }} </span>\r\n </div>\r\n </li>\r\n <li fd-menu-item (click)=\"onModeChange('month')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Month' | bbbTranslate }}</span>\r\n </div>\r\n </li>\r\n <!-- <li fd-menu-item (click)=\"onModeChange('year')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ \"Year\" | bbbTranslate }}</span>\r\n </div>\r\n </li> -->\r\n </fd-menu>\r\n </fd-split-button>\r\n</fd-toolbar>\r\n", styles: [":host{display:block;background-color:var(--sapList_Background, #fff)}::ng-deep span.fd-toolbar__spacer{display:none}::ng-deep .fd-toolbar{border:none}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2$4.MenuComponent, selector: "fd-menu", inputs: ["mobile", "disabled", "focusTrapped", "openOnHoverTime", "mobileConfig", "ariaLabel", "ariaLabelledby", "id"], outputs: ["activePath"] }, { kind: "component", type: i2$4.MenuItemComponent, selector: "li[fd-menu-item]", inputs: ["disabled", "itemId", "submenu"], outputs: ["onSelect"], exportAs: ["fd-menu-item"] }, { kind: "directive", type: i2$4.MenuInteractiveDirective, selector: "[fd-menu-interactive]" }, { kind: "directive", type: i2$4.MenuTitleDirective, selector: "[fd-menu-title]" }, { kind: "component", type: i3$3.TitleComponent, selector: "h1[fd-title], h2[fd-title], h3[fd-title], h4[fd-title], h5[fd-title], h6[fd-title]", inputs: ["headerSize", "wrap"], exportAs: ["fd-title"] }, { kind: "component", type: i4$3.SplitButtonComponent, selector: "fd-split-button", inputs: ["glyph", "disabled", "mainActionTitle", "fdType", "expandButtonAriaLabel", "expandButtonTitle", "selected", "fixedWidth", "mainAction", "arialLabel"], outputs: ["primaryButtonClicked"] }, { kind: "component", type: i6.ToolbarComponent, selector: "fd-toolbar", inputs: ["class", "shouldOverflow", "fdType", "hasTitle", "title", "active", "clearBorder", "forceOverflow", "tabindex"] }, { kind: "directive", type: i6.ToolbarItemDirective, selector: "[fd-toolbar-item]" }, { kind: "component", type: i6.ToolbarSpacerComponent, selector: "fd-toolbar-spacer", inputs: ["width", "class", "fixed"] }, { kind: "component", type: i7.ButtonComponent, selector: "fdp-button", inputs: ["glyphPosition", "label", "glyph", "buttonType", "title", "ariaSelected", "ariaDisabled", "ariaExpanded", "ariaControlsId", "ariaPressed", "name", "type", "value"], outputs: ["buttonClicked"] }, { kind: "component", type: CalendarSelectionDaysComponent, selector: "bc-calendar-selection-days", inputs: ["startSelectedDayIndex", "endSelectedDayIndex", "monthInfo"], outputs: ["rangeChange"] }, { kind: "pipe", type: i2.BbbTranslatePipe, name: "bbbTranslate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1927
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarHeaderComponent, decorators: [{
1928
+ type: Component,
1929
+ args: [{ selector: 'bc-calendar-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<fd-toolbar [shouldOverflow]=\"true\" [fdType]=\"'transparent'\">\r\n <fdp-button fd-toolbar-item [label]=\"'DateR_Today' | bbbTranslate\" (click)=\"today.emit()\"></fdp-button>\r\n <fdp-button\r\n buttonType=\"transparent\"\r\n fd-toolbar-item\r\n [glyph]=\"rtl ? 'navigation-right-arrow' : 'navigation-left-arrow'\"\r\n (click)=\"prevTap.emit()\"\r\n ></fdp-button>\r\n <fdp-button\r\n buttonType=\"transparent\"\r\n fd-toolbar-item\r\n [glyph]=\"rtl ? 'navigation-left-arrow' : 'navigation-right-arrow'\"\r\n (click)=\"nextTap.emit()\"\r\n ></fdp-button>\r\n <h3 fd-title fd-toolbar-item>{{ title }}</h3>\r\n <fd-toolbar-spacer></fd-toolbar-spacer>\r\n <fdp-button fd-toolbar-item glyph=\"print\" (click)=\"onPrint()\" buttonType=\"transparent\"></fdp-button>\r\n <bc-calendar-selection-days\r\n fd-toolbar-item\r\n [monthInfo]=\"monthInfo\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n\r\n <fd-split-button\r\n *ngIf=\"!hideMode\"\r\n fd-toolbar-item\r\n [fixedWidth]=\"false\"\r\n [mainAction]=\"{\r\n mainActionTitle: modeTitle,\r\n keepMainAction: true\r\n }\"\r\n >\r\n <fd-menu>\r\n <li fd-menu-item (click)=\"onModeChange('day')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Day' | bbbTranslate }}</span>\r\n </div>\r\n </li>\r\n <li fd-menu-item (click)=\"onModeChange('week')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Week' | bbbTranslate }} </span>\r\n </div>\r\n </li>\r\n <li fd-menu-item (click)=\"onModeChange('month')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ 'Month' | bbbTranslate }}</span>\r\n </div>\r\n </li>\r\n <!-- <li fd-menu-item (click)=\"onModeChange('year')\">\r\n <div fd-menu-interactive>\r\n <span fd-menu-title>{{ \"Year\" | bbbTranslate }}</span>\r\n </div>\r\n </li> -->\r\n </fd-menu>\r\n </fd-split-button>\r\n</fd-toolbar>\r\n", styles: [":host{display:block;background-color:var(--sapList_Background, #fff)}::ng-deep span.fd-toolbar__spacer{display:none}::ng-deep .fd-toolbar{border:none}\n"] }]
1930
+ }], propDecorators: { monthInfo: [{
1931
+ type: Input
1932
+ }], weekModeDays: [{
1933
+ type: Input
1934
+ }], hideMode: [{
1935
+ type: Input
1936
+ }], modeTitle: [{
1937
+ type: Input
1938
+ }], title: [{
1939
+ type: Input
1940
+ }], rtl: [{
1941
+ type: Input
1942
+ }], mode: [{
1943
+ type: Input
1944
+ }], prevTap: [{
1945
+ type: Output
1946
+ }], nextTap: [{
1947
+ type: Output
1948
+ }], modeChange: [{
1949
+ type: Output
1950
+ }], rangeChange: [{
1951
+ type: Output
1952
+ }], today: [{
1953
+ type: Output
1954
+ }] } });
1955
+
1956
+ class FromToTimePipe {
1957
+ constructor() { }
1958
+ transform(task) {
1959
+ const event = task.event;
1960
+ const fromDateInfo = event.$StartDateInfo;
1961
+ const toDateInfo = event.$EndDateInfo;
1962
+ const fromTime = `${getPadedTime(fromDateInfo.hour)}:${getPadedTime(fromDateInfo.minutes)}`;
1963
+ const toTime = `${getPadedTime(toDateInfo.hour)}:${getPadedTime(toDateInfo.minutes)}`;
1964
+ return `${fromTime} - ${toTime}`;
1965
+ }
1966
+ }
1967
+ FromToTimePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FromToTimePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
1968
+ FromToTimePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: FromToTimePipe, name: "fromToTime" });
1969
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: FromToTimePipe, decorators: [{
1970
+ type: Pipe,
1971
+ args: [{
1972
+ name: 'fromToTime'
1973
+ }]
1974
+ }], ctorParameters: function () { return []; } });
1975
+
1976
+ class CalendarWeekComponent extends BaseComponent {
1977
+ constructor(_cdr, _calendarService) {
1978
+ super();
1979
+ this._cdr = _cdr;
1980
+ this._calendarService = _calendarService;
1981
+ this.canDelete = false;
1982
+ this.canAdd = false;
1983
+ this.canEdit = false;
1984
+ this.editEvent = new EventEmitter();
1985
+ this.deleteEvent = new EventEmitter();
1986
+ this.showEvent = new EventEmitter();
1987
+ this.daySelect = new EventEmitter();
1988
+ this.dayClick = new EventEmitter();
1989
+ this.taskHeight = 30;
1990
+ this.maxTaskCount = 4;
1991
+ this._hasPopoverOpened = [];
1992
+ }
1993
+ ngOnChanges(changes) {
1994
+ super.ngOnChanges(changes);
1995
+ if (changes.deviceSize && !changes.deviceSize.firstChange) {
1996
+ this.prepareWeekDays(changes.deviceSize.currentValue);
1997
+ }
1998
+ if (changes.moDataList && !changes.moDataList.firstChange) {
1999
+ this._prepareDaysTasks(changes.moDataList.currentValue);
2000
+ this._cdr.detectChanges();
2001
+ }
2002
+ if (changes.days && !changes.days.firstChange) {
2003
+ this._prepareDaysTasks(this.moDataList);
2004
+ this._cdr.detectChanges();
2005
+ }
2006
+ }
2007
+ ngOnInit() {
2008
+ super.ngOnInit();
2009
+ this.hours = new Array(24).fill(0).map((x, i) => `${i > 9 ? '' + i : '0' + i}:00`);
2010
+ this.prepareWeekDays(this.deviceSize);
2011
+ this._prepareDaysTasks(this.moDataList);
2012
+ }
2013
+ onDayBoxSelect(day) {
2014
+ if (!this.canAdd) {
2015
+ return;
2016
+ }
2017
+ this._fireDaySelect(day.date);
2018
+ }
2019
+ onOpenPopoverChange(isOpen) {
2020
+ if (isOpen) {
2021
+ this._hasPopoverOpened.push(true);
2022
+ }
2023
+ else {
2024
+ setTimeout(() => {
2025
+ this._hasPopoverOpened = [];
2026
+ }, 0);
2027
+ }
2028
+ }
2029
+ onColumnClick(e, day) {
2030
+ const { offsetY } = e;
2031
+ const hour = Math.floor(offsetY / 50);
2032
+ const minutes = Math.floor((offsetY % 50) / 15) * 15;
2033
+ const date = new Date(day.date);
2034
+ date.setHours(hour);
2035
+ date.setMinutes(minutes);
2036
+ this._fireDaySelect(date);
2037
+ }
2038
+ onEventButton(e) {
2039
+ if (e.currentTarget?.localName === 'bc-event-button') {
2040
+ PreventDefaulEvent(e);
2041
+ }
2042
+ }
2043
+ onMoreButton(e, popover) {
2044
+ PreventDefaulEvent(e);
2045
+ this._openPopover(popover);
2046
+ }
2047
+ onDayClick(day) {
2048
+ this.selected = day;
2049
+ this.dayClick.emit(day);
2050
+ }
2051
+ _fireDaySelect(date) {
2052
+ if (this._hasPopoverOpened.length === 0) {
2053
+ this.daySelect.emit(moment(date));
2054
+ }
2055
+ }
2056
+ _openPopover(popover) {
2057
+ if (popover.isOpen) {
2058
+ this._hasPopoverOpened.push(popover);
2059
+ }
2060
+ else {
2061
+ this._hasPopoverOpened.pop();
2062
+ }
2063
+ }
2064
+ prepareWeekDays(deviceSize) {
2065
+ if (deviceSize !== 's' && deviceSize !== 'm') {
2066
+ this.selectedWeekDays = this.weekDays;
2067
+ }
2068
+ else {
2069
+ this.selectedWeekDays = this.weekDaysMin;
2070
+ }
2071
+ }
2072
+ _prepareDaysTasks(calendarTasks) {
2073
+ const calendarFields = this.calendarFields;
2074
+ // Sort all Tasks
2075
+ const moDataList = this._calendarService.sortTasks(calendarTasks, calendarFields);
2076
+ const taskHeight = 50;
2077
+ this.days.forEach((day) => (day.tasks = []));
2078
+ const weekTasksArray = [];
2079
+ const days = this.days;
2080
+ const week = this._calendarService.createWeekTask(days, moDataList, calendarFields, taskHeight);
2081
+ weekTasksArray.push(week);
2082
+ // به ازای هر ردیف تسک باید تعداد 7 ستون اضافه گردد و برای ستونی که تسکی ندارد یک جای خالی colspan 1 میگذاریم
2083
+ weekTasksArray.forEach((weekTask) => {
2084
+ this._calendarService.fillWeek(weekTask, days.length);
2085
+ });
2086
+ const tasks = [];
2087
+ let counter = 0;
2088
+ Object.values(weekTasksArray).forEach(() => {
2089
+ Object.values(week).forEach((element) => {
2090
+ const filtered = element.some((c) => c.colSpan > 1 || (c.colSpan === 1 && !c.inDay && c.event));
2091
+ if (filtered) {
2092
+ tasks[counter.toString()] = element;
2093
+ counter++;
2094
+ }
2095
+ });
2096
+ });
2097
+ this.weekTasksArray = tasks;
2098
+ }
2099
+ }
2100
+ CalendarWeekComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarWeekComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: CalendarService }], target: i0.ɵɵFactoryTarget.Component });
2101
+ CalendarWeekComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarWeekComponent, selector: "bc-calendar-week", inputs: { weekDays: "weekDays", weekDaysMin: "weekDaysMin", today: "today", containerHeight: "containerHeight", calendarFields: "calendarFields", rtl: "rtl", inDialog: "inDialog", deviceSize: "deviceSize", moDataList: "moDataList", days: "days", canDelete: "canDelete", canAdd: "canAdd", canEdit: "canEdit" }, outputs: { editEvent: "editEvent", deleteEvent: "deleteEvent", showEvent: "showEvent", daySelect: "daySelect", dayClick: "dayClick" }, viewQueries: [{ propertyName: "tableTopEl", first: true, predicate: ["tableTop"], descendants: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div\n class=\"table-container\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n style=\"overflow-y: hidden; flex-shrink: 0\"\n #tableTop\n>\n <table fd-table class=\"table-top\" [compact]=\"true\" [attr.daysCount]=\"days.length\">\n <tbody fd-table-body>\n <tr fd-table-row class=\"week-days\">\n <td class=\"td-time\"></td>\n <td [attr.rtl]=\"rtl\" class=\"weekday-header\" *ngFor=\"let day of days\" fd-table-cell style=\"width: 100%\">\n {{ day.dayName }}\n </td>\n </tr>\n <tr fd-table-row class=\"week-numbers\">\n <td class=\"td-time\"></td>\n <td fd-table-cell *ngFor=\"let day of days\" [attr.rtl]=\"rtl\">\n <bc-day-number-box\n [day]=\"day\"\n [isWeekMode]=\"true\"\n [isSingleDay]=\"days.length === 1\"\n (dayClick)=\"onDayClick(day)\"\n ></bc-day-number-box>\n </td>\n </tr>\n <ng-container\n *ngTemplateOutlet=\"\n renderDayTasks;\n context: {\n $implicit: weekTasksArray,\n maxRowTasks: maxRowTasks,\n weekIndex: 0\n }\n \"\n ></ng-container>\n </tbody>\n </table>\n</div>\n<ng-template #renderDayTasks let-weekTasks let-maxRowTasks=\"maxRowTasks\" let-weekIndex=\"weekIndex\">\n <ng-container *ngFor=\"let rowTask of weekTasks | keyvalue; let i = index\">\n <tr fd-table-row class=\"task-row\">\n <td fd-table-cell class=\"fd-time\" style=\"border: none\"></td>\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\n <td\n fd-table-cell\n *ngIf=\"task.colSpan && dayIndex < days.length\"\n [attr.colspan]=\"task.colSpan > days.length ? days.length : task.colSpan\"\n class=\"td-button\"\n [attr.hasevent]=\"!!task.event\"\n >\n <bc-event-button\n *ngIf=\"task.event && !task.inDay; else newDaySelect\"\n [task]=\"task\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-button>\n <ng-template #newDaySelect>\n <div style=\"width: 100%; height: 100%\" [attr.newDay]=\"true\"></div>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n</ng-template>\n<div\n class=\"table-container\"\n style=\"overflow-y: hidden; overflow-x: auto; flex-grow: 1\"\n [style.height.px]=\"inDialog ? containerHeight : null\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n>\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\n <tbody>\n <tr class=\"tr-time\" style=\"height: 0rem\">\n <td class=\"td-time\" style=\"height: 0rem\"></td>\n <td [colspan]=\"days.length\" style=\"position: relative\" style=\"height: 0rem\">\n <div class=\"tasks-wrapper\">\n <div *ngFor=\"let hour of hours\" class=\"row-border\"></div>\n </div>\n </td>\n </tr>\n <tr fd-table-row style=\"height: 100%\">\n <td fd-table-cell class=\"td-time\">\n <div class=\"calc-time\">\n <div *ngFor=\"let hour of hours\">{{ hour }}</div>\n </div>\n </td>\n <td *ngFor=\"let day of days\" fd-table-cell (click)=\"onColumnClick($event, day)\">\n <div style=\"position: relative; width: 100%; height: 100%\">\n <ng-container *ngFor=\"let task of day.tasks; let index = index\">\n <bc-event-button\n (click)=\"onEventButton($event)\"\n *ngIf=\"task.inDay\"\n [style.background]=\"task.event[calendarFields.Color]\"\n [style.top.px]=\"task.top\"\n [style.right]=\"rtl ? 'calc(' + index * (100 / day.tasks.length) + '%)' : null\"\n [style.left]=\"rtl ? null : 'calc(' + index * (100 / day.tasks.length) + '%)'\"\n [style.width]=\"'calc(100% - ' + index * (100 / day.tasks.length) + '%)'\"\n [style.height.px]=\"task.height\"\n [style.maxHeight.px]=\"task.height\"\n [style.opacity]=\"task.opacity\"\n [style.zIndex]=\"index\"\n [buttonTemplate]=\"eventButtonTemplate\"\n class=\"task-day\"\n [task]=\"task\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\n ></bc-event-button>\n </ng-container>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n<ng-template #eventButtonTemplate let-task let-popover=\"popover\" let-calendarFields=\"calendarFields\">\n <button\n [style.background]=\"task.event[calendarFields.Color]\"\n class=\"task-title\"\n [style.border]=\"'1px solid white'\"\n fd-button\n [compact]=\"true\"\n [fdType]=\"'emphasized'\"\n [fdPopoverTrigger]=\"popover\"\n [label]=\"task.height > 49 ? '' : task.event[calendarFields.Title] + ' ' + (task | fromToTime)\"\n >\n <ng-container *ngIf=\"task.height > 49\">\n <span class=\"ellipsis\">{{ task.event[calendarFields.Title] }}</span>\n <span class=\"ellipsis\">{{ task | fromToTime }}</span>\n </ng-container>\n </button>\n</ng-template>\n", styles: [":host{display:flex;height:95%;width:100%;flex-direction:column;align-items:stretch;justify-content:stretch}table.table-top{border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.table-top{table-layout:fixed}.table-top td{padding-right:1px!important;padding-left:1px!important}.tr-time{height:1px;max-height:1px!important;width:100%}.tr-time td{height:1px!important;max-height:1px!important;padding:0!important}.task-row td{height:1.425rem!important;padding:0!important}.table-content{width:100%;border-spacing:0;position:relative}.table-content .tasks-wrapper{position:absolute;opacity:.3;height:100%;width:calc(100% - 50px)}.table-content .td-time{padding:0!important}.table-content .td-time .calc-time{display:flex;flex-direction:column;height:100%;justify-content:start;align-items:center}.table-content .td-time .calc-time div{height:50px;border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);width:100%;display:flex;justify-content:center}.table-content .td-time tbody{border-spacing:0}.td-time{width:50px!important;max-width:50px!important}.row-border{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:50px}.task-day{position:absolute!important;display:flex;flex-direction:column;align-items:start}.weekday-header td,.week-days td,.week-numbers td{text-align:right}table[dayscount=\"1\"] .week-days td[rtl=true],table[dayscount=\"1\"] .week-numbers td[rtl=true]{text-align:right!important}table[dayscount=\"1\"] .week-days td[rtl=false],table[dayscount=\"1\"] .week-numbers td[rtl=false]{text-align:left!important}table[dayscount=\"1\"] .week-days td,table[dayscount=\"1\"] .week-numbers td{padding-left:1rem!important;padding-right:1rem!important}table[dayscount=\"1\"] .week-days td.weekday-header,table[dayscount=\"1\"] .week-numbers td.weekday-header{padding-left:2rem!important;padding-right:2rem!important}.week-days td{border:none;text-align:center;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.week-numbers td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.td-button{border:none!important;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)!important;padding:1px!important}.task-title{display:flex;flex-direction:column;align-items:start!important;font-weight:400;width:100%;max-width:100%;min-width:100%;height:100%;max-height:100%;min-height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i4.ButtonComponent, selector: "button[fd-button], a[fd-button]", inputs: ["class"], exportAs: ["fd-button"] }, { kind: "directive", type: i4.DeprecatedButtonContentDensityDirective, selector: "[fd-button][compact]" }, { kind: "directive", type: i5$1.PopoverTriggerDirective, selector: "[fdPopoverTrigger], [fd-popover-trigger]", inputs: ["fdPopoverTrigger"] }, { kind: "component", type: i6$1.TableComponent, selector: "table[fd-table]", inputs: ["noBorderX", "noBorderY", "popIn", "responsive", "keys", "allCellsFocusable"], exportAs: ["fd-table"] }, { kind: "directive", type: i6$1.TableBodyDirective, selector: "[fdTableBody], [fd-table-body]", inputs: ["noBorderX", "noBorderY"] }, { kind: "directive", type: i6$1.TableRowDirective, selector: "[fdTableRow], [fd-table-row]", inputs: ["activable", "highlightActive", "hoverable", "focusable", "main", "secondary", "active"] }, { kind: "directive", type: i6$1.TableCellDirective, selector: "[fdTableCell], [fd-table-cell]", inputs: ["noBorderX", "noBorderY", "activable", "focusable", "tabindex", "hoverable", "fitContent", "noPadding", "noData", "key", "cellFocusedEventAnnouncer"] }, { kind: "directive", type: i6$1.DeprecatedTableCompactDirective, selector: "table[fd-table][compact]" }, { kind: "component", type: DayNumberBoxComponent, selector: "bc-day-number-box", inputs: ["isWeekMode", "isSingleDay", "day", "isPickerMode", "itemInRange", "isActive"], outputs: ["dayClick", "dayMouseDown", "dayMouseUp", "dayMouseMove"] }, { kind: "component", type: EventButtonComponent, selector: "bc-event-button", inputs: ["buttonTemplate", "calendarFields", "task", "rtl", "canDelete", "canEdit", "deviceSize"], outputs: ["deleteEvent", "editEvent", "openPopoverChange"] }, { kind: "pipe", type: i3.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: FromToTimePipe, name: "fromToTime" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2102
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarWeekComponent, decorators: [{
2103
+ type: Component,
2104
+ args: [{ selector: 'bc-calendar-week', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"table-container\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n style=\"overflow-y: hidden; flex-shrink: 0\"\n #tableTop\n>\n <table fd-table class=\"table-top\" [compact]=\"true\" [attr.daysCount]=\"days.length\">\n <tbody fd-table-body>\n <tr fd-table-row class=\"week-days\">\n <td class=\"td-time\"></td>\n <td [attr.rtl]=\"rtl\" class=\"weekday-header\" *ngFor=\"let day of days\" fd-table-cell style=\"width: 100%\">\n {{ day.dayName }}\n </td>\n </tr>\n <tr fd-table-row class=\"week-numbers\">\n <td class=\"td-time\"></td>\n <td fd-table-cell *ngFor=\"let day of days\" [attr.rtl]=\"rtl\">\n <bc-day-number-box\n [day]=\"day\"\n [isWeekMode]=\"true\"\n [isSingleDay]=\"days.length === 1\"\n (dayClick)=\"onDayClick(day)\"\n ></bc-day-number-box>\n </td>\n </tr>\n <ng-container\n *ngTemplateOutlet=\"\n renderDayTasks;\n context: {\n $implicit: weekTasksArray,\n maxRowTasks: maxRowTasks,\n weekIndex: 0\n }\n \"\n ></ng-container>\n </tbody>\n </table>\n</div>\n<ng-template #renderDayTasks let-weekTasks let-maxRowTasks=\"maxRowTasks\" let-weekIndex=\"weekIndex\">\n <ng-container *ngFor=\"let rowTask of weekTasks | keyvalue; let i = index\">\n <tr fd-table-row class=\"task-row\">\n <td fd-table-cell class=\"fd-time\" style=\"border: none\"></td>\n <ng-container *ngFor=\"let task of weekTasks[i]; let dayIndex = index\">\n <td\n fd-table-cell\n *ngIf=\"task.colSpan && dayIndex < days.length\"\n [attr.colspan]=\"task.colSpan > days.length ? days.length : task.colSpan\"\n class=\"td-button\"\n [attr.hasevent]=\"!!task.event\"\n >\n <bc-event-button\n *ngIf=\"task.event && !task.inDay; else newDaySelect\"\n [task]=\"task\"\n [rtl]=\"rtl\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n ></bc-event-button>\n <ng-template #newDaySelect>\n <div style=\"width: 100%; height: 100%\" [attr.newDay]=\"true\"></div>\n </ng-template>\n </td>\n </ng-container>\n </tr>\n </ng-container>\n</ng-template>\n<div\n class=\"table-container\"\n style=\"overflow-y: hidden; overflow-x: auto; flex-grow: 1\"\n [style.height.px]=\"inDialog ? containerHeight : null\"\n [style.overflow-y]=\"inDialog ? 'scroll' : 'hidden'\"\n>\n <table fd-table-body class=\"table-content\" [compact]=\"true\">\n <tbody>\n <tr class=\"tr-time\" style=\"height: 0rem\">\n <td class=\"td-time\" style=\"height: 0rem\"></td>\n <td [colspan]=\"days.length\" style=\"position: relative\" style=\"height: 0rem\">\n <div class=\"tasks-wrapper\">\n <div *ngFor=\"let hour of hours\" class=\"row-border\"></div>\n </div>\n </td>\n </tr>\n <tr fd-table-row style=\"height: 100%\">\n <td fd-table-cell class=\"td-time\">\n <div class=\"calc-time\">\n <div *ngFor=\"let hour of hours\">{{ hour }}</div>\n </div>\n </td>\n <td *ngFor=\"let day of days\" fd-table-cell (click)=\"onColumnClick($event, day)\">\n <div style=\"position: relative; width: 100%; height: 100%\">\n <ng-container *ngFor=\"let task of day.tasks; let index = index\">\n <bc-event-button\n (click)=\"onEventButton($event)\"\n *ngIf=\"task.inDay\"\n [style.background]=\"task.event[calendarFields.Color]\"\n [style.top.px]=\"task.top\"\n [style.right]=\"rtl ? 'calc(' + index * (100 / day.tasks.length) + '%)' : null\"\n [style.left]=\"rtl ? null : 'calc(' + index * (100 / day.tasks.length) + '%)'\"\n [style.width]=\"'calc(100% - ' + index * (100 / day.tasks.length) + '%)'\"\n [style.height.px]=\"task.height\"\n [style.maxHeight.px]=\"task.height\"\n [style.opacity]=\"task.opacity\"\n [style.zIndex]=\"index\"\n [buttonTemplate]=\"eventButtonTemplate\"\n class=\"task-day\"\n [task]=\"task\"\n [calendarFields]=\"calendarFields\"\n [deviceSize]=\"deviceSize\"\n [canDelete]=\"canDelete\"\n [canEdit]=\"canEdit\"\n (deleteEvent)=\"deleteEvent.emit($event)\"\n (editEvent)=\"editEvent.emit($event)\"\n (openPopoverChange)=\"onOpenPopoverChange($event)\"\n ></bc-event-button>\n </ng-container>\n </div>\n </td>\n </tr>\n </tbody>\n </table>\n</div>\n<ng-template #eventButtonTemplate let-task let-popover=\"popover\" let-calendarFields=\"calendarFields\">\n <button\n [style.background]=\"task.event[calendarFields.Color]\"\n class=\"task-title\"\n [style.border]=\"'1px solid white'\"\n fd-button\n [compact]=\"true\"\n [fdType]=\"'emphasized'\"\n [fdPopoverTrigger]=\"popover\"\n [label]=\"task.height > 49 ? '' : task.event[calendarFields.Title] + ' ' + (task | fromToTime)\"\n >\n <ng-container *ngIf=\"task.height > 49\">\n <span class=\"ellipsis\">{{ task.event[calendarFields.Title] }}</span>\n <span class=\"ellipsis\">{{ task | fromToTime }}</span>\n </ng-container>\n </button>\n</ng-template>\n", styles: [":host{display:flex;height:95%;width:100%;flex-direction:column;align-items:stretch;justify-content:stretch}table.table-top{border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}table td{overflow:hidden}thead tr{border-bottom:none!important}thead tr th{text-align:center!important;background-color:var(--sapList_Background, #fff)}tbody tr td{padding-top:5px}tbody tr:first-child td{padding-top:0}.fd-table__cell{padding:0 .5rem!important}.table-top{table-layout:fixed}.table-top td{padding-right:1px!important;padding-left:1px!important}.tr-time{height:1px;max-height:1px!important;width:100%}.tr-time td{height:1px!important;max-height:1px!important;padding:0!important}.task-row td{height:1.425rem!important;padding:0!important}.table-content{width:100%;border-spacing:0;position:relative}.table-content .tasks-wrapper{position:absolute;opacity:.3;height:100%;width:calc(100% - 50px)}.table-content .td-time{padding:0!important}.table-content .td-time .calc-time{display:flex;flex-direction:column;height:100%;justify-content:start;align-items:center}.table-content .td-time .calc-time div{height:50px;border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);width:100%;display:flex;justify-content:center}.table-content .td-time tbody{border-spacing:0}.td-time{width:50px!important;max-width:50px!important}.row-border{border-bottom:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);border-top:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5);height:50px}.task-day{position:absolute!important;display:flex;flex-direction:column;align-items:start}.weekday-header td,.week-days td,.week-numbers td{text-align:right}table[dayscount=\"1\"] .week-days td[rtl=true],table[dayscount=\"1\"] .week-numbers td[rtl=true]{text-align:right!important}table[dayscount=\"1\"] .week-days td[rtl=false],table[dayscount=\"1\"] .week-numbers td[rtl=false]{text-align:left!important}table[dayscount=\"1\"] .week-days td,table[dayscount=\"1\"] .week-numbers td{padding-left:1rem!important;padding-right:1rem!important}table[dayscount=\"1\"] .week-days td.weekday-header,table[dayscount=\"1\"] .week-numbers td.weekday-header{padding-left:2rem!important;padding-right:2rem!important}.week-days td{border:none;text-align:center;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.week-numbers td{border:none;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)}.td-button{border:none!important;border-right:var(--sapList_BorderWidth, .0625rem) solid var(--sapList_BorderColor, #e5e5e5)!important;padding:1px!important}.task-title{display:flex;flex-direction:column;align-items:start!important;font-weight:400;width:100%;max-width:100%;min-width:100%;height:100%;max-height:100%;min-height:100%}\n"] }]
2105
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: CalendarService }]; }, propDecorators: { tableTopEl: [{
2106
+ type: ViewChild,
2107
+ args: ['tableTop']
2108
+ }], weekDays: [{
2109
+ type: Input
2110
+ }], weekDaysMin: [{
2111
+ type: Input
2112
+ }], today: [{
2113
+ type: Input
2114
+ }], containerHeight: [{
2115
+ type: Input
2116
+ }], calendarFields: [{
2117
+ type: Input
2118
+ }], rtl: [{
2119
+ type: Input
2120
+ }], inDialog: [{
2121
+ type: Input
2122
+ }], deviceSize: [{
2123
+ type: Input
2124
+ }], moDataList: [{
2125
+ type: Input
2126
+ }], days: [{
2127
+ type: Input
2128
+ }], canDelete: [{
2129
+ type: Input
2130
+ }], canAdd: [{
2131
+ type: Input
2132
+ }], canEdit: [{
2133
+ type: Input
2134
+ }], editEvent: [{
2135
+ type: Output
2136
+ }], deleteEvent: [{
2137
+ type: Output
2138
+ }], showEvent: [{
2139
+ type: Output
2140
+ }], daySelect: [{
2141
+ type: Output
2142
+ }], dayClick: [{
2143
+ type: Output
2144
+ }] } });
2145
+
2146
+ class CalendarListItemComponent extends BaseComponent {
2147
+ }
2148
+ CalendarListItemComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListItemComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2149
+ CalendarListItemComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarListItemComponent, selector: "bc-calendar-list-item", inputs: { mo: "mo" }, usesInheritance: true, ngImport: i0, template: "<div class=\"wrapper\">\r\n <div flexShrink=\"1\" class=\"day-wrapper\">\r\n <Label [text]=\"mo.$StartTimes\"></Label>\r\n <Label class=\"ela\" [text]=\"'\u0627\u0644\u06CC'\"></Label>\r\n <Label [text]=\"mo.$EndTimes\"></Label>\r\n </div>\r\n <div class=\"color\" [style.background-color]=\"mo.$Color\"></div>\r\n <div class=\"event-wrapper\">\r\n <Label class=\"title\" [text]=\"mo.$Title\"></Label>\r\n <Label class=\"desc\" [text]=\"mo.$Notes\"></Label>\r\n </div>\r\n</div>\r\n", styles: [".wrapper{display:flex;flex-direction:row}.day-wrapper{display:flex;flex-shrink:1}.color{width:1}.event-wrapper{display:flex;flex-grow:1}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2150
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListItemComponent, decorators: [{
2151
+ type: Component,
2152
+ args: [{ selector: 'bc-calendar-list-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"wrapper\">\r\n <div flexShrink=\"1\" class=\"day-wrapper\">\r\n <Label [text]=\"mo.$StartTimes\"></Label>\r\n <Label class=\"ela\" [text]=\"'\u0627\u0644\u06CC'\"></Label>\r\n <Label [text]=\"mo.$EndTimes\"></Label>\r\n </div>\r\n <div class=\"color\" [style.background-color]=\"mo.$Color\"></div>\r\n <div class=\"event-wrapper\">\r\n <Label class=\"title\" [text]=\"mo.$Title\"></Label>\r\n <Label class=\"desc\" [text]=\"mo.$Notes\"></Label>\r\n </div>\r\n</div>\r\n", styles: [".wrapper{display:flex;flex-direction:row}.day-wrapper{display:flex;flex-shrink:1}.color{width:1}.event-wrapper{display:flex;flex-grow:1}\n"] }]
2153
+ }], propDecorators: { mo: [{
2154
+ type: Input
2155
+ }] } });
2156
+
2157
+ class CalendarListComponent extends BaseComponent {
2158
+ trackById(index, item) {
2159
+ return item.Id;
2160
+ }
2161
+ }
2162
+ CalendarListComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2163
+ CalendarListComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarListComponent, selector: "bc-calendar-list", inputs: { moDataList: "moDataList" }, usesInheritance: true, ngImport: i0, template: "<bc-calendar-list-item *ngFor=\"let item of moDataList; trackBy: trackById\" [mo]=\"item\"> </bc-calendar-list-item>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: CalendarListItemComponent, selector: "bc-calendar-list-item", inputs: ["mo"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2164
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListComponent, decorators: [{
2165
+ type: Component,
2166
+ args: [{ selector: 'bc-calendar-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bc-calendar-list-item *ngFor=\"let item of moDataList; trackBy: trackById\" [mo]=\"item\"> </bc-calendar-list-item>\r\n" }]
2167
+ }], propDecorators: { moDataList: [{
2168
+ type: Input
2169
+ }] } });
2170
+
2171
+ class CalendarListContainerComponent extends BaseComponent {
2172
+ constructor() {
2173
+ super(...arguments);
2174
+ this.showEventsTap = new EventEmitter();
2175
+ }
2176
+ }
2177
+ CalendarListContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component });
2178
+ CalendarListContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarListContainerComponent, selector: "bc-calendar-list-container", inputs: { view: "view", reportItemComponentName: "reportItemComponentName", showEvents: "showEvents", selectedDay: "selectedDay", calendarFields: "calendarFields" }, outputs: { showEventsTap: "showEventsTap" }, usesInheritance: true, ngImport: i0, template: "<bc-calendar-list *ngIf=\"selectedDay\" [moDataList]=\"selectedDay.tasks\"></bc-calendar-list>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CalendarListComponent, selector: "bc-calendar-list", inputs: ["moDataList"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarListContainerComponent, decorators: [{
2180
+ type: Component,
2181
+ args: [{ selector: 'bc-calendar-list-container', changeDetection: ChangeDetectionStrategy.OnPush, template: "<bc-calendar-list *ngIf=\"selectedDay\" [moDataList]=\"selectedDay.tasks\"></bc-calendar-list>\r\n" }]
2182
+ }], propDecorators: { view: [{
2183
+ type: Input
2184
+ }], reportItemComponentName: [{
2185
+ type: Input
2186
+ }], showEvents: [{
2187
+ type: Input
2188
+ }], selectedDay: [{
2189
+ type: Input
2190
+ }], calendarFields: [{
2191
+ type: Input
2192
+ }], showEventsTap: [{
2193
+ type: Output
2194
+ }] } });
2195
+
2196
+ class CalendarContainerComponent extends ReportViewBaseComponent {
2197
+ constructor(_titleCase, _bbbTranslate, _calendarService, _dateService, _el, _cdr, _renderer2, _findColumnByDbName, _ulvMainService, _portalService) {
2198
+ super(_el, _cdr, _renderer2, _findColumnByDbName, _ulvMainService, _portalService);
2199
+ this._titleCase = _titleCase;
2200
+ this._bbbTranslate = _bbbTranslate;
2201
+ this._calendarService = _calendarService;
2202
+ this._dateService = _dateService;
2203
+ this._el = _el;
2204
+ this._cdr = _cdr;
2205
+ this._renderer2 = _renderer2;
2206
+ this._findColumnByDbName = _findColumnByDbName;
2207
+ this._ulvMainService = _ulvMainService;
2208
+ this._portalService = _portalService;
2209
+ this.deleteTask = new EventEmitter();
2210
+ this.editTask = new EventEmitter();
2211
+ this.daySelect = new EventEmitter();
2212
+ this.loadData = new EventEmitter();
2213
+ this.todayIndex = -1;
2214
+ this.eventMoDataList$ = new BehaviorSubject([]);
2215
+ }
2216
+ ngOnInit() {
2217
+ super.ngOnInit();
2218
+ this.prepare();
2219
+ this._setWidthAndHeight();
2220
+ this.prepareMoDataList(this.moDataList);
2221
+ this.selectedMonth$.pipe(takeUntil(this._onDestroy$)).subscribe((month) => {
2222
+ this.loadData.emit({
2223
+ start: month.days[0].date,
2224
+ end: month.days[month.days.length - 1].date
2225
+ });
2226
+ });
2227
+ // this.setTasks(this.calendars, this.moDataList, this.calendarFields);
2228
+ }
2229
+ ngOnChanges(changes) {
2230
+ super.ngOnChanges(changes);
2231
+ const { moDataList, deviceSize } = changes;
2232
+ if (moDataList && !moDataList.firstChange) {
2233
+ this.prepareMoDataList(changes.moDataList.currentValue);
2234
+ this._cdr.detectChanges();
2235
+ }
2236
+ if (deviceSize && !deviceSize.firstChange) {
2237
+ this._setWidthAndHeight();
2238
+ this._cdr.detectChanges();
2239
+ }
2240
+ }
2241
+ onDayClick(day) {
2242
+ this._calendarService.setMode('day', day);
2243
+ }
2244
+ onShowTask() { }
2245
+ onSlideChange(selected) {
2246
+ this._calendarService.setSelected(selected);
2247
+ }
2248
+ onMonthCarouselLoaded({ object }) {
2249
+ object.selectedPage = 1;
2250
+ }
2251
+ onToday() {
2252
+ this._calendarService.gotoToday();
2253
+ }
2254
+ onModeChange(mode) {
2255
+ this._calendarService.setMode(mode);
2256
+ }
2257
+ onRangeChange(e) {
2258
+ this._calendarService.rangeSelect(e.startDay, e.endDay, e.monthInfo);
2259
+ }
2260
+ onPrevTap() {
2261
+ // this.gotoPage(this.monthCarouselView.nativeElement.selectedPage - 1);
2262
+ this._calendarService.loadPrevious();
2263
+ }
2264
+ onNextTap() {
2265
+ this._calendarService.loadNext();
2266
+ // this.gotoPage(this.monthCarouselView.nativeElement.selectedPage + 1);
2267
+ }
2268
+ onSelectedChange(day) {
2269
+ this.selectedDay = { ...day };
2270
+ }
2271
+ prepareMoDataList(moDataList) {
2272
+ this.eventMoDataList$.next(moDataList.map((event) => ({
2273
+ ...event,
2274
+ id: event.Id,
2275
+ $StartDateInfo: this._dateService.getDateInfo(event[this.calendarFields.StartDate]),
2276
+ $EndDateInfo: this._dateService.getDateInfo(event[this.calendarFields.EndDate])
2277
+ })));
2278
+ }
2279
+ addTd(table, tr, event, colSpan) {
2280
+ const colSpanCount = tr.length > 0 ? tr.map((c) => c.colSpan).reduce((a, b) => a + b) > 6 : 0;
2281
+ if (colSpanCount) {
2282
+ table.push(tr);
2283
+ tr = [];
2284
+ }
2285
+ tr.push({ type: 'td', colSpan, event });
2286
+ }
2287
+ prepare() {
2288
+ this.weekDaysMin = this._calendarService.weekDaysMin();
2289
+ this.weekDays = this._calendarService.weekDays();
2290
+ this.selectedMonth$ = this._calendarService.selected$;
2291
+ this.days$ = this._calendarService.days$;
2292
+ this.today = this._calendarService.today;
2293
+ this.mode$ = this._calendarService.mode$;
2294
+ this.monthWeeksCount$ = this.mode$.pipe(map((mode) => {
2295
+ if (mode === 'month') {
2296
+ return this._calendarService.selectedMonth.weeksCount;
2297
+ }
2298
+ return 0;
2299
+ }));
2300
+ this.modeTitle$ = combineLatest([this.days$, this.mode$]).pipe(takeUntil(this._onDestroy$), switchMap(([, mode]) => {
2301
+ if (mode === 'customMonth') {
2302
+ return of(`${this._calendarService.weeksCount} ${this._bbbTranslate.transform('Week')}`);
2303
+ }
2304
+ return of(this._bbbTranslate.transform(this._titleCase.transform(mode)));
2305
+ }));
2306
+ this.weekModeDays$ = this._calendarService.weekModeDays$;
2307
+ this._calendarService.calendars$.pipe(takeUntil(this._onDestroy$)).subscribe((calendars) => {
2308
+ const eventCalendars = [...calendars];
2309
+ // eventCalendars = eventCalendars.splice(this.selectedIndex, 3);
2310
+ this.calendars = eventCalendars;
2311
+ // if (this.monthCarouselView) {
2312
+ // this.monthCarouselView.nativeElement.selectedPage = 1;
2313
+ // }
2314
+ });
2315
+ // .pipe(takeUntil(this._onDestroy$))
2316
+ // .subscribe((todayIndex) => {
2317
+ // this.selectedIndex = this.todayIndex = todayIndex;
2318
+ // this.gotoPage(this.todayIndex);
2319
+ // });
2320
+ this.title$ = combineLatest([this.weekModeDays$, this.selectedMonth$, this.days$, this.mode$]).pipe(takeUntil(this._onDestroy$), switchMap(([weekModeDays, monthInfo, days, mode]) => {
2321
+ let monthName = monthInfo.dateInfo.monthName;
2322
+ const year = monthInfo.dateInfo.strYear;
2323
+ if (mode !== 'month') {
2324
+ let firstDayInfo;
2325
+ let lastDayInfo;
2326
+ const daysTemp = mode === 'customMonth' ? days : weekModeDays;
2327
+ if (daysTemp.length > 0) {
2328
+ firstDayInfo = daysTemp[0];
2329
+ lastDayInfo = daysTemp[daysTemp.length - 1];
2330
+ monthName = firstDayInfo.monthName;
2331
+ if (firstDayInfo.month !== lastDayInfo.month) {
2332
+ monthName = `${firstDayInfo.monthName} -
2333
+ ${lastDayInfo.monthName}`;
2334
+ }
2335
+ }
2336
+ }
2337
+ return of(`${monthName} ${year}`);
2338
+ }));
2339
+ }
2340
+ _setWidthAndHeight() {
2341
+ this.width = this._el.nativeElement.offsetWidth;
2342
+ this.height = this._el.nativeElement.offsetHeight - 45;
2343
+ }
2344
+ }
2345
+ CalendarContainerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarContainerComponent, deps: [{ token: i3.TitleCasePipe }, { token: i2.BbbTranslatePipe }, { token: CalendarService }, { token: i2.DateService }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i2.FindColumnByDbNamePipe }, { token: i2.UlvMainService }, { token: i2.PortalService }], target: i0.ɵɵFactoryTarget.Component });
2346
+ CalendarContainerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.7", type: CalendarContainerComponent, selector: "bc-calendar-container", inputs: { calendarFields: "calendarFields" }, outputs: { deleteTask: "deleteTask", editTask: "editTask", daySelect: "daySelect", loadData: "loadData" }, providers: [
2347
+ {
2348
+ provide: DateService,
2349
+ useFactory: getDateService,
2350
+ deps: [LogService]
2351
+ }
2352
+ ], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<bc-calendar-header\n [monthInfo]=\"(selectedMonth$ | async)!!\"\n [weekModeDays]=\"(weekModeDays$ | async)!!\"\n [rtl]=\"rtl\"\n [mode]=\"(mode$ | async)!!\"\n [modeTitle]=\"(modeTitle$ | async)!!\"\n [title]=\"(title$ | async)!!\"\n (modeChange)=\"onModeChange($event)\"\n (prevTap)=\"onPrevTap()\"\n (nextTap)=\"onNextTap()\"\n (today)=\"onToday()\"\n (rangeChange)=\"onRangeChange($event)\"\n>\n</bc-calendar-header>\n\n<ng-container [ngSwitch]=\"mode$ | async\">\n <ng-container *ngSwitchCase=\"'week'\">\n <ng-container\n *ngTemplateOutlet=\"\n weekCalendar;\n context: {\n $implicit: selectedMonth$ | async,\n moDataList: eventMoDataList$ | async,\n width: width,\n height: height,\n rtl: rtl,\n showEvents: showEvents,\n weekModeDays: weekModeDays$ | async,\n today: today,\n deviceSize: deviceSize,\n calendarFields: calendarFields,\n access: access\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'day'\">\n <ng-container\n *ngTemplateOutlet=\"\n weekCalendar;\n context: {\n $implicit: selectedMonth$ | async,\n moDataList: eventMoDataList$ | async,\n width: width,\n height: height,\n rtl: rtl,\n showEvents: showEvents,\n weekModeDays: weekModeDays$ | async,\n today: today,\n deviceSize: deviceSize,\n calendarFields: calendarFields,\n access: access\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'list'\"></ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container\n *ngTemplateOutlet=\"\n monthCalendar;\n context: {\n $implicit: days$ | async,\n moDataList: eventMoDataList$ | async,\n width: width,\n height: height,\n rtl: rtl,\n showEvents: showEvents,\n today: today,\n deviceSize: deviceSize,\n calendarFields: calendarFields,\n monthWeeksCount: monthWeeksCount$ | async,\n access: access\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template\n #monthCalendar\n let-days\n let-moDataList=\"moDataList\"\n let-width=\"width\"\n let-height=\"height\"\n let-calendarFields=\"calendarFields\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-monthWeeksCount=\"monthWeeksCount\"\n let-access=\"access\"\n>\n <bc-calendar-month\n [style.width]=\"width\"\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\n [containerWidth]=\"width\"\n [calendarFields]=\"calendarFields\"\n [moDataList]=\"moDataList\"\n [monthWeeksCount]=\"monthWeeksCount\"\n [rtl]=\"rtl\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [showEvents]=\"showEvents\"\n [days]=\"days\"\n [canAdd]=\"access.Add\"\n [canEdit]=\"access.Edit\"\n [canDelete]=\"access.Delete\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event)\"\n (showEvent)=\"onShowTask()\"\n (deleteEvent)=\"deleteTask.emit($event)\"\n (editEvent)=\"editTask.emit($event)\"\n (daySelect)=\"daySelect.emit($event)\"\n ></bc-calendar-month>\n</ng-template>\n\n<ng-template #listCalendar>\n <bc-calendar-list-container\n [showEvents]=\"showEvents\"\n [selectedDay]=\"selectedDay\"\n [calendarFields]=\"calendarFields\"\n (showEventsTap)=\"showEvents = !showEvents\"\n ></bc-calendar-list-container>\n</ng-template>\n\n<ng-template\n #weekCalendar\n let-selectedMonth\n let-moDataList=\"moDataList\"\n let-width=\"width\"\n let-height=\"height\"\n let-calendarFields=\"calendarFields\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-weekModeDays=\"weekModeDays\"\n let-access=\"access\"\n>\n <bc-calendar-week\n [style.width]=\"width\"\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\n [containerWidth]=\"width\"\n [inDialog]=\"inDialog\"\n [calendarFields]=\"calendarFields\"\n [moDataList]=\"moDataList\"\n [rtl]=\"rtl\"\n [canAdd]=\"access.Add\"\n [canEdit]=\"access.Edit\"\n [canDelete]=\"access.Delete\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [showEvents]=\"showEvents\"\n [days]=\"weekModeDays\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event)\"\n (showEvent)=\"onShowTask()\"\n (deleteEvent)=\"deleteTask.emit($event)\"\n (editEvent)=\"editTask.emit($event)\"\n (daySelect)=\"daySelect.emit($event)\"\n ></bc-calendar-week>\n</ng-template>\n", styles: [":host{display:block;width:100%;height:100%}\n"], dependencies: [{ kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "directive", type: i3.NgSwitchDefault, selector: "[ngSwitchDefault]" }, { kind: "component", type: CalendarListContainerComponent, selector: "bc-calendar-list-container", inputs: ["view", "reportItemComponentName", "showEvents", "selectedDay", "calendarFields"], outputs: ["showEventsTap"] }, { kind: "component", type: CalendarWeekComponent, selector: "bc-calendar-week", inputs: ["weekDays", "weekDaysMin", "today", "containerHeight", "calendarFields", "rtl", "inDialog", "deviceSize", "moDataList", "days", "canDelete", "canAdd", "canEdit"], outputs: ["editEvent", "deleteEvent", "showEvent", "daySelect", "dayClick"] }, { kind: "component", type: CalendarMonthComponent, selector: "bc-calendar-month", inputs: ["monthWeeksCount", "weekDays", "weekDaysMin", "today", "containerHeight", "days", "calendarFields", "rtl", "deviceSize", "moDataList", "datePicker", "rangePicker", "canDelete", "canAdd", "canEdit", "selectedDate", "startSelectedDayIndex", "endSelectedDayIndex"], outputs: ["editEvent", "deleteEvent", "daySelect", "dayClick", "dayMouseMove", "dayMouseUp", "dayMouseDown", "showEvent"] }, { kind: "component", type: CalendarHeaderComponent, selector: "bc-calendar-header", inputs: ["monthInfo", "weekModeDays", "hideMode", "modeTitle", "title", "rtl", "mode"], outputs: ["prevTap", "nextTap", "modeChange", "rangeChange", "today"] }, { kind: "pipe", type: i3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2353
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: CalendarContainerComponent, decorators: [{
2354
+ type: Component,
2355
+ args: [{ selector: 'bc-calendar-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
2356
+ {
2357
+ provide: DateService,
2358
+ useFactory: getDateService,
2359
+ deps: [LogService]
2360
+ }
2361
+ ], template: "<bc-calendar-header\n [monthInfo]=\"(selectedMonth$ | async)!!\"\n [weekModeDays]=\"(weekModeDays$ | async)!!\"\n [rtl]=\"rtl\"\n [mode]=\"(mode$ | async)!!\"\n [modeTitle]=\"(modeTitle$ | async)!!\"\n [title]=\"(title$ | async)!!\"\n (modeChange)=\"onModeChange($event)\"\n (prevTap)=\"onPrevTap()\"\n (nextTap)=\"onNextTap()\"\n (today)=\"onToday()\"\n (rangeChange)=\"onRangeChange($event)\"\n>\n</bc-calendar-header>\n\n<ng-container [ngSwitch]=\"mode$ | async\">\n <ng-container *ngSwitchCase=\"'week'\">\n <ng-container\n *ngTemplateOutlet=\"\n weekCalendar;\n context: {\n $implicit: selectedMonth$ | async,\n moDataList: eventMoDataList$ | async,\n width: width,\n height: height,\n rtl: rtl,\n showEvents: showEvents,\n weekModeDays: weekModeDays$ | async,\n today: today,\n deviceSize: deviceSize,\n calendarFields: calendarFields,\n access: access\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'day'\">\n <ng-container\n *ngTemplateOutlet=\"\n weekCalendar;\n context: {\n $implicit: selectedMonth$ | async,\n moDataList: eventMoDataList$ | async,\n width: width,\n height: height,\n rtl: rtl,\n showEvents: showEvents,\n weekModeDays: weekModeDays$ | async,\n today: today,\n deviceSize: deviceSize,\n calendarFields: calendarFields,\n access: access\n }\n \"\n ></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'list'\"></ng-container>\n <ng-container *ngSwitchDefault>\n <ng-container\n *ngTemplateOutlet=\"\n monthCalendar;\n context: {\n $implicit: days$ | async,\n moDataList: eventMoDataList$ | async,\n width: width,\n height: height,\n rtl: rtl,\n showEvents: showEvents,\n today: today,\n deviceSize: deviceSize,\n calendarFields: calendarFields,\n monthWeeksCount: monthWeeksCount$ | async,\n access: access\n }\n \"\n ></ng-container>\n </ng-container>\n</ng-container>\n\n<ng-template\n #monthCalendar\n let-days\n let-moDataList=\"moDataList\"\n let-width=\"width\"\n let-height=\"height\"\n let-calendarFields=\"calendarFields\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-monthWeeksCount=\"monthWeeksCount\"\n let-access=\"access\"\n>\n <bc-calendar-month\n [style.width]=\"width\"\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\n [containerWidth]=\"width\"\n [calendarFields]=\"calendarFields\"\n [moDataList]=\"moDataList\"\n [monthWeeksCount]=\"monthWeeksCount\"\n [rtl]=\"rtl\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [showEvents]=\"showEvents\"\n [days]=\"days\"\n [canAdd]=\"access.Add\"\n [canEdit]=\"access.Edit\"\n [canDelete]=\"access.Delete\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event)\"\n (showEvent)=\"onShowTask()\"\n (deleteEvent)=\"deleteTask.emit($event)\"\n (editEvent)=\"editTask.emit($event)\"\n (daySelect)=\"daySelect.emit($event)\"\n ></bc-calendar-month>\n</ng-template>\n\n<ng-template #listCalendar>\n <bc-calendar-list-container\n [showEvents]=\"showEvents\"\n [selectedDay]=\"selectedDay\"\n [calendarFields]=\"calendarFields\"\n (showEventsTap)=\"showEvents = !showEvents\"\n ></bc-calendar-list-container>\n</ng-template>\n\n<ng-template\n #weekCalendar\n let-selectedMonth\n let-moDataList=\"moDataList\"\n let-width=\"width\"\n let-height=\"height\"\n let-calendarFields=\"calendarFields\"\n let-rtl=\"rtl\"\n let-today=\"today\"\n let-showEvents=\"showEvents\"\n let-deviceSize=\"deviceSize\"\n let-weekModeDays=\"weekModeDays\"\n let-access=\"access\"\n>\n <bc-calendar-week\n [style.width]=\"width\"\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\n [containerWidth]=\"width\"\n [inDialog]=\"inDialog\"\n [calendarFields]=\"calendarFields\"\n [moDataList]=\"moDataList\"\n [rtl]=\"rtl\"\n [canAdd]=\"access.Add\"\n [canEdit]=\"access.Edit\"\n [canDelete]=\"access.Delete\"\n [weekDays]=\"weekDays\"\n [weekDaysMin]=\"weekDaysMin\"\n [today]=\"today\"\n [showEvents]=\"showEvents\"\n [days]=\"weekModeDays\"\n [deviceSize]=\"deviceSize\"\n (dayClick)=\"onDayClick($event)\"\n (showEvent)=\"onShowTask()\"\n (deleteEvent)=\"deleteTask.emit($event)\"\n (editEvent)=\"editTask.emit($event)\"\n (daySelect)=\"daySelect.emit($event)\"\n ></bc-calendar-week>\n</ng-template>\n", styles: [":host{display:block;width:100%;height:100%}\n"] }]
2362
+ }], ctorParameters: function () { return [{ type: i3.TitleCasePipe }, { type: i2.BbbTranslatePipe }, { type: CalendarService }, { type: i2.DateService }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i2.FindColumnByDbNamePipe }, { type: i2.UlvMainService }, { type: i2.PortalService }]; }, propDecorators: { calendarFields: [{
2363
+ type: Input
2364
+ }], deleteTask: [{
2365
+ type: Output
2366
+ }], editTask: [{
2367
+ type: Output
2368
+ }], daySelect: [{
2369
+ type: Output
2370
+ }], loadData: [{
2371
+ type: Output
2372
+ }] } });
2373
+
2374
+ const components = [
2375
+ CalendarContainerComponent,
2376
+ CalendarListComponent,
2377
+ CalendarListContainerComponent,
2378
+ CalendarListItemComponent,
2379
+ CalendarWeekComponent,
2380
+ CalendarMonthComponent,
2381
+ MonthDaysComponent,
2382
+ CalendarHeaderComponent,
2383
+ EventPreviewComponent,
2384
+ DayNumberBoxComponent,
2385
+ EventButtonComponent,
2386
+ DayEventListComponent
2387
+ ];
2388
+ const pipes = [DaysInWeekPipe, EventDatePipe, EventTimePipe, FromToTimePipe, EqualDatePipe];
2389
+ class BarsaCalendarModule {
2390
+ }
2391
+ BarsaCalendarModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaCalendarModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2392
+ BarsaCalendarModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.7", ngImport: i0, type: BarsaCalendarModule, declarations: [CalendarContainerComponent,
2393
+ CalendarListComponent,
2394
+ CalendarListContainerComponent,
2395
+ CalendarListItemComponent,
2396
+ CalendarWeekComponent,
2397
+ CalendarMonthComponent,
2398
+ MonthDaysComponent,
2399
+ CalendarHeaderComponent,
2400
+ EventPreviewComponent,
2401
+ DayNumberBoxComponent,
2402
+ EventButtonComponent,
2403
+ DayEventListComponent, DaysInWeekPipe, EventDatePipe, EventTimePipe, FromToTimePipe, EqualDatePipe, DateTimePickerComponent, CalendarSelectionDaysComponent], imports: [CommonModule,
2404
+ FormsModule,
2405
+ BarsaNovinRayCoreModule,
2406
+ FundamentalNgxCoreModule,
2407
+ FundamentalNgxPlatformModule,
2408
+ PopoverModule,
2409
+ CardModule,
2410
+ QuickViewModule], exports: [CalendarContainerComponent,
2411
+ CalendarListComponent,
2412
+ CalendarListContainerComponent,
2413
+ CalendarListItemComponent,
2414
+ CalendarWeekComponent,
2415
+ CalendarMonthComponent,
2416
+ MonthDaysComponent,
2417
+ CalendarHeaderComponent,
2418
+ EventPreviewComponent,
2419
+ DayNumberBoxComponent,
2420
+ EventButtonComponent,
2421
+ DayEventListComponent, DateTimePickerComponent, CalendarSelectionDaysComponent] });
2422
+ BarsaCalendarModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaCalendarModule, providers: [TitleCasePipe, CalendarService, ...pipes], imports: [CommonModule,
2423
+ FormsModule,
2424
+ BarsaNovinRayCoreModule,
2425
+ FundamentalNgxCoreModule,
2426
+ FundamentalNgxPlatformModule,
2427
+ PopoverModule,
2428
+ CardModule,
2429
+ QuickViewModule] });
2430
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.7", ngImport: i0, type: BarsaCalendarModule, decorators: [{
2431
+ type: NgModule,
2432
+ args: [{
2433
+ schemas: [NO_ERRORS_SCHEMA],
2434
+ imports: [
2435
+ CommonModule,
2436
+ FormsModule,
2437
+ BarsaNovinRayCoreModule,
2438
+ FundamentalNgxCoreModule,
2439
+ FundamentalNgxPlatformModule,
2440
+ PopoverModule,
2441
+ CardModule,
2442
+ QuickViewModule
2443
+ ],
2444
+ declarations: [...components, ...pipes, DateTimePickerComponent, CalendarSelectionDaysComponent],
2445
+ providers: [TitleCasePipe, CalendarService, ...pipes],
2446
+ exports: [...components, DateTimePickerComponent, CalendarSelectionDaysComponent]
2447
+ }]
2448
+ }] });
2449
+
2450
+ /**
2451
+ * Generated bundle index. Do not edit.
2452
+ */
2453
+
2454
+ export { BarsaCalendarModule, CalendarContainerComponent, CalendarHeaderComponent, CalendarListComponent, CalendarListContainerComponent, CalendarListItemComponent, CalendarMonthComponent, CalendarMonthInfo, CalendarSelectionDaysComponent, CalendarService, CalendarWeekComponent, DateTimePickerComponent, DayEventListComponent, DayNumberBoxComponent, DayStatus, EventButtonComponent, EventPreviewComponent, MonthDaysComponent, TimeConfigI18n };
2455
+ //# sourceMappingURL=barsa-calendar.mjs.map