@fivethree/core
Version:
Fivethree Core Components
308 lines • 28.9 kB
JavaScript
/**
* @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