@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
JavaScript
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==