@clr/angular
Version:
Angular components for Clarity
74 lines • 15.4 kB
JavaScript
/*
* Copyright (c) 2016-2025 Broadcom. All Rights Reserved.
* The term "Broadcom" refers to Broadcom Inc. and/or its subsidiaries.
* This software is released under MIT license.
* The full license information can be found in LICENSE in the root directory of this project.
*/
import { Component } from '@angular/core';
import { DatepickerFocusService } from './providers/datepicker-focus.service';
import * as i0 from "@angular/core";
import * as i1 from "../../utils/i18n/common-strings.service";
import * as i2 from "./providers/view-manager.service";
import * as i3 from "./providers/date-navigation.service";
import * as i4 from "./providers/date-io.service";
import * as i5 from "@angular/common";
import * as i6 from "../../layout/vertical-nav/vertical-nav";
import * as i7 from "../../layout/vertical-nav/vertical-nav-link";
import * as i8 from "./monthpicker";
import * as i9 from "./yearpicker";
import * as i10 from "./daypicker";
import * as i11 from "./datepicker-action-buttons";
export class ClrDatepickerViewManager {
constructor(commonStrings, viewManagerService, dateNavigationService, dateIOService) {
this.commonStrings = commonStrings;
this.viewManagerService = viewManagerService;
this.dateNavigationService = dateNavigationService;
this.dateIOService = dateIOService;
}
/**
* Returns if the current view is the monthpicker.
*/
get isMonthView() {
return this.viewManagerService.isMonthView;
}
/**
* Returns if the current view is the yearpicker.
*/
get isYearView() {
return this.viewManagerService.isYearView;
}
/**
* Returns if the current view is the daypicker.
*/
get isDayView() {
return this.viewManagerService.isDayView;
}
get hasRangeOptions() {
return !!this.dateNavigationService?.isRangePicker && !!this.dateRangeOptions?.length;
}
get hasActionButtons() {
return this.dateNavigationService.hasActionButtons;
}
get dateRangeOptions() {
return this.dateIOService.getRangeOptions();
}
onRangeOptionSelect(selectedRange) {
const startDate = this.dateNavigationService.convertDateToDayModel(selectedRange?.value[0]), endDate = this.dateNavigationService.convertDateToDayModel(selectedRange?.value[1]);
this.dateNavigationService.notifySelectedDayChanged({ startDate, endDate }, { emitEvent: !this.hasActionButtons });
this.dateNavigationService.moveToSpecificMonth(startDate);
}
}
ClrDatepickerViewManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatepickerViewManager, deps: [{ token: i1.ClrCommonStringsService }, { token: i2.ViewManagerService }, { token: i3.DateNavigationService }, { token: i4.DateIOService }], target: i0.ɵɵFactoryTarget.Component });
ClrDatepickerViewManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.2", type: ClrDatepickerViewManager, selector: "clr-datepicker-view-manager", host: { attributes: { "role": "dialog" }, properties: { "class.datepicker": "true", "class.has-range-option": "hasRangeOptions", "class.has-action-buttons": "hasActionButtons", "attr.aria-modal": "true", "attr.aria-label": "commonStrings.keys.datepickerDialogLabel" } }, providers: [DatepickerFocusService], ngImport: i0, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<ng-container *ngIf=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <div class=\"datepicker-view-manager\">\n <ng-container *ngTemplateOutlet=\"calendarView\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #calendarView>\n <clr-monthpicker *ngIf=\"isMonthView\"></clr-monthpicker>\n <clr-yearpicker *ngIf=\"isYearView\"></clr-yearpicker>\n <clr-daypicker *ngIf=\"isDayView\"></clr-daypicker>\n <clr-datepicker-actions *ngIf=\"hasActionButtons\"></clr-datepicker-actions>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i5.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i5.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i5.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: i6.ClrVerticalNav, selector: "clr-vertical-nav", inputs: ["clrVerticalNavToggleLabel", "clrVerticalNavCollapsible", "clrVerticalNavCollapsed"], outputs: ["clrVerticalNavCollapsedChange"] }, { kind: "component", type: i7.ClrVerticalNavLink, selector: "[clrVerticalNavLink]" }, { kind: "component", type: i8.ClrMonthpicker, selector: "clr-monthpicker" }, { kind: "component", type: i9.ClrYearpicker, selector: "clr-yearpicker" }, { kind: "component", type: i10.ClrDaypicker, selector: "clr-daypicker" }, { kind: "component", type: i11.ClrDatepickerActions, selector: "clr-datepicker-actions" }] });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.2", ngImport: i0, type: ClrDatepickerViewManager, decorators: [{
type: Component,
args: [{ selector: 'clr-datepicker-view-manager', providers: [DatepickerFocusService], host: {
'[class.datepicker]': 'true',
'[class.has-range-option]': 'hasRangeOptions',
'[class.has-action-buttons]': 'hasActionButtons',
'[attr.aria-modal]': 'true',
'[attr.aria-label]': 'commonStrings.keys.datepickerDialogLabel',
role: 'dialog',
}, template: "<!--\n ~ Copyright (c) 2016-2025 Broadcom. All Rights Reserved.\n ~ The term \"Broadcom\" refers to Broadcom Inc. and/or its subsidiaries.\n ~ This software is released under MIT license.\n ~ The full license information can be found in LICENSE in the root directory of this project.\n-->\n\n<ng-container *ngIf=\"hasRangeOptions; else calendarView\">\n <clr-vertical-nav class=\"clr-date-range-picker-nav\">\n <ng-container *ngFor=\"let option of dateRangeOptions\">\n <a\n clrVerticalNavLink\n href=\"javascript:void(0)\"\n [attr.aria-label]=\"option?.label\"\n tabindex=\"0\"\n (keyup.enter)=\"onRangeOptionSelect(option)\"\n (click)=\"onRangeOptionSelect(option)\"\n >\n {{option.label}}\n </a>\n </ng-container>\n </clr-vertical-nav>\n\n <div class=\"datepicker-view-manager\">\n <ng-container *ngTemplateOutlet=\"calendarView\"></ng-container>\n </div>\n</ng-container>\n\n<ng-template #calendarView>\n <clr-monthpicker *ngIf=\"isMonthView\"></clr-monthpicker>\n <clr-yearpicker *ngIf=\"isYearView\"></clr-yearpicker>\n <clr-daypicker *ngIf=\"isDayView\"></clr-daypicker>\n <clr-datepicker-actions *ngIf=\"hasActionButtons\"></clr-datepicker-actions>\n</ng-template>\n" }]
}], ctorParameters: function () { return [{ type: i1.ClrCommonStringsService }, { type: i2.ViewManagerService }, { type: i3.DateNavigationService }, { type: i4.DateIOService }]; } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyL3NyYy9mb3Jtcy9kYXRlcGlja2VyL2RhdGVwaWNrZXItdmlldy1tYW5hZ2VyLnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci9zcmMvZm9ybXMvZGF0ZXBpY2tlci9kYXRlcGlja2VyLXZpZXctbWFuYWdlci5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUsxQyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQzs7Ozs7Ozs7Ozs7OztBQWdCOUUsTUFBTSxPQUFPLHdCQUF3QjtJQUNuQyxZQUNTLGFBQXNDLEVBQ3JDLGtCQUFzQyxFQUN0QyxxQkFBNEMsRUFDNUMsYUFBNEI7UUFIN0Isa0JBQWEsR0FBYixhQUFhLENBQXlCO1FBQ3JDLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUF1QjtRQUM1QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtJQUNuQyxDQUFDO0lBRUo7O09BRUc7SUFDSCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUM7SUFDN0MsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsVUFBVSxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLFNBQVMsQ0FBQztJQUMzQyxDQUFDO0lBRUQsSUFBSSxlQUFlO1FBQ2pCLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxhQUFhLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxNQUFNLENBQUM7SUFDeEYsQ0FBQztJQUVELElBQWMsZ0JBQWdCO1FBQzVCLE9BQU8sSUFBSSxDQUFDLHFCQUFxQixDQUFDLGdCQUFnQixDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFjLGdCQUFnQjtRQUM1QixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDOUMsQ0FBQztJQUVELG1CQUFtQixDQUFDLGFBQWE7UUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHFCQUFxQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDekYsT0FBTyxHQUFHLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxxQkFBcUIsQ0FBQyxhQUFhLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEYsSUFBSSxDQUFDLHFCQUFxQixDQUFDLHdCQUF3QixDQUFDLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUMsQ0FBQztRQUNuSCxJQUFJLENBQUMscUJBQXFCLENBQUMsbUJBQW1CLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs7cUhBOUNVLHdCQUF3Qjt5R0FBeEIsd0JBQXdCLHFVQVZ4QixDQUFDLHNCQUFzQixDQUFDLDBCQ2xCckMsNnVDQWtDQTsyRkROYSx3QkFBd0I7a0JBYnBDLFNBQVM7K0JBQ0UsNkJBQTZCLGFBRTVCLENBQUMsc0JBQXNCLENBQUMsUUFDN0I7d0JBQ0osb0JBQW9CLEVBQUUsTUFBTTt3QkFDNUIsMEJBQTBCLEVBQUUsaUJBQWlCO3dCQUM3Qyw0QkFBNEIsRUFBRSxrQkFBa0I7d0JBQ2hELG1CQUFtQixFQUFFLE1BQU07d0JBQzNCLG1CQUFtQixFQUFFLDBDQUEwQzt3QkFDL0QsSUFBSSxFQUFFLFFBQVE7cUJBQ2YiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBUaGUgdGVybSBcIkJyb2FkY29tXCIgcmVmZXJzIHRvIEJyb2FkY29tIEluYy4gYW5kL29yIGl0cyBzdWJzaWRpYXJpZXMuXG4gKiBUaGlzIHNvZnR3YXJlIGlzIHJlbGVhc2VkIHVuZGVyIE1JVCBsaWNlbnNlLlxuICogVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuICovXG5cbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBDbHJDb21tb25TdHJpbmdzU2VydmljZSB9IGZyb20gJy4uLy4uL3V0aWxzL2kxOG4vY29tbW9uLXN0cmluZ3Muc2VydmljZSc7XG5pbXBvcnQgeyBEYXRlSU9TZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvZGF0ZS1pby5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vcHJvdmlkZXJzL2RhdGUtbmF2aWdhdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IERhdGVwaWNrZXJGb2N1c1NlcnZpY2UgfSBmcm9tICcuL3Byb3ZpZGVycy9kYXRlcGlja2VyLWZvY3VzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVmlld01hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi9wcm92aWRlcnMvdmlldy1tYW5hZ2VyLnNlcnZpY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjbHItZGF0ZXBpY2tlci12aWV3LW1hbmFnZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vZGF0ZXBpY2tlci12aWV3LW1hbmFnZXIuaHRtbCcsXG4gIHByb3ZpZGVyczogW0RhdGVwaWNrZXJGb2N1c1NlcnZpY2VdLFxuICBob3N0OiB7XG4gICAgJ1tjbGFzcy5kYXRlcGlja2VyXSc6ICd0cnVlJyxcbiAgICAnW2NsYXNzLmhhcy1yYW5nZS1vcHRpb25dJzogJ2hhc1JhbmdlT3B0aW9ucycsXG4gICAgJ1tjbGFzcy5oYXMtYWN0aW9uLWJ1dHRvbnNdJzogJ2hhc0FjdGlvbkJ1dHRvbnMnLFxuICAgICdbYXR0ci5hcmlhLW1vZGFsXSc6ICd0cnVlJyxcbiAgICAnW2F0dHIuYXJpYS1sYWJlbF0nOiAnY29tbW9uU3RyaW5ncy5rZXlzLmRhdGVwaWNrZXJEaWFsb2dMYWJlbCcsXG4gICAgcm9sZTogJ2RpYWxvZycsXG4gIH0sXG59KVxuZXhwb3J0IGNsYXNzIENsckRhdGVwaWNrZXJWaWV3TWFuYWdlciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TdHJpbmdzOiBDbHJDb21tb25TdHJpbmdzU2VydmljZSxcbiAgICBwcml2YXRlIHZpZXdNYW5hZ2VyU2VydmljZTogVmlld01hbmFnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZU5hdmlnYXRpb25TZXJ2aWNlOiBEYXRlTmF2aWdhdGlvblNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkYXRlSU9TZXJ2aWNlOiBEYXRlSU9TZXJ2aWNlXG4gICkge31cblxuICAvKipcbiAgICogUmV0dXJucyBpZiB0aGUgY3VycmVudCB2aWV3IGlzIHRoZSBtb250aHBpY2tlci5cbiAgICovXG4gIGdldCBpc01vbnRoVmlldygpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy52aWV3TWFuYWdlclNlcnZpY2UuaXNNb250aFZpZXc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpZiB0aGUgY3VycmVudCB2aWV3IGlzIHRoZSB5ZWFycGlja2VyLlxuICAgKi9cbiAgZ2V0IGlzWWVhclZpZXcoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudmlld01hbmFnZXJTZXJ2aWNlLmlzWWVhclZpZXc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBpZiB0aGUgY3VycmVudCB2aWV3IGlzIHRoZSBkYXlwaWNrZXIuXG4gICAqL1xuICBnZXQgaXNEYXlWaWV3KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnZpZXdNYW5hZ2VyU2VydmljZS5pc0RheVZpZXc7XG4gIH1cblxuICBnZXQgaGFzUmFuZ2VPcHRpb25zKCkge1xuICAgIHJldHVybiAhIXRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlPy5pc1JhbmdlUGlja2VyICYmICEhdGhpcy5kYXRlUmFuZ2VPcHRpb25zPy5sZW5ndGg7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGhhc0FjdGlvbkJ1dHRvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmhhc0FjdGlvbkJ1dHRvbnM7XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0IGRhdGVSYW5nZU9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0ZUlPU2VydmljZS5nZXRSYW5nZU9wdGlvbnMoKTtcbiAgfVxuXG4gIG9uUmFuZ2VPcHRpb25TZWxlY3Qoc2VsZWN0ZWRSYW5nZSkge1xuICAgIGNvbnN0IHN0YXJ0RGF0ZSA9IHRoaXMuZGF0ZU5hdmlnYXRpb25TZXJ2aWNlLmNvbnZlcnREYXRlVG9EYXlNb2RlbChzZWxlY3RlZFJhbmdlPy52YWx1ZVswXSksXG4gICAgICBlbmREYXRlID0gdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UuY29udmVydERhdGVUb0RheU1vZGVsKHNlbGVjdGVkUmFuZ2U/LnZhbHVlWzFdKTtcbiAgICB0aGlzLmRhdGVOYXZpZ2F0aW9uU2VydmljZS5ub3RpZnlTZWxlY3RlZERheUNoYW5nZWQoeyBzdGFydERhdGUsIGVuZERhdGUgfSwgeyBlbWl0RXZlbnQ6ICF0aGlzLmhhc0FjdGlvbkJ1dHRvbnMgfSk7XG4gICAgdGhpcy5kYXRlTmF2aWdhdGlvblNlcnZpY2UubW92ZVRvU3BlY2lmaWNNb250aChzdGFydERhdGUpO1xuICB9XG59XG4iLCI8IS0tXG4gIH4gQ29weXJpZ2h0IChjKSAyMDE2LTIwMjUgQnJvYWRjb20uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gIH4gVGhlIHRlcm0gXCJCcm9hZGNvbVwiIHJlZmVycyB0byBCcm9hZGNvbSBJbmMuIGFuZC9vciBpdHMgc3Vic2lkaWFyaWVzLlxuICB+IFRoaXMgc29mdHdhcmUgaXMgcmVsZWFzZWQgdW5kZXIgTUlUIGxpY2Vuc2UuXG4gIH4gVGhlIGZ1bGwgbGljZW5zZSBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgaW4gTElDRU5TRSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBwcm9qZWN0LlxuLS0+XG5cbjxuZy1jb250YWluZXIgKm5nSWY9XCJoYXNSYW5nZU9wdGlvbnM7IGVsc2UgY2FsZW5kYXJWaWV3XCI+XG4gIDxjbHItdmVydGljYWwtbmF2IGNsYXNzPVwiY2xyLWRhdGUtcmFuZ2UtcGlja2VyLW5hdlwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBkYXRlUmFuZ2VPcHRpb25zXCI+XG4gICAgICA8YVxuICAgICAgICBjbHJWZXJ0aWNhbE5hdkxpbmtcbiAgICAgICAgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKVwiXG4gICAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwib3B0aW9uPy5sYWJlbFwiXG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIChrZXl1cC5lbnRlcik9XCJvblJhbmdlT3B0aW9uU2VsZWN0KG9wdGlvbilcIlxuICAgICAgICAoY2xpY2spPVwib25SYW5nZU9wdGlvblNlbGVjdChvcHRpb24pXCJcbiAgICAgID5cbiAgICAgICAge3tvcHRpb24ubGFiZWx9fVxuICAgICAgPC9hPlxuICAgIDwvbmctY29udGFpbmVyPlxuICA8L2Nsci12ZXJ0aWNhbC1uYXY+XG5cbiAgPGRpdiBjbGFzcz1cImRhdGVwaWNrZXItdmlldy1tYW5hZ2VyXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNhbGVuZGFyVmlld1wiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2NhbGVuZGFyVmlldz5cbiAgPGNsci1tb250aHBpY2tlciAqbmdJZj1cImlzTW9udGhWaWV3XCI+PC9jbHItbW9udGhwaWNrZXI+XG4gIDxjbHIteWVhcnBpY2tlciAqbmdJZj1cImlzWWVhclZpZXdcIj48L2Nsci15ZWFycGlja2VyPlxuICA8Y2xyLWRheXBpY2tlciAqbmdJZj1cImlzRGF5Vmlld1wiPjwvY2xyLWRheXBpY2tlcj5cbiAgPGNsci1kYXRlcGlja2VyLWFjdGlvbnMgKm5nSWY9XCJoYXNBY3Rpb25CdXR0b25zXCI+PC9jbHItZGF0ZXBpY2tlci1hY3Rpb25zPlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==