@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
221 lines • 27.4 kB
JavaScript
import { booleanAttribute, Component, EventEmitter, Inject, Input, Optional, Output } from '@angular/core';
import { AdcResourceSchedulerModule } from '../../adc-resource-scheduler.module';
import { ADCBaseContainerComponent, ADC_LABELS, ADC_OPTIONS, DateChangeService } from '@asadi/angular-date-components/core';
import { CommonModule } from '@angular/common';
import { ADCResourceSchedulerSource } from '../../directives/adc-resource-scheduler-source.directive';
import { ADCMonthViewComponent } from '../adc-month-view/adc-month-view.component';
import { ADCWeekViewComponent } from '../adc-week-view/adc-week-view.component';
import { ADCDayViewComponent } from '../adc-day-view/adc-day-view.component';
import * as i0 from "@angular/core";
import * as i1 from "@asadi/angular-date-components/core";
import * as i2 from "../../directives/adc-resource-scheduler-source.directive";
import * as i3 from "@angular/common";
const defaultViews = ['month', 'week', 'day'];
/**
* The ADCResourceSchedulerComponent is responsible for rendering a resource scheduler view.
* It supports different views (e.g., month, week, day) and handles navigation through date ranges.
* This component integrates with other services like date changes and event handling.
*
* ### Usage Example:
* ```html
* <adc-resource-scheduler
* [DefaultViews]="['month', 'week']"
* [CustomViews]="customViewsArray"
* (ViewChange)="handleViewChange($event)"
* (Next)="handleNext()"
* (Previous)="handlePrevious()">
* </adc-resource-scheduler>
* ```
*/
export class ADCResourceSchedulerComponent {
/**
* The default views for the scheduler.
* This input accepts an array of view identifiers (e.g., 'month', 'week', 'day') to set the default views.
*
* @example
* ```html
* <adc-resource-scheduler [DefaultViews]="['month', 'week']"></adc-resource-scheduler>
* ```
*/
set defaultViews(value) {
this._defaultViews = value;
this.onViewSet();
}
get defaultViews() {
return this._defaultViews;
}
/**
* Custom views for the scheduler.
* This input allows you to provide custom views to display in the scheduler.
*
* @example
* ```html
* <adc-resource-scheduler [CustomViews]="customViewsArray"></adc-resource-scheduler>
* ```
*/
set customViews(value) {
this._customViews = value;
this.onViewSet();
}
get customViews() {
return this._customViews;
}
constructor(options, labels, dateChangeService) {
this.options = options;
this.labels = labels;
this.dateChangeService = dateChangeService;
this.direction = this.options.direction;
this.currentView = this.options.initialView;
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.resourceSchedulerViews = this.defaultViewComponents;
this._defaultViews = [];
this._customViews = [];
/**
* disables next button for resource scheduler component
*
* @example
* <adc-resource-scheduler disableNext></adc-resource-scheduler>
*/
this.disableNext = false;
/**
* disables previous button for resource scheduler component
*
* @example
* adc-resource-scheduler disablePrevious></adc-resource-scheduler>
*/
this.disablePrevious = false;
/**
* disables today button for resource scheduler component
*
* @example
* <adc-resource-scheduler disableToday></adc-resource-scheduler>
*/
this.disableToday = false;
/**
* Emitted when the view changes (e.g., month, week, or day).
* Use this output to capture the current view selection in the parent component.
*
* @event
* @example
* ```html
* <adc-resource-scheduler (ViewChange)="onViewChange($event)"></adc-resource-scheduler>
* ```
*/
this.onViewChange = new EventEmitter();
/**
* Emitted when the "Next" button is clicked to navigate to the next date range.
*
* @event
* @example
* ```html
* <adc-resource-scheduler (Next)="onNext()"></adc-resource-scheduler>
* ```
*/
this.onNext = new EventEmitter();
/**
* Emitted when the "Previous" button is clicked to navigate to the previous date range.
*
* @event
* @example
* ```html
* <adc-resource-scheduler (Previous)="onPrevious()"></adc-resource-scheduler>
* ```
*/
this.onPrevious = new EventEmitter();
this.defaultViews = defaultViews;
}
viewChangeHandler(view) {
this.currentView = view;
this.onViewChange.emit(view);
}
previousHandler() {
this.dateChangeService.previous();
this.onPrevious.emit();
}
nextHandler() {
this.dateChangeService.next();
this.onNext.emit();
}
todayHandler() {
this.dateChangeService.today();
}
onViewSet() {
this.resourceSchedulerViews = this.defaultViewComponents.filter(v => this.defaultViews.includes(v.id)).concat(this.customViews);
this.viewButtons = this.resourceSchedulerViews.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: ADCResourceSchedulerComponent, 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: ADCResourceSchedulerComponent, isStandalone: true, selector: "adc-resource-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.ADCResourceSchedulerSource, inputs: ["startOf", "startOf", "holidays", "holidays", "weekends", "weekends"], outputs: ["dateRangeSelect", "dateRangeSelect", "eventSelect", "eventSelect", "dateRangeChange", "dateRangeChange"] }], ngImport: i0, template: "\r\n\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 resourceSchedulerViews\">\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>", 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: AdcResourceSchedulerModule }, { 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: ADCResourceSchedulerComponent, decorators: [{
type: Component,
args: [{ selector: 'adc-resource-scheduler', standalone: true, imports: [
CommonModule,
AdcResourceSchedulerModule,
ADCBaseContainerComponent
], providers: [
DateChangeService
], hostDirectives: [
{
directive: ADCResourceSchedulerSource,
outputs: ['dateRangeSelect', 'eventSelect', 'dateRangeChange'],
inputs: ['startOf', 'holidays', 'weekends']
}
], template: "\r\n\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 resourceSchedulerViews\">\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>" }]
}], 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRjLXJlc291cmNlLXNjaGVkdWxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2FkaS9hbmd1bGFyLWRhdGUtY29tcG9uZW50cy9yZXNvdXJjZS1zY2hlZHVsZXIvc3JjL2NvbXBvbmVudHMvYWRjLXJlc291cmNlLXNjaGVkdWxlci9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL3Jlc291cmNlLXNjaGVkdWxlci9zcmMvY29tcG9uZW50cy9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyL2FkYy1yZXNvdXJjZS1zY2hlZHVsZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBMkMsVUFBVSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JLLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7QUFHN0UsTUFBTSxZQUFZLEdBQWEs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TUFBTTsyQkFBQyxXQUFXOzswQkFDbEIsUUFBUTs7MEJBQUksTUFBTTsyQkFBQyxVQUFVO3lFQWpHNUIsWUFBWTtzQkFEZixLQUFLO3VCQUFDLGNBQWM7Z0JBcUJqQixXQUFXO3NCQURkLEtBQUs7dUJBQUMsYUFBYTtnQkFtQmxCLFdBQVc7c0JBRFYsS0FBSzt1QkFBQyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFDO2dCQVUxRCxlQUFlO3NCQURkLEtBQUs7dUJBQUMsRUFBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFDO2dCQVU5RCxZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQztnQkFjN0QsWUFBWTtzQkFEWCxNQUFNO3VCQUFDLFlBQVk7Z0JBYXBCLE1BQU07c0JBREwsTUFBTTt1QkFBQyxNQUFNO2dCQWFkLFVBQVU7c0JBRFQsTUFBTTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYm9vbGVhbkF0dHJpYnV0ZSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWRjUmVzb3VyY2VTY2hlZHVsZXJNb2R1bGUgfSBmcm9tICcuLi8uLi9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyLm1vZHVsZSc7XHJcbmltcG9ydCB7IEFEQ0Jhc2VDb250YWluZXJDb21wb25lbnQsIEFEQ0lMYWJlbHMsIEFEQ0lPcHRpb25zLCBBRENJVmlld0J1dHRvbiwgQURDX0xBQkVMUywgQURDX09QVElPTlMsIERhdGVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnQGFzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBRENSZXNvdXJjZVNjaGVkdWxlclNvdXJjZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYWRjLXJlc291cmNlLXNjaGVkdWxlci1zb3VyY2UuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQURDSVJlc291cmNlU2NoZWR1bGVyVmlldyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS5nbG9iYWwnO1xyXG5pbXBvcnQgeyBBRENNb250aFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9hZGMtbW9udGgtdmlldy9hZGMtbW9udGgtdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBRENXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2FkYy13ZWVrLXZpZXcvYWRjLXdlZWstdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBRENEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vYWRjLWRheS12aWV3L2FkYy1kYXktdmlldy5jb21wb25lbnQnO1xyXG5cclxuXHJcbmNvbnN0IGRlZmF1bHRWaWV3czogc3RyaW5nW10gPSBbJ21vbnRoJywgJ3dlZWsnLCAnZGF5J107XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBBRENSZXNvdXJjZVNjaGVkdWxlckNvbXBvbmVudCBpcyByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIGEgcmVzb3VyY2Ugc2NoZWR1bGVyIHZpZXcuIFxyXG4gKiBJdCBzdXBwb3J0cyBkaWZmZXJlbnQgdmlld3MgKGUuZy4sIG1vbnRoLCB3ZWVrLCBkYXkpIGFuZCBoYW5kbGVzIG5hdmlnYXRpb24gdGhyb3VnaCBkYXRlIHJhbmdlcy5cclxuICogVGhpcyBjb21wb25lbnQgaW50ZWdyYXRlcyB3aXRoIG90aGVyIHNlcnZpY2VzIGxpa2UgZGF0ZSBjaGFuZ2VzIGFuZCBldmVudCBoYW5kbGluZy5cclxuICogXHJcbiAqICMjIyBVc2FnZSBFeGFtcGxlOlxyXG4gKiBgYGBodG1sXHJcbiAqIDxhZGMtcmVzb3VyY2Utc2NoZWR1bGVyXHJcbiAqICAgW0RlZmF1bHRWaWV3c109XCJbJ21vbnRoJywgJ3dlZWsnXVwiXHJcbiAqICAgW0N1c3RvbVZpZXdzXT1cImN1c3RvbVZpZXdzQXJyYXlcIlxyXG4gKiAgIChWaWV3Q2hhbmdlKT1cImhhbmRsZVZpZXdDaGFuZ2UoJGV2ZW50KVwiXHJcbiAqICAgKE5leHQpPVwiaGFuZGxlTmV4dCgpXCJcclxuICogICAoUHJldmlvdXMpPVwiaGFuZGxlUHJldmlvdXMoKVwiPlxyXG4gKiA8L2FkYy1yZXNvdXJjZS1zY2hlZHVsZXI+XHJcbiAqIGBgYFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhZGMtcmVzb3VyY2Utc2NoZWR1bGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEFkY1Jlc291cmNlU2NoZWR1bGVyTW9kdWxlLFxyXG4gICAgQURDQmFzZUNvbnRhaW5lckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkYy1yZXNvdXJjZS1zY2hlZHVsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkYy1yZXNvdXJjZS1zY2hlZHVsZXIuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgRGF0ZUNoYW5nZVNlcnZpY2VcclxuICBdLFxyXG4gIGhvc3REaXJlY3RpdmVzOiBbXHJcbiAgICB7XHJcbiAgICAgIGRpcmVjdGl2ZTogQURDUmVzb3VyY2VTY2hlZHVsZXJTb3VyY2UsXHJcbiAgICAgIG91dHB1dHM6IFsnZGF0ZVJhbmdlU2VsZWN0JywgJ2V2ZW50U2VsZWN0JywgJ2RhdGVSYW5nZUNoYW5nZSddLFxyXG4gICAgICBpbnB1dHM6IFsnc3RhcnRPZicsICdob2xpZGF5cycsICd3ZWVrZW5kcyddXHJcbiAgICB9XHJcbiAgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQURDUmVzb3VyY2VTY2hlZHVsZXJDb21wb25lbnQge1xyXG5cclxuICBkaXJlY3Rpb246ICdydGwnIHwgJ2x0cicgPSB0aGlzLm9wdGlvbnMuZGlyZWN0aW9uO1xyXG4gIGN1cnJlbnRWaWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgPSB0aGlzLm9wdGlvbnMuaW5pdGlhbFZpZXc7XHJcblxyXG4gIGRlZmF1bHRWaWV3Q29tcG9uZW50czogQURDSVJlc291cmNlU2NoZWR1bGVyVmlld1tdID0gW1xyXG4gICAge1xyXG4gICAgICBpZDogJ21vbnRoJyxcclxuICAgICAgbmFtZTogdGhpcy5sYWJlbHM/Lm1vbnRoIHx8ICdtb250aCcsXHJcbiAgICAgIGNvbXBvbmVudDogQURDTW9udGhWaWV3Q29tcG9uZW50XHJcbiAgICB9LFxyXG4gICAge1xyXG4gICAgICBpZDogJ3dlZWsnLFxyXG4gICAgICBuYW1lOiB0aGlzLmxhYmVscz8ud2VlayB8fCAnd2VlaycsXHJcbiAgICAgIGNvbXBvbmVudDogQURDV2Vla1ZpZXdDb21wb25lbnRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnZGF5JyxcclxuICAgICAgbmFtZTogdGhpcy5sYWJlbHM/LmRheSB8fCAnZGF5JyxcclxuICAgICAgY29tcG9uZW50OiBBRENEYXlWaWV3Q29tcG9uZW50XHJcbiAgICB9XHJcbiAgXVxyXG5cclxuICB2aWV3QnV0dG9uczogQURDSVZpZXdCdXR0b25bXSA9IFtdO1xyXG4gIHJlc291cmNlU2NoZWR1bGVyVmlld3M6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclZpZXdbXSA9IHRoaXMuZGVmYXVsdFZpZXdDb21wb25lbnRzO1xyXG5cclxuICBwcml2YXRlIF9kZWZhdWx0Vmlld3M6IHN0cmluZ1tdID0gW107XHJcbiAgcHJpdmF0ZSBfY3VzdG9tVmlld3M6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclZpZXdbXSA9IFtdO1xyXG5cclxuICAgIC8qKlxyXG4gICAqIFRoZSBkZWZhdWx0IHZpZXdzIGZvciB0aGUgc2NoZWR1bGVyLlxyXG4gICAqIFRoaXMgaW5wdXQgYWNjZXB0cyBhbiBhcnJheSBvZiB2aWV3IGlkZW50aWZpZXJzIChlLmcuLCAnbW9udGgnLCAnd2VlaycsICdkYXknKSB0byBzZXQgdGhlIGRlZmF1bHQgdmlld3MuXHJcbiAgICogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBodG1sXHJcbiAgICogPGFkYy1yZXNvdXJjZS1zY2hlZHVsZXIgW0RlZmF1bHRWaWV3c109XCJbJ21vbnRoJywgJ3dlZWsnXVwiPjwvYWRjLXJlc291cmNlLXNjaGVkdWxlcj5cclxuICAgKiBgYGBcclxuICAgKi9cclxuICBASW5wdXQoJ2RlZmF1bHRWaWV3cycpXHJcbiAgc2V0IGRlZmF1bHRWaWV3cyh2YWx1ZTogc3RyaW5nW10pXHJcbiAge1xyXG4gICAgdGhpcy5fZGVmYXVsdFZpZXdzID0gdmFsdWU7XHJcbiAgICB0aGlzLm9uVmlld1NldCgpO1xyXG4gIH1cclxuICBnZXQgZGVmYXVsdFZpZXdzKCk6IHN0cmluZ1tdXHJcbiAge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RlZmF1bHRWaWV3cztcclxuICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICogQ3VzdG9tIHZpZXdzIGZvciB0aGUgc2NoZWR1bGVyLlxyXG4gICAqIFRoaXMgaW5wdXQgYWxsb3dzIHlvdSB0byBwcm92aWRlIGN1c3RvbSB2aWV3cyB0byBkaXNwbGF5IGluIHRoZSBzY2hlZHVsZXIuXHJcbiAgICogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBodG1sXHJcbiAgICogPGFkYy1yZXNvdXJjZS1zY2hlZHVsZXIgW0N1c3RvbVZpZXdzXT1cImN1c3RvbVZpZXdzQXJyYXlcIj48L2FkYy1yZXNvdXJjZS1zY2hlZHVsZXI+XHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQElucHV0KCdjdXN0b21WaWV3cycpXHJcbiAgc2V0IGN1c3RvbVZpZXdzKHZhbHVlOiBBRENJUmVzb3VyY2VTY2hlZHVsZXJWaWV3W10pXHJcbiAge1xyXG4gICAgdGhpcy5fY3VzdG9tVmlld3MgPSB2YWx1ZTtcclxuICAgIHRoaXMub25WaWV3U2V0KCk7XHJcbiAgfVxyXG4gIGdldCBjdXN0b21WaWV3cygpOiBBRENJUmVzb3VyY2VTY2hlZHVsZXJWaWV3W11cclxuICB7XHJcbiAgICByZXR1cm4gdGhpcy5fY3VzdG9tVmlld3M7XHJcbiAgfVxyXG5cclxuXHJcbiAgICAgIC8qKlxyXG4gICAqIGRpc2FibGVzIG5leHQgYnV0dG9uIGZvciByZXNvdXJjZSBzY2hlZHVsZXIgY29tcG9uZW50XHJcbiAgICogXHJcbiAgICogQGV4YW1wbGVcclxuICAgKiA8YWRjLXJlc291cmNlLXNjaGVkdWxlciBkaXNhYmxlTmV4dD48L2FkYy1yZXNvdXJjZS1zY2hlZHVsZXI+XHJcbiAgICovXHJcbiAgICBASW5wdXQoe2FsaWFzOiAnZGlzYWJsZU5leHQnLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KVxyXG4gICAgZGlzYWJsZU5leHQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgKiBkaXNhYmxlcyBwcmV2aW91cyBidXR0b24gZm9yIHJlc291cmNlIHNjaGVkdWxlciBjb21wb25lbnRcclxuICAgICAqIFxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIGFkYy1yZXNvdXJjZS1zY2hlZHVsZXIgZGlzYWJsZVByZXZpb3VzPjwvYWRjLXJlc291cmNlLXNjaGVkdWxlcj5cclxuICAgICAqL1xyXG4gICAgQElucHV0KHthbGlhczogJ2Rpc2FibGVQcmV2aW91cycsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pXHJcbiAgICBkaXNhYmxlUHJldmlvdXM6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBcclxuICAgICAgLyoqXHJcbiAgICAgKiBkaXNhYmxlcyB0b2RheSBidXR0b24gZm9yIHJlc291cmNlIHNjaGVkdWxlciBjb21wb25lbnRcclxuICAgICAqIFxyXG4gICAgICogQGV4YW1wbGVcclxuICAgICAqIDxhZGMtcmVzb3VyY2Utc2NoZWR1bGVyIGRpc2FibGVUb2RheT48L2FkYy1yZXNvdXJjZS1zY2hlZHVsZXI+XHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCh7YWxpYXM6ICdkaXNhYmxlVG9kYXknLCB0cmFuc2Zvcm06IGJvb2xlYW5BdHRyaWJ1dGV9KVxyXG4gICAgZGlzYWJsZVRvZGF5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuIHRoZSB2aWV3IGNoYW5nZXMgKGUuZy4sIG1vbnRoLCB3ZWVrLCBvciBkYXkpLlxyXG4gICAqIFVzZSB0aGlzIG91dHB1dCB0byBjYXB0dXJlIHRoZSBjdXJyZW50IHZpZXcgc2VsZWN0aW9uIGluIHRoZSBwYXJlbnQgY29tcG9uZW50LlxyXG4gICAqIFxyXG4gICAqIEBldmVudFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogYGBgaHRtbFxyXG4gICAqIDxhZGMtcmVzb3VyY2Utc2NoZWR1bGVyIChWaWV3Q2hhbmdlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQpXCI+PC9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoJ3ZpZXdDaGFuZ2UnKVxyXG4gIG9uVmlld0NoYW5nZTogRXZlbnRFbWl0dGVyPHN0cmluZz4gPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcclxuXHJcbiAgICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIFwiTmV4dFwiIGJ1dHRvbiBpcyBjbGlja2VkIHRvIG5hdmlnYXRlIHRvIHRoZSBuZXh0IGRhdGUgcmFuZ2UuXHJcbiAgICogXHJcbiAgICogQGV2ZW50XHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBodG1sXHJcbiAgICogPGFkYy1yZXNvdXJjZS1zY2hlZHVsZXIgKE5leHQpPVwib25OZXh0KClcIj48L2FkYy1yZXNvdXJjZS1zY2hlZHVsZXI+XHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQE91dHB1dCgnbmV4dCcpXHJcbiAgb25OZXh0OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBcIlByZXZpb3VzXCIgYnV0dG9uIGlzIGNsaWNrZWQgdG8gbmF2aWdhdGUgdG8gdGhlIHByZXZpb3VzIGRhdGUgcmFuZ2UuXHJcbiAgICogXHJcbiAgICogQGV2ZW50XHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBodG1sXHJcbiAgICogPGFkYy1yZXNvdXJjZS1zY2hlZHVsZXIgKFByZXZpb3VzKT1cIm9uUHJldmlvdXMoKVwiPjwvYWRjLXJlc291cmNlLXNjaGVkdWxlcj5cclxuICAgKiBgYGBcclxuICAgKi9cclxuICBAT3V0cHV0KCdwcmV2aW91cycpXHJcbiAgb25QcmV2aW91czogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoQURDX09QVElPTlMpIHByaXZhdGUgb3B0aW9uczogQURDSU9wdGlvbnMsXHJcbiAgICBAT3B0aW9uYWwoKSBASW5qZWN0KEFEQ19MQUJFTFMpIHB1YmxpYyBsYWJlbHM6IEFEQ0lMYWJlbHMgfCBudWxsLFxyXG4gICAgcHJpdmF0ZSBkYXRlQ2hhbmdlU2VydmljZTogRGF0ZUNoYW5nZVNlcnZpY2UsXHJcbiAgKVxyXG4gIHtcclxuICAgIHRoaXMuZGVmYXVsdFZpZXdzID0gZGVmYXVsdFZpZXdzO1xyXG4gIH1cclxuXHJcblxyXG4gIHZpZXdDaGFuZ2VIYW5kbGVyKHZpZXc6IGFueSlcclxuICB7XHJcbiAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdmlldztcclxuICAgIHRoaXMub25WaWV3Q2hhbmdlLmVtaXQodmlldyk7XHJcbiAgfVxyXG5cclxuICBwcmV2aW91c0hhbmRsZXIoKTogdm9pZFxyXG4gIHtcclxuICAgIHRoaXMuZGF0ZUNoYW5nZVNlcnZpY2UucHJldmlvdXMoKTtcclxuICAgIHRoaXMub25QcmV2aW91cy5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBuZXh0SGFuZGxlcigpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5kYXRlQ2hhbmdlU2VydmljZS5uZXh0KCk7XHJcbiAgICB0aGlzLm9uTmV4dC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICB0b2RheUhhbmRsZXIoKTogdm9pZFxyXG4gIHtcclxuICAgIHRoaXMuZGF0ZUNoYW5nZVNlcnZpY2UudG9kYXkoKTtcclxuICB9XHJcblxyXG4gIG9uVmlld1NldCgpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5yZXNvdXJjZVNjaGVkdWxlclZpZXdzID0gdGhpcy5kZWZhdWx0Vmlld0NvbXBvbmVudHMuZmlsdGVyKHYgPT4gdGhpcy5kZWZhdWx0Vmlld3MuaW5jbHVkZXModi5pZCkpLmNvbmNhdCh0aGlzLmN1c3RvbVZpZXdzKTtcclxuXHJcbiAgICB0aGlzLnZpZXdCdXR0b25zID0gdGhpcy5yZXNvdXJjZVNjaGVkdWxlclZpZXdzLm1hcCh2ID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpZDogdi5pZCxcclxuICAgICAgICBuYW1lOiB2Lm5hbWUsXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJcclxuXHJcbjxhZGMtYmFzZS1jb250YWluZXIgW2Rpc2FibGVOZXh0XT1cImRpc2FibGVOZXh0XCIgW2Rpc2FibGVQcmV2aW91c109XCJkaXNhYmxlUHJldmlvdXNcIiBbZGlzYWJsZVRvZGF5XT1cImRpc2FibGVUb2RheVwiIFt2aWV3c109XCJ2aWV3QnV0dG9uc1wiICh2aWV3Q2hhbmdlKT1cInZpZXdDaGFuZ2VIYW5kbGVyKCRldmVudClcIiAocHJldmlvdXMpPVwicHJldmlvdXNIYW5kbGVyKClcIiAodG9kYXkpPVwidG9kYXlIYW5kbGVyKClcIiAobmV4dCk9XCJuZXh0SGFuZGxlcigpXCI+XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwiY3VycmVudFZpZXdcIj5cclxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJlc291cmNlU2NoZWR1bGVyVmlld3NcIj5cclxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwiaXRlbS5pZFwiPlxyXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdDb21wb25lbnRPdXRsZXQ9XCJpdGVtLmNvbXBvbmVudDtcIj48L25nLWNvbnRhaW5lcj5cclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgPC9uZy1jb250YWluZXI+XHJcbiAgICA8L25nLWNvbnRhaW5lcj5cclxuXHJcbjwvYWRjLWJhc2UtY29udGFpbmVyPiJdfQ==