UNPKG

@fivethree/core

Version:
276 lines 27.5 kB
/** * @fileoverview added by tsickle * Generated from: lib/feature-discovery/feature-discovery.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ import { Platform } from '@ionic/angular'; import { Component, ViewChild, ElementRef, Renderer2, Output, EventEmitter, HostBinding } from '@angular/core'; import { trigger, transition, animate, style } from '@angular/animations'; export class FivFeatureDiscovery { /** * @param {?} renderer * @param {?} platform */ constructor(renderer, platform) { this.renderer = renderer; this.platform = platform; this.top = 0; this.left = 0; this.width = 420; this.height = 420; this.innerDiameter = 0; this.featurePadding = 0; this.contentTop = 0; this.contentLeft = 0; this.contentWidth = 0; this.contentHeight = 0; this.contentOffset = 0; this.animationState = 'hidden'; this.pulse = 'small'; this.fivClick = new EventEmitter(); this.fivBackdropClick = new EventEmitter(); this.fivClose = new EventEmitter(); this.fivOpen = new EventEmitter(); this.fivAnimation = new EventEmitter(); } /** * @return {?} */ get _classes() { return this.classes.join(' '); } /** * @return {?} */ ngOnInit() { } /** * @return {?} */ ngAfterContentInit() { } /** * @param {?} bounds * @return {?} */ setBounds(bounds) { this.bounds = bounds; this.innerDiameter = bounds.height > bounds.width ? bounds.height : bounds.width; this.top = bounds.top + bounds.height / 2 - this.height / 2; this.left = bounds.left + bounds.width / 2 - this.width / 2; this.calculateContentBounds(); if (!this.icon) { /** @type {?} */ const gradient = `-webkit-radial-gradient(transparent ${this .innerDiameter / 2 + 5}px, var(--fiv-color-feature) ${this.innerDiameter / 2 + 5}px)`; /** @type {?} */ const pulseGradient = `-webkit-radial-gradient(transparent ${this .innerDiameter / 2 + 5}px, var(--fiv-color-pulse) ${this.innerDiameter / 2 + 5}px)`; this.renderer.setStyle(this.circle.nativeElement, 'background', gradient); this.renderer.setStyle(this.innerPulse.nativeElement, 'background', pulseGradient); this.renderer.setStyle(this.outerPulse.nativeElement, 'background', pulseGradient); } } /** * @return {?} */ calculateContentBounds() { /** @type {?} */ const absoluteCenter = { x: this.platform.width() / 2, y: this.platform.height() / 2 }; /** @type {?} */ const center = { x: this.left + this.width / 2, y: this.top + this.width / 2 }; /** @type {?} */ const rectWidth = Math.sqrt(Math.pow(this.width, 2) / 2); /** @type {?} */ const isTop = center.y < absoluteCenter.y; /** @type {?} */ const isLeft = center.x < absoluteCenter.x; /** @type {?} */ const innerRadius = this.innerDiameter / 2; /** @type {?} */ const padding = this.featurePadding / 2; /** @type {?} */ let contentRight = 0; /** @type {?} */ let contentBottom = 0; if (isLeft) { this.contentLeft = center.x - innerRadius; contentRight = Math.min(center.x + rectWidth / 2 + this.contentOffset, this.platform.width()); } else { this.contentLeft = Math.max(center.x - rectWidth / 2 - this.contentOffset, 0); contentRight = center.x + innerRadius; } if (isTop) { this.contentTop = center.y + innerRadius + padding; contentBottom = center.y + rectWidth / 2 + -1 * this.contentOffset; } else { this.contentTop = center.y - rectWidth / 2 + this.contentOffset; contentBottom = center.y - innerRadius - padding; } this.contentWidth = Math.abs(this.contentLeft - contentRight); this.contentHeight = Math.abs(this.contentTop - contentBottom); } /** * @param {?} event * @return {?} */ handleCircleAnimation(event) { this.fivAnimation.emit(event); if (event.toState === 'visible') { this.fivOpen.emit(); } if (event.fromState === 'visible' && event.toState === 'hidden') { this.fivClose.emit(); } if (event.fromState === 'visible' && event.toState === 'execute') { this.fivClose.emit(); } } /** * @return {?} */ show() { this.animationState = 'visible'; } /** * @return {?} */ hide() { this.animationState = 'hidden'; } /** * @return {?} */ featureClick() { this.animationState = 'execute'; } /** * @param {?} icon * @return {?} */ setIcon(icon) { if (icon) { this.icon = icon.name; } } } FivFeatureDiscovery.decorators = [ { type: Component, args: [{ selector: 'fiv-feature-discovery', template: "<div class=\"backdrop\" (click)=\"fivBackdropClick.emit()\"></div>\n<div [@scale]=\"animationState\" (@scale.done)=\"handleCircleAnimation($event)\" #circle class=\"circle\"\n [style.height]=\"height + 'px'\" [style.width]=\"width + 'px'\" [style.top]=\"top + 'px'\" [style.left]=\"left + 'px'\">\n <div #pOuter class=\"feature center pulse\" [style.height]=\"(innerDiameter + featurePadding) + 'px'\"\n [style.width]=\"(innerDiameter + featurePadding) + 'px'\">\n </div>\n <div #pInner class=\"feature center inner ion-activatable\" (click)=\"fivClick.emit($event)\"\n [style.height]=\"(innerDiameter + (icon ? featurePadding : 0)) + 'px'\"\n [style.width]=\"(innerDiameter + (icon ? featurePadding : 0)) + 'px'\">\n <fiv-icon class=\"center\" *ngIf=\"icon\" [name]=\"icon\"></fiv-icon>\n <ion-ripple-effect type=\"unbounded\"></ion-ripple-effect>\n </div>\n</div>\n<div class=\"content\" *ngIf=\"animationState === 'visible'\" [@contentAnim] [style.width]=\"contentWidth + 'px'\"\n [style.height]=\"contentHeight + 'px'\" [style.top]=\"contentTop + 'px'\" [style.left]=\"contentLeft + 'px'\">\n <ng-content></ng-content>\n</div>", animations: [ trigger('scale', [ transition('* => visible', [ style({ transform: 'scale(0)', opacity: '0' }), animate('240ms ease-out', style({ transform: 'scale(1)', opacity: '1' })) ]), transition('visible => hidden', [ style({ transform: 'scale(1)', opacity: '1' }), animate('215ms ease-in', style({ transform: 'scale(0)', opacity: '0' })) ]), transition('visible => execute', [ style({ transform: 'scale(1)', opacity: '1' }), animate('215ms 0.15s ease-in', style({ transform: 'scale(1.4)', opacity: '0' })) ]) ]), trigger('contentAnim', [ transition('void => *', [ style({ opacity: '0' }), animate('100ms 240ms ease-out', style({ opacity: '1' })) ]) ]) ], styles: [":host{display:block;height:100vh;width:100vw;position:absolute;--fiv-color-feature:rgba(56, 128, 255, 0.97);--fiv-color-pulse:var(--ion-color-light);--fiv-icon-color:var(--fiv-color-feature, var(--ion-color-primary))}.backdrop{display:block;height:100vh;width:100vw;position:absolute}.circle{position:absolute;border-radius:100%;background:var(--fiv-color-feature);box-shadow:0 3px 1px -2px rgba(0,0,0,.2),0 2px 2px 0 rgba(0,0,0,.14),0 1px 5px 0 rgba(0,0,0,.12)}.feature{border-radius:100%;background:var(--fiv-color-pulse)}.feature.center.pulse{-webkit-animation:1.4s infinite feature-pulse;animation:1.4s infinite feature-pulse}@-webkit-keyframes feature-pulse{0%{transform:scale(1) translate(-50%,-50%);border-radius:100%;box-shadow:0 0 0 0 rgba(0,0,0,.24)}50%{transform:scale(1.1) translate(-45%,-45%)}100%{transform:scale(1) translate(-50%,-50%);border-radius:100%;box-shadow:0 0 0 28px transparent}}@keyframes feature-pulse{0%{transform:scale(1) translate(-50%,-50%);border-radius:100%;box-shadow:0 0 0 0 rgba(0,0,0,.24)}50%{transform:scale(1.1) translate(-45%,-45%)}100%{transform:scale(1) translate(-50%,-50%);border-radius:100%;box-shadow:0 0 0 28px transparent}}.content{position:absolute}.center{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%)}"] }] } ]; /** @nocollapse */ FivFeatureDiscovery.ctorParameters = () => [ { type: Renderer2 }, { type: Platform } ]; FivFeatureDiscovery.propDecorators = { circle: [{ type: ViewChild, args: ['circle', { static: true },] }], rect: [{ type: ViewChild, args: ['rect', { static: true },] }], innerPulse: [{ type: ViewChild, args: ['pInner', { static: true, read: ElementRef },] }], outerPulse: [{ type: ViewChild, args: ['pOuter', { static: true },] }], fivClick: [{ type: Output }], fivBackdropClick: [{ type: Output }], fivClose: [{ type: Output }], fivOpen: [{ type: Output }], fivAnimation: [{ type: Output }], _classes: [{ type: HostBinding, args: ['class',] }] }; if (false) { /** @type {?} */ FivFeatureDiscovery.prototype.top; /** @type {?} */ FivFeatureDiscovery.prototype.left; /** @type {?} */ FivFeatureDiscovery.prototype.width; /** @type {?} */ FivFeatureDiscovery.prototype.height; /** @type {?} */ FivFeatureDiscovery.prototype.innerDiameter; /** @type {?} */ FivFeatureDiscovery.prototype.featurePadding; /** @type {?} */ FivFeatureDiscovery.prototype.contentTop; /** @type {?} */ FivFeatureDiscovery.prototype.contentLeft; /** @type {?} */ FivFeatureDiscovery.prototype.contentWidth; /** @type {?} */ FivFeatureDiscovery.prototype.contentHeight; /** @type {?} */ FivFeatureDiscovery.prototype.contentOffset; /** @type {?} */ FivFeatureDiscovery.prototype.bounds; /** @type {?} */ FivFeatureDiscovery.prototype.icon; /** @type {?} */ FivFeatureDiscovery.prototype.classes; /** @type {?} */ FivFeatureDiscovery.prototype.circle; /** @type {?} */ FivFeatureDiscovery.prototype.rect; /** @type {?} */ FivFeatureDiscovery.prototype.innerPulse; /** @type {?} */ FivFeatureDiscovery.prototype.outerPulse; /** @type {?} */ FivFeatureDiscovery.prototype.animationState; /** @type {?} */ FivFeatureDiscovery.prototype.pulse; /** @type {?} */ FivFeatureDiscovery.prototype.fivClick; /** @type {?} */ FivFeatureDiscovery.prototype.fivBackdropClick; /** @type {?} */ FivFeatureDiscovery.prototype.fivClose; /** @type {?} */ FivFeatureDiscovery.prototype.fivOpen; /** @type {?} */ FivFeatureDiscovery.prototype.fivAnimation; /** * @type {?} * @private */ FivFeatureDiscovery.prototype.renderer; /** * @type {?} * @private */ FivFeatureDiscovery.prototype.platform; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1kaXNjb3ZlcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpdmV0aHJlZS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2ZlYXR1cmUtZGlzY292ZXJ5L2ZlYXR1cmUtZGlzY292ZXJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxPQUFPLEVBQ1AsVUFBVSxFQUNWLE9BQU8sRUFDUCxLQUFLLEVBQ04sTUFBTSxxQkFBcUIsQ0FBQztBQXFDN0IsTUFBTSxPQUFPLG1CQUFtQjs7Ozs7SUFrQzlCLFlBQW9CLFFBQW1CLEVBQVUsUUFBa0I7UUFBL0MsYUFBUSxHQUFSLFFBQVEsQ0FBVztRQUFVLGFBQVEsR0FBUixRQUFRLENBQVU7UUFqQ25FLFFBQUcsR0FBRyxDQUFDLENBQUM7UUFDUixTQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ1QsVUFBSyxHQUFHLEdBQUcsQ0FBQztRQUNaLFdBQU0sR0FBRyxHQUFHLENBQUM7UUFDYixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixlQUFVLEdBQUcsQ0FBQyxDQUFDO1FBQ2YsZ0JBQVcsR0FBRyxDQUFDLENBQUM7UUFDaEIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFDakIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFDbEIsa0JBQWEsR0FBRyxDQUFDLENBQUM7UUFVbEIsbUJBQWMsR0FBRyxRQUFRLENBQUM7UUFDMUIsVUFBSyxHQUFHLE9BQU8sQ0FBQztRQUVOLGFBQVEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ25DLHFCQUFnQixH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QyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3lCQUNsQyxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO3lCQUV0RCxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt1QkFLcEMsTUFBTTsrQkFDTixNQUFNO3VCQUNOLE1BQU07c0JBQ04sTUFBTTsyQkFDTixNQUFNO3VCQUVOLFdBQVcsU0FBQyxPQUFPOzs7O0lBN0JwQixrQ0FBUTs7SUFDUixtQ0FBUzs7SUFDVCxvQ0FBWTs7SUFDWixxQ0FBYTs7SUFDYiw0Q0FBa0I7O0lBQ2xCLDZDQUFtQjs7SUFDbkIseUNBQWU7O0lBQ2YsMENBQWdCOztJQUNoQiwyQ0FBaUI7O0lBQ2pCLDRDQUFrQjs7SUFDbEIsNENBQWtCOztJQUNsQixxQ0FBd0I7O0lBQ3hCLG1DQUFhOztJQUNiLHNDQUFrQjs7SUFDbEIscUNBQTBEOztJQUMxRCxtQ0FBc0Q7O0lBQ3RELHlDQUN1Qjs7SUFDdkIseUNBQThEOztJQUU5RCw2Q0FBMEI7O0lBQzFCLG9DQUFnQjs7SUFFaEIsdUNBQTZDOztJQUM3QywrQ0FBcUQ7O0lBQ3JELHVDQUE2Qzs7SUFDN0Msc0NBQTRDOztJQUM1QywyQ0FBNEQ7Ozs7O0lBTWhELHVDQUEyQjs7Ozs7SUFBRSx1Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGF0Zm9ybSwgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEVsZW1lbnRSZWYsXG4gIFJlbmRlcmVyMixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5pbWF0aW9uRXZlbnQsXG4gIHRyaWdnZXIsXG4gIHRyYW5zaXRpb24sXG4gIGFuaW1hdGUsXG4gIHN0eWxlXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRmVhdHVyZVBvc2l0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGaXZJY29uIH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zpdi1mZWF0dXJlLWRpc2NvdmVyeScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLWRpc2NvdmVyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZlYXR1cmUtZGlzY292ZXJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzY2FsZScsIFtcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gdmlzaWJsZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgwKScsIG9wYWNpdHk6ICcwJyB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMjQwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGUoMSknLCBvcGFjaXR5OiAnMScgfSlcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlID0+IGhpZGRlbicsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjE1bXMgZWFzZS1pbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGUoMCknLCBvcGFjaXR5OiAnMCcgfSkpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gZXhlY3V0ZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMjE1bXMgMC4xNXMgZWFzZS1pbicsXG4gICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxLjQpJywgb3BhY2l0eTogJzAnIH0pXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSksXG4gICAgdHJpZ2dlcignY29udGVudEFuaW0nLCBbXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogJzAnIH0pLFxuICAgICAgICBhbmltYXRlKCcxMDBtcyAyNDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogJzEnIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZpdkZlYXR1cmVEaXNjb3ZlcnkgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xuICB0b3AgPSAwO1xuICBsZWZ0ID0gMDtcbiAgd2lkdGggPSA0MjA7XG4gIGhlaWdodCA9IDQyMDtcbiAgaW5uZXJEaWFtZXRlciA9IDA7XG4gIGZlYXR1cmVQYWRkaW5nID0gMDtcbiAgY29udGVudFRvcCA9IDA7XG4gIGNvbnRlbnRMZWZ0ID0gMDtcbiAgY29udGVudFdpZHRoID0gMDtcbiAgY29udGVudEhlaWdodCA9IDA7XG4gIGNvbnRlbnRPZmZzZXQgPSAwO1xuICBib3VuZHM6IEZlYXR1cmVQb3NpdGlvbjtcbiAgaWNvbjogc3RyaW5nO1xuICBjbGFzc2VzOiBzdHJpbmdbXTtcbiAgQFZpZXdDaGlsZCgnY2lyY2xlJywgeyBzdGF0aWM6IHRydWUgfSkgY2lyY2xlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyZWN0JywgeyBzdGF0aWM6IHRydWUgfSkgcmVjdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncElubmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgaW5uZXJQdWxzZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncE91dGVyJywgeyBzdGF0aWM6IHRydWUgfSkgb3V0ZXJQdWxzZTogRWxlbWVudFJlZjtcblxuICBhbmltYXRpb25TdGF0ZSA9ICdoaWRkZW4nO1xuICBwdWxzZSA9ICdzbWFsbCc7XG5cbiAgQE91dHB1dCgpIGZpdkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmaXZCYWNrZHJvcENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmaXZDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZml2T3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZml2QW5pbWF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxBbmltYXRpb25FdmVudD4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IF9jbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSkge31cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge31cblxuICBzZXRCb3VuZHMoYm91bmRzOiBGZWF0dXJlUG9zaXRpb24pIHtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgICB0aGlzLmlubmVyRGlhbWV0ZXIgPVxuICAgICAgYm91bmRzLmhlaWdodCA+IGJvdW5kcy53aWR0aCA/IGJvdW5kcy5oZWlnaHQgOiBib3VuZHMud2lkdGg7XG4gICAgdGhpcy50b3AgPSBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgdGhpcy5sZWZ0ID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyIC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy5jYWxjdWxhdGVDb250ZW50Qm91bmRzKCk7XG4gICAgaWYgKCF0aGlzLmljb24pIHtcbiAgICAgIGNvbnN0IGdyYWRpZW50ID0gYC13ZWJraXQtcmFkaWFsLWdyYWRpZW50KHRyYW5zcGFyZW50ICR7dGhpc1xuICAgICAgICAuaW5uZXJEaWFtZXRlciAvXG4gICAgICAgIDIgK1xuICAgICAgICA1fXB4LCB2YXIoLS1maXYtY29sb3ItZmVhdHVyZSkgJHt0aGlzLmlubmVyRGlhbWV0ZXIgLyAyICsgNX1weClgO1xuICAgICAgY29uc3QgcHVsc2VHcmFkaWVudCA9IGAtd2Via2l0LXJhZGlhbC1ncmFkaWVudCh0cmFuc3BhcmVudCAke3RoaXNcbiAgICAgICAgLmlubmVyRGlhbWV0ZXIgL1xuICAgICAgICAyICtcbiAgICAgICAgNX1weCwgdmFyKC0tZml2LWNvbG9yLXB1bHNlKSAke3RoaXMuaW5uZXJEaWFtZXRlciAvIDIgKyA1fXB4KWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY2lyY2xlLm5hdGl2ZUVsZW1lbnQsICdiYWNrZ3JvdW5kJywgZ3JhZGllbnQpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5pbm5lclB1bHNlLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdiYWNrZ3JvdW5kJyxcbiAgICAgICAgcHVsc2VHcmFkaWVudFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMub3V0ZXJQdWxzZS5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYmFja2dyb3VuZCcsXG4gICAgICAgIHB1bHNlR3JhZGllbnRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNhbGN1bGF0ZUNvbnRlbnRCb3VuZHMoKSB7XG4gICAgY29uc3QgYWJzb2x1dGVDZW50ZXI6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9IHtcbiAgICAgIHg6IHRoaXMucGxhdGZvcm0ud2lkdGgoKSAvIDIsXG4gICAgICB5OiB0aGlzLnBsYXRmb3JtLmhlaWdodCgpIC8gMlxuICAgIH07XG4gICAgY29uc3QgY2VudGVyOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gPSB7XG4gICAgICB4OiB0aGlzLmxlZnQgKyB0aGlzLndpZHRoIC8gMixcbiAgICAgIHk6IHRoaXMudG9wICsgdGhpcy53aWR0aCAvIDJcbiAgICB9O1xuICAgIGNvbnN0IHJlY3RXaWR0aCA9IE1hdGguc3FydChNYXRoLnBvdyh0aGlzLndpZHRoLCAyKSAvIDIpO1xuICAgIGNvbnN0IGlzVG9wID0gY2VudGVyLnkgPCBhYnNvbHV0ZUNlbnRlci55O1xuICAgIGNvbnN0IGlzTGVmdCA9IGNlbnRlci54IDwgYWJzb2x1dGVDZW50ZXIueDtcbiAgICBjb25zdCBpbm5lclJhZGl1cyA9IHRoaXMuaW5uZXJEaWFtZXRlciAvIDI7XG4gICAgY29uc3QgcGFkZGluZyA9IHRoaXMuZmVhdHVyZVBhZGRpbmcgLyAyO1xuICAgIGxldCBjb250ZW50UmlnaHQgPSAwO1xuICAgIGxldCBjb250ZW50Qm90dG9tID0gMDtcbiAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICB0aGlzLmNvbnRlbnRMZWZ0ID0gY2VudGVyLnggLSBpbm5lclJhZGl1cztcbiAgICAgIGNvbnRlbnRSaWdodCA9IE1hdGgubWluKFxuICAgICAgICBjZW50ZXIueCArIHJlY3RXaWR0aCAvIDIgKyB0aGlzLmNvbnRlbnRPZmZzZXQsXG4gICAgICAgIHRoaXMucGxhdGZvcm0ud2lkdGgoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50TGVmdCA9IE1hdGgubWF4KFxuICAgICAgICBjZW50ZXIueCAtIHJlY3RXaWR0aCAvIDIgLSB0aGlzLmNvbnRlbnRPZmZzZXQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb250ZW50UmlnaHQgPSBjZW50ZXIueCArIGlubmVyUmFkaXVzO1xuICAgIH1cbiAgICBpZiAoaXNUb3ApIHtcbiAgICAgIHRoaXMuY29udGVudFRvcCA9IGNlbnRlci55ICsgaW5uZXJSYWRpdXMgKyBwYWRkaW5nO1xuICAgICAgY29udGVudEJvdHRvbSA9IGNlbnRlci55ICsgcmVjdFdpZHRoIC8gMiArIC0xICogdGhpcy5jb250ZW50T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRUb3AgPSBjZW50ZXIueSAtIHJlY3RXaWR0aCAvIDIgKyB0aGlzLmNvbnRlbnRPZmZzZXQ7XG4gICAgICBjb250ZW50Qm90dG9tID0gY2VudGVyLnkgLSBpbm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50V2lkdGggPSBNYXRoLmFicyh0aGlzLmNvbnRlbnRMZWZ0IC0gY29udGVudFJpZ2h0KTtcbiAgICB0aGlzLmNvbnRlbnRIZWlnaHQgPSBNYXRoLmFicyh0aGlzLmNvbnRlbnRUb3AgLSBjb250ZW50Qm90dG9tKTtcbiAgfVxuICBoYW5kbGVDaXJjbGVBbmltYXRpb24oZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgdGhpcy5maXZBbmltYXRpb24uZW1pdChldmVudCk7XG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgdGhpcy5maXZPcGVuLmVtaXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3Zpc2libGUnICYmIGV2ZW50LnRvU3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICB0aGlzLmZpdkNsb3NlLmVtaXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3Zpc2libGUnICYmIGV2ZW50LnRvU3RhdGUgPT09ICdleGVjdXRlJykge1xuICAgICAgdGhpcy5maXZDbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0gJ3Zpc2libGUnO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0gJ2hpZGRlbic7XG4gIH1cblxuICBmZWF0dXJlQ2xpY2soKSB7XG4gICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9ICdleGVjdXRlJztcbiAgfVxuXG4gIHNldEljb24oaWNvbjogRml2SWNvbiB8IElvbkljb24pIHtcbiAgICBpZiAoaWNvbikge1xuICAgICAgdGhpcy5pY29uID0gaWNvbi5uYW1lO1xuICAgIH1cbiAgfVxufVxuIl19