UNPKG

@universal-material/angular

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0.

78 lines 9.96 kB
import { ContentChild, Directive, HostListener, Input } from '@angular/core'; import { DropdownToggleDirective } from './dropdown-toggle.directive'; import { DropdownMenuDirective } from './dropdown-menu.directive'; import * as i0 from "@angular/core"; export class DropdownDirective { _windowClick() { if (this._justToggle) { this._justToggle = false; return; } if ((this.autoClose === 'outside' || this.autoClose) && this._dropdownMenu.show) { this._dropdownMenu.show = false; } } constructor(_elementRef) { this._elementRef = _elementRef; this._justToggle = false; this.autoClose = true; this._dropdownToggle = null; } _autoClose() { if (this.autoClose && this._dropdownMenu.show) { this._dropdownMenu.show = false; } } ngAfterContentInit() { this._dropdownToggle?.click.subscribe(() => this.toggle()); this._dropdownMenu.click.subscribe(() => { if (this.autoClose && this.autoClose !== 'outside' && this._dropdownMenu.show) { this._dropdownMenu.show = false; } }); } toggle() { this._justToggle = true; if (!this._dropdownMenu.show) { this.open(); return; } this.close(); } open() { if (this._dropdownMenu.direction && this._dropdownMenu.direction.indexOf('auto') === 0) { this._dropdownMenu.setDirectionClass(`${this.openDropdownUpOrDown()}${this._dropdownMenu.direction.substring(4)}`); } this._dropdownMenu.show = true; } close() { this._dropdownMenu.show = false; } openDropdownUpOrDown() { const menuElement = this._dropdownMenu._elementRef.nativeElement; const dropdownElement = this._elementRef.nativeElement; const rect = dropdownElement.getBoundingClientRect(); const styles = getComputedStyle(menuElement); return window.innerHeight < rect.y + rect.height + parseInt(styles.height, 10) ? 'up' : 'down'; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: DropdownDirective, selector: "[uDropdown]", inputs: { autoClose: "autoClose" }, host: { listeners: { "window:click": "_windowClick()" } }, queries: [{ propertyName: "_dropdownToggle", first: true, predicate: DropdownToggleDirective, descendants: true }, { propertyName: "_dropdownMenu", first: true, predicate: DropdownMenuDirective, descendants: true }], ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: DropdownDirective, decorators: [{ type: Directive, args: [{ selector: '[uDropdown]' }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { autoClose: [{ type: Input }], _dropdownToggle: [{ type: ContentChild, args: [DropdownToggleDirective] }], _dropdownMenu: [{ type: ContentChild, args: [DropdownMenuDirective] }], _windowClick: [{ type: HostListener, args: ['window:click'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcGRvd24uZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2Ryb3Bkb3duL2Ryb3Bkb3duLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsWUFBWSxFQUNaLFNBQVMsRUFHVCxZQUFZLEVBQ1osS0FBSyxFQUVOLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDOztBQUtsRSxNQUFNLE9BQU8saUJBQWlCO0lBU0UsWUFBWTtRQUN4QyxJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDcEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7WUFDekIsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRTtZQUMvRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7U0FDakM7SUFDSCxDQUFDO0lBRUQsWUFBNkIsV0FBdUI7UUFBdkIsZ0JBQVcsR0FBWCxXQUFXLENBQVk7UUFsQjVDLGdCQUFXLEdBQUcsS0FBSyxDQUFDO1FBRW5CLGNBQVMsR0FBd0IsSUFBSSxDQUFDO1FBRVIsb0JBQWUsR0FBbUMsSUFBSSxDQUFDO0lBZ0I5RixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDN0MsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsS0FBSyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVELGtCQUFrQjtRQUVoQixJQUFJLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFM0QsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUV0QyxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxTQUFTLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7Z0JBQzdFLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQzthQUNqQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU07UUFDSixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztRQUV4QixJQUFJLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUU7WUFDNUIsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2YsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdEYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDcEg7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxLQUFLLENBQUM7SUFDbEMsQ0FBQztJQUVELG9CQUFvQjtRQUNsQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDakUsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLHFCQUFxQixFQUFhLENBQUM7UUFDaEUsTUFBTSxNQUFNLEdBQUcsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDN0MsT0FBTyxNQUFNLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDakcsQ0FBQzsrR0F2RVUsaUJBQWlCO21HQUFqQixpQkFBaUIsK0xBTWQsdUJBQXVCLGdGQUN2QixxQkFBcUI7OzRGQVB4QixpQkFBaUI7a0JBSDdCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7aUJBQ3hCO2lHQUtVLFNBQVM7c0JBQWpCLEtBQUs7Z0JBRWlDLGVBQWU7c0JBQXJELFlBQVk7dUJBQUMsdUJBQXVCO2dCQUNBLGFBQWE7c0JBQWpELFlBQVk7dUJBQUMscUJBQXFCO2dCQUVMLFlBQVk7c0JBQXpDLFlBQVk7dUJBQUMsY0FBYyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRGlyZWN0aXZlLFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIEhvc3RMaXN0ZW5lcixcbiAgSW5wdXQsXG4gIE91dHB1dFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUgfSBmcm9tICcuL2Ryb3Bkb3duLXRvZ2dsZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgRHJvcGRvd25NZW51RGlyZWN0aXZlIH0gZnJvbSAnLi9kcm9wZG93bi1tZW51LmRpcmVjdGl2ZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t1RHJvcGRvd25dJ1xufSlcbmV4cG9ydCBjbGFzcyBEcm9wZG93bkRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xuXG4gIHByaXZhdGUgX2p1c3RUb2dnbGUgPSBmYWxzZTtcblxuICBASW5wdXQoKSBhdXRvQ2xvc2U6IGJvb2xlYW4gfCAnb3V0c2lkZScgPSB0cnVlO1xuXG4gIEBDb250ZW50Q2hpbGQoRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUpIF9kcm9wZG93blRvZ2dsZTogRHJvcGRvd25Ub2dnbGVEaXJlY3RpdmUgfCBudWxsID0gbnVsbDtcbiAgQENvbnRlbnRDaGlsZChEcm9wZG93bk1lbnVEaXJlY3RpdmUpIF9kcm9wZG93bk1lbnUhOiBEcm9wZG93bk1lbnVEaXJlY3RpdmU7XG5cbiAgQEhvc3RMaXN0ZW5lcignd2luZG93OmNsaWNrJykgX3dpbmRvd0NsaWNrKCkge1xuICAgIGlmICh0aGlzLl9qdXN0VG9nZ2xlKSB7XG4gICAgICB0aGlzLl9qdXN0VG9nZ2xlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCh0aGlzLmF1dG9DbG9zZSA9PT0gJ291dHNpZGUnIHx8IHRoaXMuYXV0b0Nsb3NlKSAmJiB0aGlzLl9kcm9wZG93bk1lbnUuc2hvdykge1xuICAgICAgdGhpcy5fZHJvcGRvd25NZW51LnNob3cgPSBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IF9lbGVtZW50UmVmOiBFbGVtZW50UmVmKSB7XG5cbiAgfVxuXG4gIHByaXZhdGUgX2F1dG9DbG9zZSgpIHtcbiAgICBpZiAodGhpcy5hdXRvQ2xvc2UgJiYgdGhpcy5fZHJvcGRvd25NZW51LnNob3cpIHtcbiAgICAgIHRoaXMuX2Ryb3Bkb3duTWVudS5zaG93ID0gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xuXG4gICAgdGhpcy5fZHJvcGRvd25Ub2dnbGU/LmNsaWNrLnN1YnNjcmliZSgoKSA9PiB0aGlzLnRvZ2dsZSgpKTtcblxuICAgIHRoaXMuX2Ryb3Bkb3duTWVudS5jbGljay5zdWJzY3JpYmUoKCkgPT4ge1xuXG4gICAgICBpZiAodGhpcy5hdXRvQ2xvc2UgJiYgdGhpcy5hdXRvQ2xvc2UgIT09ICdvdXRzaWRlJyAmJiB0aGlzLl9kcm9wZG93bk1lbnUuc2hvdykge1xuICAgICAgICB0aGlzLl9kcm9wZG93bk1lbnUuc2hvdyA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMuX2p1c3RUb2dnbGUgPSB0cnVlO1xuXG4gICAgaWYgKCF0aGlzLl9kcm9wZG93bk1lbnUuc2hvdykge1xuICAgICAgdGhpcy5vcGVuKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5jbG9zZSgpO1xuICB9XG5cbiAgb3BlbigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5fZHJvcGRvd25NZW51LmRpcmVjdGlvbiAmJiB0aGlzLl9kcm9wZG93bk1lbnUuZGlyZWN0aW9uLmluZGV4T2YoJ2F1dG8nKSA9PT0gMCkge1xuICAgICAgdGhpcy5fZHJvcGRvd25NZW51LnNldERpcmVjdGlvbkNsYXNzKGAke3RoaXMub3BlbkRyb3Bkb3duVXBPckRvd24oKX0ke3RoaXMuX2Ryb3Bkb3duTWVudS5kaXJlY3Rpb24uc3Vic3RyaW5nKDQpfWApO1xuICAgIH1cblxuICAgIHRoaXMuX2Ryb3Bkb3duTWVudS5zaG93ID0gdHJ1ZTtcbiAgfVxuXG4gIGNsb3NlKCk6IHZvaWQge1xuICAgIHRoaXMuX2Ryb3Bkb3duTWVudS5zaG93ID0gZmFsc2U7XG4gIH1cblxuICBvcGVuRHJvcGRvd25VcE9yRG93bigpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1lbnVFbGVtZW50ID0gdGhpcy5fZHJvcGRvd25NZW51Ll9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgY29uc3QgZHJvcGRvd25FbGVtZW50ID0gdGhpcy5fZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuICAgIGNvbnN0IHJlY3QgPSBkcm9wZG93bkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkgYXMgRE9NUmVjdDtcbiAgICBjb25zdCBzdHlsZXMgPSBnZXRDb21wdXRlZFN0eWxlKG1lbnVFbGVtZW50KTtcbiAgICByZXR1cm4gd2luZG93LmlubmVySGVpZ2h0IDwgcmVjdC55ICsgcmVjdC5oZWlnaHQgKyBwYXJzZUludChzdHlsZXMuaGVpZ2h0LCAxMCkgPyAndXAnIDogJ2Rvd24nO1xuICB9XG59XG5cbiJdfQ==