barsa-calendar 2.2.73 → 2.2.75

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 (36) hide show
  1. package/fesm2022/barsa-calendar.mjs +87 -87
  2. package/fesm2022/barsa-calendar.mjs.map +1 -1
  3. package/lib/calendar-container/calendar-container.component.d.ts +1 -1
  4. package/lib/calendar-list/calendar-list.component.d.ts +1 -1
  5. package/lib/calendar-month/calendar-month.component.d.ts +1 -1
  6. package/lib/calendar-week/calendar-week.component.d.ts +3 -3
  7. package/lib/month-days/month-days.component.d.ts +1 -1
  8. package/lib/services/calendar.service.d.ts +1 -1
  9. package/package.json +3 -5
  10. package/esm2022/barsa-calendar.mjs +0 -5
  11. package/esm2022/lib/barsa-calendar.module.mjs +0 -117
  12. package/esm2022/lib/calendar-container/calendar-container.component.mjs +0 -221
  13. package/esm2022/lib/calendar-header/calendar-header.component.mjs +0 -66
  14. package/esm2022/lib/calendar-list/calendar-list.component.mjs +0 -18
  15. package/esm2022/lib/calendar-list-container/calendar-list-container.component.mjs +0 -29
  16. package/esm2022/lib/calendar-list-item/calendar-list-item.component.mjs +0 -14
  17. package/esm2022/lib/calendar-month/calendar-month.component.mjs +0 -249
  18. package/esm2022/lib/calendar-selection-days/calendar-selection-days.component.mjs +0 -196
  19. package/esm2022/lib/calendar-week/calendar-week.component.mjs +0 -255
  20. package/esm2022/lib/constants.mjs +0 -4
  21. package/esm2022/lib/date-time-picker/date-time-picker.component.mjs +0 -457
  22. package/esm2022/lib/day-event-list/day-event-list.component.mjs +0 -58
  23. package/esm2022/lib/day-number-box/day-number-box.component.mjs +0 -105
  24. package/esm2022/lib/days-in-week.pipe.mjs +0 -18
  25. package/esm2022/lib/equal-date.pipe.mjs +0 -24
  26. package/esm2022/lib/event-button/event-button.component.mjs +0 -100
  27. package/esm2022/lib/event-button-end-arrow/event-button-end-arrow.component.mjs +0 -29
  28. package/esm2022/lib/event-button-start-arrow/event-button-start-arrow.component.mjs +0 -29
  29. package/esm2022/lib/event-date.pipe.mjs +0 -25
  30. package/esm2022/lib/event-preview/event-preview.component.mjs +0 -81
  31. package/esm2022/lib/event-time.pipe.mjs +0 -23
  32. package/esm2022/lib/from-to-time.pipe.mjs +0 -24
  33. package/esm2022/lib/models.mjs +0 -14
  34. package/esm2022/lib/month-days/month-days.component.mjs +0 -222
  35. package/esm2022/lib/services/calendar.service.mjs +0 -645
  36. package/esm2022/public-api.mjs +0 -23
@@ -43,7 +43,7 @@ export declare class CalendarContainerComponent extends ReportViewBaseComponent<
43
43
  private _dateService;
44
44
  ngOnInit(): void;
45
45
  ngOnChanges(changes: SimpleChanges): void;
46
- onCalendarCheckChange(calendar: MetaobjectDataModel): void;
46
+ onCalendarCheckChange(_calendar: MetaobjectDataModel): void;
47
47
  onDayClick(day: Day): void;
48
48
  onShowTask(): void;
49
49
  onSlideChange(selected: CalendarMonthInfo): void;
@@ -2,7 +2,7 @@ import { BaseComponent, MetaobjectDataModel, CalendarMetaobjectDataModel } from
2
2
  import * as i0 from "@angular/core";
3
3
  export declare class CalendarListComponent extends BaseComponent {
4
4
  moDataList: CalendarMetaobjectDataModel[];
5
- trackById(index: number, item: MetaobjectDataModel): string;
5
+ trackById(_index: number, item: MetaobjectDataModel): string;
6
6
  static ɵfac: i0.ɵɵFactoryDeclaration<CalendarListComponent, never>;
7
7
  static ɵcmp: i0.ɵɵComponentDeclaration<CalendarListComponent, "bc-calendar-list", never, { "moDataList": { "alias": "moDataList"; "required": false; }; }, {}, never, never, false, never>;
8
8
  }
@@ -55,7 +55,7 @@ export declare class CalendarMonthComponent extends BaseComponent implements OnC
55
55
  onDaySelect(weekIndex: number, dayIndex: number): void;
56
56
  onOpenPopoverChange(isOpen: boolean): void;
57
57
  onMoreButton(e: any, popover: any): void;
58
- onTask(e: any, task: CalendarMetaobjectDataModel): void;
58
+ onTask(_e: any, task: CalendarMetaobjectDataModel): void;
59
59
  onDayClick(day: Day): void;
60
60
  onDayMouseMove(day: Day): void;
61
61
  onDayMouseDown(day: Day): void;
@@ -51,16 +51,16 @@ export declare class CalendarWeekComponent extends BaseComponent implements OnCh
51
51
  ngOnChanges(changes: SimpleChanges): void;
52
52
  ngOnInit(): void;
53
53
  setSelectedId(id: string): void;
54
- onDayBoxSelect(day: Day): void;
54
+ onDayBoxSelect(_day: Day): void;
55
55
  onOpenPopoverChange(isOpen: boolean): void;
56
56
  onColumnClick(e: any, day: Day): void;
57
57
  onEventButton(e: any): void;
58
58
  onMoreButton(e: any, popover: any): void;
59
59
  onDayClick(day: Day): void;
60
60
  mousedown(ev: any, dayIndex: any): void;
61
- mousedownForResize(day: any, dayIndex: any, taskIndex: any): void;
61
+ mousedownForResize(_day: any, dayIndex: any, taskIndex: any): void;
62
62
  mousemove(ev: any, dayIndex: any): void;
63
- mouseup(ev: any, dayIndex: any, replacingTaskIndex?: number | null): void;
63
+ mouseup(_ev: any, dayIndex: any, replacingTaskIndex?: number | null): void;
64
64
  private _fireDaySelect;
65
65
  private _rangeSelect;
66
66
  private _openPopover;
@@ -53,7 +53,7 @@ export declare class MonthDaysComponent extends BaseComponent implements OnInit,
53
53
  onDaySelect(weekIndex: number, dayIndex: number): void;
54
54
  onOpenPopoverChange(isOpen: boolean): void;
55
55
  onMoreButton(e: any, popover: any): void;
56
- onTask(e: any, task: CalendarMetaobjectDataModel): void;
56
+ onTask(_e: any, task: CalendarMetaobjectDataModel): void;
57
57
  onDayClick(day: Day): void;
58
58
  onDayMouseMove(day: Day): void;
59
59
  onDayMouseDown(day: Day): void;
@@ -46,7 +46,7 @@ export declare class CalendarService extends BaseComponent {
46
46
  [key: string]: any[];
47
47
  };
48
48
  loadNext(): void;
49
- gotoMonth(monthName: string, monthIndex: number): void;
49
+ gotoMonth(_monthName: string, monthIndex: number): void;
50
50
  gotoYear(year: number): void;
51
51
  loadNextYear(): void;
52
52
  loadPrevYear(): void;
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "barsa-calendar",
3
- "version": "2.2.73",
3
+ "version": "2.2.75",
4
4
  "peerDependencies": {
5
- "@angular/core": "^18.0.3",
6
- "@angular/common": "^18.0.3"
5
+ "@angular/core": "^19.2.10",
6
+ "@angular/common": "^19.2.10"
7
7
  },
8
8
  "dependencies": {
9
9
  "tslib": "^2.0.0"
@@ -16,8 +16,6 @@
16
16
  },
17
17
  ".": {
18
18
  "types": "./index.d.ts",
19
- "esm2022": "./esm2022/barsa-calendar.mjs",
20
- "esm": "./esm2022/barsa-calendar.mjs",
21
19
  "default": "./fesm2022/barsa-calendar.mjs"
22
20
  }
23
21
  },
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './public-api';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtY2FsZW5kYXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvYmFyc2EtY2FsZW5kYXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
@@ -1,117 +0,0 @@
1
- import { NgModule, NO_ERRORS_SCHEMA } from '@angular/core';
2
- import { CommonModule, TitleCasePipe } from '@angular/common';
3
- import { FormsModule } from '@angular/forms';
4
- import { FundamentalNgxCoreModule } from '@fundamental-ngx/core';
5
- import { CardModule } from '@fundamental-ngx/core/card';
6
- import { QuickViewModule } from '@fundamental-ngx/core/quick-view';
7
- import { PopoverModule } from '@fundamental-ngx/core/popover';
8
- import { BarsaNovinRayCoreModule, BaseModule } from 'barsa-novin-ray-core';
9
- import { CalendarContainerComponent } from './calendar-container/calendar-container.component';
10
- import { CalendarListComponent } from './calendar-list/calendar-list.component';
11
- import { CalendarListContainerComponent } from './calendar-list-container/calendar-list-container.component';
12
- import { CalendarListItemComponent } from './calendar-list-item/calendar-list-item.component';
13
- import { CalendarWeekComponent } from './calendar-week/calendar-week.component';
14
- import { CalendarMonthComponent } from './calendar-month/calendar-month.component';
15
- import { CalendarService } from './services/calendar.service';
16
- import { MonthDaysComponent } from './month-days/month-days.component';
17
- import { DaysInWeekPipe } from './days-in-week.pipe';
18
- import { EventDatePipe } from './event-date.pipe';
19
- import { EventTimePipe } from './event-time.pipe';
20
- import { FromToTimePipe } from './from-to-time.pipe';
21
- import { EqualDatePipe } from './equal-date.pipe';
22
- import { CalendarHeaderComponent } from './calendar-header/calendar-header.component';
23
- import { EventPreviewComponent } from './event-preview/event-preview.component';
24
- import { DayNumberBoxComponent } from './day-number-box/day-number-box.component';
25
- import { EventButtonComponent } from './event-button/event-button.component';
26
- import { DayEventListComponent } from './day-event-list/day-event-list.component';
27
- import { DateTimePickerComponent } from './date-time-picker/date-time-picker.component';
28
- import { CalendarSelectionDaysComponent } from './calendar-selection-days/calendar-selection-days.component';
29
- import { EventButtonEndArrowComponent } from './event-button-end-arrow/event-button-end-arrow.component';
30
- import { EventButtonStartArrowComponent } from './event-button-start-arrow/event-button-start-arrow.component';
31
- import * as i0 from "@angular/core";
32
- import * as i1 from "barsa-novin-ray-core";
33
- const components = [
34
- CalendarContainerComponent,
35
- CalendarListComponent,
36
- CalendarListContainerComponent,
37
- CalendarListItemComponent,
38
- CalendarWeekComponent,
39
- CalendarMonthComponent,
40
- MonthDaysComponent,
41
- CalendarHeaderComponent,
42
- EventPreviewComponent,
43
- DayNumberBoxComponent,
44
- EventButtonComponent,
45
- DayEventListComponent,
46
- EventButtonEndArrowComponent,
47
- EventButtonStartArrowComponent
48
- ];
49
- const pipes = [DaysInWeekPipe, EventDatePipe, EventTimePipe, FromToTimePipe, EqualDatePipe];
50
- export class BarsaCalendarModule extends BaseModule {
51
- constructor(dcm, componentFactoryResolver) {
52
- super(dcm, componentFactoryResolver, 'BarsaCalendarModule');
53
- this.dcm = dcm;
54
- this.componentFactoryResolver = componentFactoryResolver;
55
- this.dynamicComponents = [...components];
56
- }
57
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaCalendarModule, deps: [{ token: i1.DynamicComponentService }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.NgModule }); }
58
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: BarsaCalendarModule, declarations: [CalendarContainerComponent,
59
- CalendarListComponent,
60
- CalendarListContainerComponent,
61
- CalendarListItemComponent,
62
- CalendarWeekComponent,
63
- CalendarMonthComponent,
64
- MonthDaysComponent,
65
- CalendarHeaderComponent,
66
- EventPreviewComponent,
67
- DayNumberBoxComponent,
68
- EventButtonComponent,
69
- DayEventListComponent,
70
- EventButtonEndArrowComponent,
71
- EventButtonStartArrowComponent, DaysInWeekPipe, EventDatePipe, EventTimePipe, FromToTimePipe, EqualDatePipe, DateTimePickerComponent, CalendarSelectionDaysComponent], imports: [CommonModule,
72
- FormsModule,
73
- BarsaNovinRayCoreModule,
74
- FundamentalNgxCoreModule,
75
- PopoverModule,
76
- CardModule,
77
- QuickViewModule], exports: [CalendarContainerComponent,
78
- CalendarListComponent,
79
- CalendarListContainerComponent,
80
- CalendarListItemComponent,
81
- CalendarWeekComponent,
82
- CalendarMonthComponent,
83
- MonthDaysComponent,
84
- CalendarHeaderComponent,
85
- EventPreviewComponent,
86
- DayNumberBoxComponent,
87
- EventButtonComponent,
88
- DayEventListComponent,
89
- EventButtonEndArrowComponent,
90
- EventButtonStartArrowComponent, DateTimePickerComponent, CalendarSelectionDaysComponent] }); }
91
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaCalendarModule, providers: [TitleCasePipe, CalendarService, ...pipes], imports: [CommonModule,
92
- FormsModule,
93
- BarsaNovinRayCoreModule,
94
- FundamentalNgxCoreModule,
95
- PopoverModule,
96
- CardModule,
97
- QuickViewModule] }); }
98
- }
99
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BarsaCalendarModule, decorators: [{
100
- type: NgModule,
101
- args: [{
102
- schemas: [NO_ERRORS_SCHEMA],
103
- imports: [
104
- CommonModule,
105
- FormsModule,
106
- BarsaNovinRayCoreModule,
107
- FundamentalNgxCoreModule,
108
- PopoverModule,
109
- CardModule,
110
- QuickViewModule
111
- ],
112
- declarations: [...components, ...pipes, DateTimePickerComponent, CalendarSelectionDaysComponent],
113
- providers: [TitleCasePipe, CalendarService, ...pipes],
114
- exports: [...components, DateTimePickerComponent, CalendarSelectionDaysComponent]
115
- }]
116
- }], ctorParameters: () => [{ type: i1.DynamicComponentService }, { type: i0.ComponentFactoryResolver }] });
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFyc2EtY2FsZW5kYXIubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcHJvamVjdHMvYmFyc2EtY2FsZW5kYXIvc3JjL2xpYi9iYXJzYS1jYWxlbmRhci5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE0QixRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDckYsT0FBTyxFQUFFLFlBQVksRUFBRSxhQUFhLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0MsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDakUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNuRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFFOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFVBQVUsRUFBMkIsTUFBTSxzQkFBc0IsQ0FBQztBQUVwRyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUMvRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsOEJBQThCLEVBQUUsTUFBTSw2REFBNkQsQ0FBQztBQUM3RyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUM5RixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNoRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNuRixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1D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V0FBVztZQUNYLHVCQUF1QjtZQUN2Qix3QkFBd0I7WUFDeEIsYUFBYTtZQUNiLFVBQVU7WUFDVixlQUFlOzs0RkFNVixtQkFBbUI7a0JBZi9CLFFBQVE7bUJBQUM7b0JBQ04sT0FBTyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQzNCLE9BQU8sRUFBRTt3QkFDTCxZQUFZO3dCQUNaLFdBQVc7d0JBQ1gsdUJBQXVCO3dCQUN2Qix3QkFBd0I7d0JBQ3hCLGFBQWE7d0JBQ2IsVUFBVTt3QkFDVixlQUFlO3FCQUNsQjtvQkFDRCxZQUFZLEVBQUUsQ0FBQyxHQUFHLFVBQVUsRUFBRSxHQUFHLEtBQUssRUFBRSx1QkFBdUIsRUFBRSw4QkFBOEIsQ0FBQztvQkFDaEcsU0FBUyxFQUFFLENBQUMsYUFBYSxFQUFFLGVBQWUsRUFBRSxHQUFHLEtBQUssQ0FBQztvQkFDckQsT0FBTyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsdUJBQXVCLEVBQUUsOEJBQThCLENBQUM7aUJBQ3BGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCBOZ01vZHVsZSwgTk9fRVJST1JTX1NDSEVNQSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlLCBUaXRsZUNhc2VQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBGdW5kYW1lbnRhbE5neENvcmVNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUnO1xuaW1wb3J0IHsgQ2FyZE1vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9jYXJkJztcbmltcG9ydCB7IFF1aWNrVmlld01vZHVsZSB9IGZyb20gJ0BmdW5kYW1lbnRhbC1uZ3gvY29yZS9xdWljay12aWV3JztcbmltcG9ydCB7IFBvcG92ZXJNb2R1bGUgfSBmcm9tICdAZnVuZGFtZW50YWwtbmd4L2NvcmUvcG9wb3Zlcic7XG5cbmltcG9ydCB7IEJhcnNhTm92aW5SYXlDb3JlTW9kdWxlLCBCYXNlTW9kdWxlLCBEeW5hbWljQ29tcG9uZW50U2VydmljZSB9IGZyb20gJ2JhcnNhLW5vdmluLXJheS1jb3JlJztcblxuaW1wb3J0IHsgQ2FsZW5kYXJDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLWNvbnRhaW5lci9jYWxlbmRhci1jb250YWluZXIuY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyTGlzdENvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItbGlzdC9jYWxlbmRhci1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhckxpc3RDb250YWluZXJDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLWxpc3QtY29udGFpbmVyL2NhbGVuZGFyLWxpc3QtY29udGFpbmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhckxpc3RJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi9jYWxlbmRhci1saXN0LWl0ZW0vY2FsZW5kYXItbGlzdC1pdGVtLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhcldlZWtDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXdlZWsvY2FsZW5kYXItd2Vlay5jb21wb25lbnQnO1xuaW1wb3J0IHsgQ2FsZW5kYXJNb250aENvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItbW9udGgvY2FsZW5kYXItbW9udGguY29tcG9uZW50JztcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvY2FsZW5kYXIuc2VydmljZSc7XG5pbXBvcnQgeyBNb250aERheXNDb21wb25lbnQgfSBmcm9tICcuL21vbnRoLWRheXMvbW9udGgtZGF5cy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRGF5c0luV2Vla1BpcGUgfSBmcm9tICcuL2RheXMtaW4td2Vlay5waXBlJztcbmltcG9ydCB7IEV2ZW50RGF0ZVBpcGUgfSBmcm9tICcuL2V2ZW50LWRhdGUucGlwZSc7XG5pbXBvcnQgeyBFdmVudFRpbWVQaXBlIH0gZnJvbSAnLi9ldmVudC10aW1lLnBpcGUnO1xuaW1wb3J0IHsgRnJvbVRvVGltZVBpcGUgfSBmcm9tICcuL2Zyb20tdG8tdGltZS5waXBlJztcbmltcG9ydCB7IEVxdWFsRGF0ZVBpcGUgfSBmcm9tICcuL2VxdWFsLWRhdGUucGlwZSc7XG5pbXBvcnQgeyBDYWxlbmRhckhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vY2FsZW5kYXItaGVhZGVyL2NhbGVuZGFyLWhlYWRlci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRXZlbnRQcmV2aWV3Q29tcG9uZW50IH0gZnJvbSAnLi9ldmVudC1wcmV2aWV3L2V2ZW50LXByZXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IERheU51bWJlckJveENvbXBvbmVudCB9IGZyb20gJy4vZGF5LW51bWJlci1ib3gvZGF5LW51bWJlci1ib3guY29tcG9uZW50JztcbmltcG9ydCB7IEV2ZW50QnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi9ldmVudC1idXR0b24vZXZlbnQtYnV0dG9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXlFdmVudExpc3RDb21wb25lbnQgfSBmcm9tICcuL2RheS1ldmVudC1saXN0L2RheS1ldmVudC1saXN0LmNvbXBvbmVudCc7XG5pbXBvcnQgeyBEYXRlVGltZVBpY2tlckNvbXBvbmVudCB9IGZyb20gJy4vZGF0ZS10aW1lLXBpY2tlci9kYXRlLXRpbWUtcGlja2VyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDYWxlbmRhclNlbGVjdGlvbkRheXNDb21wb25lbnQgfSBmcm9tICcuL2NhbGVuZGFyLXNlbGVjdGlvbi1kYXlzL2NhbGVuZGFyLXNlbGVjdGlvbi1kYXlzLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFdmVudEJ1dHRvbkVuZEFycm93Q29tcG9uZW50IH0gZnJvbSAnLi9ldmVudC1idXR0b24tZW5kLWFycm93L2V2ZW50LWJ1dHRvbi1lbmQtYXJyb3cuY29tcG9uZW50JztcbmltcG9ydCB7IEV2ZW50QnV0dG9uU3RhcnRBcnJvd0NvbXBvbmVudCB9IGZyb20gJy4vZXZlbnQtYnV0dG9uLXN0YXJ0LWFycm93L2V2ZW50LWJ1dHRvbi1zdGFydC1hcnJvdy5jb21wb25lbnQnO1xuXG5jb25zdCBjb21wb25lbnRzID0gW1xuICAgIENhbGVuZGFyQ29udGFpbmVyQ29tcG9uZW50LFxuICAgIENhbGVuZGFyTGlzdENvbXBvbmVudCxcbiAgICBDYWxlbmRhckxpc3RDb250YWluZXJDb21wb25lbnQsXG4gICAgQ2FsZW5kYXJMaXN0SXRlbUNvbXBvbmVudCxcbiAgICBDYWxlbmRhcldlZWtDb21wb25lbnQsXG4gICAgQ2FsZW5kYXJNb250aENvbXBvbmVudCxcbiAgICBNb250aERheXNDb21wb25lbnQsXG4gICAgQ2FsZW5kYXJIZWFkZXJDb21wb25lbnQsXG4gICAgRXZlbnRQcmV2aWV3Q29tcG9uZW50LFxuICAgIERheU51bWJlckJveENvbXBvbmVudCxcbiAgICBFdmVudEJ1dHRvbkNvbXBvbmVudCxcbiAgICBEYXlFdmVudExpc3RDb21wb25lbnQsXG4gICAgRXZlbnRCdXR0b25FbmRBcnJvd0NvbXBvbmVudCxcbiAgICBFdmVudEJ1dHRvblN0YXJ0QXJyb3dDb21wb25lbnRcbl07XG5jb25zdCBwaXBlcyA9IFtEYXlzSW5XZWVrUGlwZSwgRXZlbnREYXRlUGlwZSwgRXZlbnRUaW1lUGlwZSwgRnJvbVRvVGltZVBpcGUsIEVxdWFsRGF0ZVBpcGVdO1xuQE5nTW9kdWxlKHtcbiAgICBzY2hlbWFzOiBbTk9fRVJST1JTX1NDSEVNQV0sXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBCYXJzYU5vdmluUmF5Q29yZU1vZHVsZSxcbiAgICAgICAgRnVuZGFtZW50YWxOZ3hDb3JlTW9kdWxlLFxuICAgICAgICBQb3BvdmVyTW9kdWxlLFxuICAgICAgICBDYXJkTW9kdWxlLFxuICAgICAgICBRdWlja1ZpZXdNb2R1bGVcbiAgICBdLFxuICAgIGRlY2xhcmF0aW9uczogWy4uLmNvbXBvbmVudHMsIC4uLnBpcGVzLCBEYXRlVGltZVBpY2tlckNvbXBvbmVudCwgQ2FsZW5kYXJTZWxlY3Rpb25EYXlzQ29tcG9uZW50XSxcbiAgICBwcm92aWRlcnM6IFtUaXRsZUNhc2VQaXBlLCBDYWxlbmRhclNlcnZpY2UsIC4uLnBpcGVzXSxcbiAgICBleHBvcnRzOiBbLi4uY29tcG9uZW50cywgRGF0ZVRpbWVQaWNrZXJDb21wb25lbnQsIENhbGVuZGFyU2VsZWN0aW9uRGF5c0NvbXBvbmVudF1cbn0pXG5leHBvcnQgY2xhc3MgQmFyc2FDYWxlbmRhck1vZHVsZSBleHRlbmRzIEJhc2VNb2R1bGUge1xuICAgIHByb3RlY3RlZCBkeW5hbWljQ29tcG9uZW50cyA9IFsuLi5jb21wb25lbnRzXTtcbiAgICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZGNtOiBEeW5hbWljQ29tcG9uZW50U2VydmljZSwgcHJvdGVjdGVkIGNvbXBvbmVudEZhY3RvcnlSZXNvbHZlcjogQ29tcG9uZW50RmFjdG9yeVJlc29sdmVyKSB7XG4gICAgICAgIHN1cGVyKGRjbSwgY29tcG9uZW50RmFjdG9yeVJlc29sdmVyLCAnQmFyc2FDYWxlbmRhck1vZHVsZScpO1xuICAgIH1cbn1cbiJdfQ==
@@ -1,221 +0,0 @@
1
- import { ChangeDetectionStrategy, Component, EventEmitter, inject, Input, Output, ViewChild } from '@angular/core';
2
- import { BehaviorSubject, combineLatest, of } from 'rxjs';
3
- import { map, switchMap, takeUntil } from 'rxjs/operators';
4
- import { ReportViewBaseComponent, DateService, LogService, getDateService } from 'barsa-novin-ray-core';
5
- import { CalendarService } from '../services/calendar.service';
6
- import * as i0 from "@angular/core";
7
- import * as i1 from "@angular/common";
8
- import * as i2 from "@angular/forms";
9
- import * as i3 from "@fundamental-ngx/core/checkbox";
10
- import * as i4 from "@fundamental-ngx/core/list";
11
- import * as i5 from "../calendar-list-container/calendar-list-container.component";
12
- import * as i6 from "../calendar-week/calendar-week.component";
13
- import * as i7 from "../calendar-month/calendar-month.component";
14
- import * as i8 from "../calendar-header/calendar-header.component";
15
- import * as i9 from "../calendar-selection-days/calendar-selection-days.component";
16
- export class CalendarContainerComponent extends ReportViewBaseComponent {
17
- constructor() {
18
- super(...arguments);
19
- this.deleteTask = new EventEmitter();
20
- this.editTask = new EventEmitter();
21
- this.rangeSelect = new EventEmitter();
22
- this.daySelect = new EventEmitter();
23
- this.loadData = new EventEmitter();
24
- this.todayIndex = -1;
25
- this.eventMoDataList$ = new BehaviorSubject([]);
26
- this._calendarService = inject(CalendarService);
27
- this._dateService = inject(DateService);
28
- }
29
- ngOnInit() {
30
- this.calendarFields = this.contextSetting.View.CalendarFields;
31
- if (this.viewSetting?.CalendarColorField) {
32
- this.calendarFields.Color = this.viewSetting.CalendarColorField;
33
- }
34
- this.userCalendars = this.contextSetting.View.UserCalendars;
35
- super.ngOnInit();
36
- this.prepare();
37
- this._setWidthAndHeight();
38
- this.prepareMoDataList(this.moDataList);
39
- this.selectedMonth$.pipe(takeUntil(this._onDestroy$)).subscribe((month) => {
40
- this.loadData.emit({
41
- start: month.days[0].date,
42
- end: month.days[month.days.length - 1].date
43
- });
44
- });
45
- // this.setTasks(this.calendars, this.moDataList, this.calendarFields);
46
- }
47
- ngOnChanges(changes) {
48
- super.ngOnChanges(changes);
49
- const { moDataList, deviceSize } = changes;
50
- if (moDataList && !moDataList.firstChange) {
51
- this.prepareMoDataList(changes.moDataList.currentValue);
52
- this._cdr.detectChanges();
53
- }
54
- if (deviceSize && !deviceSize.firstChange) {
55
- this._setWidthAndHeight();
56
- this._cdr.detectChanges();
57
- }
58
- }
59
- onCalendarCheckChange(calendar) {
60
- this._handleUserCalendarsChecked();
61
- }
62
- onDayClick(day) {
63
- this._calendarService.setMode('day', day);
64
- }
65
- onShowTask() { }
66
- onSlideChange(selected) {
67
- this._calendarService.setSelected(selected);
68
- }
69
- onMonthCarouselLoaded({ object }) {
70
- object.selectedPage = 1;
71
- }
72
- onToday() {
73
- this._calendarService.gotoToday();
74
- }
75
- onModeChange(mode) {
76
- this._calendarService.setMode(mode);
77
- }
78
- onRangeChange(e) {
79
- this._calendarService.rangeSelect(e.startDay, e.endDay, e.monthInfo);
80
- }
81
- onPrevTap() {
82
- // this.gotoPage(this.monthCarouselView.nativeElement.selectedPage - 1);
83
- this._calendarService.loadPrevious();
84
- }
85
- onNextTap() {
86
- this._calendarService.loadNext();
87
- // this.gotoPage(this.monthCarouselView.nativeElement.selectedPage + 1);
88
- }
89
- onSelectedChange(day) {
90
- this.selectedDay = { ...day };
91
- }
92
- onRangeSelect({ startDate, endDate }) {
93
- const x = { [this.calendarFields.StartDate]: startDate, [this.calendarFields.EndDate]: endDate };
94
- this.rangeSelect.emit(x);
95
- }
96
- prepareMoDataList(moDataList) {
97
- this.eventMoDataList$.next(moDataList.map((event) => ({
98
- ...event,
99
- id: event.Id, // because in core.js calendar selection adapter read id with lowercase
100
- $StartDateInfo: this._dateService.getDateInfo(event[this.calendarFields.StartDate]),
101
- $EndDateInfo: this._dateService.getDateInfo(event[this.calendarFields.EndDate])
102
- })));
103
- }
104
- addTd(table, tr, event, colSpan) {
105
- const colSpanCount = tr.length > 0 ? tr.map((c) => c.colSpan).reduce((a, b) => a + b) > 6 : 0;
106
- if (colSpanCount) {
107
- table.push(tr);
108
- tr = [];
109
- }
110
- tr.push({ type: 'td', colSpan, event });
111
- }
112
- _handleUserCalendarsChecked() {
113
- const userCalendars = this.userCalendars?.Data?.MoDataList;
114
- if (!userCalendars?.length) {
115
- return;
116
- }
117
- const calendars = userCalendars.filter((c) => c.$IsChecked).map((c) => c.Id);
118
- let moList = this.moDataList;
119
- if (calendars.length > 0) {
120
- moList = this.moDataList.filter((c) => c[this.calendarFields.Calendar] && calendars.indexOf(c[this.calendarFields.Calendar].Id) > -1);
121
- }
122
- this.prepareMoDataList(moList);
123
- }
124
- prepare() {
125
- this.weekDaysMin = this._calendarService.weekDaysMin();
126
- this.weekDays = this._calendarService.weekDays();
127
- this.selectedMonth$ = this._calendarService.selected$;
128
- this.days$ = this._calendarService.days$;
129
- this.today = this._calendarService.today;
130
- this.mode$ = this._calendarService.mode$;
131
- this.monthWeeksCount$ = this.mode$.pipe(map((mode) => {
132
- if (mode === 'month') {
133
- return this._calendarService.selectedMonth.weeksCount;
134
- }
135
- return 0;
136
- }));
137
- this.modeTitle$ = combineLatest([this.days$, this.mode$]).pipe(takeUntil(this._onDestroy$), switchMap(([, mode]) => {
138
- if (mode === 'customMonth') {
139
- return of(`${this._calendarService.weeksCount} ${this._bbbTranslate.transform('Week')}`);
140
- }
141
- return of(this._bbbTranslate.transform(this._titleCase.transform(mode)));
142
- }));
143
- this.weekModeDays$ = this._calendarService.weekModeDays$;
144
- this._calendarService.calendars$.pipe(takeUntil(this._onDestroy$)).subscribe((calendars) => {
145
- const eventCalendars = [...calendars];
146
- // eventCalendars = eventCalendars.splice(this.selectedIndex, 3);
147
- this.calendars = eventCalendars;
148
- // if (this.monthCarouselView) {
149
- // this.monthCarouselView.nativeElement.selectedPage = 1;
150
- // }
151
- });
152
- // .pipe(takeUntil(this._onDestroy$))
153
- // .subscribe((todayIndex) => {
154
- // this.selectedIndex = this.todayIndex = todayIndex;
155
- // this.gotoPage(this.todayIndex);
156
- // });
157
- this.title$ = combineLatest([this.weekModeDays$, this.selectedMonth$, this.days$, this.mode$]).pipe(takeUntil(this._onDestroy$), switchMap(([weekModeDays, monthInfo, days, mode]) => {
158
- let monthName = monthInfo.dateInfo.monthName;
159
- const year = monthInfo.dateInfo.strYear;
160
- if (mode !== 'month') {
161
- let firstDayInfo;
162
- let lastDayInfo;
163
- const daysTemp = mode === 'customMonth' ? days : weekModeDays;
164
- if (daysTemp.length > 0) {
165
- firstDayInfo = daysTemp[0];
166
- lastDayInfo = daysTemp[daysTemp.length - 1];
167
- monthName = firstDayInfo.monthName;
168
- if (firstDayInfo.month !== lastDayInfo.month) {
169
- monthName = `${firstDayInfo.monthName} -
170
- ${lastDayInfo.monthName}`;
171
- }
172
- }
173
- }
174
- return of(`${monthName} ${year}`);
175
- }));
176
- }
177
- _setWidthAndHeight() {
178
- // const divRef= this._el.nativeElement;
179
- const divRef = this._divRef.nativeElement;
180
- this.width = divRef.offsetWidth;
181
- this.height = divRef.offsetHeight - 45;
182
- }
183
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalendarContainerComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
184
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: CalendarContainerComponent, selector: "bc-calendar-container", inputs: { calendarFields: "calendarFields", userCalendars: "userCalendars", viewSetting: "viewSetting" }, outputs: { deleteTask: "deleteTask", editTask: "editTask", rangeSelect: "rangeSelect", daySelect: "daySelect", loadData: "loadData" }, providers: [
185
- {
186
- provide: DateService,
187
- useFactory: getDateService,
188
- deps: [LogService]
189
- }
190
- ], viewQueries: [{ propertyName: "_divRef", first: true, predicate: ["divRef"], descendants: true, static: true }], usesInheritance: true, usesOnChanges: true, ngImport: i0, template: "<div style=\"display: flex; width: 100%; height: 100%; flex-direction: row\">\r\n @if (deviceSize !== 's' && deviceSize !== 'm') {\r\n <div style=\"width: 320px; height: 100%\">\r\n <bc-calendar-selection-days\r\n [inline]=\"true\"\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n <div style=\"height: 1px; background: #ccc\"></div>\r\n @if (userCalendars?.Data?.MoDataList?.length) {\r\n <div>\r\n <h4>\u062A\u0642\u0648\u06CC\u0645\u200C\u0647\u0627\u06CC\u200C\u0645\u0646</h4>\r\n @for (calendar of userCalendars.Data.MoDataList; track calendar) {\r\n <ul fd-list>\r\n <li fd-list-item style=\"padding: 0\" class=\"user-calendar\">\r\n <span\r\n [style.background]=\"calendar.Color ? calendar.Color : null\"\r\n style=\"width: 5px; height: 100%; position: absolute\"\r\n ></span>\r\n <fd-checkbox\r\n [(ngModel)]=\"calendar.$IsChecked\"\r\n (change)=\"onCalendarCheckChange(calendar)\"\r\n ></fd-checkbox>\r\n <span fd-list-title>{{ calendar.$Caption }}</span>\r\n </li>\r\n </ul>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div style=\"flex: 1\" #divRef>\r\n <bc-calendar-header\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n [weekModeDays]=\"(weekModeDays$ | async)!!\"\r\n [rtl]=\"rtl\"\r\n [deviceSize]=\"deviceSize\"\r\n [mode]=\"(mode$ | async)!!\"\r\n [modeTitle]=\"(modeTitle$ | async)!!\"\r\n [title]=\"(title$ | async)!!\"\r\n (modeChange)=\"onModeChange($event)\"\r\n (prevTap)=\"onPrevTap()\"\r\n (nextTap)=\"onNextTap()\"\r\n (today)=\"onToday()\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n >\r\n </bc-calendar-header>\r\n @switch (mode$ | async) { @case ('week') {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekCalendar;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n weekModeDays: weekModeDays$ | async,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n } @case ('day') {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekCalendar;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n weekModeDays: weekModeDays$ | async,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n } @case ('list') { } @default {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthCalendar;\r\n context: {\r\n $implicit: days$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n monthWeeksCount: monthWeeksCount$ | async,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n } }\r\n </div>\r\n</div>\r\n<ng-template\r\n #monthCalendar\r\n let-days\r\n let-moDataList=\"moDataList\"\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-calendarFields=\"calendarFields\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-monthWeeksCount=\"monthWeeksCount\"\r\n let-access=\"access\"\r\n>\r\n <bc-calendar-month\r\n [style.width]=\"width\"\r\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\r\n [containerWidth]=\"width\"\r\n [calendarFields]=\"calendarFields\"\r\n [moDataList]=\"moDataList\"\r\n [monthWeeksCount]=\"monthWeeksCount\"\r\n [rtl]=\"rtl\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [showEvents]=\"showEvents\"\r\n [days]=\"days\"\r\n [canView]=\"access.View\"\r\n [canAdd]=\"access.Add\"\r\n [canEdit]=\"access.Edit\"\r\n [canDelete]=\"access.Delete\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event)\"\r\n (showEvent)=\"onShowTask()\"\r\n (deleteEvent)=\"deleteTask.emit($event)\"\r\n (editEvent)=\"editTask.emit($event)\"\r\n (daySelect)=\"daySelect.emit($event)\"\r\n ></bc-calendar-month>\r\n</ng-template>\r\n\r\n<ng-template #listCalendar>\r\n <bc-calendar-list-container\r\n [showEvents]=\"showEvents\"\r\n [selectedDay]=\"selectedDay\"\r\n [calendarFields]=\"calendarFields\"\r\n (showEventsTap)=\"showEvents = !showEvents\"\r\n ></bc-calendar-list-container>\r\n</ng-template>\r\n\r\n<ng-template\r\n #weekCalendar\r\n let-selectedMonth\r\n let-moDataList=\"moDataList\"\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-calendarFields=\"calendarFields\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-weekModeDays=\"weekModeDays\"\r\n let-access=\"access\"\r\n>\r\n <bc-calendar-week\r\n [style.width]=\"width\"\r\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\r\n [containerWidth]=\"width\"\r\n [inDialog]=\"inDialog\"\r\n [calendarFields]=\"calendarFields\"\r\n [moDataList]=\"moDataList\"\r\n [rtl]=\"rtl\"\r\n [canAdd]=\"access.Add\"\r\n [canView]=\"access.View\"\r\n [canEdit]=\"access.Edit\"\r\n [canDelete]=\"access.Delete\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [showEvents]=\"showEvents\"\r\n [days]=\"weekModeDays\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event)\"\r\n (showEvent)=\"onShowTask()\"\r\n (deleteEvent)=\"deleteTask.emit($event)\"\r\n (editEvent)=\"editTask.emit($event)\"\r\n (daySelect)=\"daySelect.emit($event)\"\r\n (rangeSelect)=\"onRangeSelect($event)\"\r\n ></bc-calendar-week>\r\n</ng-template>\r\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep li.user-calendar .fd-list__form-item{padding:.5rem}\n"], dependencies: [{ kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i3.CheckboxComponent, selector: "fd-checkbox", inputs: ["wrapLabel", "valignLabel", "ariaLabel", "role", "value", "ariaLabelledBy", "ariaDescribedBy", "title", "inputId", "state", "name", "label", "disabled", "readonly", "tristate", "tristateSelectable", "labelClass", "required", "displayOnly", "values", "standalone"], outputs: ["focusChange"] }, { kind: "component", type: i4.ListComponent, selector: "[fd-list], [fdList]", inputs: ["dropdownMode", "multiInputMode", "mobileMode", "hasMessage", "noBorder", "navigationIndicator", "selection", "keyboardSupport", "byline", "unreadIndicator", "role"], outputs: ["focusEscapeList"] }, { kind: "component", type: i4.ListItemComponent, selector: "[fdListItem] ,[fd-list-item]", inputs: ["selected", "noData", "action", "interactive", "growing", "counter", "unread", "byline", "ariaRole", "id", "preventClick"], outputs: ["keyDown"] }, { kind: "directive", type: i4.ListTitleDirective, selector: "[fd-list-title], [fdListTitle]", inputs: ["wrap"] }, { kind: "component", type: i5.CalendarListContainerComponent, selector: "bc-calendar-list-container", inputs: ["view", "reportItemComponentName", "showEvents", "selectedDay", "calendarFields"], outputs: ["showEventsTap"] }, { kind: "component", type: i6.CalendarWeekComponent, selector: "bc-calendar-week", inputs: ["weekDays", "weekDaysMin", "today", "containerHeight", "calendarFields", "rtl", "inDialog", "deviceSize", "moDataList", "days", "canDelete", "canAdd", "canEdit", "canView"], outputs: ["editEvent", "deleteEvent", "showEvent", "rangeSelect", "daySelect", "dayClick"] }, { kind: "component", type: i7.CalendarMonthComponent, selector: "bc-calendar-month", inputs: ["monthWeeksCount", "weekDays", "weekDaysMin", "today", "containerHeight", "days", "calendarFields", "rtl", "deviceSize", "moDataList", "datePicker", "rangePicker", "canDelete", "canAdd", "canEdit", "canView", "selectedDate", "startSelectedDayIndex", "endSelectedDayIndex"], outputs: ["editEvent", "deleteEvent", "daySelect", "dayClick", "dayMouseMove", "dayMouseUp", "dayMouseDown", "showEvent"] }, { kind: "component", type: i8.CalendarHeaderComponent, selector: "bc-calendar-header", inputs: ["monthInfo", "weekModeDays", "hideMode", "modeTitle", "title", "deviceSize", "rtl", "mode"], outputs: ["prevTap", "nextTap", "modeChange", "rangeChange", "today"] }, { kind: "component", type: i9.CalendarSelectionDaysComponent, selector: "bc-calendar-selection-days", inputs: ["startSelectedDayIndex", "endSelectedDayIndex", "monthInfo", "inline"], outputs: ["rangeChange"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
191
- }
192
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CalendarContainerComponent, decorators: [{
193
- type: Component,
194
- args: [{ selector: 'bc-calendar-container', changeDetection: ChangeDetectionStrategy.OnPush, providers: [
195
- {
196
- provide: DateService,
197
- useFactory: getDateService,
198
- deps: [LogService]
199
- }
200
- ], standalone: false, template: "<div style=\"display: flex; width: 100%; height: 100%; flex-direction: row\">\r\n @if (deviceSize !== 's' && deviceSize !== 'm') {\r\n <div style=\"width: 320px; height: 100%\">\r\n <bc-calendar-selection-days\r\n [inline]=\"true\"\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n ></bc-calendar-selection-days>\r\n <div style=\"height: 1px; background: #ccc\"></div>\r\n @if (userCalendars?.Data?.MoDataList?.length) {\r\n <div>\r\n <h4>\u062A\u0642\u0648\u06CC\u0645\u200C\u0647\u0627\u06CC\u200C\u0645\u0646</h4>\r\n @for (calendar of userCalendars.Data.MoDataList; track calendar) {\r\n <ul fd-list>\r\n <li fd-list-item style=\"padding: 0\" class=\"user-calendar\">\r\n <span\r\n [style.background]=\"calendar.Color ? calendar.Color : null\"\r\n style=\"width: 5px; height: 100%; position: absolute\"\r\n ></span>\r\n <fd-checkbox\r\n [(ngModel)]=\"calendar.$IsChecked\"\r\n (change)=\"onCalendarCheckChange(calendar)\"\r\n ></fd-checkbox>\r\n <span fd-list-title>{{ calendar.$Caption }}</span>\r\n </li>\r\n </ul>\r\n }\r\n </div>\r\n }\r\n </div>\r\n }\r\n <div style=\"flex: 1\" #divRef>\r\n <bc-calendar-header\r\n [monthInfo]=\"(selectedMonth$ | async)!!\"\r\n [weekModeDays]=\"(weekModeDays$ | async)!!\"\r\n [rtl]=\"rtl\"\r\n [deviceSize]=\"deviceSize\"\r\n [mode]=\"(mode$ | async)!!\"\r\n [modeTitle]=\"(modeTitle$ | async)!!\"\r\n [title]=\"(title$ | async)!!\"\r\n (modeChange)=\"onModeChange($event)\"\r\n (prevTap)=\"onPrevTap()\"\r\n (nextTap)=\"onNextTap()\"\r\n (today)=\"onToday()\"\r\n (rangeChange)=\"onRangeChange($event)\"\r\n >\r\n </bc-calendar-header>\r\n @switch (mode$ | async) { @case ('week') {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekCalendar;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n weekModeDays: weekModeDays$ | async,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n } @case ('day') {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n weekCalendar;\r\n context: {\r\n $implicit: selectedMonth$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n weekModeDays: weekModeDays$ | async,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n } @case ('list') { } @default {\r\n <ng-container\r\n *ngTemplateOutlet=\"\r\n monthCalendar;\r\n context: {\r\n $implicit: days$ | async,\r\n moDataList: eventMoDataList$ | async,\r\n width: width,\r\n height: height,\r\n rtl: rtl,\r\n showEvents: showEvents,\r\n today: today,\r\n deviceSize: deviceSize,\r\n calendarFields: calendarFields,\r\n monthWeeksCount: monthWeeksCount$ | async,\r\n access: access\r\n }\r\n \"\r\n ></ng-container>\r\n } }\r\n </div>\r\n</div>\r\n<ng-template\r\n #monthCalendar\r\n let-days\r\n let-moDataList=\"moDataList\"\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-calendarFields=\"calendarFields\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-monthWeeksCount=\"monthWeeksCount\"\r\n let-access=\"access\"\r\n>\r\n <bc-calendar-month\r\n [style.width]=\"width\"\r\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\r\n [containerWidth]=\"width\"\r\n [calendarFields]=\"calendarFields\"\r\n [moDataList]=\"moDataList\"\r\n [monthWeeksCount]=\"monthWeeksCount\"\r\n [rtl]=\"rtl\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [showEvents]=\"showEvents\"\r\n [days]=\"days\"\r\n [canView]=\"access.View\"\r\n [canAdd]=\"access.Add\"\r\n [canEdit]=\"access.Edit\"\r\n [canDelete]=\"access.Delete\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event)\"\r\n (showEvent)=\"onShowTask()\"\r\n (deleteEvent)=\"deleteTask.emit($event)\"\r\n (editEvent)=\"editTask.emit($event)\"\r\n (daySelect)=\"daySelect.emit($event)\"\r\n ></bc-calendar-month>\r\n</ng-template>\r\n\r\n<ng-template #listCalendar>\r\n <bc-calendar-list-container\r\n [showEvents]=\"showEvents\"\r\n [selectedDay]=\"selectedDay\"\r\n [calendarFields]=\"calendarFields\"\r\n (showEventsTap)=\"showEvents = !showEvents\"\r\n ></bc-calendar-list-container>\r\n</ng-template>\r\n\r\n<ng-template\r\n #weekCalendar\r\n let-selectedMonth\r\n let-moDataList=\"moDataList\"\r\n let-width=\"width\"\r\n let-height=\"height\"\r\n let-calendarFields=\"calendarFields\"\r\n let-rtl=\"rtl\"\r\n let-today=\"today\"\r\n let-showEvents=\"showEvents\"\r\n let-deviceSize=\"deviceSize\"\r\n let-weekModeDays=\"weekModeDays\"\r\n let-access=\"access\"\r\n>\r\n <bc-calendar-week\r\n [style.width]=\"width\"\r\n [containerHeight]=\"parentHeight !== 0 ? parentHeight : height\"\r\n [containerWidth]=\"width\"\r\n [inDialog]=\"inDialog\"\r\n [calendarFields]=\"calendarFields\"\r\n [moDataList]=\"moDataList\"\r\n [rtl]=\"rtl\"\r\n [canAdd]=\"access.Add\"\r\n [canView]=\"access.View\"\r\n [canEdit]=\"access.Edit\"\r\n [canDelete]=\"access.Delete\"\r\n [weekDays]=\"weekDays\"\r\n [weekDaysMin]=\"weekDaysMin\"\r\n [today]=\"today\"\r\n [showEvents]=\"showEvents\"\r\n [days]=\"weekModeDays\"\r\n [deviceSize]=\"deviceSize\"\r\n (dayClick)=\"onDayClick($event)\"\r\n (showEvent)=\"onShowTask()\"\r\n (deleteEvent)=\"deleteTask.emit($event)\"\r\n (editEvent)=\"editTask.emit($event)\"\r\n (daySelect)=\"daySelect.emit($event)\"\r\n (rangeSelect)=\"onRangeSelect($event)\"\r\n ></bc-calendar-week>\r\n</ng-template>\r\n", styles: [":host{display:block;width:100%;height:100%}:host ::ng-deep li.user-calendar .fd-list__form-item{padding:.5rem}\n"] }]
201
- }], propDecorators: { _divRef: [{
202
- type: ViewChild,
203
- args: ['divRef', { static: true }]
204
- }], calendarFields: [{
205
- type: Input
206
- }], userCalendars: [{
207
- type: Input
208
- }], viewSetting: [{
209
- type: Input
210
- }], deleteTask: [{
211
- type: Output
212
- }], editTask: [{
213
- type: Output
214
- }], rangeSelect: [{
215
- type: Output
216
- }], daySelect: [{
217
- type: Output
218
- }], loadData: [{
219
- type: Output
220
- }] } });
221
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItY29udGFpbmVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2JhcnNhLWNhbGVuZGFyL3NyYy9saWIvY2FsZW5kYXItY29udGFpbmVyL2NhbGVuZGFyLWNvbnRhaW5lci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9iYXJzYS1jYWxlbmRhci9zcmMvbGliL2NhbGVuZGFyLWNvbnRhaW5lci9jYWxlbmRhci1jb250YWluZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILHVCQUF1QixFQUN2QixTQUFTLEVBRVQsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDWixNQUFNLGVBQWUsQ0FBQztBQUV2QixPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEUsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0QsT0FBTyxFQUVILHVCQUF1QixFQUN2QixXQUFXLEVBQ1gsVUFBVSxFQUNWLGNBQWMsRUFHakIsTUFBTSxzQkFBc0IsQ0FBQztBQUU5QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7Ozs7O0FBZ0IvRCxNQUFNLE9BQU8sMEJBQ1QsU0FBUSx1QkFBZ0Q7SUFmNUQ7O1FBc0JjLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBdUIsQ0FBQztRQUNyRCxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQXVCLENBQUM7UUFDbkQsZ0JBQVcsR0FBRyxJQUFJLFlBQVksRUFBMkIsQ0FBQztRQUMxRCxjQUFTLEdBQUcsSUFBSSxZQUFZLEVBQVEsQ0FBQztRQUNyQyxhQUFRLEdBQUcsSUFBSSxZQUFZLEVBQTZCLENBQUM7UUFFbkUsZUFB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QUFDLEdBQUcsU0FBUyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxrQkFBa0I7UUFDdEIsd0NBQXdDO1FBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1FBRTFDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQztRQUNoQyxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEdBQUcsRUFBRSxDQUFDO0lBQzNDLENBQUM7K0dBdk5RLDBCQUEwQjttR0FBMUIsMEJBQTBCLGlTQVR4QjtZQUNQO2dCQUNJLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixVQUFVLEVBQUUsY0FBYztnQkFDMUIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO2FBQ3JCO1NBQ0osdUxDeENMLGczT0FvTUE7OzRGRHpKYSwwQkFBMEI7a0JBZHRDLFNBQVM7K0JBQ0ksdUJBQXVCLG1CQUdoQix1QkFBdUIsQ0FBQyxNQUFNLGFBQ3BDO3dCQUNQOzRCQUNJLE9BQU8sRUFBRSxXQUFXOzRCQUNwQixVQUFVLEVBQUUsY0FBYzs0QkFDMUIsSUFBSSxFQUFFLENBQUMsVUFBVSxDQUFDO3lCQUNyQjtxQkFDSixjQUNXLEtBQUs7OEJBTXNCLE9BQU87c0JBQTdDLFNBQVM7dUJBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFDNUIsY0FBYztzQkFBdEIsS0FBSztnQkFDRyxhQUFhO3NCQUFyQixLQUFLO2dCQUNHLFdBQVc7c0JBQW5CLEtBQUs7Z0JBQ0ksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxRQUFRO3NCQUFqQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICAgIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxyXG4gICAgQ29tcG9uZW50LFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIGluamVjdCxcclxuICAgIElucHV0LFxyXG4gICAgT25DaGFuZ2VzLFxyXG4gICAgT25Jbml0LFxyXG4gICAgT3V0cHV0LFxyXG4gICAgU2ltcGxlQ2hhbmdlcyxcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBjb21iaW5lTGF0ZXN0LCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBtYXAsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuaW1wb3J0IHtcclxuICAgIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nLFxyXG4gICAgUmVwb3J0Vmlld0Jhc2VDb21wb25lbnQsXHJcbiAgICBEYXRlU2VydmljZSxcclxuICAgIExvZ1NlcnZpY2UsXHJcbiAgICBnZXREYXRlU2VydmljZSxcclxuICAgIE1ldGFvYmplY3REYXRhTW9kZWwsXHJcbiAgICBDYWxlbmRhck1ldGFvYmplY3REYXRhTW9kZWxcclxufSBmcm9tICdiYXJzYS1ub3Zpbi1yYXktY29yZSc7XHJcbmltcG9ydCB7IENhbGVuZGFyTW9kZSwgQ2FsZW5kYXJNb250aEluZm8sIERheSB9IGZyb20gJy4uL21vZGVscyc7XHJcbmltcG9ydCB7IENhbGVuZGFyU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2NhbGVuZGFyLnNlcnZpY2UnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgICBzZWxlY3RvcjogJ2JjLWNhbGVuZGFyLWNvbnRhaW5lcicsXHJcbiAgICB0ZW1wbGF0ZVVybDogJy4vY2FsZW5kYXItY29udGFpbmVyLmNvbXBvbmVudC5odG1sJyxcclxuICAgIHN0eWxlVXJsczogWycuL2NhbGVuZGFyLWNvbnRhaW5lci5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgICBwcm92aWRlcnM6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICAgIHByb3ZpZGU6IERhdGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiBnZXREYXRlU2VydmljZSxcclxuICAgICAgICAgICAgZGVwczogW0xvZ1NlcnZpY2VdXHJcbiAgICAgICAgfVxyXG4gICAgXSxcclxuICAgIHN0YW5kYWxvbmU6IGZhbHNlXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBDYWxlbmRhckNvbnRhaW5lckNvbXBvbmVudFxyXG4gICAgZXh0ZW5kcyBSZXBvcnRWaWV3QmFzZUNvbXBvbmVudDxVaVJlcG9ydFZpZXdCYXNlU2V0dGluZz5cclxuICAgIGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXNcclxue1xyXG4gICAgQFZpZXdDaGlsZCgnZGl2UmVmJywgeyBzdGF0aWM6IHRydWUgfSkgX2RpdlJlZjogRWxlbWVudFJlZjtcclxuICAgIEBJbnB1dCgpIGNhbGVuZGFyRmllbGRzO1xyXG4gICAgQElucHV0KCkgdXNlckNhbGVuZGFycztcclxuICAgIEBJbnB1dCgpIHZpZXdTZXR0aW5nOiBVaUNhbGVuZGFyU2V0dGluZztcclxuICAgIEBPdXRwdXQoKSBkZWxldGVUYXNrID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgQE91dHB1dCgpIGVkaXRUYXNrID0gbmV3IEV2ZW50RW1pdHRlcjxNZXRhb2JqZWN0RGF0YU1vZGVsPigpO1xyXG4gICAgQE91dHB1dCgpIHJhbmdlU2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjx7IFtrZXk6IHN0cmluZ106IERhdGUgfT4oKTtcclxuICAgIEBPdXRwdXQoKSBkYXlTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPERhdGU+KCk7XHJcbiAgICBAT3V0cHV0KCkgbG9hZERhdGEgPSBuZXcgRXZlbnRFbWl0dGVyPHsgc3RhcnQ6IERhdGU7IGVuZDogYW55IH0+KCk7XHJcbiAgICBzZWxlY3RlZERheTogRGF5O1xyXG4gICAgdG9kYXlJbmRleCA9IC0xO1xyXG4gICAgc2VsZWN0ZWRJbmRleDogYW55O1xyXG4gICAgY2FsZW5kYXJzOiBDYWxlbmRhck1vbnRoSW5mb1tdO1xyXG4gICAgc2hvd0V2ZW50czogYm9vbGVhbjtcclxuICAgIHdpZHRoOiBudW1iZXI7XHJcbiAgICBoZWlnaHQ6IG51bWJlcjtcclxuICAgIHNlbGVjdGVkTW9udGgkOiBPYnNlcnZhYmxlPENhbGVuZGFyTW9udGhJbmZvPjtcclxuICAgIHRvZGF5OiBEYXRlO1xyXG4gICAgd2Vla0RheXNNaW46IHN0cmluZ1tdO1xyXG4gICAgd2Vla0RheXM6IHN0cmluZ1tdO1xyXG4gICAgbW9kZSQ6IE9ic2VydmFibGU8Q2FsZW5kYXJNb2RlPjtcclxuICAgIHNlbGVjdGVkV2VlayQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICAgIHdlZWtNb2RlRGF5cyQ6IE9ic2VydmFibGU8RGF5W10+O1xyXG4gICAgZGF5cyQ6IE9ic2VydmFibGU8RGF5W10+O1xyXG4gICAgd2Vla3NDb3VudDogbnVtYmVyO1xyXG4gICAgZmlyc3RXZWVrSW5kZXg6IG51bWJlcjtcclxuICAgIG1vbnRoV2Vla3NDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcclxuICAgIG1vZGVUaXRsZSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcclxuICAgIHRpdGxlJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xyXG4gICAgZXZlbnRNb0RhdGFMaXN0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TWV0YW9iamVjdERhdGFNb2RlbFtdPihbXSk7XHJcbiAgICBwcml2YXRlIF9jYWxlbmRhclNlcnZpY2UgPSBpbmplY3QoQ2FsZW5kYXJTZXJ2aWNlKTtcclxuICAgIHByaXZhdGUgX2RhdGVTZXJ2aWNlID0gaW5qZWN0KERhdGVTZXJ2aWNlKTtcclxuXHJcbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmNhbGVuZGFyRmllbGRzID0gdGhpcy5jb250ZXh0U2V0dGluZy5WaWV3LkNhbGVuZGFyRmllbGRzO1xyXG4gICAgICAgIGlmICh0aGlzLnZpZXdTZXR0aW5nPy5DYWxlbmRhckNvbG9yRmllbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5jYWxlbmRhckZpZWxkcy5Db2xvciA9IHRoaXMudmlld1NldHRpbmcuQ2FsZW5kYXJDb2xvckZpZWxkO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnVzZXJDYWxlbmRhcnMgPSB0aGlzLmNvbnRleHRTZXR0aW5nLlZpZXcuVXNlckNhbGVuZGFycztcclxuICAgICAgICBzdXBlci5uZ09uSW5pdCgpO1xyXG4gICAgICAgIHRoaXMucHJlcGFyZSgpO1xyXG4gICAgICAgIHRoaXMuX3NldFdpZHRoQW5kSGVpZ2h0KCk7XHJcbiAgICAgICAgdGhpcy5wcmVwYXJlTW9EYXRhTGlzdCh0aGlzLm1vRGF0YUxpc3QpO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWRNb250aCQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgobW9udGg6IENhbGVuZGFyTW9udGhJbmZvKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMubG9hZERhdGEuZW1pdCh7XHJcbiAgICAgICAgICAgICAgICBzdGFydDogbW9udGguZGF5c1swXS5kYXRlLFxyXG4gICAgICAgICAgICAgICAgZW5kOiBtb250aC5kYXlzW21vbnRoLmRheXMubGVuZ3RoIC0gMV0uZGF0ZVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gdGhpcy5zZXRUYXNrcyh0aGlzLmNhbGVuZGFycywgdGhpcy5tb0RhdGFMaXN0LCB0aGlzLmNhbGVuZGFyRmllbGRzKTtcclxuICAgIH1cclxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcclxuICAgICAgICBzdXBlci5uZ09uQ2hhbmdlcyhjaGFuZ2VzKTtcclxuICAgICAgICBjb25zdCB7IG1vRGF0YUxpc3QsIGRldmljZVNpemUgfSA9IGNoYW5nZXM7XHJcbiAgICAgICAgaWYgKG1vRGF0YUxpc3QgJiYgIW1vRGF0YUxpc3QuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5wcmVwYXJlTW9EYXRhTGlzdChjaGFuZ2VzLm1vRGF0YUxpc3QuY3VycmVudFZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRldmljZVNpemUgJiYgIWRldmljZVNpemUuZmlyc3RDaGFuZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5fc2V0V2lkdGhBbmRIZWlnaHQoKTtcclxuICAgICAgICAgICAgdGhpcy5fY2RyLmRldGVjdENoYW5nZXMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBvbkNhbGVuZGFyQ2hlY2tDaGFuZ2UoY2FsZW5kYXI6IE1ldGFvYmplY3REYXRhTW9kZWwpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9oYW5kbGVVc2VyQ2FsZW5kYXJzQ2hlY2tlZCgpO1xyXG4gICAgfVxyXG4gICAgb25EYXlDbGljayhkYXk6IERheSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZXRNb2RlKCdkYXknLCBkYXkpO1xyXG4gICAgfVxyXG4gICAgb25TaG93VGFzaygpOiB2b2lkIHt9XHJcbiAgICBvblNsaWRlQ2hhbmdlKHNlbGVjdGVkOiBDYWxlbmRhck1vbnRoSW5mbyk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZXRTZWxlY3RlZChzZWxlY3RlZCk7XHJcbiAgICB9XHJcbiAgICBvbk1vbnRoQ2Fyb3VzZWxMb2FkZWQoeyBvYmplY3QgfSk6IHZvaWQge1xyXG4gICAgICAgIG9iamVjdC5zZWxlY3RlZFBhZ2UgPSAxO1xyXG4gICAgfVxyXG5cclxuICAgIG9uVG9kYXkoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmdvdG9Ub2RheSgpO1xyXG4gICAgfVxyXG4gICAgb25Nb2RlQ2hhbmdlKG1vZGU6IENhbGVuZGFyTW9kZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZXRNb2RlKG1vZGUpO1xyXG4gICAgfVxyXG4gICAgb25SYW5nZUNoYW5nZShlOiB7IHN0YXJ0RGF5OiBEYXk7IGVuZERheTogRGF5OyBtb250aEluZm86IENhbGVuZGFyTW9udGhJbmZvIH0pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLl9jYWxlbmRhclNlcnZpY2UucmFuZ2VTZWxlY3QoZS5zdGFydERheSwgZS5lbmREYXksIGUubW9udGhJbmZvKTtcclxuICAgIH1cclxuICAgIG9uUHJldlRhcCgpOiB2b2lkIHtcclxuICAgICAgICAvLyAgIHRoaXMuZ290b1BhZ2UodGhpcy5tb250aENhcm91c2VsVmlldy5uYXRpdmVFbGVtZW50LnNlbGVjdGVkUGFnZSAtIDEpO1xyXG4gICAgICAgIHRoaXMuX2NhbGVuZGFyU2VydmljZS5sb2FkUHJldmlvdXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBvbk5leHRUYXAoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmxvYWROZXh0KCk7XHJcbiAgICAgICAgLy8gdGhpcy5nb3RvUGFnZSh0aGlzLm1vbnRoQ2Fyb3VzZWxWaWV3Lm5hdGl2ZUVsZW1lbnQuc2VsZWN0ZWRQYWdlICsgMSk7XHJcbiAgICB9XHJcblxyXG4gICAgb25TZWxlY3RlZENoYW5nZShkYXk6IERheSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXkgPSB7IC4uLmRheSB9O1xyXG4gICAgfVxyXG4gICAgb25SYW5nZVNlbGVjdCh7IHN0YXJ0RGF0ZSwgZW5kRGF0ZSB9KTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgeCA9IHsgW3RoaXMuY2FsZW5kYXJGaWVsZHMuU3RhcnREYXRlXTogc3RhcnREYXRlLCBbdGhpcy5jYWxlbmRhckZpZWxkcy5FbmREYXRlXTogZW5kRGF0ZSB9O1xyXG4gICAgICAgIHRoaXMucmFuZ2VTZWxlY3QuZW1pdCh4KTtcclxuICAgIH1cclxuXHJcbiAgICBwcmVwYXJlTW9EYXRhTGlzdChtb0RhdGFMaXN0OiBNZXRhb2JqZWN0RGF0YU1vZGVsW10pOiB2b2lkIHtcclxuICAgICAgICB0aGlzLmV2ZW50TW9EYXRhTGlzdCQubmV4dChcclxuICAgICAgICAgICAgbW9EYXRhTGlzdC5tYXAoKGV2ZW50KSA9PiAoe1xyXG4gICAgICAgICAgICAgICAgLi4uZXZlbnQsXHJcbiAgICAgICAgICAgICAgICBpZDogZXZlbnQuSWQsIC8vIGJlY2F1c2UgaW4gY29yZS5qcyBjYWxlbmRhciBzZWxlY3Rpb24gYWRhcHRlciByZWFkIGlkIHdpdGggbG93ZXJjYXNlXHJcbiAgICAgICAgICAgICAgICAkU3RhcnREYXRlSW5mbzogdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0RGF0ZUluZm8oZXZlbnRbdGhpcy5jYWxlbmRhckZpZWxkcy5TdGFydERhdGVdKSxcclxuICAgICAgICAgICAgICAgICRFbmREYXRlSW5mbzogdGhpcy5fZGF0ZVNlcnZpY2UuZ2V0RGF0ZUluZm8oZXZlbnRbdGhpcy5jYWxlbmRhckZpZWxkcy5FbmREYXRlXSlcclxuICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGRUZCh0YWJsZTogYW55W10sIHRyOiBhbnlbXSwgZXZlbnQ6IENhbGVuZGFyTWV0YW9iamVjdERhdGFNb2RlbCwgY29sU3BhbjogbnVtYmVyKTogdm9pZCB7XHJcbiAgICAgICAgY29uc3QgY29sU3BhbkNvdW50ID0gdHIubGVuZ3RoID4gMCA/IHRyLm1hcCgoYykgPT4gYy5jb2xTcGFuKS5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKSA+IDYgOiAwO1xyXG4gICAgICAgIGlmIChjb2xTcGFuQ291bnQpIHtcclxuICAgICAgICAgICAgdGFibGUucHVzaCh0cik7XHJcbiAgICAgICAgICAgIHRyID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyLnB1c2goeyB0eXBlOiAndGQnLCBjb2xTcGFuLCBldmVudCB9KTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX2hhbmRsZVVzZXJDYWxlbmRhcnNDaGVja2VkKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IHVzZXJDYWxlbmRhcnMgPSB0aGlzLnVzZXJDYWxlbmRhcnM/LkRhdGE/Lk1vRGF0YUxpc3Q7XHJcbiAgICAgICAgaWYgKCF1c2VyQ2FsZW5kYXJzPy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjYWxlbmRhcnMgPSB1c2VyQ2FsZW5kYXJzLmZpbHRlcigoYykgPT4gYy4kSXNDaGVja2VkKS5tYXAoKGMpID0+IGMuSWQpO1xyXG4gICAgICAgIGxldCBtb0xpc3QgPSB0aGlzLm1vRGF0YUxpc3Q7XHJcblxyXG4gICAgICAgIGlmIChjYWxlbmRhcnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBtb0xpc3QgPSB0aGlzLm1vRGF0YUxpc3QuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKGMpID0+IGNbdGhpcy5jYWxlbmRhckZpZWxkcy5DYWxlbmRhcl0gJiYgY2FsZW5kYXJzLmluZGV4T2YoY1t0aGlzLmNhbGVuZGFyRmllbGRzLkNhbGVuZGFyXS5JZCkgPiAtMVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByZXBhcmVNb0RhdGFMaXN0KG1vTGlzdCk7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIHByZXBhcmUoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy53ZWVrRGF5c01pbiA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS53ZWVrRGF5c01pbigpO1xyXG4gICAgICAgIHRoaXMud2Vla0RheXMgPSB0aGlzLl9jYWxlbmRhclNlcnZpY2Uud2Vla0RheXMoKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkTW9udGgkID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLnNlbGVjdGVkJDtcclxuICAgICAgICB0aGlzLmRheXMkID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmRheXMkO1xyXG4gICAgICAgIHRoaXMudG9kYXkgPSB0aGlzLl9jYWxlbmRhclNlcnZpY2UudG9kYXk7XHJcbiAgICAgICAgdGhpcy5tb2RlJCA9IHRoaXMuX2NhbGVuZGFyU2VydmljZS5tb2RlJDtcclxuXHJcbiAgICAgICAgdGhpcy5tb250aFdlZWtzQ291bnQkID0gdGhpcy5tb2RlJC5waXBlKFxyXG4gICAgICAgICAgICBtYXAoKG1vZGUpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnbW9udGgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhbGVuZGFyU2VydmljZS5zZWxlY3RlZE1vbnRoLndlZWtzQ291bnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMubW9kZVRpdGxlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMuZGF5cyQsIHRoaXMubW9kZSRdKS5waXBlKFxyXG4gICAgICAgICAgICB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCksXHJcbiAgICAgICAgICAgIHN3aXRjaE1hcCgoWywgbW9kZV0pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChtb2RlID09PSAnY3VzdG9tTW9udGgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKGAke3RoaXMuX2NhbGVuZGFyU2VydmljZS53ZWVrc0NvdW50fSAgJHt0aGlzLl9iYmJUcmFuc2xhdGUudHJhbnNmb3JtKCdXZWVrJyl9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YodGhpcy5fYmJiVHJhbnNsYXRlLnRyYW5zZm9ybSh0aGlzLl90aXRsZUNhc2UudHJhbnNmb3JtKG1vZGUpKSk7XHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgdGhpcy53ZWVrTW9kZURheXMkID0gdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLndlZWtNb2RlRGF5cyQ7XHJcbiAgICAgICAgdGhpcy5fY2FsZW5kYXJTZXJ2aWNlLmNhbGVuZGFycyQucGlwZSh0YWtlVW50aWwodGhpcy5fb25EZXN0cm95JCkpLnN1YnNjcmliZSgoY2FsZW5kYXJzKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IGV2ZW50Q2FsZW5kYXJzID0gWy4uLmNhbGVuZGFyc107XHJcbiAgICAgICAgICAgIC8vIGV2ZW50Q2FsZW5kYXJzID0gZXZlbnRDYWxlbmRhcnMuc3BsaWNlKHRoaXMuc2VsZWN0ZWRJbmRleCwgMyk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FsZW5kYXJzID0gZXZlbnRDYWxlbmRhcnM7XHJcbiAgICAgICAgICAgIC8vIGlmICh0aGlzLm1vbnRoQ2Fyb3VzZWxWaWV3KSB7XHJcbiAgICAgICAgICAgIC8vICAgdGhpcy5tb250aENhcm91c2VsVmlldy5uYXRpdmVFbGVtZW50LnNlbGVjdGVkUGFnZSA9IDE7XHJcbiAgICAgICAgICAgIC8vIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8gLnBpcGUodGFrZVVudGlsKHRoaXMuX29uRGVzdHJveSQpKVxyXG4gICAgICAgIC8vICAgLnN1YnNjcmliZSgodG9kYXlJbmRleCkgPT4ge1xyXG4gICAgICAgIC8vICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnRvZGF5SW5kZXggPSB0b2RheUluZGV4O1xyXG4gICAgICAgIC8vICAgICB0aGlzLmdvdG9QYWdlKHRoaXMudG9kYXlJbmRleCk7XHJcbiAgICAgICAgLy8gICB9KTtcclxuICAgICAgICB0aGlzLnRpdGxlJCA9IGNvbWJpbmVMYXRlc3QoW3RoaXMud2Vla01vZGVEYXlzJCwgdGhpcy5zZWxlY3RlZE1vbnRoJCwgdGhpcy5kYXlzJCwgdGhpcy5tb2RlJF0pLnBpcGUoXHJcbiAgICAgICAgICAgIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSxcclxuICAgICAgICAgICAgc3dpdGNoTWFwKChbd2Vla01vZGVEYXlzLCBtb250aEluZm8sIGRheXMsIG1vZGVdKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBsZXQgbW9udGhOYW1lID0gbW9udGhJbmZvLmRhdGVJbmZvLm1vbnRoTmFtZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHllYXIgPSBtb250aEluZm8uZGF0ZUluZm8uc3RyWWVhcjtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobW9kZSAhPT0gJ21vbnRoJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaXJzdERheUluZm86IERheTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgbGFzdERheUluZm86IERheTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBkYXlzVGVtcCA9IG1vZGUgPT09ICdjdXN0b21Nb250aCcgPyBkYXlzIDogd2Vla01vZGVEYXlzO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChkYXlzVGVtcC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0RGF5SW5mbyA9IGRheXNUZW1wWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYXN0RGF5SW5mbyA9IGRheXNUZW1wW2RheXNUZW1wLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb250aE5hbWUgPSBmaXJzdERheUluZm8ubW9udGhOYW1lO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3REYXlJbmZvLm1vbnRoICE9PSBsYXN0RGF5SW5mby5tb250aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9udGhOYW1lID0gYCR7Zmlyc3REYXlJbmZvLm1vbnRoTmFtZX0gLVxyXG4gICAgICAgICAgICAgICR7bGFzdERheUluZm8ubW9udGhOYW1lfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb2YoYCR7bW9udGhOYW1lfSAgJHt5ZWFyfWApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2V0V2lkdGhBbmRIZWlnaHQoKTogdm9pZCB7XHJcbiAgICAgICAgLy8gY29uc3QgZGl2UmVmPSB0aGlzLl9lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGRpdlJlZiA9IHRoaXMuX2RpdlJlZi5uYXRpdmVFbGVtZW50O1xyXG5cclxuICAgICAgICB0aGlzLndpZHRoID0gZGl2UmVmLm9mZnNldFdpZHRoO1xyXG4gICAgICAgIHRoaXMuaGVpZ2h0ID0gZGl2UmVmLm9mZnNldEhlaWdodCAtIDQ1O1xyXG4gICAgfVxyXG59XHJcbmludGVyZmFjZSBVaUNhbGVuZGFyU2V0dGluZyBleHRlbmRzIFVpUmVwb3J0Vmlld0Jhc2VTZXR0aW5nIHtcclxuICAgIENhbGVuZGFyQ29sb3JGaWVsZDogc3RyaW5nO1xyXG59XHJcbiIsIjxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4OyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlOyBmbGV4LWRpcmVjdGlvbjogcm93XCI+XHJcbiAgICBAaWYgKGRldmljZVNpemUgIT09ICdzJyAmJiBkZXZpY2VTaXplICE9PSAnbScpIHtcclxuICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDogMzIwcHg7IGhlaWdodDogMTAwJVwiPlxyXG4gICAgICAgIDxiYy1jYWxlbmRhci1zZWxlY3Rpb24tZGF5c1xyXG4gICAgICAgICAgICBbaW5saW5lXT1cInRydWVcIlxyXG4gICAgICAgICAgICBbbW9udGhJbmZvXT1cIihzZWxlY3RlZE1vbnRoJCB8IGFzeW5jKSEhXCJcclxuICAgICAgICAgICAgKHJhbmdlQ2hhbmdlKT1cIm9uUmFuZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvYmMtY2FsZW5kYXItc2VsZWN0aW9uLWRheXM+XHJcbiAgICAgICAgPGRpdiBzdHlsZT1cImhlaWdodDogMXB4OyBiYWNrZ3JvdW5kOiAjY2NjXCI+PC9kaXY+XHJcbiAgICAgICAgQGlmICh1c2VyQ2FsZW5kYXJzPy5EYXRhPy5Nb0RhdGFMaXN0Py5sZW5ndGgpIHtcclxuICAgICAgICA8ZGl2PlxyXG4gICAgICAgICAgICA8aDQ+2KrZgtmI24zZheKAjNmH2KfbjOKAjNmF2YY8L2g0PlxyXG4gICAgICAgICAgICBAZm9yIChjYWxlbmRhciBvZiB1c2VyQ2FsZW5kYXJzLkRhdGEuTW9EYXRhTGlzdDsgdHJhY2sgY2FsZW5kYXIpIHtcclxuICAgICAgICAgICAgPHVsIGZkLWxpc3Q+XHJcbiAgICAgICAgICAgICAgICA8bGkgZmQtbGlzdC1pdGVtIHN0eWxlPVwicGFkZGluZzogMFwiIGNsYXNzPVwidXNlci1jYWxlbmRhclwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5iYWNrZ3JvdW5kXT1cImNhbGVuZGFyLkNvbG9yID8gY2FsZW5kYXIuQ29sb3IgOiBudWxsXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9XCJ3aWR0aDogNXB4OyBoZWlnaHQ6IDEwMCU7IHBvc2l0aW9uOiBhYnNvbHV0ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgPjwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICA8ZmQtY2hlY2tib3hcclxuICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJjYWxlbmRhci4kSXNDaGVja2VkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkNhbGVuZGFyQ2hlY2tDaGFuZ2UoY2FsZW5kYXIpXCJcclxuICAgICAgICAgICAgICAgICAgICA+PC9mZC1jaGVja2JveD5cclxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBmZC1saXN0LXRpdGxlPnt7IGNhbGVuZGFyLiRDYXB0aW9uIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgPC91bD5cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgICAgIH1cclxuICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gICAgPGRpdiBzdHlsZT1cImZsZXg6IDFcIiAjZGl2UmVmPlxyXG4gICAgICAgIDxiYy1jYWxlbmRhci1oZWFkZXJcclxuICAgICAgICAgICAgW21vbnRoSW5mb109XCIoc2VsZWN0ZWRNb250aCQgfCBhc3luYykhIVwiXHJcbiAgICAgICAgICAgIFt3ZWVrTW9kZURheXNdPVwiKHdlZWtNb2RlRGF5cyQgfCBhc3luYykhIVwiXHJcbiAgICAgICAgICAgIFtydGxdPVwicnRsXCJcclxuICAgICAgICAgICAgW2RldmljZVNpemVdPVwiZGV2aWNlU2l6ZVwiXHJcbiAgICAgICAgICAgIFttb2RlXT1cIihtb2RlJCB8IGFzeW5jKSEhXCJcclxuICAgICAgICAgICAgW21vZGVUaXRsZV09XCIobW9kZVRpdGxlJCB8IGFzeW5jKSEhXCJcclxuICAgICAgICAgICAgW3RpdGxlXT1cIih0aXRsZSQgfCBhc3luYykhIVwiXHJcbiAgICAgICAgICAgIChtb2RlQ2hhbmdlKT1cIm9uTW9kZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHByZXZUYXApPVwib25QcmV2VGFwKClcIlxyXG4gICAgICAgICAgICAobmV4dFRhcCk9XCJvbk5leHRUYXAoKVwiXHJcbiAgICAgICAgICAgICh0b2RheSk9XCJvblRvZGF5KClcIlxyXG4gICAgICAgICAgICAocmFuZ2VDaGFuZ2UpPVwib25SYW5nZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgPC9iYy1jYWxlbmRhci1oZWFkZXI+XHJcbiAgICAgICAgQHN3aXRjaCAobW9kZSQgfCBhc3luYykgeyBAY2FzZSAoJ3dlZWsnKSB7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgd2Vla0NhbGVuZGFyO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogc2VsZWN0ZWRNb250aCQgfCBhc3luYyxcclxuICAgICAgICAgICAgICAgICAgICBtb0RhdGFMaXN0OiBldmVudE1vRGF0YUxpc3QkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHJ0bDogcnRsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dFdmVudHM6IHNob3dFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Vla01vZGVEYXlzOiB3ZWVrTW9kZURheXMkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9kYXk6IHRvZGF5LFxyXG4gICAgICAgICAgICAgICAgICAgIGRldmljZVNpemU6IGRldmljZVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJGaWVsZHM6IGNhbGVuZGFyRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2VzczogYWNjZXNzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIH0gQGNhc2UgKCdkYXknKSB7XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lclxyXG4gICAgICAgICAgICAqbmdUZW1wbGF0ZU91dGxldD1cIlxyXG4gICAgICAgICAgICAgICAgd2Vla0NhbGVuZGFyO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogc2VsZWN0ZWRNb250aCQgfCBhc3luYyxcclxuICAgICAgICAgICAgICAgICAgICBtb0RhdGFMaXN0OiBldmVudE1vRGF0YUxpc3QkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHJ0bDogcnRsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dFdmVudHM6IHNob3dFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgd2Vla01vZGVEYXlzOiB3ZWVrTW9kZURheXMkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9kYXk6IHRvZGF5LFxyXG4gICAgICAgICAgICAgICAgICAgIGRldmljZVNpemU6IGRldmljZVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJGaWVsZHM6IGNhbGVuZGFyRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2VzczogYWNjZXNzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIH0gQGNhc2UgKCdsaXN0JykgeyB9IEBkZWZhdWx0IHtcclxuICAgICAgICA8bmctY29udGFpbmVyXHJcbiAgICAgICAgICAgICpuZ1RlbXBsYXRlT3V0bGV0PVwiXHJcbiAgICAgICAgICAgICAgICBtb250aENhbGVuZGFyO1xyXG4gICAgICAgICAgICAgICAgY29udGV4dDoge1xyXG4gICAgICAgICAgICAgICAgICAgICRpbXBsaWNpdDogZGF5cyQgfCBhc3luYyxcclxuICAgICAgICAgICAgICAgICAgICBtb0RhdGFMaXN0OiBldmVudE1vRGF0YUxpc3QkIHwgYXN5bmMsXHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgICAgIHJ0bDogcnRsLFxyXG4gICAgICAgICAgICAgICAgICAgIHNob3dFdmVudHM6IHNob3dFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgdG9kYXk6IHRvZGF5LFxyXG4gICAgICAgICAgICAgICAgICAgIGRldmljZVNpemU6IGRldmljZVNpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgY2FsZW5kYXJGaWVsZHM6IGNhbGVuZGFyRmllbGRzLFxyXG4gICAgICAgICAgICAgICAgICAgIG1vbnRoV2Vla3NDb3VudDogbW9udGhXZWVrc0NvdW50JCB8IGFzeW5jLFxyXG4gICAgICAgICAgICAgICAgICAgIGFjY2VzczogYWNjZXNzXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIFwiXHJcbiAgICAgICAgPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIH0gfVxyXG4gICAgPC9kaXY+XHJcbjwvZGl2PlxyXG48bmctdGVtcGxhdGVcclxuICAgICNtb250aENhbGVuZGFyXHJcbiAgICBsZXQtZGF5c1xyXG4gICAgbGV0LW1vRGF0YUxpc3Q9XCJtb0RhdGFMaXN0XCJcclxuICAgIGxldC13aWR0aD1cIndpZHRoXCJcclxuICAgIGxldC1oZWlnaHQ9XCJoZWlnaHRcIlxyXG4gICAgbGV0LWNhbGVuZGFyRmllbGRzPVwiY2FsZW5kYXJGaWVsZHNcIlxyXG4gICAgbGV0LXJ0bD1cInJ0bFwiXHJcbiAgICBsZXQtdG9kYXk9XCJ0b2RheVwiXHJcbiAgICBsZXQtc2hvd0V2ZW50cz1cInNob3dFdmVudHNcIlxyXG4gICAgbGV0LWRldmljZVNpemU9XCJkZXZpY2VTaXplXCJcclxuICAgIGxldC1tb250aFdlZWtzQ291bnQ9XCJtb250aFdlZWtzQ291bnRcIlxyXG4gICAgbGV0LWFjY2Vzcz1cImFjY2Vzc1wiXHJcbj5cclxuICAgIDxiYy1jYWxlbmRhci1tb250aFxyXG4gICAgICAgIFtzdHlsZS53aWR0aF09XCJ3aWR0aFwiXHJcbiAgICAgICAgW2NvbnRhaW5lckhlaWdodF09XCJwYXJlbnRIZWlnaHQgIT09IDAgPyBwYXJlbnRIZWlnaHQgOiBoZWlnaHRcIlxyXG4gICAgICAgIFtjb250YWluZXJXaWR0aF09XCJ3aWR0aFwiXHJcbiAgICAgICAgW2NhbGVuZGFyRmllbGRzXT1cImNhbGVuZGFyRmllbGRzXCJcclxuICAgICAgICBbbW9EYXRhTGlzdF09XCJtb0RhdGFMaXN0XCJcclxuICAgICAgICBbbW9udGhXZWVrc0NvdW50XT1cIm1vbnRoV2Vla3NDb3VudFwiXHJcbiAgICAgICAgW3J0bF09XCJydGxcIlxyXG4gICAgICAgIFt3ZWVrRGF5c109XCJ3ZWVrRGF5c1wiXHJcbiAgICAgICAgW3dlZWtEYXlzTWluXT1cIndlZWtEYXlzTWluXCJcclxuICAgICAgICBbdG9kYXldPVwidG9kYXlcIlxyXG4gICAgICAgIFtzaG93RXZlbnRzXT1cInNob3dFdmVudHNcIlxyXG4gICAgICAgIFtkYXlzXT1cImRheXNcIlxyXG4gICAgICAgIFtjYW5WaWV3XT1cImFjY2Vzcy5WaWV3XCJcclxuICAgICAgICBbY2FuQWRkXT1cImFjY2Vzcy5BZGRcIlxyXG4gICAgICAgIFtjYW5FZGl0XT1cImFjY2Vzcy5FZGl0XCJcclxuICAgICAgICBbY2FuRGVsZXRlXT1cImFjY2Vzcy5EZWxldGVcIlxyXG4gICAgICAgIFtkZXZpY2VTaXplXT1cImRldmljZVNpemVcIlxyXG4gICAgICAgIChkYXlDbGljayk9XCJvbkRheUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgIChzaG93RXZlbnQpPVwib25TaG93VGFzaygpXCJcclxuICAgICAgICAoZGVsZXRlRXZlbnQpPVwiZGVsZXRlVGFzay5lbWl0KCRldmVudClcIlxyXG4gICAgICAgIChlZGl0RXZlbnQpPVwiZWRpdFRhc2suZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAoZGF5U2VsZWN0KT1cImRheVNlbGVjdC5lbWl0KCRldmVudClcIlxyXG4gICAgPjwvYmMtY2FsZW5kYXItbW9udGg+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGUgI2xpc3RDYWxlbmRhcj5cclxuICAgIDxiYy1jYWxlbmRhci1saXN0LWNvbnRhaW5lclxyXG4gICAgICAgIFtzaG93RXZlbnRzXT1cInNob3dFdmVudHNcIlxyXG4gICAgICAgIFtzZWxlY3RlZERheV09XCJzZWxlY3RlZERheVwiXHJcbiAgICAgICAgW2NhbGVuZGFyRmllbGRzXT1cImNhbGVuZGFyRmllbGRzXCJcclxuICAgICAgICAoc2hvd0V2ZW50c1RhcCk9XCJzaG93RXZlbnRzID0gIXNob3dFdmVudHNcIlxyXG4gICAgPjwvYmMtY2FsZW5kYXItbGlzdC1jb250YWluZXI+XHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48bmctdGVtcGxhdGVcclxuICAgICN3ZWVrQ2FsZW5kYXJcclxuICAgIGxldC1zZWxlY3RlZE1vbnRoXHJcbiAgICBsZXQtbW9EYXRhTGlzdD1cIm1vRGF0YUxpc3RcIlxyXG4gICAgbGV0LXdpZHRoPVwid2lkdGhcIlxyXG4gICAgbGV0LWhlaWdodD1cImhlaWdodFwiXHJcbiAgICBsZXQtY2FsZW5kYXJGaWVsZHM9XCJjYWxlbmRhckZpZWxkc1wiXHJcbiAgICBsZXQtcnRsPVwicnRsXCJcclxuICAgIGxldC10b2RheT1cInRvZGF5XCJcclxuICAgIGxldC1zaG93RXZlbnRzPVwic2hvd0V2ZW50c1wiXHJcbiAgICBsZXQtZGV2aWNlU2l6ZT1cImRldmljZVNpemVcIlxyXG4gICAgbGV0LXdlZWtNb2RlRGF5cz1cIndlZWtNb2RlRGF5c1wiXHJcbiAgICBsZXQtYWNjZXNzPVwiYWNjZXNzXCJcclxuPlxyXG4gICAgPGJjLWNhbGVuZGFyLXdlZWtcclxuICAgICAgICBbc3R5bGUud2lkdGhdPVwid2lkdGhcIlxyXG4gICAgICAgIFtjb250YWluZXJIZWlnaHRdPVwicGFyZW50SGVpZ2h0ICE9PSAwID8gcGFyZW50SGVpZ2h0IDogaGVpZ2h0XCJcclxuICAgICAgICBbY29udGFpbmVyV2lkdGhdPVwid2lkdGhcIlxyXG4gICAgICAgIFtpbkRpYWxvZ109XCJpbkRpYWxvZ1wiXHJcbiAgICAgICAgW2NhbGVuZGFyRmllbGRzXT1cImNhbGVuZGFyRmllbGRzXCJcclxuICAgICAgICBbbW9EYXRhTGlzdF09XCJtb0RhdGFMaXN0XCJcclxuICAgICAgICBbcnRsXT1cInJ0bFwiXHJcbiAgICAgICAgW2NhbkFkZF09XCJhY2Nlc3MuQWRkXCJcclxuICAgICAgICBbY2FuVmlld109XCJhY2Nlc3MuVmlld1wiXHJcbiAgICAgICAgW2NhbkVkaXRdPVwiYWNjZXNzLkVkaXRcIlxyXG4gICAgICAgIFtjYW5EZWxldGVdPVwiYWNjZXNzLkRlbGV0ZVwiXHJcbiAgICAgICAgW3dlZWtEYXlzXT1cIndlZWtEYXlzXCJcclxuICAgICAgICBbd2Vla0RheXNNaW5dPVwid2Vla0RheXNNaW5cIlxyXG4gICAgICAgIFt0b2RheV09XCJ0b2RheVwiXHJcbiAgICAgICAgW3Nob3dFdmVudHNdPVwic2hvd0V2ZW50c1wiXHJcbiAgICAgICAgW2RheXNdPVwid2Vla01vZGVEYXlzXCJcclxuICAgICAgICBbZGV2aWNlU2l6ZV09XCJkZXZpY2VTaXplXCJcclxuICAgICAgICAoZGF5Q2xpY2spPVwib25EYXlDbGljaygkZXZlbnQpXCJcclxuICAgICAgICAoc2hvd0V2ZW50KT1cIm9uU2hvd1Rhc2soKVwiXHJcbiAgICAgICAgKGRlbGV0ZUV2ZW50KT1cImRlbGV0ZVRhc2suZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAoZWRpdEV2ZW50KT1cImVkaXRUYXNrLmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgKGRheVNlbGVjdCk9XCJkYXlTZWxlY3QuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAocmFuZ2VTZWxlY3QpPVwib25SYW5nZVNlbGVjdCgkZXZlbnQpXCJcclxuICAgID48L2JjLWNhbGVuZGFyLXdlZWs+XHJcbjwvbmctdGVtcGxhdGU+XHJcbiJdfQ==