UNPKG

@stratio/egeo

Version:
215 lines 17.3 kB
/** * @fileoverview added by tsickle * Generated from: lib/st-pop/st-pop.component.ts * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc */ /* * © 2017 Stratio Big Data Inc., Sucursal en España. * * This software is licensed under the Apache License, Version 2.0. * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the terms of the License for more details. * * SPDX-License-Identifier: Apache-2.0. */ import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, HostListener, Input } from '@angular/core'; import { StPopOffset, StPopPlacement } from './st-pop.model'; /** * \@description {Component} [Pop] * * The pop is a component for manage floating elements like popups or dropdown-menu. This element need two element inside, * a button element that launch popper and a content element that whose position will be relativo to button element. * * \@example * * {html} * * ``` * <st-pop [hidden]="false" placement="bottom"> * <div pop-button>Button</div> * <div pop-content>Content</div> * </st-pop> * ``` */ export class StPopComponent { /** * @param {?} _el * @param {?} _cd */ constructor(_el, _cd) { this._el = _el; this._cd = _cd; /** * \@Input {StPopPlacement} [placement=StPopPlacement.BOTOM_START] Define position of content relative to button */ this.placement = StPopPlacement.BOTTOM_START; /** * \@Input {StPopOffset} [offset={x: 0 , y: 0}] For position with offset in x o y axis */ this.offset = { x: 0, y: 0 }; /** * \@Input {boolean} [openToLeft=false] For calculating all positions from the right corner */ this.openToLeft = false; this._hidden = true; } /** * \@Input {boleean} [hidden=true] TRUE: show pop content, FALSE: hide pop content * @param {?} value * @return {?} */ set hidden(value) { setTimeout((/** * @return {?} */ () => { if (!value) { this.calculatePosition(); } this._hidden = value; this._cd.markForCheck(); })); } /** * @return {?} */ get hidden() { return this._hidden; } /** * @return {?} */ ngAfterViewInit() { this.calculatePosition(); } /** * @param {?} changes * @return {?} */ ngOnChanges(changes) { this.calculatePosition(); } /** * @return {?} */ updateWidth() { this.calculatePosition(); } /** * @private * @return {?} */ getContentElement() { return this._el.nativeElement.querySelector('[pop-content]'); } /** * @private * @return {?} */ calculatePosition() { /** @type {?} */ const buttonParentEl = this._el.nativeElement.querySelector('[pop-button]'); /** @type {?} */ const contentEl = this.getContentElement(); /** @type {?} */ const buttonEl = buttonParentEl && buttonParentEl.firstElementChild ? buttonParentEl.firstElementChild : undefined; if (buttonEl) { /** @type {?} */ const coords = this.getCoords(buttonEl); contentEl.style.position = 'absolute'; contentEl.style.transform = `translate3d(${coords.x}px, ${coords.y}px, ${coords.z}px)`; } } /** * @private * @param {?} buttonEl * @return {?} */ getCoords(buttonEl) { /** @type {?} */ const coords = { x: 0, y: 0, z: 0 }; /** @type {?} */ const direction = this.openToLeft ? this.getContentElement().getBoundingClientRect().width : 0; /** @type {?} */ const clientRect = buttonEl.getBoundingClientRect(); switch (this.placement) { case StPopPlacement.BOTTOM: coords.x = clientRect.width / 2; break; case StPopPlacement.BOTTOM_END: coords.x = clientRect.width; break; case StPopPlacement.TOP: coords.y = clientRect.height * -1; coords.x = clientRect.width / 2; break; case StPopPlacement.TOP_START: coords.y = clientRect.height * -1; break; case StPopPlacement.TOP_END: coords.y = clientRect.height * -1; coords.x = clientRect.width; break; default: break; } coords.x = Math.ceil(coords.x + this.offset.x - direction); coords.y = Math.ceil(coords.y + this.offset.y); return coords; } } StPopComponent.decorators = [ { type: Component, args: [{ selector: 'st-pop', template: "<!--\n\n \u00A9 2017 Stratio Big Data Inc., Sucursal en Espa\u00F1a.\n\n This software is licensed under the Apache License, Version 2.0.\n This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;\n without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n See the terms of the License for more details.\n\n SPDX-License-Identifier: Apache-2.0.\n\n-->\n<ng-content select=[pop-button]></ng-content>\n<div [style.visibility]=\"hidden ? 'hidden' : 'visible'\" class=\"content\">\n <ng-content select=[pop-content]></ng-content>\n</div>\n", changeDetection: ChangeDetectionStrategy.OnPush, styles: ["@charset \"UTF-8\";.content{height:0}"] }] } ]; /** @nocollapse */ StPopComponent.ctorParameters = () => [ { type: ElementRef }, { type: ChangeDetectorRef } ]; StPopComponent.propDecorators = { placement: [{ type: Input }], offset: [{ type: Input }], openToLeft: [{ type: Input }], hidden: [{ type: Input }], updateWidth: [{ type: HostListener, args: ['window:load',] }] }; if (false) { /** * \@Input {StPopPlacement} [placement=StPopPlacement.BOTOM_START] Define position of content relative to button * @type {?} */ StPopComponent.prototype.placement; /** * \@Input {StPopOffset} [offset={x: 0 , y: 0}] For position with offset in x o y axis * @type {?} */ StPopComponent.prototype.offset; /** * \@Input {boolean} [openToLeft=false] For calculating all positions from the right corner * @type {?} */ StPopComponent.prototype.openToLeft; /** * @type {?} * @private */ StPopComponent.prototype._hidden; /** * @type {?} * @private */ StPopComponent.prototype._el; /** * @type {?} * @private */ StPopComponent.prototype._cd; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3QtcG9wLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdHJhdGlvL2VnZW8vIiwic291cmNlcyI6WyJsaWIvc3QtcG9wL3N0LXBvcC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBVUEsT0FBTyxFQUFpQix1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxLQUFLLEVBQTRCLE1BQU0sZUFBZSxDQUFDO0FBRWhLLE9BQU8sRUFBRSxXQUFXLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCN0QsTUFBTSxPQUFPLGNBQWM7Ozs7O0lBNEJ4QixZQUFvQixHQUFlLEVBQVUsR0FBc0I7UUFBL0MsUUFBRyxHQUFILEdBQUcsQ0FBWTtRQUFVLFFBQUcsR0FBSCxHQUFHLENBQW1COzs7O1FBekIxRCxjQUFTLEdBQW1CLGNBQWMsQ0FBQyxZQUFZLENBQUM7Ozs7UUFHeEQsV0FBTSxHQUFnQixFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOzs7O1FBRXJDLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFN0IsWUFBTyxHQUFZLElBQUksQ0FBQztJQW1CaEMsQ0FBQzs7Ozs7O0lBaEJELElBQ0ksTUFBTSxDQUFDLEtBQWM7UUFDdEIsVUFBVTs7O1FBQUMsR0FBRyxFQUFFO1lBQ2IsSUFBSSxDQUFDLEtBQUssRUFBRTtnQkFDVCxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQzthQUMzQjtZQUNELElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDM0IsQ0FBQyxFQUFDLENBQUM7SUFDTixDQUFDOzs7O0lBRUQsSUFBSSxNQUFNO1FBQ1AsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3ZCLENBQUM7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QUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUvQyxPQUFPLE1BQU0sQ0FBQztJQUNqQixDQUFDOzs7WUFsR0gsU0FBUyxTQUFDO2dCQUNSLFFBQVEsRUFBRSxRQUFRO2dCQUVsQiwwbkJBQXNDO2dCQUN0QyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTs7YUFDakQ7Ozs7WUE3QjhFLFVBQVU7WUFBeEMsaUJBQWlCOzs7d0JBaUM5RCxLQUFLO3FCQUdMLEtBQUs7eUJBRUwsS0FBSztxQkFLTCxLQUFLOzBCQTBCTCxZQUFZLFNBQUMsYUFBYTs7Ozs7OztJQXBDM0IsbUNBQWlFOzs7OztJQUdqRSxnQ0FBOEM7Ozs7O0lBRTlDLG9DQUFxQzs7Ozs7SUFFckMsaUNBQWdDOzs7OztJQWtCcEIsNkJBQXVCOzs7OztJQUFFLDZCQUE4QiIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiDCqSAyMDE3IFN0cmF0aW8gQmlnIERhdGEgSW5jLiwgU3VjdXJzYWwgZW4gRXNwYcOxYS5cbiAqXG4gKiBUaGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAuXG4gKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZO1xuICogd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS5cbiAqIFNlZSB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy5cbiAqXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMC5cbiAqL1xuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uQ2hhbmdlcywgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBTdFBvcE9mZnNldCwgU3RQb3BQbGFjZW1lbnQgfSBmcm9tICcuL3N0LXBvcC5tb2RlbCc7XG5cbi8vIEludGVybmFsIHR5cGVcbnR5cGUgU3RDb29yZHMgPSB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfTtcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24ge0NvbXBvbmVudH0gW1BvcF1cbiAqXG4gKiBUaGUgcG9wIGlzIGEgY29tcG9uZW50IGZvciBtYW5hZ2UgZmxvYXRpbmcgZWxlbWVudHMgbGlrZSBwb3B1cHMgb3IgZHJvcGRvd24tbWVudS4gVGhpcyBlbGVtZW50IG5lZWQgdHdvIGVsZW1lbnQgaW5zaWRlLFxuICogYSBidXR0b24gZWxlbWVudCB0aGF0IGxhdW5jaCBwb3BwZXIgYW5kIGEgY29udGVudCBlbGVtZW50IHRoYXQgd2hvc2UgcG9zaXRpb24gd2lsbCBiZSByZWxhdGl2byB0byBidXR0b24gZWxlbWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIHtodG1sfVxuICpcbiAqIGBgYFxuICogPHN0LXBvcCBbaGlkZGVuXT1cImZhbHNlXCIgcGxhY2VtZW50PVwiYm90dG9tXCI+XG4gKiAgICA8ZGl2IHBvcC1idXR0b24+QnV0dG9uPC9kaXY+XG4gKiAgICA8ZGl2IHBvcC1jb250ZW50PkNvbnRlbnQ8L2Rpdj5cbiAqIDwvc3QtcG9wPlxuICogYGBgXG4gKi9cbkBDb21wb25lbnQoe1xuICAgc2VsZWN0b3I6ICdzdC1wb3AnLFxuICAgc3R5bGVVcmxzOiBbJy4vc3QtcG9wLmNvbXBvbmVudC5zY3NzJ10sXG4gICB0ZW1wbGF0ZVVybDogJy4vc3QtcG9wLmNvbXBvbmVudC5odG1sJyxcbiAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoXG59KVxuZXhwb3J0IGNsYXNzIFN0UG9wQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCB7XG5cbiAgIC8qKiBASW5wdXQge1N0UG9wUGxhY2VtZW50fSBbcGxhY2VtZW50PVN0UG9wUGxhY2VtZW50LkJPVE9NX1NUQVJUXSBEZWZpbmUgcG9zaXRpb24gb2YgY29udGVudCByZWxhdGl2ZSB0byBidXR0b24gKi9cbiAgIEBJbnB1dCgpIHBsYWNlbWVudDogU3RQb3BQbGFjZW1lbnQgPSBTdFBvcFBsYWNlbWVudC5CT1RUT01fU1RBUlQ7XG5cbiAgIC8qKiBASW5wdXQge1N0UG9wT2Zmc2V0fSBbb2Zmc2V0PXt4OiAwICwgeTogMH1dIEZvciBwb3NpdGlvbiB3aXRoIG9mZnNldCBpbiB4IG8geSBheGlzICovXG4gICBASW5wdXQoKSBvZmZzZXQ6IFN0UG9wT2Zmc2V0ID0geyB4OiAwLCB5OiAwIH07XG4gICAvKiogQElucHV0IHtib29sZWFufSBbb3BlblRvTGVmdD1mYWxzZV0gRm9yIGNhbGN1bGF0aW5nIGFsbCBwb3NpdGlvbnMgZnJvbSB0aGUgcmlnaHQgY29ybmVyICovXG4gICBASW5wdXQoKSBvcGVuVG9MZWZ0OiBib29sZWFuID0gZmFsc2U7XG5cbiAgIHByaXZhdGUgX2hpZGRlbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgIC8qKiBASW5wdXQge2JvbGVlYW59IFtoaWRkZW49dHJ1ZV0gIFRSVUU6IHNob3cgcG9wIGNvbnRlbnQsIEZBTFNFOiBoaWRlIHBvcCBjb250ZW50ICAqL1xuICAgQElucHV0KClcbiAgIHNldCBoaWRkZW4odmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jYWxjdWxhdGVQb3NpdGlvbigpO1xuICAgICAgICAgfVxuICAgICAgICAgdGhpcy5faGlkZGVuID0gdmFsdWU7XG4gICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuICAgfVxuXG4gICBnZXQgaGlkZGVuKCk6IGJvb2xlYW4ge1xuICAgICAgcmV0dXJuIHRoaXMuX2hpZGRlbjtcbiAgIH1cblxuICAgY29uc3RydWN0b3IocHJpdmF0ZSBfZWw6IEVsZW1lbnRSZWYsIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZikge1xuICAgfVxuXG4gICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKCk7XG4gICB9XG5cbiAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgIHRoaXMuY2FsY3VsYXRlUG9zaXRpb24oKTtcbiAgIH1cblxuICAgQEhvc3RMaXN0ZW5lcignd2luZG93OmxvYWQnKVxuICAgdXBkYXRlV2lkdGgoKTogdm9pZCB7XG4gICAgICB0aGlzLmNhbGN1bGF0ZVBvc2l0aW9uKCk7XG4gICB9XG5cbiAgIHByaXZhdGUgZ2V0Q29udGVudEVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgICAgcmV0dXJuIHRoaXMuX2VsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcignW3BvcC1jb250ZW50XScpO1xuICAgfVxuXG4gICBwcml2YXRlIGNhbGN1bGF0ZVBvc2l0aW9uKCk6IHZvaWQge1xuICAgICAgY29uc3QgYnV0dG9uUGFyZW50RWw6IEhUTUxFbGVtZW50ID0gdGhpcy5fZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCdbcG9wLWJ1dHRvbl0nKTtcbiAgICAgIGNvbnN0IGNvbnRlbnRFbDogSFRNTEVsZW1lbnQgPSB0aGlzLmdldENvbnRlbnRFbGVtZW50KCk7XG4gICAgICBjb25zdCBidXR0b25FbDogRWxlbWVudCB8IHVuZGVmaW5lZCA9IGJ1dHRvblBhcmVudEVsICYmIGJ1dHRvblBhcmVudEVsLmZpcnN0RWxlbWVudENoaWxkID9cbiAgICAgICAgIGJ1dHRvblBhcmVudEVsLmZpcnN0RWxlbWVudENoaWxkIDogdW5kZWZpbmVkO1xuICAgICAgaWYgKGJ1dHRvbkVsKSB7XG4gICAgICAgICBjb25zdCBjb29yZHM6IFN0Q29vcmRzID0gdGhpcy5nZXRDb29yZHMoYnV0dG9uRWwpO1xuXG4gICAgICAgICBjb250ZW50RWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICAgY29udGVudEVsLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgke2Nvb3Jkcy54fXB4LCAke2Nvb3Jkcy55fXB4LCAke2Nvb3Jkcy56fXB4KWA7XG4gICAgICB9XG4gICB9XG5cbiAgIHByaXZhdGUgZ2V0Q29vcmRzKGJ1dHRvbkVsOiBFbGVtZW50KTogU3RDb29yZHMge1xuICAgICAgY29uc3QgY29vcmRzOiBTdENvb3JkcyA9IHsgeDogMCwgeTogMCwgejogMCB9O1xuICAgICAgY29uc3QgZGlyZWN0aW9uOiBudW1iZXIgPSB0aGlzLm9wZW5Ub0xlZnQgPyB0aGlzLmdldENvbnRlbnRFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggOiAwO1xuICAgICAgY29uc3QgY2xpZW50UmVjdDogQ2xpZW50UmVjdCA9IGJ1dHRvbkVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICBzd2l0Y2ggKHRoaXMucGxhY2VtZW50KSB7XG4gICAgICAgICBjYXNlIFN0UG9wUGxhY2VtZW50LkJPVFRPTTpcbiAgICAgICAgICAgIGNvb3Jkcy54ID0gY2xpZW50UmVjdC53aWR0aCAvIDI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgIGNhc2UgU3RQb3BQbGFjZW1lbnQuQk9UVE9NX0VORDpcbiAgICAgICAgICAgIGNvb3Jkcy54ID0gY2xpZW50UmVjdC53aWR0aDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgY2FzZSBTdFBvcFBsYWNlbWVudC5UT1A6XG4gICAgICAgICAgICBjb29yZHMueSA9IGNsaWVudFJlY3QuaGVpZ2h0ICogLTE7XG4gICAgICAgICAgICBjb29yZHMueCA9IGNsaWVudFJlY3Qud2lkdGggLyAyO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICBjYXNlIFN0UG9wUGxhY2VtZW50LlRPUF9TVEFSVDpcbiAgICAgICAgICAgIGNvb3Jkcy55ID0gY2xpZW50UmVjdC5oZWlnaHQgKiAtMTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgY2FzZSBTdFBvcFBsYWNlbWVudC5UT1BfRU5EOlxuICAgICAgICAgICAgY29vcmRzLnkgPSBjbGllbnRSZWN0LmhlaWdodCAqIC0xO1xuICAgICAgICAgICAgY29vcmRzLnggPSBjbGllbnRSZWN0LndpZHRoO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGNvb3Jkcy54ID0gTWF0aC5jZWlsKGNvb3Jkcy54ICsgdGhpcy5vZmZzZXQueCAtIGRpcmVjdGlvbik7XG4gICAgICBjb29yZHMueSA9IE1hdGguY2VpbChjb29yZHMueSArIHRoaXMub2Zmc2V0LnkpO1xuXG4gICAgICByZXR1cm4gY29vcmRzO1xuICAgfVxufVxuIl19