UNPKG

cfc-ds

Version:

Design System do Conselho Federal de Contabilidade baseado no govbr-ds

129 lines 28.7 kB
import { Component, EventEmitter, Input, Output } from '@angular/core'; import { LogoViewMode } from '../../enums/logo-view-mode.enum'; import { HeaderViewMode } from '../../enums/header-view-mode.enum'; import { SignInType } from '../../enums/sign-in-type.enum'; import { ButtonType } from '../../enums/button-type.enum'; import { DividerMode } from '../../enums/divider-mode.enum'; import { DividerAxis } from '../../enums/divider-axis.enum'; import { DividerDensity } from '../../enums/divider-density.enum'; import { DividerType } from '../../enums/divider-type.enum'; import { TimerType } from '../../enums/timer-type.enum'; import { SignInMode } from '../../enums/sign-in-mode.enum'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@angular/common"; import * as i3 from "@angular/flex-layout/flex"; import * as i4 from "@angular/flex-layout/extended"; import * as i5 from "../button/button.component"; import * as i6 from "../divider/divider.component"; import * as i7 from "../logo/logo.component"; import * as i8 from "../sign-in/sign-in.component"; import * as i9 from "../timer/timer.component"; export class HeaderComponent { router; viewMode = HeaderViewMode.default; hasMenu = true; // logo hasLogo = true; logoViewMode = LogoViewMode.default; logoUrl = ''; // title and description title; description; // timer hasTimer = false; timeLogout = 1800; timeCritical = 300; // action bar hasNotificationIcon = true; userName = 'Entrar'; signinMode = SignInMode.logout; menuEvent = new EventEmitter; criticalTimeEvent = new EventEmitter; timeOutEvent = new EventEmitter; timeEvent = new EventEmitter; notificationIconEvent = new EventEmitter; signinEvent = new EventEmitter; logoutEvent = new EventEmitter; headerViewModes = HeaderViewMode; logoViewModes = LogoViewMode; dividerModes = DividerMode; dividerTypes = DividerType; dividerDensities = DividerDensity; dividerAxis = DividerAxis; signinTypes = SignInType; signinModes = SignInMode; buttonTypes = ButtonType; timerTypes = TimerType; logoIsClickable = false; get firstAndLastName() { const splitedName = this.userName.trim().split(' '); if (splitedName.length === 1) { return splitedName[0]; } else { return `${splitedName[0]} ${splitedName[splitedName.length - 1]}`; } } constructor(router) { this.router = router; } ngOnInit() { this.logoIsClickable = this.router.url === '/'; } toggleMenu() { this.menuEvent.emit(); } goToHome() { if (this.router.url !== '/') { this.router.navigate(['/']); } } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderComponent, deps: [{ token: i1.Router }], target: i0.ɵɵFactoryTarget.Component }); static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: HeaderComponent, selector: "cfc-header", inputs: { viewMode: "viewMode", hasMenu: "hasMenu", hasLogo: "hasLogo", logoViewMode: "logoViewMode", logoUrl: "logoUrl", title: "title", description: "description", hasTimer: "hasTimer", timeLogout: "timeLogout", timeCritical: "timeCritical", hasNotificationIcon: "hasNotificationIcon", userName: "userName", signinMode: "signinMode" }, outputs: { menuEvent: "menuEvent", criticalTimeEvent: "criticalTimeEvent", timeOutEvent: "timeOutEvent", timeEvent: "timeEvent", notificationIconEvent: "notificationIconEvent", signinEvent: "signinEvent", logoutEvent: "logoutEvent" }, ngImport: i0, template: "<header\r\n class=\"cfc-header\"\r\n [ngStyle]=\"{ 'background-color': viewMode === headerViewModes.default\r\n ? 'white'\r\n : '#0C326F'\r\n }\"\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"space-between center\">\r\n <div\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\"\r\n fxLayoutGap=\"1rem\">\r\n\r\n <!-- MENU -->\r\n <cfc-button\r\n *ngIf=\"hasMenu\"\r\n [icon]=\"'bars'\"\r\n [type]=\"buttonTypes.tertiary\"\r\n [circle]=\"true\"\r\n [inverted]=\"viewMode === headerViewModes.contrast\"\r\n aria-label=\"menu\"\r\n data-toggle=\"menu\"\r\n data-target=\"#menu-aside\"\r\n is-push=\"true\"\r\n id=\"push\"\r\n [attr.show-menu]=\"'true'\"\r\n (click)=\"toggleMenu()\">\r\n </cfc-button>\r\n\r\n <!-- LOGO -->\r\n <cfc-logo\r\n *ngIf=\"hasLogo\"\r\n [viewMode]=\"logoViewMode\"\r\n [imageUrl]=\"logoViewMode === logoViewModes.external ? logoUrl : undefined\"\r\n (clickEvent)=\"goToHome()\"\r\n ></cfc-logo>\r\n\r\n <!-- TITLE AND DESCRIPTION -->\r\n <div\r\n fxLayout=\"column\"\r\n fxLayoutAlign=\"center start\">\r\n <h4\r\n class=\"cfc-header__title\"\r\n [ngStyle]=\"{ 'color': viewMode === headerViewModes.default ? 'black' : 'white' }\">\r\n {{ title }}\r\n </h4>\r\n <p\r\n *ngIf=\"description\"\r\n class=\"cfc-header__description\"\r\n [ngStyle]=\"{ 'color': viewMode === headerViewModes.default ? '#555555' : 'white' }\">\r\n {{ description }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- ACTION BAR -->\r\n <div\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\"\r\n fxLayoutGap=\"0.5rem\">\r\n\r\n <cfc-timer\r\n *ngIf=\"hasTimer\"\r\n [type]=\"viewMode === headerViewModes.default\r\n ? timerTypes.primary\r\n : timerTypes.secondary\r\n \"\r\n [initialTime]=\"timeLogout\"\r\n [criticalTime]=\"timeCritical\"\r\n [isGlobal]=\"true\"\r\n (timeCriticalEvent)=\"criticalTimeEvent.emit()\"\r\n (timeOutEvent)=\"timeOutEvent.emit()\"\r\n (timeEvent)=\"timeEvent.emit()\"\r\n ></cfc-timer>\r\n\r\n <cfc-button\r\n *ngIf=\"hasNotificationIcon\"\r\n sytle=\"min-width: 22rem;\"\r\n icon=\"bell\"\r\n [type]=\"buttonTypes.tertiary\"\r\n [inverted]=\"viewMode === headerViewModes.contrast\"\r\n [circle]=\"true\"\r\n (click)=\"notificationIconEvent.emit()\"\r\n data-toggle=\"menu\"\r\n data-target=\"#push\"\r\n ></cfc-button>\r\n\r\n <cfc-divider\r\n *ngIf=\"!hasNotificationIcon\"\r\n [mode]=\"dividerModes.line\"\r\n [type]=\"viewMode === headerViewModes.default\r\n ? dividerTypes.primary\r\n : dividerTypes.secondary\r\n \"\r\n [density]=\"dividerDensities.large\"\r\n [axis]=\"dividerAxis.vertical\"\r\n ></cfc-divider>\r\n\r\n <cfc-sign-in\r\n class=\"cfc-header__signin\"\r\n [label]=\"firstAndLastName\"\r\n [type]=\"signinTypes.secondary\"\r\n [mode]=\"signinMode\"\r\n (onClick)=\"signinEvent.emit()\"\r\n (onLogout)=\"logoutEvent.emit()\"\r\n ></cfc-sign-in>\r\n </div>\r\n</header>\r\n\r\n<div class=\"cfc-header__spacer\"></div>\r\n", styles: ["*{margin:0;padding:0;box-sizing:border-box}.cfc-header{position:fixed;top:0;left:0;background-color:#fff;box-shadow:0 0 8px 1px #c1c1c1;padding:1rem 2.5rem;width:100%;height:5rem;z-index:999}.cfc-header__title{font-weight:700;font-size:1rem}.cfc-header__description{font-weight:400;font-size:.9rem;padding-top:.2rem;color:#555;opacity:60%}.cfc-header__spacer{position:relative;height:5rem;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "directive", type: i3.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { kind: "directive", type: i3.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i4.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { kind: "component", type: i5.ButtonComponent, selector: "cfc-button", inputs: ["label", "type", "submit", "circle", "density", "disabled", "block", "icon", "active", "inverted", "loading"], outputs: ["onClick"] }, { kind: "component", type: i6.DividerComponent, selector: "cfc-divider", inputs: ["height", "width", "mode", "type", "axis", "density"] }, { kind: "component", type: i7.LogoComponent, selector: "cfc-logo", inputs: ["viewMode", "isClickable", "width", "imageUrl"], outputs: ["clickEvent"] }, { kind: "component", type: i8.SignInComponent, selector: "cfc-sign-in", inputs: ["label", "type", "density", "mode", "disabled", "active", "block", "circle", "externalImageUrl", "externalLabel"], outputs: ["onClick", "onLogout"] }, { kind: "component", type: i9.TimerComponent, selector: "cfc-timer", inputs: ["type", "initialTime", "criticalTime", "isGlobal"], outputs: ["timeOutEvent", "timeEvent", "timeCriticalEvent"] }] }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: HeaderComponent, decorators: [{ type: Component, args: [{ selector: 'cfc-header', template: "<header\r\n class=\"cfc-header\"\r\n [ngStyle]=\"{ 'background-color': viewMode === headerViewModes.default\r\n ? 'white'\r\n : '#0C326F'\r\n }\"\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"space-between center\">\r\n <div\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\"\r\n fxLayoutGap=\"1rem\">\r\n\r\n <!-- MENU -->\r\n <cfc-button\r\n *ngIf=\"hasMenu\"\r\n [icon]=\"'bars'\"\r\n [type]=\"buttonTypes.tertiary\"\r\n [circle]=\"true\"\r\n [inverted]=\"viewMode === headerViewModes.contrast\"\r\n aria-label=\"menu\"\r\n data-toggle=\"menu\"\r\n data-target=\"#menu-aside\"\r\n is-push=\"true\"\r\n id=\"push\"\r\n [attr.show-menu]=\"'true'\"\r\n (click)=\"toggleMenu()\">\r\n </cfc-button>\r\n\r\n <!-- LOGO -->\r\n <cfc-logo\r\n *ngIf=\"hasLogo\"\r\n [viewMode]=\"logoViewMode\"\r\n [imageUrl]=\"logoViewMode === logoViewModes.external ? logoUrl : undefined\"\r\n (clickEvent)=\"goToHome()\"\r\n ></cfc-logo>\r\n\r\n <!-- TITLE AND DESCRIPTION -->\r\n <div\r\n fxLayout=\"column\"\r\n fxLayoutAlign=\"center start\">\r\n <h4\r\n class=\"cfc-header__title\"\r\n [ngStyle]=\"{ 'color': viewMode === headerViewModes.default ? 'black' : 'white' }\">\r\n {{ title }}\r\n </h4>\r\n <p\r\n *ngIf=\"description\"\r\n class=\"cfc-header__description\"\r\n [ngStyle]=\"{ 'color': viewMode === headerViewModes.default ? '#555555' : 'white' }\">\r\n {{ description }}\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <!-- ACTION BAR -->\r\n <div\r\n fxLayout=\"row\"\r\n fxLayoutAlign=\"center center\"\r\n fxLayoutGap=\"0.5rem\">\r\n\r\n <cfc-timer\r\n *ngIf=\"hasTimer\"\r\n [type]=\"viewMode === headerViewModes.default\r\n ? timerTypes.primary\r\n : timerTypes.secondary\r\n \"\r\n [initialTime]=\"timeLogout\"\r\n [criticalTime]=\"timeCritical\"\r\n [isGlobal]=\"true\"\r\n (timeCriticalEvent)=\"criticalTimeEvent.emit()\"\r\n (timeOutEvent)=\"timeOutEvent.emit()\"\r\n (timeEvent)=\"timeEvent.emit()\"\r\n ></cfc-timer>\r\n\r\n <cfc-button\r\n *ngIf=\"hasNotificationIcon\"\r\n sytle=\"min-width: 22rem;\"\r\n icon=\"bell\"\r\n [type]=\"buttonTypes.tertiary\"\r\n [inverted]=\"viewMode === headerViewModes.contrast\"\r\n [circle]=\"true\"\r\n (click)=\"notificationIconEvent.emit()\"\r\n data-toggle=\"menu\"\r\n data-target=\"#push\"\r\n ></cfc-button>\r\n\r\n <cfc-divider\r\n *ngIf=\"!hasNotificationIcon\"\r\n [mode]=\"dividerModes.line\"\r\n [type]=\"viewMode === headerViewModes.default\r\n ? dividerTypes.primary\r\n : dividerTypes.secondary\r\n \"\r\n [density]=\"dividerDensities.large\"\r\n [axis]=\"dividerAxis.vertical\"\r\n ></cfc-divider>\r\n\r\n <cfc-sign-in\r\n class=\"cfc-header__signin\"\r\n [label]=\"firstAndLastName\"\r\n [type]=\"signinTypes.secondary\"\r\n [mode]=\"signinMode\"\r\n (onClick)=\"signinEvent.emit()\"\r\n (onLogout)=\"logoutEvent.emit()\"\r\n ></cfc-sign-in>\r\n </div>\r\n</header>\r\n\r\n<div class=\"cfc-header__spacer\"></div>\r\n", styles: ["*{margin:0;padding:0;box-sizing:border-box}.cfc-header{position:fixed;top:0;left:0;background-color:#fff;box-shadow:0 0 8px 1px #c1c1c1;padding:1rem 2.5rem;width:100%;height:5rem;z-index:999}.cfc-header__title{font-weight:700;font-size:1rem}.cfc-header__description{font-weight:400;font-size:.9rem;padding-top:.2rem;color:#555;opacity:60%}.cfc-header__spacer{position:relative;height:5rem;width:100%}\n"] }] }], ctorParameters: () => [{ type: i1.Router }], propDecorators: { viewMode: [{ type: Input }], hasMenu: [{ type: Input }], hasLogo: [{ type: Input }], logoViewMode: [{ type: Input }], logoUrl: [{ type: Input }], title: [{ type: Input }], description: [{ type: Input }], hasTimer: [{ type: Input }], timeLogout: [{ type: Input }], timeCritical: [{ type: Input }], hasNotificationIcon: [{ type: Input }], userName: [{ type: Input }], signinMode: [{ type: Input }], menuEvent: [{ type: Output }], criticalTimeEvent: [{ type: Output }], timeOutEvent: [{ type: Output }], timeEvent: [{ type: Output }], notificationIconEvent: [{ type: Output }], signinEvent: [{ type: Output }], logoutEvent: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NmYy1kcy9zcmMvbGliL2NvbXBvbmVudHMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZmMtZHMvc3JjL2xpYi9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDL0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDbEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBRTVELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sK0JBQStCLENBQUM7Ozs7Ozs7Ozs7O0FBTzNELE1BQU0sT0FBTyxlQUFlO0lBa0ROO0lBaERYLFFBQVEsR0FBbUIsY0FBYyxDQUFDLE9BQU8sQ0FBQztJQUNsRCxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ3hCLE9BQU87SUFDRSxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQ2Ys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Q0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLO2dCQUVJLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csU0FBUztzQkFBbEIsTUFBTTtnQkFDRyxxQkFBcUI7c0JBQTlCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTG9nb1ZpZXdNb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvbG9nby12aWV3LW1vZGUuZW51bSc7XHJcbmltcG9ydCB7IEhlYWRlclZpZXdNb2RlIH0gZnJvbSAnLi4vLi4vZW51bXMvaGVhZGVyLXZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IHsgU2lnbkluVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL3NpZ24taW4tdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgQnV0dG9uVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2J1dHRvbi10eXBlLmVudW0nO1xyXG5pbXBvcnQgeyBEaXZpZGVyTW9kZSB9IGZyb20gJy4uLy4uL2VudW1zL2RpdmlkZXItbW9kZS5lbnVtJztcclxuaW1wb3J0IHsgRGl2aWRlckF4aXMgfSBmcm9tICcuLi8uLi9lbnVtcy9kaXZpZGVyLWF4aXMuZW51bSc7XHJcbmltcG9ydCB7IERpdmlkZXJEZW5zaXR5IH0gZnJvbSAnLi4vLi4vZW51bXMvZGl2aWRlci1kZW5zaXR5LmVudW0nO1xyXG5pbXBvcnQgeyBEaXZpZGVyVHlwZSB9IGZyb20gJy4uLy4uL2VudW1zL2RpdmlkZXItdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgVGltZXJUeXBlIH0gZnJvbSAnLi4vLi4vZW51bXMvdGltZXItdHlwZS5lbnVtJztcclxuaW1wb3J0IHsgU2lnbkluTW9kZSB9IGZyb20gJy4uLy4uL2VudW1zL3NpZ24taW4tbW9kZS5lbnVtJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnY2ZjLWhlYWRlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2hlYWRlci5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmw6ICcuL2hlYWRlci5jb21wb25lbnQuc2NzcydcclxufSlcclxuZXhwb3J0IGNsYXNzIEhlYWRlckNvbXBvbmVudCB7XHJcblxyXG4gIEBJbnB1dCgpIHZpZXdNb2RlOiBIZWFkZXJWaWV3TW9kZSA9IEhlYWRlclZpZXdNb2RlLmRlZmF1bHQ7XHJcbiAgQElucHV0KCkgaGFzTWVudSA9IHRydWU7XHJcbiAgLy8gbG9nb1xyXG4gIEBJbnB1dCgpIGhhc0xvZ28gPSB0cnVlO1xyXG4gIEBJbnB1dCgpIGxvZ29WaWV3TW9kZTogTG9nb1ZpZXdNb2RlID0gTG9nb1ZpZXdNb2RlLmRlZmF1bHQ7XHJcbiAgQElucHV0KCkgbG9nb1VybDogc3RyaW5nID0gJyc7XHJcbiAgLy8gdGl0bGUgYW5kIGRlc2NyaXB0aW9uXHJcbiAgQElucHV0KCkgdGl0bGUhOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XHJcbiAgLy8gdGltZXJcclxuICBASW5wdXQoKSBoYXNUaW1lciA9IGZhbHNlO1xyXG4gIEBJbnB1dCgpIHRpbWVMb2dvdXQgPSAxODAwO1xyXG4gIEBJbnB1dCgpIHRpbWVDcml0aWNhbCA9IDMwMDtcclxuICAvLyBhY3Rpb24gYmFyXHJcbiAgQElucHV0KCkgaGFzTm90aWZpY2F0aW9uSWNvbiA9IHRydWU7XHJcbiAgQElucHV0KCkgdXNlck5hbWUgPSAnRW50cmFyJztcclxuICBASW5wdXQoKSBzaWduaW5Nb2RlOiBTaWduSW5Nb2RlID0gU2lnbkluTW9kZS5sb2dvdXQ7XHJcblxyXG4gIEBPdXRwdXQoKSBtZW51RXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD47XHJcbiAgQE91dHB1dCgpIGNyaXRpY2FsVGltZUV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+O1xyXG4gIEBPdXRwdXQoKSB0aW1lT3V0RXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD47XHJcbiAgQE91dHB1dCgpIHRpbWVFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPjtcclxuICBAT3V0cHV0KCkgbm90aWZpY2F0aW9uSWNvbkV2ZW50OiBFdmVudEVtaXR0ZXI8dm9pZD4gPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+O1xyXG4gIEBPdXRwdXQoKSBzaWduaW5FdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPjtcclxuICBAT3V0cHV0KCkgbG9nb3V0RXZlbnQ6IEV2ZW50RW1pdHRlcjx2b2lkPiA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD47XHJcblxyXG4gIHJlYWRvbmx5IGhlYWRlclZpZXdNb2RlcyA9IEhlYWRlclZpZXdNb2RlO1xyXG4gIHJlYWRvbmx5IGxvZ29WaWV3TW9kZXMgPSBMb2dvVmlld01vZGU7XHJcbiAgcmVhZG9ubHkgZGl2aWRlck1vZGVzID0gRGl2aWRlck1vZGU7XHJcbiAgcmVhZG9ubHkgZGl2aWRlclR5cGVzID0gRGl2aWRlclR5cGU7XHJcbiAgcmVhZG9ubHkgZGl2aWRlckRlbnNpdGllcyA9IERpdmlkZXJEZW5zaXR5O1xyXG4gIHJlYWRvbmx5IGRpdmlkZXJBeGlzID0gRGl2aWRlckF4aXM7XHJcbiAgcmVhZG9ubHkgc2lnbmluVHlwZXMgPSBTaWduSW5UeXBlO1xyXG4gIHJlYWRvbmx5IHNpZ25pbk1vZGVzID0gU2lnbkluTW9kZTtcclxuICByZWFkb25seSBidXR0b25UeXBlcyA9IEJ1dHRvblR5cGU7XHJcbiAgcmVhZG9ubHkgdGltZXJUeXBlcyA9IFRpbWVyVHlwZTtcclxuXHJcbiAgbG9nb0lzQ2xpY2thYmxlID0gZmFsc2U7XHJcblxyXG4gIGdldCBmaXJzdEFuZExhc3ROYW1lKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzcGxpdGVkTmFtZSA9IHRoaXMudXNlck5hbWUudHJpbSgpLnNwbGl0KCcgJyk7XHJcbiAgICBpZiAoc3BsaXRlZE5hbWUubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgIHJldHVybiBzcGxpdGVkTmFtZVswXTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHtzcGxpdGVkTmFtZVswXX0gJHtzcGxpdGVkTmFtZVtzcGxpdGVkTmFtZS5sZW5ndGggLSAxXX1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByb3V0ZXI6IFJvdXRlcikgeyB9XHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sb2dvSXNDbGlja2FibGUgPSB0aGlzLnJvdXRlci51cmwgPT09ICcvJztcclxuICB9XHJcblxyXG4gIHRvZ2dsZU1lbnUoKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lbnVFdmVudC5lbWl0KCk7XHJcbiAgfVxyXG5cclxuICBnb1RvSG9tZSgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnJvdXRlci51cmwgIT09ICcvJykge1xyXG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbJy8nXSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8aGVhZGVyXHJcbiAgY2xhc3M9XCJjZmMtaGVhZGVyXCJcclxuICBbbmdTdHlsZV09XCJ7ICdiYWNrZ3JvdW5kLWNvbG9yJzogdmlld01vZGUgPT09IGhlYWRlclZpZXdNb2Rlcy5kZWZhdWx0XHJcbiAgICA/ICd3aGl0ZSdcclxuICAgIDogJyMwQzMyNkYnXHJcbiAgfVwiXHJcbiAgZnhMYXlvdXQ9XCJyb3dcIlxyXG4gIGZ4TGF5b3V0QWxpZ249XCJzcGFjZS1iZXR3ZWVuIGNlbnRlclwiPlxyXG4gIDxkaXZcclxuICAgIGZ4TGF5b3V0PVwicm93XCJcclxuICAgIGZ4TGF5b3V0QWxpZ249XCJjZW50ZXIgY2VudGVyXCJcclxuICAgIGZ4TGF5b3V0R2FwPVwiMXJlbVwiPlxyXG5cclxuICAgIDwhLS0gTUVOVSAtLT5cclxuICAgIDxjZmMtYnV0dG9uXHJcbiAgICAgICpuZ0lmPVwiaGFzTWVudVwiXHJcbiAgICAgIFtpY29uXT1cIidiYXJzJ1wiXHJcbiAgICAgIFt0eXBlXT1cImJ1dHRvblR5cGVzLnRlcnRpYXJ5XCJcclxuICAgICAgW2NpcmNsZV09XCJ0cnVlXCJcclxuICAgICAgW2ludmVydGVkXT1cInZpZXdNb2RlID09PSBoZWFkZXJWaWV3TW9kZXMuY29udHJhc3RcIlxyXG4gICAgICBhcmlhLWxhYmVsPVwibWVudVwiXHJcbiAgICAgIGRhdGEtdG9nZ2xlPVwibWVudVwiXHJcbiAgICAgIGRhdGEtdGFyZ2V0PVwiI21lbnUtYXNpZGVcIlxyXG4gICAgICBpcy1wdXNoPVwidHJ1ZVwiXHJcbiAgICAgIGlkPVwicHVzaFwiXHJcbiAgICAgIFthdHRyLnNob3ctbWVudV09XCIndHJ1ZSdcIlxyXG4gICAgICAoY2xpY2spPVwidG9nZ2xlTWVudSgpXCI+XHJcbiAgICA8L2NmYy1idXR0b24+XHJcblxyXG4gICAgPCEtLSBMT0dPIC0tPlxyXG4gICAgPGNmYy1sb2dvXHJcbiAgICAgICpuZ0lmPVwiaGFzTG9nb1wiXHJcbiAgICAgIFt2aWV3TW9kZV09XCJsb2dvVmlld01vZGVcIlxyXG4gICAgICBbaW1hZ2VVcmxdPVwibG9nb1ZpZXdNb2RlID09PSBsb2dvVmlld01vZGVzLmV4dGVybmFsID8gbG9nb1VybCA6IHVuZGVmaW5lZFwiXHJcbiAgICAgIChjbGlja0V2ZW50KT1cImdvVG9Ib21lKClcIlxyXG4gICAgPjwvY2ZjLWxvZ28+XHJcblxyXG4gICAgPCEtLSBUSVRMRSBBTkQgREVTQ1JJUFRJT04gLS0+XHJcbiAgICA8ZGl2XHJcbiAgICAgIGZ4TGF5b3V0PVwiY29sdW1uXCJcclxuICAgICAgZnhMYXlvdXRBbGlnbj1cImNlbnRlciBzdGFydFwiPlxyXG4gICAgICA8aDRcclxuICAgICAgICBjbGFzcz1cImNmYy1oZWFkZXJfX3RpdGxlXCJcclxuICAgICAgICBbbmdTdHlsZV09XCJ7ICdjb2xvcic6IHZpZXdNb2RlID09PSBoZWFkZXJWaWV3TW9kZXMuZGVmYXVsdCA/ICdibGFjaycgOiAnd2hpdGUnIH1cIj5cclxuICAgICAgICB7eyB0aXRsZSB9fVxyXG4gICAgICA8L2g0PlxyXG4gICAgICA8cFxyXG4gICAgICAgICpuZ0lmPVwiZGVzY3JpcHRpb25cIlxyXG4gICAgICAgIGNsYXNzPVwiY2ZjLWhlYWRlcl9fZGVzY3JpcHRpb25cIlxyXG4gICAgICAgIFtuZ1N0eWxlXT1cInsgJ2NvbG9yJzogdmlld01vZGUgPT09IGhlYWRlclZpZXdNb2Rlcy5kZWZhdWx0ID8gJyM1NTU1NTUnIDogJ3doaXRlJyB9XCI+XHJcbiAgICAgICAge3sgZGVzY3JpcHRpb24gfX1cclxuICAgICAgPC9wPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDwhLS0gQUNUSU9OIEJBUiAtLT5cclxuICA8ZGl2XHJcbiAgICBmeExheW91dD1cInJvd1wiXHJcbiAgICBmeExheW91dEFsaWduPVwiY2VudGVyIGNlbnRlclwiXHJcbiAgICBmeExheW91dEdhcD1cIjAuNXJlbVwiPlxyXG5cclxuICAgIDxjZmMtdGltZXJcclxuICAgICAgKm5nSWY9XCJoYXNUaW1lclwiXHJcbiAgICAgIFt0eXBlXT1cInZpZXdNb2RlID09PSBoZWFkZXJWaWV3TW9kZXMuZGVmYXVsdFxyXG4gICAgICAgID8gdGltZXJUeXBlcy5wcmltYXJ5XHJcbiAgICAgICAgOiB0aW1lclR5cGVzLnNlY29uZGFyeVxyXG4gICAgICBcIlxyXG4gICAgICBbaW5pdGlhbFRpbWVdPVwidGltZUxvZ291dFwiXHJcbiAgICAgIFtjcml0aWNhbFRpbWVdPVwidGltZUNyaXRpY2FsXCJcclxuICAgICAgW2lzR2xvYmFsXT1cInRydWVcIlxyXG4gICAgICAodGltZUNyaXRpY2FsRXZlbnQpPVwiY3JpdGljYWxUaW1lRXZlbnQuZW1pdCgpXCJcclxuICAgICAgKHRpbWVPdXRFdmVudCk9XCJ0aW1lT3V0RXZlbnQuZW1pdCgpXCJcclxuICAgICAgKHRpbWVFdmVudCk9XCJ0aW1lRXZlbnQuZW1pdCgpXCJcclxuICAgID48L2NmYy10aW1lcj5cclxuXHJcbiAgICA8Y2ZjLWJ1dHRvblxyXG4gICAgICAqbmdJZj1cImhhc05vdGlmaWNhdGlvbkljb25cIlxyXG4gICAgICBzeXRsZT1cIm1pbi13aWR0aDogMjJyZW07XCJcclxuICAgICAgaWNvbj1cImJlbGxcIlxyXG4gICAgICBbdHlwZV09XCJidXR0b25UeXBlcy50ZXJ0aWFyeVwiXHJcbiAgICAgIFtpbnZlcnRlZF09XCJ2aWV3TW9kZSA9PT0gaGVhZGVyVmlld01vZGVzLmNvbnRyYXN0XCJcclxuICAgICAgW2NpcmNsZV09XCJ0cnVlXCJcclxuICAgICAgKGNsaWNrKT1cIm5vdGlmaWNhdGlvbkljb25FdmVudC5lbWl0KClcIlxyXG4gICAgICBkYXRhLXRvZ2dsZT1cIm1lbnVcIlxyXG4gICAgICBkYXRhLXRhcmdldD1cIiNwdXNoXCJcclxuICAgID48L2NmYy1idXR0b24+XHJcblxyXG4gICAgPGNmYy1kaXZpZGVyXHJcbiAgICAgICpuZ0lmPVwiIWhhc05vdGlmaWNhdGlvbkljb25cIlxyXG4gICAgICBbbW9kZV09XCJkaXZpZGVyTW9kZXMubGluZVwiXHJcbiAgICAgIFt0eXBlXT1cInZpZXdNb2RlID09PSBoZWFkZXJWaWV3TW9kZXMuZGVmYXVsdFxyXG4gICAgICAgID8gZGl2aWRlclR5cGVzLnByaW1hcnlcclxuICAgICAgICA6IGRpdmlkZXJUeXBlcy5zZWNvbmRhcnlcclxuICAgICAgXCJcclxuICAgICAgW2RlbnNpdHldPVwiZGl2aWRlckRlbnNpdGllcy5sYXJnZVwiXHJcbiAgICAgIFtheGlzXT1cImRpdmlkZXJBeGlzLnZlcnRpY2FsXCJcclxuICAgID48L2NmYy1kaXZpZGVyPlxyXG5cclxuICAgIDxjZmMtc2lnbi1pblxyXG4gICAgICBjbGFzcz1cImNmYy1oZWFkZXJfX3NpZ25pblwiXHJcbiAgICAgIFtsYWJlbF09XCJmaXJzdEFuZExhc3ROYW1lXCJcclxuICAgICAgW3R5cGVdPVwic2lnbmluVHlwZXMuc2Vjb25kYXJ5XCJcclxuICAgICAgW21vZGVdPVwic2lnbmluTW9kZVwiXHJcbiAgICAgIChvbkNsaWNrKT1cInNpZ25pbkV2ZW50LmVtaXQoKVwiXHJcbiAgICAgIChvbkxvZ291dCk9XCJsb2dvdXRFdmVudC5lbWl0KClcIlxyXG4gICAgPjwvY2ZjLXNpZ24taW4+XHJcbiAgPC9kaXY+XHJcbjwvaGVhZGVyPlxyXG5cclxuPGRpdiBjbGFzcz1cImNmYy1oZWFkZXJfX3NwYWNlclwiPjwvZGl2PlxyXG4iXX0=