UNPKG

@asadi/angular-date-components

Version:

`Angular Date Components` is a comprehensive angular library of date-related components designed to meet the needs of applications that require localization based on various calendar systems. While the package currently includes two powerful components (S

210 lines 26.3 kB
import { booleanAttribute, Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core'; import { ADCSchedulerModule } from '../../adcscheduler.module'; import { ADC_LABELS, ADC_OPTIONS } from '@asadi/angular-date-components/core'; import { CommonModule } from '@angular/common'; import { ADCSchedulerSource } from '../../directives/adc-scheduler-source.directive'; import { ADCBaseContainerComponent } from '@asadi/angular-date-components/core'; import { DateChangeService } from '@asadi/angular-date-components/core'; import { ADCMonthViewComponent } from '../adcmonth-view/adcmonth-view.component'; import { ADCWeekViewComponent } from '../adcweek-view/adcweek-view.component'; import { ADCDayViewComponent } from '../adcday-view/adcday-view.component'; import * as i0 from "@angular/core"; import * as i1 from "@asadi/angular-date-components/core"; import * as i2 from "../../directives/adc-scheduler-source.directive"; import * as i3 from "@angular/common"; const defaultViews = ['month', 'week', 'day']; /** * A component for rendering and managing a scheduler interface with different views (month, week, day). * The component allows navigation between views, changing the displayed date, and adding custom views. * * ### Usage Example * ```html * <adc-scheduler * [DefaultViews]="['month', 'week']" * [CustomViews]="customViews" * (ViewChange)="onViewChanged($event)" * (Next)="onNextClicked()" * (Previous)="onPreviousClicked()"> * </adc-scheduler> * ``` */ export class ADCSchedulerComponent { /** * The default views to be shown in the scheduler (month, week, etc.). * This input allows you to customize the views shown by default. * * @example * <adc-scheduler [DefaultViews]="['month', 'week']"></adc-scheduler> */ set defaultViews(value) { this._defaultViews = value; this.onViewSet(); } get defaultViews() { return this._defaultViews; } /** * Custom views that can be added to the scheduler. These views are added to the list of available views. * * @example * <adc-scheduler [CustomViews]="customViews"></adc-scheduler> */ set customViews(value) { this._customViews = value; this.onViewSet(); } get customViews() { return this._customViews; } constructor(schedulerOptions, labels, dateChangeService) { this.schedulerOptions = schedulerOptions; this.labels = labels; this.dateChangeService = dateChangeService; this.currentView = this.schedulerOptions.initialView; this.direction = this.schedulerOptions.direction; this.defaultViewComponents = [ { id: 'month', name: this.labels?.month || 'month', component: ADCMonthViewComponent }, { id: 'week', name: this.labels?.week || 'week', component: ADCWeekViewComponent }, { id: 'day', name: this.labels?.day || 'day', component: ADCDayViewComponent } ]; this.viewButtons = []; this.schedulerViews = this.defaultViewComponents; this._defaultViews = []; this._customViews = []; /** * disables next button for scheduler component * * @example * <adc-scheduler disableNext></adc-scheduler> */ this.disableNext = false; /** * disables previous button for scheduler component * * @example * <adc-scheduler disablePrevious></adc-scheduler> */ this.disablePrevious = false; /** * disables today button for scheduler component * * @example * <adc-scheduler disableToday></adc-scheduler> */ this.disableToday = false; /** * Event emitted when the current view changes. * * @event * @example * <adc-scheduler (ViewChange)="onViewChanged($event)"></adc-scheduler> */ this.onViewChange = new EventEmitter(); /** * Event emitted when the "Next" button is clicked, indicating the user wants to move to the next date range. * * @event * @example * <adc-scheduler (Next)="onNextClicked()"></adc-scheduler> */ this.onNext = new EventEmitter(); /** * Event emitted when the "Previous" button is clicked, indicating the user wants to move to the previous date range. * * @event * @example * <adc-scheduler (Previous)="onPreviousClicked()"></adc-scheduler> */ this.onPrevious = new EventEmitter(); this.defaultViews = defaultViews; } todayHandler() { this.dateChangeService.today(); } viewChangeHandler(currentView) { this.currentView = currentView; this.onViewChange.emit(this.currentView); } previousHandler() { this.dateChangeService.previous(); this.onPrevious.emit(); } nextHandler() { this.dateChangeService.next(); this.onNext.emit(); } onViewSet() { this.schedulerViews = this.defaultViewComponents.filter(v => this.defaultViews.includes(v.id)).concat(this.customViews); this.viewButtons = this.schedulerViews.map(v => { return { id: v.id, name: v.name, }; }); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ADCSchedulerComponent, deps: [{ token: ADC_OPTIONS }, { token: ADC_LABELS, optional: true }, { token: i1.DateChangeService }], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "16.1.0", version: "17.0.7", type: ADCSchedulerComponent, isStandalone: true, selector: "adc-scheduler", inputs: { defaultViews: "defaultViews", customViews: "customViews", disableNext: ["disableNext", "disableNext", booleanAttribute], disablePrevious: ["disablePrevious", "disablePrevious", booleanAttribute], disableToday: ["disableToday", "disableToday", booleanAttribute] }, outputs: { onViewChange: "viewChange", onNext: "next", onPrevious: "previous" }, providers: [ DateChangeService ], hostDirectives: [{ directive: i2.ADCSchedulerSource, inputs: ["startOf", "startOf", "holidays", "holidays", "weekends", "weekends"], outputs: ["dateRangeSelect", "dateRangeSelect", "eventSelect", "eventSelect", "dateRangeChange", "dateRangeChange"] }], ngImport: i0, template: "\r\n<adc-base-container [disableNext]=\"disableNext\" [disablePrevious]=\"disablePrevious\" [disableToday]=\"disableToday\" [views]=\"viewButtons\" (viewChange)=\"viewChangeHandler($event)\" (previous)=\"previousHandler()\" (today)=\"todayHandler()\" (next)=\"nextHandler()\">\r\n\r\n <ng-container [ngSwitch]=\"currentView\">\r\n <ng-container *ngFor=\"let item of schedulerViews\">\r\n <ng-container *ngSwitchCase=\"item.id\">\r\n <ng-container *ngComponentOutlet=\"item.component;\"></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n</adc-base-container>\r\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i3.NgComponentOutlet, selector: "[ngComponentOutlet]", inputs: ["ngComponentOutlet", "ngComponentOutletInputs", "ngComponentOutletInjector", "ngComponentOutletContent", "ngComponentOutletNgModule", "ngComponentOutletNgModuleFactory"] }, { kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i3.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "ngmodule", type: ADCSchedulerModule }, { kind: "component", type: ADCBaseContainerComponent, selector: "adc-base-container", inputs: ["views", "disableNext", "disableToday", "disablePrevious"], outputs: ["viewChange", "next", "today", "previous"] }] }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.7", ngImport: i0, type: ADCSchedulerComponent, decorators: [{ type: Component, args: [{ selector: 'adc-scheduler', standalone: true, imports: [ CommonModule, ADCSchedulerModule, ADCBaseContainerComponent ], hostDirectives: [ { directive: ADCSchedulerSource, outputs: ['dateRangeSelect', 'eventSelect', 'dateRangeChange'], inputs: ['startOf', 'holidays', 'weekends'] } ], providers: [ DateChangeService ], template: "\r\n<adc-base-container [disableNext]=\"disableNext\" [disablePrevious]=\"disablePrevious\" [disableToday]=\"disableToday\" [views]=\"viewButtons\" (viewChange)=\"viewChangeHandler($event)\" (previous)=\"previousHandler()\" (today)=\"todayHandler()\" (next)=\"nextHandler()\">\r\n\r\n <ng-container [ngSwitch]=\"currentView\">\r\n <ng-container *ngFor=\"let item of schedulerViews\">\r\n <ng-container *ngSwitchCase=\"item.id\">\r\n <ng-container *ngComponentOutlet=\"item.component;\"></ng-container>\r\n </ng-container>\r\n </ng-container>\r\n </ng-container>\r\n\r\n</adc-base-container>\r\n" }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: [ADC_OPTIONS] }] }, { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [ADC_LABELS] }] }, { type: i1.DateChangeService }], propDecorators: { defaultViews: [{ type: Input, args: ['defaultViews'] }], customViews: [{ type: Input, args: ['customViews'] }], disableNext: [{ type: Input, args: [{ alias: 'disableNext', transform: booleanAttribute }] }], disablePrevious: [{ type: Input, args: [{ alias: 'disablePrevious', transform: booleanAttribute }] }], disableToday: [{ type: Input, args: [{ alias: 'disableToday', transform: booleanAttribute }] }], onViewChange: [{ type: Output, args: ['viewChange'] }], onNext: [{ type: Output, args: ['next'] }], onPrevious: [{ type: Output, args: ['previous'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRjc2NoZWR1bGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvY29tcG9uZW50cy9hZGNzY2hlZHVsZXIvYWRjc2NoZWR1bGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL3NjaGVkdWxlci9zcmMvY29tcG9uZW50cy9hZGNzY2hlZHVsZXIvYWRjc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzRyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUMvRCxPQUFPLEVBQTRDLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN4SCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0saURBQWlELENBQUM7QUFDckYsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDaEYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFFeEUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDakYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7Ozs7O0FBRTNFLE1BQU0sWUFBWSxHQUFhLENB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QU07MkJBQUMsV0FBVzs7MEJBQ2xCLFFBQVE7OzBCQUFJLE1BQU07MkJBQUMsVUFBVTt5RUF0RjVCLFlBQVk7c0JBRGYsS0FBSzt1QkFBQyxjQUFjO2dCQWtCakIsV0FBVztzQkFEZCxLQUFLO3VCQUFDLGFBQWE7Z0JBa0JwQixXQUFXO3NCQURWLEtBQUs7dUJBQUMsRUFBQyxLQUFLLEVBQUUsYUFBYSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQztnQkFVMUQsZUFBZTtzQkFEZCxLQUFLO3VCQUFDLEVBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQztnQkFVOUQsWUFBWTtzQkFEWCxLQUFLO3VCQUFDLEVBQUMsS0FBSyxFQUFFLGNBQWMsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUM7Z0JBVzNELFlBQVk7c0JBRFgsTUFBTTt1QkFBQyxZQUFZO2dCQVdwQixNQUFNO3NCQURMLE1BQU07dUJBQUMsTUFBTTtnQkFXZCxVQUFVO3NCQURULE1BQU07dUJBQUMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJvb2xlYW5BdHRyaWJ1dGUsIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPcHRpb25hbCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFEQ1NjaGVkdWxlck1vZHVsZSB9IGZyb20gJy4uLy4uL2FkY3NjaGVkdWxlci5tb2R1bGUnO1xyXG5pbXBvcnQgeyAgQURDSUxhYmVscywgQURDSU9wdGlvbnMsIEFEQ0lWaWV3QnV0dG9uLCBBRENfTEFCRUxTLCBBRENfT1BUSU9OUyB9IGZyb20gJ0Bhc2FkaS9hbmd1bGFyLWRhdGUtY29tcG9uZW50cy9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgQURDU2NoZWR1bGVyU291cmNlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcy9hZGMtc2NoZWR1bGVyLXNvdXJjZS5kaXJlY3RpdmUnO1xyXG5pbXBvcnQgeyBBRENCYXNlQ29udGFpbmVyQ29tcG9uZW50IH0gZnJvbSAnQGFzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL2NvcmUnO1xyXG5pbXBvcnQgeyBEYXRlQ2hhbmdlU2VydmljZSB9IGZyb20gJ0Bhc2FkaS9hbmd1bGFyLWRhdGUtY29tcG9uZW50cy9jb3JlJztcclxuaW1wb3J0IHsgQURDSVNjaGVkdWxlclZpZXcgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2UuZ2xvYmFsJztcclxuaW1wb3J0IHsgQURDTW9udGhWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vYWRjbW9udGgtdmlldy9hZGNtb250aC12aWV3LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEFEQ1dlZWtWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vYWRjd2Vlay12aWV3L2FkY3dlZWstdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBRENEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vYWRjZGF5LXZpZXcvYWRjZGF5LXZpZXcuY29tcG9uZW50JztcclxuXHJcbmNvbnN0IGRlZmF1bHRWaWV3czogc3RyaW5nW10gPSBbJ21vbnRoJywgJ3dlZWsnLCAnZGF5J107XHJcblxyXG5cclxuLyoqXHJcbiAqIEEgY29tcG9uZW50IGZvciByZW5kZXJpbmcgYW5kIG1hbmFnaW5nIGEgc2NoZWR1bGVyIGludGVyZmFjZSB3aXRoIGRpZmZlcmVudCB2aWV3cyAobW9udGgsIHdlZWssIGRheSkuXHJcbiAqIFRoZSBjb21wb25lbnQgYWxsb3dzIG5hdmlnYXRpb24gYmV0d2VlbiB2aWV3cywgY2hhbmdpbmcgdGhlIGRpc3BsYXllZCBkYXRlLCBhbmQgYWRkaW5nIGN1c3RvbSB2aWV3cy5cclxuICogXHJcbiAqICMjIyBVc2FnZSBFeGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPGFkYy1zY2hlZHVsZXIgXHJcbiAqICAgW0RlZmF1bHRWaWV3c109XCJbJ21vbnRoJywgJ3dlZWsnXVwiIFxyXG4gKiAgIFtDdXN0b21WaWV3c109XCJjdXN0b21WaWV3c1wiIFxyXG4gKiAgIChWaWV3Q2hhbmdlKT1cIm9uVmlld0NoYW5nZWQoJGV2ZW50KVwiIFxyXG4gKiAgIChOZXh0KT1cIm9uTmV4dENsaWNrZWQoKVwiIFxyXG4gKiAgIChQcmV2aW91cyk9XCJvblByZXZpb3VzQ2xpY2tlZCgpXCI+XHJcbiAqIDwvYWRjLXNjaGVkdWxlcj5cclxuICogYGBgXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FkYy1zY2hlZHVsZXInLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW1xyXG4gICAgQ29tbW9uTW9kdWxlLFxyXG4gICAgQURDU2NoZWR1bGVyTW9kdWxlLFxyXG4gICAgQURDQmFzZUNvbnRhaW5lckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgaG9zdERpcmVjdGl2ZXM6IFtcclxuICAgIHtcclxuICAgICAgZGlyZWN0aXZlOiBBRENTY2hlZHVsZXJTb3VyY2UsXHJcbiAgICAgIG91dHB1dHM6IFsnZGF0ZVJhbmdlU2VsZWN0JywgJ2V2ZW50U2VsZWN0JywgJ2RhdGVSYW5nZUNoYW5nZSddLFxyXG4gICAgICBpbnB1dHM6IFsnc3RhcnRPZicsICdob2xpZGF5cycsICd3ZWVrZW5kcyddXHJcbiAgICB9XHJcbiAgXSxcclxuICB0ZW1wbGF0ZVVybDogJy4vYWRjc2NoZWR1bGVyLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi9hZGNzY2hlZHVsZXIuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgRGF0ZUNoYW5nZVNlcnZpY2VcclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBRENTY2hlZHVsZXJDb21wb25lbnQge1xyXG5cclxuICBjdXJyZW50Vmlldzogc3RyaW5nID0gdGhpcy5zY2hlZHVsZXJPcHRpb25zLmluaXRpYWxWaWV3O1xyXG4gIGRpcmVjdGlvbjogJ2x0cicgfCAncnRsJyA9IHRoaXMuc2NoZWR1bGVyT3B0aW9ucy5kaXJlY3Rpb247XHJcblxyXG4gIGRlZmF1bHRWaWV3Q29tcG9uZW50czogQURDSVNjaGVkdWxlclZpZXdbXSA9IFtcclxuICAgIHtcclxuICAgICAgaWQ6ICdtb250aCcsXHJcbiAgICAgIG5hbWU6IHRoaXMubGFiZWxzPy5tb250aCB8fCAnbW9udGgnLFxyXG4gICAgICBjb21wb25lbnQ6IEFEQ01vbnRoVmlld0NvbXBvbmVudFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICd3ZWVrJyxcclxuICAgICAgbmFtZTogdGhpcy5sYWJlbHM/LndlZWsgfHwgJ3dlZWsnLFxyXG4gICAgICBjb21wb25lbnQ6IEFEQ1dlZWtWaWV3Q29tcG9uZW50XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogJ2RheScsXHJcbiAgICAgIG5hbWU6IHRoaXMubGFiZWxzPy5kYXkgfHwgJ2RheScsXHJcbiAgICAgIGNvbXBvbmVudDogQURDRGF5Vmlld0NvbXBvbmVudFxyXG4gICAgfVxyXG4gIF1cclxuXHJcbiAgdmlld0J1dHRvbnM6IEFEQ0lWaWV3QnV0dG9uW10gPSBbXTtcclxuICBzY2hlZHVsZXJWaWV3czogQURDSVNjaGVkdWxlclZpZXdbXSA9IHRoaXMuZGVmYXVsdFZpZXdDb21wb25lbnRzO1xyXG5cclxuICBwcml2YXRlIF9kZWZhdWx0Vmlld3M6IHN0cmluZ1tdID0gW107XHJcbiAgcHJpdmF0ZSBfY3VzdG9tVmlld3M6IEFEQ0lTY2hlZHVsZXJWaWV3W10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgKiBUaGUgZGVmYXVsdCB2aWV3cyB0byBiZSBzaG93biBpbiB0aGUgc2NoZWR1bGVyIChtb250aCwgd2VlaywgZXRjLikuXHJcbiAgICogVGhpcyBpbnB1dCBhbGxvd3MgeW91IHRvIGN1c3RvbWl6ZSB0aGUgdmlld3Mgc2hvd24gYnkgZGVmYXVsdC5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIDxhZGMtc2NoZWR1bGVyIFtEZWZhdWx0Vmlld3NdPVwiWydtb250aCcsICd3ZWVrJ11cIj48L2FkYy1zY2hlZHVsZXI+XHJcbiAgICovXHJcbiAgQElucHV0KCdkZWZhdWx0Vmlld3MnKVxyXG4gIHNldCBkZWZhdWx0Vmlld3ModmFsdWU6IHN0cmluZ1tdKVxyXG4gIHtcclxuICAgIHRoaXMuX2RlZmF1bHRWaWV3cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5vblZpZXdTZXQoKTtcclxuICB9XHJcbiAgZ2V0IGRlZmF1bHRWaWV3cygpOiBzdHJpbmdbXVxyXG4gIHtcclxuICAgIHJldHVybiB0aGlzLl9kZWZhdWx0Vmlld3M7XHJcbiAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIEN1c3RvbSB2aWV3cyB0aGF0IGNhbiBiZSBhZGRlZCB0byB0aGUgc2NoZWR1bGVyLiBUaGVzZSB2aWV3cyBhcmUgYWRkZWQgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHZpZXdzLlxyXG4gICAqIFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogPGFkYy1zY2hlZHVsZXIgW0N1c3RvbVZpZXdzXT1cImN1c3RvbVZpZXdzXCI+PC9hZGMtc2NoZWR1bGVyPlxyXG4gICAqL1xyXG4gIEBJbnB1dCgnY3VzdG9tVmlld3MnKVxyXG4gIHNldCBjdXN0b21WaWV3cyh2YWx1ZTogQURDSVNjaGVkdWxlclZpZXdbXSlcclxuICB7XHJcbiAgICB0aGlzLl9jdXN0b21WaWV3cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5vblZpZXdTZXQoKTtcclxuICB9XHJcbiAgZ2V0IGN1c3RvbVZpZXdzKCk6IEFEQ0lTY2hlZHVsZXJWaWV3W11cclxuICB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tVmlld3M7XHJcbiAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAqIGRpc2FibGVzIG5leHQgYnV0dG9uIGZvciBzY2hlZHVsZXIgY29tcG9uZW50XHJcbiAgICogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiA8YWRjLXNjaGVkdWxlciBkaXNhYmxlTmV4dD48L2FkYy1zY2hlZHVsZXI+XHJcbiAgICovXHJcbiAgQElucHV0KHthbGlhczogJ2Rpc2FibGVOZXh0JywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSlcclxuICBkaXNhYmxlTmV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIC8qKlxyXG4gICAqIGRpc2FibGVzIHByZXZpb3VzIGJ1dHRvbiBmb3Igc2NoZWR1bGVyIGNvbXBvbmVudFxyXG4gICAqIFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogPGFkYy1zY2hlZHVsZXIgZGlzYWJsZVByZXZpb3VzPjwvYWRjLXNjaGVkdWxlcj5cclxuICAgKi9cclxuICBASW5wdXQoe2FsaWFzOiAnZGlzYWJsZVByZXZpb3VzJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSlcclxuICBkaXNhYmxlUHJldmlvdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgKiBkaXNhYmxlcyB0b2RheSBidXR0b24gZm9yIHNjaGVkdWxlciBjb21wb25lbnRcclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIDxhZGMtc2NoZWR1bGVyIGRpc2FibGVUb2RheT48L2FkYy1zY2hlZHVsZXI+XHJcbiAgICovXHJcbiAgQElucHV0KHthbGlhczogJ2Rpc2FibGVUb2RheScsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pXHJcbiAgZGlzYWJsZVRvZGF5OiBib29sZWFuID0gZmFsc2U7XHJcbiAgXHJcbiAgICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIGN1cnJlbnQgdmlldyBjaGFuZ2VzLlxyXG4gICAqIFxyXG4gICAqIEBldmVudFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogPGFkYy1zY2hlZHVsZXIgKFZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlZCgkZXZlbnQpXCI+PC9hZGMtc2NoZWR1bGVyPlxyXG4gICAqL1xyXG4gIEBPdXRwdXQoJ3ZpZXdDaGFuZ2UnKVxyXG4gIG9uVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIFwiTmV4dFwiIGJ1dHRvbiBpcyBjbGlja2VkLCBpbmRpY2F0aW5nIHRoZSB1c2VyIHdhbnRzIHRvIG1vdmUgdG8gdGhlIG5leHQgZGF0ZSByYW5nZS5cclxuICAgKiBcclxuICAgKiBAZXZlbnRcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIDxhZGMtc2NoZWR1bGVyIChOZXh0KT1cIm9uTmV4dENsaWNrZWQoKVwiPjwvYWRjLXNjaGVkdWxlcj5cclxuICAgKi9cclxuICBAT3V0cHV0KCduZXh0JylcclxuICBvbk5leHQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgICAvKipcclxuICAgKiBFdmVudCBlbWl0dGVkIHdoZW4gdGhlIFwiUHJldmlvdXNcIiBidXR0b24gaXMgY2xpY2tlZCwgaW5kaWNhdGluZyB0aGUgdXNlciB3YW50cyB0byBtb3ZlIHRvIHRoZSBwcmV2aW91cyBkYXRlIHJhbmdlLlxyXG4gICAqIFxyXG4gICAqIEBldmVudFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogPGFkYy1zY2hlZHVsZXIgKFByZXZpb3VzKT1cIm9uUHJldmlvdXNDbGlja2VkKClcIj48L2FkYy1zY2hlZHVsZXI+XHJcbiAgICovXHJcbiAgQE91dHB1dCgncHJldmlvdXMnKVxyXG4gIG9uUHJldmlvdXM6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KEFEQ19PUFRJT05TKSBwdWJsaWMgc2NoZWR1bGVyT3B0aW9uczogQURDSU9wdGlvbnMsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFEQ19MQUJFTFMpIHB1YmxpYyBsYWJlbHM6IEFEQ0lMYWJlbHMgfCBudWxsLFxyXG4gICAgcHJpdmF0ZSBkYXRlQ2hhbmdlU2VydmljZTogRGF0ZUNoYW5nZVNlcnZpY2UsXHJcbiAgKSBcclxuICB7XHJcbiAgICB0aGlzLmRlZmF1bHRWaWV3cyA9IGRlZmF1bHRWaWV3cztcclxuICB9XHJcblxyXG4gIHRvZGF5SGFuZGxlcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5kYXRlQ2hhbmdlU2VydmljZS50b2RheSgpO1xyXG4gIH1cclxuXHJcbiAgdmlld0NoYW5nZUhhbmRsZXIoY3VycmVudFZpZXc6IHN0cmluZyk6IHZvaWRcclxuICB7XHJcbiAgICB0aGlzLmN1cnJlbnRWaWV3ID0gY3VycmVudFZpZXc7XHJcbiAgICB0aGlzLm9uVmlld0NoYW5nZS5lbWl0KHRoaXMuY3VycmVudFZpZXcpO1xyXG4gIH1cclxuXHJcbiAgcHJldmlvdXNIYW5kbGVyKCk6IHZvaWRcclxuICB7XHJcbiAgICB0aGlzLmRhdGVDaGFuZ2VTZXJ2aWNlLnByZXZpb3VzKCk7XHJcbiAgICB0aGlzLm9uUHJldmlvdXMuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgbmV4dEhhbmRsZXIoKTogdm9pZFxyXG4gIHtcclxuICAgIHRoaXMuZGF0ZUNoYW5nZVNlcnZpY2UubmV4dCgpO1xyXG4gICAgdGhpcy5vbk5leHQuZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgb25WaWV3U2V0KCk6IHZvaWRcclxuICB7XHJcbiAgICB0aGlzLnNjaGVkdWxlclZpZXdzID0gdGhpcy5kZWZhdWx0Vmlld0NvbXBvbmVudHMuZmlsdGVyKHYgPT4gdGhpcy5kZWZhdWx0Vmlld3MuaW5jbHVkZXModi5pZCkpLmNvbmNhdCh0aGlzLmN1c3RvbVZpZXdzKTtcclxuXHJcbiAgICB0aGlzLnZpZXdCdXR0b25zID0gdGhpcy5zY2hlZHVsZXJWaWV3cy5tYXAodiA9PiB7XHJcbiAgICAgIHJldHVybiB7XHJcbiAgICAgICAgaWQ6IHYuaWQsXHJcbiAgICAgICAgbmFtZTogdi5uYW1lLFxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG59XHJcbiIsIlxyXG48YWRjLWJhc2UtY29udGFpbmVyIFtkaXNhYmxlTmV4dF09XCJkaXNhYmxlTmV4dFwiIFtkaXNhYmxlUHJldmlvdXNdPVwiZGlzYWJsZVByZXZpb3VzXCIgW2Rpc2FibGVUb2RheV09XCJkaXNhYmxlVG9kYXlcIiBbdmlld3NdPVwidmlld0J1dHRvbnNcIiAodmlld0NoYW5nZSk9XCJ2aWV3Q2hhbmdlSGFuZGxlcigkZXZlbnQpXCIgKHByZXZpb3VzKT1cInByZXZpb3VzSGFuZGxlcigpXCIgKHRvZGF5KT1cInRvZGF5SGFuZGxlcigpXCIgKG5leHQpPVwibmV4dEhhbmRsZXIoKVwiPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImN1cnJlbnRWaWV3XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBzY2hlZHVsZXJWaWV3c1wiPlxyXG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJpdGVtLmlkXCI+XHJcbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0NvbXBvbmVudE91dGxldD1cIml0ZW0uY29tcG9uZW50O1wiPjwvbmctY29udGFpbmVyPlxyXG4gICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuPC9hZGMtYmFzZS1jb250YWluZXI+XHJcbiJdfQ==