@qeydar/datepicker
Version:
A comprehensive Date and Time Picker for Angular with Jalali calendar support
169 lines • 17.6 kB
JavaScript
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { NgFor, NgIf } from '@angular/common';
import * as i0 from "@angular/core";
export class CalendarSidebarComponent {
constructor() {
this.showSidebar = true;
this.isRange = false;
this.viewMode = 'days';
this.periods = [];
this.monthListNum = [];
this.yearList = [];
this.yearRanges = [];
this.selectPeriod = new EventEmitter();
this.selectMonth = new EventEmitter();
this.selectYear = new EventEmitter();
this.selectYearRange = new EventEmitter();
}
ngAfterViewInit() { }
}
CalendarSidebarComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarSidebarComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
CalendarSidebarComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: CalendarSidebarComponent, isStandalone: true, selector: "qeydar-calendar-sidebar", inputs: { showSidebar: "showSidebar", isRange: "isRange", viewMode: "viewMode", periods: "periods", monthListNum: "monthListNum", yearList: "yearList", yearRanges: "yearRanges", isActivePeriod: "isActivePeriod", getMonthName: "getMonthName", isActiveMonth: "isActiveMonth", isMonthDisabled: "isMonthDisabled", isActiveYear: "isActiveYear", isYearDisabled: "isYearDisabled", isActiveYearRange: "isActiveYearRange", isYearRangeDisabled: "isYearRangeDisabled" }, outputs: { selectPeriod: "selectPeriod", selectMonth: "selectMonth", selectYear: "selectYear", selectYearRange: "selectYearRange" }, viewQueries: [{ propertyName: "itemSelector", first: true, predicate: ["itemSelector"], descendants: true }], ngImport: i0, template: `
<ng-container *ngIf="showSidebar">
<div *ngIf="isRange" class="period-selector">
<button
*ngFor="let period of periods"
tabindex="-1"
[]="isActivePeriod(period)"
(click)="selectPeriod.emit(period)"
>
{{ period.label }}
<span *ngIf="period.arrow" class="arrow">→</span>
</button>
</div>
<div *ngIf="!isRange" class="side-selector"
<ng-container *ngIf="viewMode == 'days'">
<button
*ngFor="let month of monthListNum"
tabindex="-1"
[]="'selector_'+month"
[]="isActiveMonth(month)"
[]="isMonthDisabled(month)"
(click)="selectMonth.emit(month)">
{{ getMonthName(month) }}
</button>
</ng-container>
<ng-container *ngIf="viewMode == 'months'">
<button
*ngFor="let year of yearList"
tabindex="-1"
[]="'selector_'+year"
[]="isActiveYear(year)"
[]="isYearDisabled(year)"
(click)="selectYear.emit(year)"
>
{{ year }}
</button>
</ng-container>
<ng-container *ngIf="viewMode == 'years'">
<button
tabindex="-1"
*ngFor="let yearRange of yearRanges"
[]="'selector_'+yearRange.start"
[]="isActiveYearRange(yearRange.start)"
[]="isYearRangeDisabled(yearRange)"
(click)="selectYearRange.emit(yearRange.start)"
>
{{ yearRange.start }} - {{ yearRange.end }}
</button>
</ng-container>
</div>
</ng-container>
`, isInline: true, styles: [":root{--dp-color-bg: #fff;--dp-color-surface: #fff;--dp-color-text: #555;--dp-color-muted: #8a8a8a;--dp-color-border: #e5e5e5;--dp-color-primary: #bfeaff;--dp-color-primary-contrast: #fff;--dp-color-primary-text: #0175e0;--dp-color-primary-button: #1890ff;--dp-color-primary-week: #18396cb0;--dp-color-accent: #ff4081;--dp-color-danger: #d32f2f;--dp-color-success: #2e7d32;--dp-color-warning: #f9a825;--dp-color-hover: #e6f7ff;--dp-spacing-0: 0;--dp-spacing-1: 4px;--dp-spacing-2: 8px;--dp-spacing-3: 12px;--dp-spacing-4: 16px;--dp-spacing-5: 20px;--dp-spacing-6: 24px;--dp-spacing-7: 28px;--dp-spacing-8: 32px;--dp-radius-0: 0;--dp-radius-1: 4px;--dp-radius-2: 6px;--dp-radius-3: 8px;--dp-font-size-xs: 11px;--dp-font-size-sm: 12px;--dp-font-size-md: 14px;--dp-font-size-lg: 16px}.side-selector,.period-selector{width:120px;border-inline-end:1px solid var(--dp-color-border)}.side-selector button,.period-selector button{display:flex;justify-content:space-between;font-size:14px;width:100%;padding:10px;text-align:start;border:none;background:none;cursor:pointer;border-block-end:1px solid var(--dp-color-border);color:var(--dp-color-text);transition:background-color .3s}.side-selector button:hover,.period-selector button:hover{background-color:var(--dp-color-hover)}.side-selector button.active,.period-selector button.active{background-color:var(--dp-color-primary);color:var(--dp-color-primary-text);width:100%}.side-selector{overflow:auto;scrollbar-width:none;-ms-overflow-style:none;height:100%}.side-selector::-webkit-scrollbar{display:none}\n"], dependencies: [{ kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CalendarSidebarComponent, decorators: [{
type: Component,
args: [{ selector: 'qeydar-calendar-sidebar', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [NgFor, NgIf], template: `
<ng-container *ngIf="showSidebar">
<div *ngIf="isRange" class="period-selector">
<button
*ngFor="let period of periods"
tabindex="-1"
[]="isActivePeriod(period)"
(click)="selectPeriod.emit(period)"
>
{{ period.label }}
<span *ngIf="period.arrow" class="arrow">→</span>
</button>
</div>
<div *ngIf="!isRange" class="side-selector"
<ng-container *ngIf="viewMode == 'days'">
<button
*ngFor="let month of monthListNum"
tabindex="-1"
[]="'selector_'+month"
[]="isActiveMonth(month)"
[]="isMonthDisabled(month)"
(click)="selectMonth.emit(month)">
{{ getMonthName(month) }}
</button>
</ng-container>
<ng-container *ngIf="viewMode == 'months'">
<button
*ngFor="let year of yearList"
tabindex="-1"
[]="'selector_'+year"
[]="isActiveYear(year)"
[]="isYearDisabled(year)"
(click)="selectYear.emit(year)"
>
{{ year }}
</button>
</ng-container>
<ng-container *ngIf="viewMode == 'years'">
<button
tabindex="-1"
*ngFor="let yearRange of yearRanges"
[]="'selector_'+yearRange.start"
[]="isActiveYearRange(yearRange.start)"
[]="isYearRangeDisabled(yearRange)"
(click)="selectYearRange.emit(yearRange.start)"
>
{{ yearRange.start }} - {{ yearRange.end }}
</button>
</ng-container>
</div>
</ng-container>
`, styles: [":root{--dp-color-bg: #fff;--dp-color-surface: #fff;--dp-color-text: #555;--dp-color-muted: #8a8a8a;--dp-color-border: #e5e5e5;--dp-color-primary: #bfeaff;--dp-color-primary-contrast: #fff;--dp-color-primary-text: #0175e0;--dp-color-primary-button: #1890ff;--dp-color-primary-week: #18396cb0;--dp-color-accent: #ff4081;--dp-color-danger: #d32f2f;--dp-color-success: #2e7d32;--dp-color-warning: #f9a825;--dp-color-hover: #e6f7ff;--dp-spacing-0: 0;--dp-spacing-1: 4px;--dp-spacing-2: 8px;--dp-spacing-3: 12px;--dp-spacing-4: 16px;--dp-spacing-5: 20px;--dp-spacing-6: 24px;--dp-spacing-7: 28px;--dp-spacing-8: 32px;--dp-radius-0: 0;--dp-radius-1: 4px;--dp-radius-2: 6px;--dp-radius-3: 8px;--dp-font-size-xs: 11px;--dp-font-size-sm: 12px;--dp-font-size-md: 14px;--dp-font-size-lg: 16px}.side-selector,.period-selector{width:120px;border-inline-end:1px solid var(--dp-color-border)}.side-selector button,.period-selector button{display:flex;justify-content:space-between;font-size:14px;width:100%;padding:10px;text-align:start;border:none;background:none;cursor:pointer;border-block-end:1px solid var(--dp-color-border);color:var(--dp-color-text);transition:background-color .3s}.side-selector button:hover,.period-selector button:hover{background-color:var(--dp-color-hover)}.side-selector button.active,.period-selector button.active{background-color:var(--dp-color-primary);color:var(--dp-color-primary-text);width:100%}.side-selector{overflow:auto;scrollbar-width:none;-ms-overflow-style:none;height:100%}.side-selector::-webkit-scrollbar{display:none}\n"] }]
}], propDecorators: { showSidebar: [{
type: Input
}], isRange: [{
type: Input
}], viewMode: [{
type: Input
}], periods: [{
type: Input
}], monthListNum: [{
type: Input
}], yearList: [{
type: Input
}], yearRanges: [{
type: Input
}], isActivePeriod: [{
type: Input
}], getMonthName: [{
type: Input
}], isActiveMonth: [{
type: Input
}], isMonthDisabled: [{
type: Input
}], isActiveYear: [{
type: Input
}], isYearDisabled: [{
type: Input
}], isActiveYearRange: [{
type: Input
}], isYearRangeDisabled: [{
type: Input
}], selectPeriod: [{
type: Output
}], selectMonth: [{
type: Output
}], selectYear: [{
type: Output
}], selectYearRange: [{
type: Output
}], itemSelector: [{
type: ViewChild,
args: ['itemSelector']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsZW5kYXItc2lkZWJhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9xZXlkYXItZGF0ZXBpY2tlci9zcmMvZGF0ZS1waWNrZXItcG9wdXAvY29tcG9uZW50cy9jYWxlbmRhci1zaWRlYmFyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFjLFNBQVMsRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDdEksT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7QUE2RDlDLE1BQU0sT0FBTyx3QkFBd0I7SUEzRHJDO1FBNERXLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsYUFBUSxHQUFnQyxNQUFNLENBQUM7UUFDL0MsWUFBTyxHQUFVLEVBQUUsQ0FBQztRQUNwQixpQkFBWSxHQUFhLEVBQUUsQ0FBQztRQUM1QixhQUFRLEdBQWEsRUFBRSxDQUFDO1FBQ3hCLGVBQVUsR0FBMEMsRUFBRSxDQUFDO1FBV3RELGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN2QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDekMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFVLENBQUM7UUFDeEMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBVSxDQUFDO0tBS3hEO0lBREMsZUFBZSxLQUFVLENBQUM7O3FIQXpCZix3QkFBd0I7eUdBQXhCLHdCQUF3QixreEJBckR6Qjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBbURULDBsREFyRFMsS0FBSyxtSEFBRSxJQUFJOzJGQXVEVix3QkFBd0I7a0JBM0RwQyxTQUFTOytCQUNFLHlCQUF5QixjQUN2QixJQUFJLG1CQUNDLHVCQUF1QixDQUFDLE1BQU0sV0FDdEMsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBRVo7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1EVDs4QkFHUSxXQUFXO3NCQUFuQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxRQUFRO3NCQUFoQixLQUFLO2dCQUNHLE9BQU87c0JBQWYsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csVUFBVTtzQkFBbEIsS0FBSztnQkFFRyxjQUFjO3NCQUF0QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csYUFBYTtzQkFBckIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUNHLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csY0FBYztzQkFBdEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csbUJBQW1CO3NCQUEzQixLQUFLO2dCQUVJLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBRW9CLFlBQVk7c0JBQXRDLFNBQVM7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE91dHB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IE5nRm9yLCBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAncWV5ZGFyLWNhbGVuZGFyLXNpZGViYXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXHJcbiAgaW1wb3J0czogW05nRm9yLCBOZ0lmXSxcclxuICBzdHlsZVVybHM6IFsnLi9jYWxlbmRhci1zaWRlYmFyLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzaG93U2lkZWJhclwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiaXNSYW5nZVwiIGNsYXNzPVwicGVyaW9kLXNlbGVjdG9yXCI+XHJcbiAgICAgICAgPGJ1dHRvblxyXG4gICAgICAgICAgKm5nRm9yPVwibGV0IHBlcmlvZCBvZiBwZXJpb2RzXCJcclxuICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgW2NsYXNzLmFjdGl2ZV09XCJpc0FjdGl2ZVBlcmlvZChwZXJpb2QpXCJcclxuICAgICAgICAgIChjbGljayk9XCJzZWxlY3RQZXJpb2QuZW1pdChwZXJpb2QpXCJcclxuICAgICAgICA+XHJcbiAgICAgICAgICB7eyBwZXJpb2QubGFiZWwgfX1cclxuICAgICAgICAgIDxzcGFuICpuZ0lmPVwicGVyaW9kLmFycm93XCIgY2xhc3M9XCJhcnJvd1wiPuKGkjwvc3Bhbj5cclxuICAgICAgICA8L2J1dHRvbj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNSYW5nZVwiIGNsYXNzPVwic2lkZS1zZWxlY3RvclwiICNpdGVtU2VsZWN0b3I+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdNb2RlID09ICdkYXlzJ1wiPlxyXG4gICAgICAgICAgPGJ1dHRvbiBcclxuICAgICAgICAgICAgKm5nRm9yPVwibGV0IG1vbnRoIG9mIG1vbnRoTGlzdE51bVwiXHJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgICBbaWRdPVwiJ3NlbGVjdG9yXycrbW9udGhcIlxyXG4gICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cImlzQWN0aXZlTW9udGgobW9udGgpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzTW9udGhEaXNhYmxlZChtb250aClcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0TW9udGguZW1pdChtb250aClcIj5cclxuICAgICAgICAgICAge3sgZ2V0TW9udGhOYW1lKG1vbnRoKSB9fVxyXG4gICAgICAgICAgPC9idXR0b24+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInZpZXdNb2RlID09ICdtb250aHMnXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgICpuZ0Zvcj1cImxldCB5ZWFyIG9mIHllYXJMaXN0XCIgXHJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgICBbaWRdPVwiJ3NlbGVjdG9yXycreWVhclwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmVZZWFyKHllYXIpXCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzWWVhckRpc2FibGVkKHllYXIpXCJcclxuICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFllYXIuZW1pdCh5ZWFyKVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHllYXIgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJ2aWV3TW9kZSA9PSAneWVhcnMnXCI+XHJcbiAgICAgICAgICA8YnV0dG9uXHJcbiAgICAgICAgICAgIHRhYmluZGV4PVwiLTFcIlxyXG4gICAgICAgICAgICAqbmdGb3I9XCJsZXQgeWVhclJhbmdlIG9mIHllYXJSYW5nZXNcIiBcclxuICAgICAgICAgICAgW2lkXT1cIidzZWxlY3Rvcl8nK3llYXJSYW5nZS5zdGFydFwiXHJcbiAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwiaXNBY3RpdmVZZWFyUmFuZ2UoeWVhclJhbmdlLnN0YXJ0KVwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1llYXJSYW5nZURpc2FibGVkKHllYXJSYW5nZSlcIlxyXG4gICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0WWVhclJhbmdlLmVtaXQoeWVhclJhbmdlLnN0YXJ0KVwiXHJcbiAgICAgICAgICA+XHJcbiAgICAgICAgICAgIHt7IHllYXJSYW5nZS5zdGFydCB9fSAtIHt7IHllYXJSYW5nZS5lbmQgfX1cclxuICAgICAgICAgIDwvYnV0dG9uPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG4gIGBcclxufSlcclxuZXhwb3J0IGNsYXNzIENhbGVuZGFyU2lkZWJhckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xyXG4gIEBJbnB1dCgpIHNob3dTaWRlYmFyID0gdHJ1ZTtcclxuICBASW5wdXQoKSBpc1JhbmdlID0gZmFsc2U7XHJcbiAgQElucHV0KCkgdmlld01vZGU6ICdkYXlzJyB8ICdtb250aHMnIHwgJ3llYXJzJyA9ICdkYXlzJztcclxuICBASW5wdXQoKSBwZXJpb2RzOiBhbnlbXSA9IFtdO1xyXG4gIEBJbnB1dCgpIG1vbnRoTGlzdE51bTogbnVtYmVyW10gPSBbXTtcclxuICBASW5wdXQoKSB5ZWFyTGlzdDogbnVtYmVyW10gPSBbXTtcclxuICBASW5wdXQoKSB5ZWFyUmFuZ2VzOiBBcnJheTx7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0+ID0gW107XHJcblxyXG4gIEBJbnB1dCgpIGlzQWN0aXZlUGVyaW9kOiAocGVyaW9kOiBhbnkpID0+IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZ2V0TW9udGhOYW1lOiAobW9udGg6IG51bWJlcikgPT4gc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGlzQWN0aXZlTW9udGg6IChtb250aDogbnVtYmVyKSA9PiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzTW9udGhEaXNhYmxlZDogKG1vbnRoOiBudW1iZXIpID0+IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaXNBY3RpdmVZZWFyOiAoeWVhcjogbnVtYmVyKSA9PiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzWWVhckRpc2FibGVkOiAoeWVhcjogbnVtYmVyKSA9PiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGlzQWN0aXZlWWVhclJhbmdlOiAoc3RhcnRZZWFyOiBudW1iZXIpID0+IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaXNZZWFyUmFuZ2VEaXNhYmxlZDogKHJhbmdlOiB7IHN0YXJ0OiBudW1iZXI7IGVuZDogbnVtYmVyIH0pID0+IGJvb2xlYW47XHJcblxyXG4gIEBPdXRwdXQoKSBzZWxlY3RQZXJpb2QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0TW9udGggPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0WWVhciA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RZZWFyUmFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPG51bWJlcj4oKTtcclxuXHJcbiAgQFZpZXdDaGlsZCgnaXRlbVNlbGVjdG9yJykgaXRlbVNlbGVjdG9yOiBFbGVtZW50UmVmO1xyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7fVxyXG59XHJcblxyXG5cclxuIl19