UNPKG

@fivethree/core

Version:
260 lines 19 kB
/** * @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