@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
220 lines • 27.3 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.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.onViewChangeEvent = 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.onNextEvent = 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.onPreviousEvent = new EventEmitter();
this.defaultViews = defaultViews;
}
onViewChange(view) {
this.currentView = view;
this.onViewChangeEvent.emit(view);
}
onPrevious() {
this.dateChangeService.previous();
this.onPreviousEvent.emit();
}
onNext() {
this.dateChangeService.next();
this.onNextEvent.emit();
}
onToday() {
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: { onViewChangeEvent: "viewChange", onNextEvent: "next", onPreviousEvent: "previous" }, providers: [
DateChangeService
], hostDirectives: [{ directive: i2.ADCResourceSchedulerSource, inputs: ["startOf", "startOf", "holidays", "holidays", "weekends", "weekends", "events", "events", "resources", "resources"], 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)=\"onViewChange($event)\" (previous)=\"onPrevious()\" (today)=\"onToday()\" (next)=\"onNext()\">\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', 'events', 'resources']
}
], template: "\r\n\r\n<adc-base-container [disableNext]=\"disableNext\" [disablePrevious]=\"disablePrevious\" [disableToday]=\"disableToday\" [views]=\"viewButtons\" (viewChange)=\"onViewChange($event)\" (previous)=\"onPrevious()\" (today)=\"onToday()\" (next)=\"onNext()\">\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 }]
}], onViewChangeEvent: [{
type: Output,
args: ['viewChange']
}], onNextEvent: [{
type: Output,
args: ['next']
}], onPreviousEvent: [{
type: Output,
args: ['previous']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRjLXJlc291cmNlLXNjaGVkdWxlci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hc2FkaS9hbmd1bGFyLWRhdGUtY29tcG9uZW50cy9yZXNvdXJjZS1zY2hlZHVsZXIvc3JjL2NvbXBvbmVudHMvYWRjLXJlc291cmNlLXNjaGVkdWxlci9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL3Jlc291cmNlLXNjaGVkdWxlci9zcmMvY29tcG9uZW50cy9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyL2FkYy1yZXNvdXJjZS1zY2hlZHVsZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ2pGLE9BQU8sRUFBRSx5QkFBeUIsRUFBMkMsVUFBVSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQ3JLLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUV0RyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0Q0FBNEMsQ0FBQztBQUNuRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNoRixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQzs7Ozs7QUFHN0UsTUFBTSxZQUFZLEdBQWEs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UUFBUTs7MEJBQUksTUFBTTsyQkFBQyxVQUFVO3lFQWpHNUIsWUFBWTtzQkFEZixLQUFLO3VCQUFDLGNBQWM7Z0JBcUJqQixXQUFXO3NCQURkLEtBQUs7dUJBQUMsYUFBYTtnQkFtQmxCLFdBQVc7c0JBRFYsS0FBSzt1QkFBQyxFQUFDLEtBQUssRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFDO2dCQVUxRCxlQUFlO3NCQURkLEtBQUs7dUJBQUMsRUFBQyxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFDO2dCQVU5RCxZQUFZO3NCQURYLEtBQUs7dUJBQUMsRUFBQyxLQUFLLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBQztnQkFjN0QsaUJBQWlCO3NCQURoQixNQUFNO3VCQUFDLFlBQVk7Z0JBYXBCLFdBQVc7c0JBRFYsTUFBTTt1QkFBQyxNQUFNO2dCQWFkLGVBQWU7c0JBRGQsTUFBTTt1QkFBQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYm9vbGVhbkF0dHJpYnV0ZSwgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIEluamVjdCwgSW5wdXQsIE9wdGlvbmFsLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWRjUmVzb3VyY2VTY2hlZHVsZXJNb2R1bGUgfSBmcm9tICcuLi8uLi9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyLm1vZHVsZSc7XHJcbmltcG9ydCB7IEFEQ0Jhc2VDb250YWluZXJDb21wb25lbnQsIEFEQ0lMYWJlbHMsIEFEQ0lPcHRpb25zLCBBRENJVmlld0J1dHRvbiwgQURDX0xBQkVMUywgQURDX09QVElPTlMsIERhdGVDaGFuZ2VTZXJ2aWNlIH0gZnJvbSAnQGFzYWRpL2FuZ3VsYXItZGF0ZS1jb21wb25lbnRzL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBBRENSZXNvdXJjZVNjaGVkdWxlclNvdXJjZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMvYWRjLXJlc291cmNlLXNjaGVkdWxlci1zb3VyY2UuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgQURDSVJlc291cmNlU2NoZWR1bGVyVmlldyB9IGZyb20gJy4uLy4uL2ludGVyZmFjZS5nbG9iYWwnO1xyXG5pbXBvcnQgeyBBRENNb250aFZpZXdDb21wb25lbnQgfSBmcm9tICcuLi9hZGMtbW9udGgtdmlldy9hZGMtbW9udGgtdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBRENXZWVrVmlld0NvbXBvbmVudCB9IGZyb20gJy4uL2FkYy13ZWVrLXZpZXcvYWRjLXdlZWstdmlldy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBBRENEYXlWaWV3Q29tcG9uZW50IH0gZnJvbSAnLi4vYWRjLWRheS12aWV3L2FkYy1kYXktdmlldy5jb21wb25lbnQnO1xyXG5cclxuXHJcbmNvbnN0IGRlZmF1bHRWaWV3czogc3RyaW5nW10gPSBbJ21vbnRoJywgJ3dlZWsnLCAnZGF5J107XHJcblxyXG5cclxuLyoqXHJcbiAqIFRoZSBBRENSZXNvdXJjZVNjaGVkdWxlckNvbXBvbmVudCBpcyByZXNwb25zaWJsZSBmb3IgcmVuZGVyaW5nIGEgcmVzb3VyY2Ugc2NoZWR1bGVyIHZpZXcuIFxyXG4gKiBJdCBzdXBwb3J0cyBkaWZmZXJlbnQgdmlld3MgKGUuZy4sIG1vbnRoLCB3ZWVrLCBkYXkpIGFuZCBoYW5kbGVzIG5hdmlnYXRpb24gdGhyb3VnaCBkYXRlIHJhbmdlcy5cclxuICogVGhpcyBjb21wb25lbnQgaW50ZWdyYXRlcyB3aXRoIG90aGVyIHNlcnZpY2VzIGxpa2UgZGF0ZSBjaGFuZ2VzIGFuZCBldmVudCBoYW5kbGluZy5cclxuICogXHJcbiAqICMjIyBVc2FnZSBFeGFtcGxlOlxyXG4gKiBgYGBodG1sXHJcbiAqIDxhZGMtcmVzb3VyY2Utc2NoZWR1bGVyXHJcbiAqICAgW0RlZmF1bHRWaWV3c109XCJbJ21vbnRoJywgJ3dlZWsnXVwiXHJcbiAqICAgW0N1c3RvbVZpZXdzXT1cImN1c3RvbVZpZXdzQXJyYXlcIlxyXG4gKiAgIChWaWV3Q2hhbmdlKT1cImhhbmRsZVZpZXdDaGFuZ2UoJGV2ZW50KVwiXHJcbiAqICAgKE5leHQpPVwiaGFuZGxlTmV4dCgpXCJcclxuICogICAoUHJldmlvdXMpPVwiaGFuZGxlUHJldmlvdXMoKVwiPlxyXG4gKiA8L2FkYy1yZXNvdXJjZS1zY2hlZHVsZXI+XHJcbiAqIGBgYFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhZGMtcmVzb3VyY2Utc2NoZWR1bGVyJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtcclxuICAgIENvbW1vbk1vZHVsZSxcclxuICAgIEFkY1Jlc291cmNlU2NoZWR1bGVyTW9kdWxlLFxyXG4gICAgQURDQmFzZUNvbnRhaW5lckNvbXBvbmVudFxyXG4gIF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2FkYy1yZXNvdXJjZS1zY2hlZHVsZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2FkYy1yZXNvdXJjZS1zY2hlZHVsZXIuY29tcG9uZW50LmNzcyddLFxyXG4gIHByb3ZpZGVyczogW1xyXG4gICAgRGF0ZUNoYW5nZVNlcnZpY2VcclxuICBdLFxyXG4gIGhvc3REaXJlY3RpdmVzOiBbXHJcbiAgICB7XHJcbiAgICAgIGRpcmVjdGl2ZTogQURDUmVzb3VyY2VTY2hlZHVsZXJTb3VyY2UsXHJcbiAgICAgIG91dHB1dHM6IFsnZGF0ZVJhbmdlU2VsZWN0JywgJ2V2ZW50U2VsZWN0JywgJ2RhdGVSYW5nZUNoYW5nZSddLFxyXG4gICAgICBpbnB1dHM6IFsnc3RhcnRPZicsICdob2xpZGF5cycsICd3ZWVrZW5kcycsICdldmVudHMnLCAncmVzb3VyY2VzJ11cclxuICAgIH1cclxuICBdXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBRENSZXNvdXJjZVNjaGVkdWxlckNvbXBvbmVudCB7XHJcblxyXG4gIGN1cnJlbnRWaWV3OiAnbW9udGgnIHwgJ3dlZWsnIHwgJ2RheScgPSB0aGlzLm9wdGlvbnMuaW5pdGlhbFZpZXc7XHJcblxyXG4gIHByaXZhdGUgZGVmYXVsdFZpZXdDb21wb25lbnRzOiBBRENJUmVzb3VyY2VTY2hlZHVsZXJWaWV3W10gPSBbXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnbW9udGgnLFxyXG4gICAgICBuYW1lOiB0aGlzLmxhYmVscz8ubW9udGggfHwgJ21vbnRoJyxcclxuICAgICAgY29tcG9uZW50OiBBRENNb250aFZpZXdDb21wb25lbnRcclxuICAgIH0sXHJcbiAgICB7XHJcbiAgICAgIGlkOiAnd2VlaycsXHJcbiAgICAgIG5hbWU6IHRoaXMubGFiZWxzPy53ZWVrIHx8ICd3ZWVrJyxcclxuICAgICAgY29tcG9uZW50OiBBRENXZWVrVmlld0NvbXBvbmVudFxyXG4gICAgfSxcclxuICAgIHtcclxuICAgICAgaWQ6ICdkYXknLFxyXG4gICAgICBuYW1lOiB0aGlzLmxhYmVscz8uZGF5IHx8ICdkYXknLFxyXG4gICAgICBjb21wb25lbnQ6IEFEQ0RheVZpZXdDb21wb25lbnRcclxuICAgIH1cclxuICBdXHJcblxyXG4gIHZpZXdCdXR0b25zOiBBRENJVmlld0J1dHRvbltdID0gW107XHJcbiAgcmVzb3VyY2VTY2hlZHVsZXJWaWV3czogQURDSVJlc291cmNlU2NoZWR1bGVyVmlld1tdID0gdGhpcy5kZWZhdWx0Vmlld0NvbXBvbmVudHM7XHJcblxyXG4gIHByaXZhdGUgX2RlZmF1bHRWaWV3czogc3RyaW5nW10gPSBbXTtcclxuICBwcml2YXRlIF9jdXN0b21WaWV3czogQURDSVJlc291cmNlU2NoZWR1bGVyVmlld1tdID0gW107XHJcblxyXG4gICAgLyoqXHJcbiAgICogVGhlIGRlZmF1bHQgdmlld3MgZm9yIHRoZSBzY2hlZHVsZXIuXHJcbiAgICogVGhpcyBpbnB1dCBhY2NlcHRzIGFuIGFycmF5IG9mIHZpZXcgaWRlbnRpZmllcnMgKGUuZy4sICdtb250aCcsICd3ZWVrJywgJ2RheScpIHRvIHNldCB0aGUgZGVmYXVsdCB2aWV3cy5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGBgYGh0bWxcclxuICAgKiA8YWRjLXJlc291cmNlLXNjaGVkdWxlciBbRGVmYXVsdFZpZXdzXT1cIlsnbW9udGgnLCAnd2VlayddXCI+PC9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBJbnB1dCgnZGVmYXVsdFZpZXdzJylcclxuICBzZXQgZGVmYXVsdFZpZXdzKHZhbHVlOiBzdHJpbmdbXSlcclxuICB7XHJcbiAgICB0aGlzLl9kZWZhdWx0Vmlld3MgPSB2YWx1ZTtcclxuICAgIHRoaXMub25WaWV3U2V0KCk7XHJcbiAgfVxyXG4gIGdldCBkZWZhdWx0Vmlld3MoKTogc3RyaW5nW11cclxuICB7XHJcbiAgICByZXR1cm4gdGhpcy5fZGVmYXVsdFZpZXdzO1xyXG4gIH1cclxuXHJcbiAgICAvKipcclxuICAgKiBDdXN0b20gdmlld3MgZm9yIHRoZSBzY2hlZHVsZXIuXHJcbiAgICogVGhpcyBpbnB1dCBhbGxvd3MgeW91IHRvIHByb3ZpZGUgY3VzdG9tIHZpZXdzIHRvIGRpc3BsYXkgaW4gdGhlIHNjaGVkdWxlci5cclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIGBgYGh0bWxcclxuICAgKiA8YWRjLXJlc291cmNlLXNjaGVkdWxlciBbQ3VzdG9tVmlld3NdPVwiY3VzdG9tVmlld3NBcnJheVwiPjwvYWRjLXJlc291cmNlLXNjaGVkdWxlcj5cclxuICAgKiBgYGBcclxuICAgKi9cclxuICBASW5wdXQoJ2N1c3RvbVZpZXdzJylcclxuICBzZXQgY3VzdG9tVmlld3ModmFsdWU6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclZpZXdbXSlcclxuICB7XHJcbiAgICB0aGlzLl9jdXN0b21WaWV3cyA9IHZhbHVlO1xyXG4gICAgdGhpcy5vblZpZXdTZXQoKTtcclxuICB9XHJcbiAgZ2V0IGN1c3RvbVZpZXdzKCk6IEFEQ0lSZXNvdXJjZVNjaGVkdWxlclZpZXdbXVxyXG4gIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXN0b21WaWV3cztcclxuICB9XHJcblxyXG5cclxuICAgICAgLyoqXHJcbiAgICogZGlzYWJsZXMgbmV4dCBidXR0b24gZm9yIHJlc291cmNlIHNjaGVkdWxlciBjb21wb25lbnRcclxuICAgKiBcclxuICAgKiBAZXhhbXBsZVxyXG4gICAqIDxhZGMtcmVzb3VyY2Utc2NoZWR1bGVyIGRpc2FibGVOZXh0PjwvYWRjLXJlc291cmNlLXNjaGVkdWxlcj5cclxuICAgKi9cclxuICAgIEBJbnB1dCh7YWxpYXM6ICdkaXNhYmxlTmV4dCcsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pXHJcbiAgICBkaXNhYmxlTmV4dDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAqIGRpc2FibGVzIHByZXZpb3VzIGJ1dHRvbiBmb3IgcmVzb3VyY2Ugc2NoZWR1bGVyIGNvbXBvbmVudFxyXG4gICAgICogXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogYWRjLXJlc291cmNlLXNjaGVkdWxlciBkaXNhYmxlUHJldmlvdXM+PC9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyPlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoe2FsaWFzOiAnZGlzYWJsZVByZXZpb3VzJywgdHJhbnNmb3JtOiBib29sZWFuQXR0cmlidXRlfSlcclxuICAgIGRpc2FibGVQcmV2aW91czogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIFxyXG4gICAgICAvKipcclxuICAgICAqIGRpc2FibGVzIHRvZGF5IGJ1dHRvbiBmb3IgcmVzb3VyY2Ugc2NoZWR1bGVyIGNvbXBvbmVudFxyXG4gICAgICogXHJcbiAgICAgKiBAZXhhbXBsZVxyXG4gICAgICogPGFkYy1yZXNvdXJjZS1zY2hlZHVsZXIgZGlzYWJsZVRvZGF5PjwvYWRjLXJlc291cmNlLXNjaGVkdWxlcj5cclxuICAgICAqL1xyXG4gICAgQElucHV0KHthbGlhczogJ2Rpc2FibGVUb2RheScsIHRyYW5zZm9ybTogYm9vbGVhbkF0dHJpYnV0ZX0pXHJcbiAgICBkaXNhYmxlVG9kYXk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgKiBFbWl0dGVkIHdoZW4gdGhlIHZpZXcgY2hhbmdlcyAoZS5nLiwgbW9udGgsIHdlZWssIG9yIGRheSkuXHJcbiAgICogVXNlIHRoaXMgb3V0cHV0IHRvIGNhcHR1cmUgdGhlIGN1cnJlbnQgdmlldyBzZWxlY3Rpb24gaW4gdGhlIHBhcmVudCBjb21wb25lbnQuXHJcbiAgICogXHJcbiAgICogQGV2ZW50XHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBodG1sXHJcbiAgICogPGFkYy1yZXNvdXJjZS1zY2hlZHVsZXIgKHZpZXdDaGFuZ2UpPVwib25WaWV3Q2hhbmdlKCRldmVudClcIj48L2FkYy1yZXNvdXJjZS1zY2hlZHVsZXI+XHJcbiAgICogYGBgXHJcbiAgICovXHJcbiAgQE91dHB1dCgndmlld0NoYW5nZScpXHJcbiAgb25WaWV3Q2hhbmdlRXZlbnQ6IEV2ZW50RW1pdHRlcjxzdHJpbmc+ID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBcIk5leHRcIiBidXR0b24gaXMgY2xpY2tlZCB0byBuYXZpZ2F0ZSB0byB0aGUgbmV4dCBkYXRlIHJhbmdlLlxyXG4gICAqIFxyXG4gICAqIEBldmVudFxyXG4gICAqIEBleGFtcGxlXHJcbiAgICogYGBgaHRtbFxyXG4gICAqIDxhZGMtcmVzb3VyY2Utc2NoZWR1bGVyIChuZXh0KT1cIm9uTmV4dCgpXCI+PC9hZGMtcmVzb3VyY2Utc2NoZWR1bGVyPlxyXG4gICAqIGBgYFxyXG4gICAqL1xyXG4gIEBPdXRwdXQoJ25leHQnKVxyXG4gIG9uTmV4dEV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICogRW1pdHRlZCB3aGVuIHRoZSBcIlByZXZpb3VzXCIgYnV0dG9uIGlzIGNsaWNrZWQgdG8gbmF2aWdhdGUgdG8gdGhlIHByZXZpb3VzIGRhdGUgcmFuZ2UuXHJcbiAgICogXHJcbiAgICogQGV2ZW50XHJcbiAgICogQGV4YW1wbGVcclxuICAgKiBgYGBodG1sXHJcbiAgICogPGFkYy1yZXNvdXJjZS1zY2hlZHVsZXIgKHByZXZpb3VzKT1cIm9uUHJldmlvdXMoKVwiPjwvYWRjLXJlc291cmNlLXNjaGVkdWxlcj5cclxuICAgKiBgYGBcclxuICAgKi9cclxuICBAT3V0cHV0KCdwcmV2aW91cycpXHJcbiAgb25QcmV2aW91c0V2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdChBRENfT1BUSU9OUykgcHJpdmF0ZSBvcHRpb25zOiBBRENJT3B0aW9ucyxcclxuICAgIEBPcHRpb25hbCgpIEBJbmplY3QoQURDX0xBQkVMUykgcHVibGljIGxhYmVsczogQURDSUxhYmVscyB8IG51bGwsXHJcbiAgICBwcml2YXRlIGRhdGVDaGFuZ2VTZXJ2aWNlOiBEYXRlQ2hhbmdlU2VydmljZSxcclxuICApXHJcbiAge1xyXG4gICAgdGhpcy5kZWZhdWx0Vmlld3MgPSBkZWZhdWx0Vmlld3M7XHJcbiAgfVxyXG5cclxuXHJcbiAgb25WaWV3Q2hhbmdlKHZpZXc6IGFueSlcclxuICB7XHJcbiAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdmlldztcclxuICAgIHRoaXMub25WaWV3Q2hhbmdlRXZlbnQuZW1pdCh2aWV3KTtcclxuICB9XHJcblxyXG4gIG9uUHJldmlvdXMoKTogdm9pZFxyXG4gIHtcclxuICAgIHRoaXMuZGF0ZUNoYW5nZVNlcnZpY2UucHJldmlvdXMoKTtcclxuICAgIHRoaXMub25QcmV2aW91c0V2ZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uTmV4dCgpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5kYXRlQ2hhbmdlU2VydmljZS5uZXh0KCk7XHJcbiAgICB0aGlzLm9uTmV4dEV2ZW50LmVtaXQoKTtcclxuICB9XHJcblxyXG4gIG9uVG9kYXkoKTogdm9pZFxyXG4gIHtcclxuICAgIHRoaXMuZGF0ZUNoYW5nZVNlcnZpY2UudG9kYXkoKTtcclxuICB9XHJcblxyXG4gIG9uVmlld1NldCgpOiB2b2lkXHJcbiAge1xyXG4gICAgdGhpcy5yZXNvdXJjZVNjaGVkdWxlclZpZXdzID0gdGhpcy5kZWZhdWx0Vmlld0NvbXBvbmVudHMuZmlsdGVyKHYgPT4gdGhpcy5kZWZhdWx0Vmlld3MuaW5jbHVkZXModi5pZCkpLmNvbmNhdCh0aGlzLmN1c3RvbVZpZXdzKTtcclxuXHJcbiAgICB0aGlzLnZpZXdCdXR0b25zID0gdGhpcy5yZXNvdXJjZVNjaGVkdWxlclZpZXdzLm1hcCh2ID0+IHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICBpZDogdi5pZCxcclxuICAgICAgICBuYW1lOiB2Lm5hbWUsXHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG4iLCJcclxuXHJcbjxhZGMtYmFzZS1jb250YWluZXIgW2Rpc2FibGVOZXh0XT1cImRpc2FibGVOZXh0XCIgW2Rpc2FibGVQcmV2aW91c109XCJkaXNhYmxlUHJldmlvdXNcIiBbZGlzYWJsZVRvZGF5XT1cImRpc2FibGVUb2RheVwiIFt2aWV3c109XCJ2aWV3QnV0dG9uc1wiICh2aWV3Q2hhbmdlKT1cIm9uVmlld0NoYW5nZSgkZXZlbnQpXCIgKHByZXZpb3VzKT1cIm9uUHJldmlvdXMoKVwiICh0b2RheSk9XCJvblRvZGF5KClcIiAobmV4dCk9XCJvbk5leHQoKVwiPlxyXG5cclxuICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cImN1cnJlbnRWaWV3XCI+XHJcbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiByZXNvdXJjZVNjaGVkdWxlclZpZXdzXCI+XHJcbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cIml0ZW0uaWRcIj5cclxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nQ29tcG9uZW50T3V0bGV0PVwiaXRlbS5jb21wb25lbnQ7XCI+PC9uZy1jb250YWluZXI+XHJcbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG48L2FkYy1iYXNlLWNvbnRhaW5lcj4iXX0=