@fivethree/core
Version:
Fivethree Core Components
260 lines • 19 kB
JavaScript
/**
* @fileoverview added by tsickle
* Generated from: lib/feature-discovery/feature.directive.ts
* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { FivIcon } from '../icon/icon.component';
import { Directive, Host, ElementRef, Input, Optional, TemplateRef, Output, EventEmitter, ViewContainerRef } from '@angular/core';
import { FivOverlayService } from '../overlay/overlay.service';
import { FivFeatureDiscovery } from './feature-discovery.component';
import { first, filter } from 'rxjs/operators';
import { Platform, IonIcon } from '@ionic/angular';
var FivFeature = /** @class */ (function () {
function FivFeature(host, viewContainer, fivIcon, ionIcon, overlay, platform) {
this.host = host;
this.viewContainer = viewContainer;
this.fivIcon = fivIcon;
this.ionIcon = ionIcon;
this.overlay = overlay;
this.platform = platform;
this.maxDiameter = 1080;
this.diameter = Math.min(this.platform.width() * 2, this.maxDiameter);
this.contentOffset = 20;
this.featurePadding = 20;
this.clickEnabled = true;
this.classes = [];
this.fivFeatureClick = new EventEmitter();
this.fivOpen = new EventEmitter();
this.fivWillOpen = new EventEmitter();
this.fivClose = new EventEmitter();
this.fivWillClose = new EventEmitter();
this.isOpen = false;
}
/**
* @private
* @param {?} nativeElement
* @return {?}
*/
FivFeature.prototype.getBounds = /**
* @private
* @param {?} nativeElement
* @return {?}
*/
function (nativeElement) {
/** @type {?} */
var bounds = nativeElement.getBoundingClientRect();
return {
top: bounds.top,
left: bounds.left,
height: nativeElement.clientHeight,
width: nativeElement.clientWidth
};
};
/**
* @return {?}
*/
FivFeature.prototype.show = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var icon = this.ionIcon || this.fivIcon;
/** @type {?} */
var bounds = icon
? this.getBounds(this.host.nativeElement.parentElement)
: this.getBounds(this.host.nativeElement);
this.overlayRef = this.overlay.createOverlay(this.viewContainer, FivFeatureDiscovery, this.fivFeature);
/** @type {?} */
var featureOverlay = this.overlayRef.instance;
featureOverlay.height = this.diameter;
featureOverlay.width = this.diameter;
featureOverlay.featurePadding = this.featurePadding;
featureOverlay.contentOffset = this.contentOffset;
featureOverlay.classes = this.classes;
featureOverlay.setIcon(icon);
featureOverlay.setBounds(bounds);
featureOverlay.show();
this.fivWillOpen.emit();
featureOverlay.fivAnimation
.pipe(filter((/**
* @param {?} event
* @return {?}
*/
function (event) { return event.toState === 'visible'; })), first())
.subscribe((/**
* @return {?}
*/
function () {
_this.didOpen();
}));
featureOverlay.fivClick.pipe(first()).subscribe((/**
* @param {?} ev
* @return {?}
*/
function (ev) {
_this.featureClick(ev);
}));
featureOverlay.fivBackdropClick.pipe(first()).subscribe((/**
* @return {?}
*/
function () {
_this.hide();
}));
};
/**
* @return {?}
*/
FivFeature.prototype.hide = /**
* @return {?}
*/
function () {
var _this = this;
this.fivWillClose.emit();
if (this.overlayRef) {
this.overlayRef.instance.hide();
this.overlayRef.instance.fivClose.pipe(first()).subscribe((/**
* @return {?}
*/
function () {
_this.fivClose.emit();
_this.isOpen = false;
_this.overlayRef.destroy();
_this.overlayRef = null;
}));
}
};
/**
* @private
* @return {?}
*/
FivFeature.prototype.didOpen = /**
* @private
* @return {?}
*/
function () {
this.fivOpen.emit();
this.isOpen = true;
};
/**
* @private
* @param {?} ev
* @return {?}
*/
FivFeature.prototype.featureClick = /**
* @private
* @param {?} ev
* @return {?}
*/
function (ev) {
var _this = this;
if (this.overlayRef) {
this.fivFeatureClick.emit(ev);
this.fivWillClose.emit();
this.overlayRef.instance.featureClick();
this.overlayRef.instance.fivClose.pipe(first()).subscribe((/**
* @return {?}
*/
function () {
_this.fivClose.emit();
_this.overlayRef.destroy();
_this.overlayRef = null;
if (_this.clickEnabled) {
_this.host.nativeElement.click();
}
}));
}
};
FivFeature.decorators = [
{ type: Directive, args: [{
selector: '[fivFeature]',
exportAs: 'fivFeature'
},] }
];
/** @nocollapse */
FivFeature.ctorParameters = function () { return [
{ type: ElementRef, decorators: [{ type: Host }] },
{ type: ViewContainerRef },
{ type: FivIcon, decorators: [{ type: Host }, { type: Optional }] },
{ type: IonIcon, decorators: [{ type: Host }, { type: Optional }] },
{ type: FivOverlayService },
{ type: Platform }
]; };
FivFeature.propDecorators = {
maxDiameter: [{ type: Input }],
diameter: [{ type: Input }],
contentOffset: [{ type: Input }],
featurePadding: [{ type: Input }],
clickEnabled: [{ type: Input }],
classes: [{ type: Input }],
fivFeature: [{ type: Input }],
fivFeatureClick: [{ type: Output }],
fivOpen: [{ type: Output }],
fivWillOpen: [{ type: Output }],
fivClose: [{ type: Output }],
fivWillClose: [{ type: Output }]
};
return FivFeature;
}());
export { FivFeature };
if (false) {
/** @type {?} */
FivFeature.prototype.maxDiameter;
/** @type {?} */
FivFeature.prototype.diameter;
/** @type {?} */
FivFeature.prototype.contentOffset;
/** @type {?} */
FivFeature.prototype.featurePadding;
/** @type {?} */
FivFeature.prototype.clickEnabled;
/** @type {?} */
FivFeature.prototype.classes;
/** @type {?} */
FivFeature.prototype.fivFeature;
/** @type {?} */
FivFeature.prototype.overlayRef;
/** @type {?} */
FivFeature.prototype.fivFeatureClick;
/** @type {?} */
FivFeature.prototype.fivOpen;
/** @type {?} */
FivFeature.prototype.fivWillOpen;
/** @type {?} */
FivFeature.prototype.fivClose;
/** @type {?} */
FivFeature.prototype.fivWillClose;
/** @type {?} */
FivFeature.prototype.isOpen;
/**
* @type {?}
* @private
*/
FivFeature.prototype.host;
/**
* @type {?}
* @private
*/
FivFeature.prototype.viewContainer;
/**
* @type {?}
* @private
*/
FivFeature.prototype.fivIcon;
/**
* @type {?}
* @private
*/
FivFeature.prototype.ionIcon;
/**
* @type {?}
* @private
*/
FivFeature.prototype.overlay;
/**
* @type {?}
* @private
*/
FivFeature.prototype.platform;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AZml2ZXRocmVlL2NvcmUvIiwic291cmNlcyI6WyJsaWIvZmVhdHVyZS1kaXNjb3ZlcnkvZmVhdHVyZS5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakQsT0FBTyxFQUNMLFNBQVMsRUFDVCxJQUFJLEVBQ0osVUFBVSxFQUNWLEtBQUssRUFDTCxRQUFRLEVBRVIsV0FBVyxFQUNYLE1BQU0sRUFDTixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ3BFLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVuRDtJQXNCRSxvQkFDa0IsSUFBZ0IsRUFDeEIsYUFBK0IsRUFDWCxPQUFnQixFQUNoQixPQUFnQixFQUNwQyxPQUEwQixFQUMxQixRQUFrQjtRQUxWLFNBQUksR0FBSixJQUFJLENBQVk7UUFDeEIsa0JBQWEsR0FBYixhQUFhLENBQWtCO1FBQ1gsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUNoQixZQUFPLEdBQVAsT0FBTyxDQUFTO1FBQ3BDLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBQzFCLGFBQVEsR0FBUixRQUFRLENBQVU7UUF2Qm5CLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ25CLGFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FB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InNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpdkljb24gfSBmcm9tICcuLi9pY29uL2ljb24uY29tcG9uZW50JztcbmltcG9ydCB7IEZlYXR1cmVQb3NpdGlvbiB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHtcbiAgRGlyZWN0aXZlLFxuICBIb3N0LFxuICBFbGVtZW50UmVmLFxuICBJbnB1dCxcbiAgT3B0aW9uYWwsXG4gIENvbXBvbmVudFJlZixcbiAgVGVtcGxhdGVSZWYsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRml2T3ZlcmxheVNlcnZpY2UgfSBmcm9tICcuLi9vdmVybGF5L292ZXJsYXkuc2VydmljZSc7XG5pbXBvcnQgeyBGaXZGZWF0dXJlRGlzY292ZXJ5IH0gZnJvbSAnLi9mZWF0dXJlLWRpc2NvdmVyeS5jb21wb25lbnQnO1xuaW1wb3J0IHsgZmlyc3QsIGZpbHRlciB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IFBsYXRmb3JtLCBJb25JY29uIH0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbZml2RmVhdHVyZV0nLFxuICBleHBvcnRBczogJ2ZpdkZlYXR1cmUnXG59KVxuZXhwb3J0IGNsYXNzIEZpdkZlYXR1cmUge1xuICBASW5wdXQoKSBtYXhEaWFtZXRlciA9IDEwODA7XG4gIEBJbnB1dCgpIGRpYW1ldGVyID0gTWF0aC5taW4odGhpcy5wbGF0Zm9ybS53aWR0aCgpICogMiwgdGhpcy5tYXhEaWFtZXRlcik7XG4gIEBJbnB1dCgpIGNvbnRlbnRPZmZzZXQgPSAyMDtcbiAgQElucHV0KCkgZmVhdHVyZVBhZGRpbmcgPSAyMDtcbiAgQElucHV0KCkgY2xpY2tFbmFibGVkID0gdHJ1ZTtcbiAgQElucHV0KCkgY2xhc3Nlczogc3RyaW5nW10gPSBbXTtcbiAgQElucHV0KCkgZml2RmVhdHVyZTogVGVtcGxhdGVSZWY8YW55PjtcbiAgb3ZlcmxheVJlZjogQ29tcG9uZW50UmVmPEZpdkZlYXR1cmVEaXNjb3Zlcnk+O1xuXG4gIEBPdXRwdXQoKSBmaXZGZWF0dXJlQ2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZpdk9wZW4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIGZpdldpbGxPcGVuID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gIEBPdXRwdXQoKSBmaXZDbG9zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgZml2V2lsbENsb3NlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG5cbiAgaXNPcGVuID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEhvc3QoKSBwcml2YXRlIGhvc3Q6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSB2aWV3Q29udGFpbmVyOiBWaWV3Q29udGFpbmVyUmVmLFxuICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBmaXZJY29uOiBGaXZJY29uLFxuICAgIEBIb3N0KCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSBpb25JY29uOiBJb25JY29uLFxuICAgIHByaXZhdGUgb3ZlcmxheTogRml2T3ZlcmxheVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBwbGF0Zm9ybTogUGxhdGZvcm1cbiAgKSB7fVxuXG4gIHByaXZhdGUgZ2V0Qm91bmRzKG5hdGl2ZUVsZW1lbnQ6IGFueSk6IEZlYXR1cmVQb3NpdGlvbiB7XG4gICAgY29uc3QgYm91bmRzID0gbmF0aXZlRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBib3VuZHMudG9wLFxuICAgICAgbGVmdDogYm91bmRzLmxlZnQsXG4gICAgICBoZWlnaHQ6IG5hdGl2ZUVsZW1lbnQuY2xpZW50SGVpZ2h0LFxuICAgICAgd2lkdGg6IG5hdGl2ZUVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICB9O1xuICB9XG5cbiAgc2hvdygpIHtcbiAgICBjb25zdCBpY29uID0gdGhpcy5pb25JY29uIHx8IHRoaXMuZml2SWNvbjtcbiAgICBjb25zdCBib3VuZHMgPSBpY29uXG4gICAgICA/IHRoaXMuZ2V0Qm91bmRzKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQpXG4gICAgICA6IHRoaXMuZ2V0Qm91bmRzKHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50KTtcblxuICAgIHRoaXMub3ZlcmxheVJlZiA9IHRoaXMub3ZlcmxheS5jcmVhdGVPdmVybGF5KFxuICAgICAgdGhpcy52aWV3Q29udGFpbmVyLFxuICAgICAgRml2RmVhdHVyZURpc2NvdmVyeSxcbiAgICAgIHRoaXMuZml2RmVhdHVyZVxuICAgICk7XG4gICAgY29uc3QgZmVhdHVyZU92ZXJsYXkgPSB0aGlzLm92ZXJsYXlSZWYuaW5zdGFuY2U7XG4gICAgZmVhdHVyZU92ZXJsYXkuaGVpZ2h0ID0gdGhpcy5kaWFtZXRlcjtcbiAgICBmZWF0dXJlT3ZlcmxheS53aWR0aCA9IHRoaXMuZGlhbWV0ZXI7XG4gICAgZmVhdHVyZU92ZXJsYXkuZmVhdHVyZVBhZGRpbmcgPSB0aGlzLmZlYXR1cmVQYWRkaW5nO1xuICAgIGZlYXR1cmVPdmVybGF5LmNvbnRlbnRPZmZzZXQgPSB0aGlzLmNvbnRlbnRPZmZzZXQ7XG4gICAgZmVhdHVyZU92ZXJsYXkuY2xhc3NlcyA9IHRoaXMuY2xhc3NlcztcbiAgICBmZWF0dXJlT3ZlcmxheS5zZXRJY29uKGljb24pO1xuICAgIGZlYXR1cmVPdmVybGF5LnNldEJvdW5kcyhib3VuZHMpO1xuICAgIGZlYXR1cmVPdmVybGF5LnNob3coKTtcbiAgICB0aGlzLmZpdldpbGxPcGVuLmVtaXQoKTtcbiAgICBmZWF0dXJlT3ZlcmxheS5maXZBbmltYXRpb25cbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4gZXZlbnQudG9TdGF0ZSA9PT0gJ3Zpc2libGUnKSxcbiAgICAgICAgZmlyc3QoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuZGlkT3BlbigpO1xuICAgICAgfSk7XG4gICAgZmVhdHVyZU92ZXJsYXkuZml2Q2xpY2sucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoZXYgPT4ge1xuICAgICAgdGhpcy5mZWF0dXJlQ2xpY2soZXYpO1xuICAgIH0pO1xuICAgIGZlYXR1cmVPdmVybGF5LmZpdkJhY2tkcm9wQ2xpY2sucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlKCk7XG4gICAgfSk7XG4gIH1cblxuICBoaWRlKCkge1xuICAgIHRoaXMuZml2V2lsbENsb3NlLmVtaXQoKTtcbiAgICBpZiAodGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYuaW5zdGFuY2UuaGlkZSgpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmluc3RhbmNlLmZpdkNsb3NlLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXZDbG9zZS5lbWl0KCk7XG4gICAgICAgIHRoaXMuaXNPcGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRpZE9wZW4oKSB7XG4gICAgdGhpcy5maXZPcGVuLmVtaXQoKTtcbiAgICB0aGlzLmlzT3BlbiA9IHRydWU7XG4gIH1cblxuICBwcml2YXRlIGZlYXR1cmVDbGljayhldikge1xuICAgIGlmICh0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMuZml2RmVhdHVyZUNsaWNrLmVtaXQoZXYpO1xuICAgICAgdGhpcy5maXZXaWxsQ2xvc2UuZW1pdCgpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmluc3RhbmNlLmZlYXR1cmVDbGljaygpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmluc3RhbmNlLmZpdkNsb3NlLnBpcGUoZmlyc3QoKSkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXZDbG9zZS5lbWl0KCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZi5kZXN0cm95KCk7XG4gICAgICAgIHRoaXMub3ZlcmxheVJlZiA9IG51bGw7XG4gICAgICAgIGlmICh0aGlzLmNsaWNrRW5hYmxlZCkge1xuICAgICAgICAgIHRoaXMuaG9zdC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufVxuIl19