UNPKG

@fivethree/core

Version:
308 lines 28.9 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'; var FivFeatureDiscovery = /** @class */ (function () { function FivFeatureDiscovery(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(); } Object.defineProperty(FivFeatureDiscovery.prototype, "_classes", { get: /** * @return {?} */ function () { return this.classes.join(' '); }, enumerable: true, configurable: true }); /** * @return {?} */ FivFeatureDiscovery.prototype.ngOnInit = /** * @return {?} */ function () { }; /** * @return {?} */ FivFeatureDiscovery.prototype.ngAfterContentInit = /** * @return {?} */ function () { }; /** * @param {?} bounds * @return {?} */ FivFeatureDiscovery.prototype.setBounds = /** * @param {?} bounds * @return {?} */ function (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 {?} */ var gradient = "-webkit-radial-gradient(transparent " + (this .innerDiameter / 2 + 5) + "px, var(--fiv-color-feature) " + (this.innerDiameter / 2 + 5) + "px)"; /** @type {?} */ var 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 {?} */ FivFeatureDiscovery.prototype.calculateContentBounds = /** * @return {?} */ function () { /** @type {?} */ var absoluteCenter = { x: this.platform.width() / 2, y: this.platform.height() / 2 }; /** @type {?} */ var center = { x: this.left + this.width / 2, y: this.top + this.width / 2 }; /** @type {?} */ var rectWidth = Math.sqrt(Math.pow(this.width, 2) / 2); /** @type {?} */ var isTop = center.y < absoluteCenter.y; /** @type {?} */ var isLeft = center.x < absoluteCenter.x; /** @type {?} */ var innerRadius = this.innerDiameter / 2; /** @type {?} */ var padding = this.featurePadding / 2; /** @type {?} */ var contentRight = 0; /** @type {?} */ var 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 {?} */ FivFeatureDiscovery.prototype.handleCircleAnimation = /** * @param {?} event * @return {?} */ function (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 {?} */ FivFeatureDiscovery.prototype.show = /** * @return {?} */ function () { this.animationState = 'visible'; }; /** * @return {?} */ FivFeatureDiscovery.prototype.hide = /** * @return {?} */ function () { this.animationState = 'hidden'; }; /** * @return {?} */ FivFeatureDiscovery.prototype.featureClick = /** * @return {?} */ function () { this.animationState = 'execute'; }; /** * @param {?} icon * @return {?} */ FivFeatureDiscovery.prototype.setIcon = /** * @param {?} icon * @return {?} */ function (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 = function () { return [ { 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',] }] }; return FivFeatureDiscovery; }()); export { FivFeatureDiscovery }; 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1kaXNjb3ZlcnkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGZpdmV0aHJlZS9jb3JlLyIsInNvdXJjZXMiOlsibGliL2ZlYXR1cmUtZGlzY292ZXJ5L2ZlYXR1cmUtZGlzY292ZXJ5LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQVcsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQ0wsU0FBUyxFQUVULFNBQVMsRUFFVCxVQUFVLEVBQ1YsU0FBUyxFQUNULE1BQU0sRUFDTixZQUFZLEVBQ1osV0FBVyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFFTCxPQUFPLEVBQ1AsVUFBVSxFQUNWLE9BQU8sRUFDUCxLQUFLLEVBQ04sTUFBTSxxQkFBcUIsQ0FBQztBQUk3QjtJQW1FRSw2QkFBb0IsUUFBbUIsRUFBVSxRQUFrQjtRQUEvQyxhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQVUsYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQWpDbkUsUUFBRyxHQUFHLENBQUMsQ0FBQztRQUNSLFNBQUksR0FBRyxDQUFDLENBQUM7UUFDVCxVQUFLLEdBQUcsR0FBRyxDQUFDO1FBQ1osV0FBTSxHQUFHLEdBQUcsQ0FBQztRQUNiLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLG1CQUFjLEdBQUcsQ0FBQyxDQUFDO1FBQ25CLGVBQVUsR0FBRyxDQUFDLENBQUM7UUFDZixnQkFBVyxHQUFHLENBQUMsQ0FBQztRQUNoQixpQkFBWSxHQUFHLENBQUMsQ0FBQztRQUNqQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQUNsQixrQkFBYSxHQUFHLENBQUMsQ0FBQztRQVVsQixtQkFBYyxHQUFHLFFBQVEsQ0FBQztRQUMxQixVQUFLLEdBQUcsT0FBTyxDQUFDO1FBRU4sYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FB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QVE7Ozt5QkFzRWQsU0FBUyxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7dUJBQ3BDLFNBQVMsU0FBQyxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzZCQUNsQyxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFOzZCQUV0RCxTQUFTLFNBQUMsUUFBUSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTsyQkFLcEMsTUFBTTttQ0FDTixNQUFNOzJCQUNOLE1BQU07MEJBQ04sTUFBTTsrQkFDTixNQUFNOzJCQUVOLFdBQVcsU0FBQyxPQUFPOztJQTZHdEIsMEJBQUM7Q0FBQSxBQTVLRCxJQTRLQztTQTNJWSxtQkFBbUI7OztJQUM5QixrQ0FBUTs7SUFDUixtQ0FBUzs7SUFDVCxvQ0FBWTs7SUFDWixxQ0FBYTs7SUFDYiw0Q0FBa0I7O0lBQ2xCLDZDQUFtQjs7SUFDbkIseUNBQWU7O0lBQ2YsMENBQWdCOztJQUNoQiwyQ0FBaUI7O0lBQ2pCLDRDQUFrQjs7SUFDbEIsNENBQWtCOztJQUNsQixxQ0FBd0I7O0lBQ3hCLG1DQUFhOztJQUNiLHNDQUFrQjs7SUFDbEIscUNBQTBEOztJQUMxRCxtQ0FBc0Q7O0lBQ3RELHlDQUN1Qjs7SUFDdkIseUNBQThEOztJQUU5RCw2Q0FBMEI7O0lBQzFCLG9DQUFnQjs7SUFFaEIsdUNBQTZDOztJQUM3QywrQ0FBcUQ7O0lBQ3JELHVDQUE2Qzs7SUFDN0Msc0NBQTRDOztJQUM1QywyQ0FBNEQ7Ozs7O0lBTWhELHVDQUEyQjs7Ozs7SUFBRSx1Q0FBMEIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQbGF0Zm9ybSwgSW9uSWNvbiB9IGZyb20gJ0Bpb25pYy9hbmd1bGFyJztcbmltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgT25Jbml0LFxuICBWaWV3Q2hpbGQsXG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEVsZW1lbnRSZWYsXG4gIFJlbmRlcmVyMixcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RCaW5kaW5nXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQW5pbWF0aW9uRXZlbnQsXG4gIHRyaWdnZXIsXG4gIHRyYW5zaXRpb24sXG4gIGFuaW1hdGUsXG4gIHN0eWxlXG59IGZyb20gJ0Bhbmd1bGFyL2FuaW1hdGlvbnMnO1xuaW1wb3J0IHsgRmVhdHVyZVBvc2l0aW9uIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5pbXBvcnQgeyBGaXZJY29uIH0gZnJvbSAnLi4vaWNvbi9pY29uLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2Zpdi1mZWF0dXJlLWRpc2NvdmVyeScsXG4gIHRlbXBsYXRlVXJsOiAnLi9mZWF0dXJlLWRpc2NvdmVyeS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2ZlYXR1cmUtZGlzY292ZXJ5LmNvbXBvbmVudC5zY3NzJ10sXG4gIGFuaW1hdGlvbnM6IFtcbiAgICB0cmlnZ2VyKCdzY2FsZScsIFtcbiAgICAgIHRyYW5zaXRpb24oJyogPT4gdmlzaWJsZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgwKScsIG9wYWNpdHk6ICcwJyB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMjQwbXMgZWFzZS1vdXQnLFxuICAgICAgICAgIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGUoMSknLCBvcGFjaXR5OiAnMScgfSlcbiAgICAgICAgKVxuICAgICAgXSksXG4gICAgICB0cmFuc2l0aW9uKCd2aXNpYmxlID0+IGhpZGRlbicsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZSgnMjE1bXMgZWFzZS1pbicsIHN0eWxlKHsgdHJhbnNmb3JtOiAnc2NhbGUoMCknLCBvcGFjaXR5OiAnMCcgfSkpXG4gICAgICBdKSxcbiAgICAgIHRyYW5zaXRpb24oJ3Zpc2libGUgPT4gZXhlY3V0ZScsIFtcbiAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxKScsIG9wYWNpdHk6ICcxJyB9KSxcbiAgICAgICAgYW5pbWF0ZShcbiAgICAgICAgICAnMjE1bXMgMC4xNXMgZWFzZS1pbicsXG4gICAgICAgICAgc3R5bGUoeyB0cmFuc2Zvcm06ICdzY2FsZSgxLjQpJywgb3BhY2l0eTogJzAnIH0pXG4gICAgICAgIClcbiAgICAgIF0pXG4gICAgXSksXG4gICAgdHJpZ2dlcignY29udGVudEFuaW0nLCBbXG4gICAgICB0cmFuc2l0aW9uKCd2b2lkID0+IConLCBbXG4gICAgICAgIHN0eWxlKHsgb3BhY2l0eTogJzAnIH0pLFxuICAgICAgICBhbmltYXRlKCcxMDBtcyAyNDBtcyBlYXNlLW91dCcsIHN0eWxlKHsgb3BhY2l0eTogJzEnIH0pKVxuICAgICAgXSlcbiAgICBdKVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIEZpdkZlYXR1cmVEaXNjb3ZlcnkgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyQ29udGVudEluaXQge1xuICB0b3AgPSAwO1xuICBsZWZ0ID0gMDtcbiAgd2lkdGggPSA0MjA7XG4gIGhlaWdodCA9IDQyMDtcbiAgaW5uZXJEaWFtZXRlciA9IDA7XG4gIGZlYXR1cmVQYWRkaW5nID0gMDtcbiAgY29udGVudFRvcCA9IDA7XG4gIGNvbnRlbnRMZWZ0ID0gMDtcbiAgY29udGVudFdpZHRoID0gMDtcbiAgY29udGVudEhlaWdodCA9IDA7XG4gIGNvbnRlbnRPZmZzZXQgPSAwO1xuICBib3VuZHM6IEZlYXR1cmVQb3NpdGlvbjtcbiAgaWNvbjogc3RyaW5nO1xuICBjbGFzc2VzOiBzdHJpbmdbXTtcbiAgQFZpZXdDaGlsZCgnY2lyY2xlJywgeyBzdGF0aWM6IHRydWUgfSkgY2lyY2xlOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdyZWN0JywgeyBzdGF0aWM6IHRydWUgfSkgcmVjdDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncElubmVyJywgeyBzdGF0aWM6IHRydWUsIHJlYWQ6IEVsZW1lbnRSZWYgfSlcbiAgaW5uZXJQdWxzZTogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncE91dGVyJywgeyBzdGF0aWM6IHRydWUgfSkgb3V0ZXJQdWxzZTogRWxlbWVudFJlZjtcblxuICBhbmltYXRpb25TdGF0ZSA9ICdoaWRkZW4nO1xuICBwdWxzZSA9ICdzbWFsbCc7XG5cbiAgQE91dHB1dCgpIGZpdkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmaXZCYWNrZHJvcENsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmaXZDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZml2T3BlbiA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZml2QW5pbWF0aW9uID0gbmV3IEV2ZW50RW1pdHRlcjxBbmltYXRpb25FdmVudD4oKTtcblxuICBASG9zdEJpbmRpbmcoJ2NsYXNzJykgZ2V0IF9jbGFzc2VzKCkge1xuICAgIHJldHVybiB0aGlzLmNsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIHBsYXRmb3JtOiBQbGF0Zm9ybSkge31cblxuICBuZ09uSW5pdCgpIHt9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge31cblxuICBzZXRCb3VuZHMoYm91bmRzOiBGZWF0dXJlUG9zaXRpb24pIHtcbiAgICB0aGlzLmJvdW5kcyA9IGJvdW5kcztcbiAgICB0aGlzLmlubmVyRGlhbWV0ZXIgPVxuICAgICAgYm91bmRzLmhlaWdodCA+IGJvdW5kcy53aWR0aCA/IGJvdW5kcy5oZWlnaHQgOiBib3VuZHMud2lkdGg7XG4gICAgdGhpcy50b3AgPSBib3VuZHMudG9wICsgYm91bmRzLmhlaWdodCAvIDIgLSB0aGlzLmhlaWdodCAvIDI7XG4gICAgdGhpcy5sZWZ0ID0gYm91bmRzLmxlZnQgKyBib3VuZHMud2lkdGggLyAyIC0gdGhpcy53aWR0aCAvIDI7XG4gICAgdGhpcy5jYWxjdWxhdGVDb250ZW50Qm91bmRzKCk7XG4gICAgaWYgKCF0aGlzLmljb24pIHtcbiAgICAgIGNvbnN0IGdyYWRpZW50ID0gYC13ZWJraXQtcmFkaWFsLWdyYWRpZW50KHRyYW5zcGFyZW50ICR7dGhpc1xuICAgICAgICAuaW5uZXJEaWFtZXRlciAvXG4gICAgICAgIDIgK1xuICAgICAgICA1fXB4LCB2YXIoLS1maXYtY29sb3ItZmVhdHVyZSkgJHt0aGlzLmlubmVyRGlhbWV0ZXIgLyAyICsgNX1weClgO1xuICAgICAgY29uc3QgcHVsc2VHcmFkaWVudCA9IGAtd2Via2l0LXJhZGlhbC1ncmFkaWVudCh0cmFuc3BhcmVudCAke3RoaXNcbiAgICAgICAgLmlubmVyRGlhbWV0ZXIgL1xuICAgICAgICAyICtcbiAgICAgICAgNX1weCwgdmFyKC0tZml2LWNvbG9yLXB1bHNlKSAke3RoaXMuaW5uZXJEaWFtZXRlciAvIDIgKyA1fXB4KWA7XG4gICAgICB0aGlzLnJlbmRlcmVyLnNldFN0eWxlKHRoaXMuY2lyY2xlLm5hdGl2ZUVsZW1lbnQsICdiYWNrZ3JvdW5kJywgZ3JhZGllbnQpO1xuICAgICAgdGhpcy5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgICAgdGhpcy5pbm5lclB1bHNlLm5hdGl2ZUVsZW1lbnQsXG4gICAgICAgICdiYWNrZ3JvdW5kJyxcbiAgICAgICAgcHVsc2VHcmFkaWVudFxuICAgICAgKTtcbiAgICAgIHRoaXMucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICAgIHRoaXMub3V0ZXJQdWxzZS5uYXRpdmVFbGVtZW50LFxuICAgICAgICAnYmFja2dyb3VuZCcsXG4gICAgICAgIHB1bHNlR3JhZGllbnRcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNhbGN1bGF0ZUNvbnRlbnRCb3VuZHMoKSB7XG4gICAgY29uc3QgYWJzb2x1dGVDZW50ZXI6IHsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSA9IHtcbiAgICAgIHg6IHRoaXMucGxhdGZvcm0ud2lkdGgoKSAvIDIsXG4gICAgICB5OiB0aGlzLnBsYXRmb3JtLmhlaWdodCgpIC8gMlxuICAgIH07XG4gICAgY29uc3QgY2VudGVyOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gPSB7XG4gICAgICB4OiB0aGlzLmxlZnQgKyB0aGlzLndpZHRoIC8gMixcbiAgICAgIHk6IHRoaXMudG9wICsgdGhpcy53aWR0aCAvIDJcbiAgICB9O1xuICAgIGNvbnN0IHJlY3RXaWR0aCA9IE1hdGguc3FydChNYXRoLnBvdyh0aGlzLndpZHRoLCAyKSAvIDIpO1xuICAgIGNvbnN0IGlzVG9wID0gY2VudGVyLnkgPCBhYnNvbHV0ZUNlbnRlci55O1xuICAgIGNvbnN0IGlzTGVmdCA9IGNlbnRlci54IDwgYWJzb2x1dGVDZW50ZXIueDtcbiAgICBjb25zdCBpbm5lclJhZGl1cyA9IHRoaXMuaW5uZXJEaWFtZXRlciAvIDI7XG4gICAgY29uc3QgcGFkZGluZyA9IHRoaXMuZmVhdHVyZVBhZGRpbmcgLyAyO1xuICAgIGxldCBjb250ZW50UmlnaHQgPSAwO1xuICAgIGxldCBjb250ZW50Qm90dG9tID0gMDtcbiAgICBpZiAoaXNMZWZ0KSB7XG4gICAgICB0aGlzLmNvbnRlbnRMZWZ0ID0gY2VudGVyLnggLSBpbm5lclJhZGl1cztcbiAgICAgIGNvbnRlbnRSaWdodCA9IE1hdGgubWluKFxuICAgICAgICBjZW50ZXIueCArIHJlY3RXaWR0aCAvIDIgKyB0aGlzLmNvbnRlbnRPZmZzZXQsXG4gICAgICAgIHRoaXMucGxhdGZvcm0ud2lkdGgoKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50TGVmdCA9IE1hdGgubWF4KFxuICAgICAgICBjZW50ZXIueCAtIHJlY3RXaWR0aCAvIDIgLSB0aGlzLmNvbnRlbnRPZmZzZXQsXG4gICAgICAgIDBcbiAgICAgICk7XG4gICAgICBjb250ZW50UmlnaHQgPSBjZW50ZXIueCArIGlubmVyUmFkaXVzO1xuICAgIH1cbiAgICBpZiAoaXNUb3ApIHtcbiAgICAgIHRoaXMuY29udGVudFRvcCA9IGNlbnRlci55ICsgaW5uZXJSYWRpdXMgKyBwYWRkaW5nO1xuICAgICAgY29udGVudEJvdHRvbSA9IGNlbnRlci55ICsgcmVjdFdpZHRoIC8gMiArIC0xICogdGhpcy5jb250ZW50T2Zmc2V0O1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRUb3AgPSBjZW50ZXIueSAtIHJlY3RXaWR0aCAvIDIgKyB0aGlzLmNvbnRlbnRPZmZzZXQ7XG4gICAgICBjb250ZW50Qm90dG9tID0gY2VudGVyLnkgLSBpbm5lclJhZGl1cyAtIHBhZGRpbmc7XG4gICAgfVxuXG4gICAgdGhpcy5jb250ZW50V2lkdGggPSBNYXRoLmFicyh0aGlzLmNvbnRlbnRMZWZ0IC0gY29udGVudFJpZ2h0KTtcbiAgICB0aGlzLmNvbnRlbnRIZWlnaHQgPSBNYXRoLmFicyh0aGlzLmNvbnRlbnRUb3AgLSBjb250ZW50Qm90dG9tKTtcbiAgfVxuICBoYW5kbGVDaXJjbGVBbmltYXRpb24oZXZlbnQ6IEFuaW1hdGlvbkV2ZW50KSB7XG4gICAgdGhpcy5maXZBbmltYXRpb24uZW1pdChldmVudCk7XG4gICAgaWYgKGV2ZW50LnRvU3RhdGUgPT09ICd2aXNpYmxlJykge1xuICAgICAgdGhpcy5maXZPcGVuLmVtaXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3Zpc2libGUnICYmIGV2ZW50LnRvU3RhdGUgPT09ICdoaWRkZW4nKSB7XG4gICAgICB0aGlzLmZpdkNsb3NlLmVtaXQoKTtcbiAgICB9XG4gICAgaWYgKGV2ZW50LmZyb21TdGF0ZSA9PT0gJ3Zpc2libGUnICYmIGV2ZW50LnRvU3RhdGUgPT09ICdleGVjdXRlJykge1xuICAgICAgdGhpcy5maXZDbG9zZS5lbWl0KCk7XG4gICAgfVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0gJ3Zpc2libGUnO1xuICB9XG5cbiAgaGlkZSgpIHtcbiAgICB0aGlzLmFuaW1hdGlvblN0YXRlID0gJ2hpZGRlbic7XG4gIH1cblxuICBmZWF0dXJlQ2xpY2soKSB7XG4gICAgdGhpcy5hbmltYXRpb25TdGF0ZSA9ICdleGVjdXRlJztcbiAgfVxuXG4gIHNldEljb24oaWNvbjogRml2SWNvbiB8IElvbkljb24pIHtcbiAgICBpZiAoaWNvbikge1xuICAgICAgdGhpcy5pY29uID0gaWNvbi5uYW1lO1xuICAgIH1cbiAgfVxufVxuIl19