UNPKG

carbon-components-angular

Version:
140 lines 15.8 kB
import { Component, HostListener, Input, HostBinding } from "@angular/core"; import * as i0 from "@angular/core"; /** * Get started with importing the module: * * ```typescript * import { ContextMenuModule } from 'carbon-components-angular'; * ``` * * [See demo](../../?path=/story/components-context-menu--basic) */ export class ContextMenuComponent { constructor(elementRef) { this.elementRef = elementRef; this.open = false; this.position = { left: 0, top: 0 }; this.size = "lg"; this.role = "menu"; this.tabindex = "-1"; /** * @todo - convert to getter in v6, should resolve expression has changed * after switching to on OnPush Change Detection Strategy */ this.iconClass = false; } get hostClass() { const open = this.open ? "cds--menu--open cds--menu--shown" : ""; return `cds--menu cds--autoalign cds--menu--${this.size} ${open}`; } get leftPosition() { return this.position.left; } get topPosition() { return this.position.top; } ngOnChanges(changes) { if (changes.open && changes.open.currentValue) { this.focusMenu(); } } ngAfterViewInit() { setTimeout(() => { const nativeElement = this.elementRef.nativeElement; if (nativeElement) { this.iconClass = !!nativeElement .querySelector(".cds--menu-item .cds--menu-item__icon svg"); } }); } focusMenu() { // wait until the next tick to let the DOM settle before changing the focus setTimeout(() => { const list = this.elementRef.nativeElement; const firstOption = list.querySelector(".cds--menu-item"); firstOption.focus(); }); } handleNavigation(event) { const list = this.elementRef.nativeElement; const subMenus = Array.from(list.querySelectorAll("cds-context-menu[role=menu]")); const menuItems = Array.from(list.querySelectorAll(".cds--menu-item")) .filter(menuItem => !subMenus.some(subMenu => subMenu.contains(menuItem))); const currentIndex = menuItems.findIndex(menuItem => parseInt(menuItem.getAttribute("tabindex"), 10) === 0); const currentMenuItem = menuItems[currentIndex]; switch (event.key) { case "ArrowDown": { if (document.activeElement === list) { menuItems[0].focus(); } else { if (currentIndex !== -1 && currentIndex < menuItems.length - 1) { menuItems[currentIndex + 1].focus(); } } break; } case "ArrowUp": { if (document.activeElement === list) { menuItems[menuItems.length - 1].focus(); } else { if (currentIndex !== -1 && currentIndex > 0) { menuItems[currentIndex - 1].focus(); } } break; } case "ArrowRight": { if (currentIndex !== -1 && subMenus.some(subMenu => currentMenuItem.contains(subMenu))) { currentMenuItem.click(); } break; } case "ArrowLeft": { const parent = currentMenuItem.parentElement.closest(".cds--menu-item, .cds--menu-item"); if (parent) { parent.focus(); } break; } } } } ContextMenuComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); ContextMenuComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ContextMenuComponent, selector: "cds-menu, cds-context-menu, ibm-context-menu", inputs: { open: "open", position: "position", size: "size" }, host: { listeners: { "keydown": "handleNavigation($event)" }, properties: { "class": "this.hostClass", "attr.role": "this.role", "attr.tabindex": "this.tabindex", "style.left.px": "this.leftPosition", "style.top.px": "this.topPosition", "class.cds--menu--with-icons": "this.iconClass" } }, usesOnChanges: true, ngImport: i0, template: ` <ng-content></ng-content> `, isInline: true, styles: [":host{display:block}\n"] }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ContextMenuComponent, decorators: [{ type: Component, args: [{ selector: "cds-menu, cds-context-menu, ibm-context-menu", template: ` <ng-content></ng-content> `, styles: [":host{display:block}\n"] }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { open: [{ type: Input }], position: [{ type: Input }], size: [{ type: Input }], hostClass: [{ type: HostBinding, args: ["class"] }], role: [{ type: HostBinding, args: ["attr.role"] }], tabindex: [{ type: HostBinding, args: ["attr.tabindex"] }], leftPosition: [{ type: HostBinding, args: ["style.left.px"] }], topPosition: [{ type: HostBinding, args: ["style.top.px"] }], iconClass: [{ type: HostBinding, args: ["class.cds--menu--with-icons"] }], handleNavigation: [{ type: HostListener, args: ["keydown", ["$event"]] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsV0FBVyxFQUVYLE1BQU0sZUFBZSxDQUFDOztBQUV2Qjs7Ozs7Ozs7R0FRRztBQVlILE1BQU0sT0FBTyxvQkFBb0I7SUF3QmhDLFlBQXNCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF2Qm5DLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDYixhQUFRLEdBQUc7WUFDbkIsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztTQUNOLENBQUM7UUFDTyxTQUFJLEdBQThCLElBQUksQ0FBQztRQU90QixTQUFJLEdBQUcsTUFBTSxDQUFDO1FBQ1YsYUFBUSxHQUFHLElBQUksQ0FBQztRQUk5Qzs7O1dBR0c7UUFDeUMsY0FBUyxHQUFHLEtBQUssQ0FBQztJQUVkLENBQUM7SUFoQmpELElBQTBCLFNBQVM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsa0NBQWtDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRSxPQUFPLHVDQUF1QyxJQUFJLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO0lBQ25FLENBQUM7SUFJRCxJQUFrQyxZQUFZLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDL0UsSUFBaUMsV0FBVyxLQUFLLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBVTVFLFdBQVcsQ0FBQyxPQUFzQjtRQUNqQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxZ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RixlQUFlLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ3hCO2dCQUNELE1BQU07YUFDTjtZQUNELEtBQUssV0FBVyxDQUFDLENBQUM7Z0JBQ2pCLE1BQU0sTUFBTSxHQUFHLGVBQWUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLGtDQUFrQyxDQUFnQixDQUFDO2dCQUN4RyxJQUFJLE1BQU0sRUFBRTtvQkFDWCxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2Y7Z0JBQ0QsTUFBTTthQUNOO1NBQ0Q7SUFDRixDQUFDOztpSEFqR1csb0JBQW9CO3FHQUFwQixvQkFBb0IseWNBVHRCOztFQUVUOzJGQU9XLG9CQUFvQjtrQkFYaEMsU0FBUzsrQkFDQyw4Q0FBOEMsWUFDOUM7O0VBRVQ7aUdBUVEsSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBSUcsSUFBSTtzQkFBWixLQUFLO2dCQUVvQixTQUFTO3NCQUFsQyxXQUFXO3VCQUFDLE9BQU87Z0JBS00sSUFBSTtzQkFBN0IsV0FBVzt1QkFBQyxXQUFXO2dCQUNNLFFBQVE7c0JBQXJDLFdBQVc7dUJBQUMsZUFBZTtnQkFDTSxZQUFZO3NCQUE3QyxXQUFXO3VCQUFDLGVBQWU7Z0JBQ0ssV0FBVztzQkFBM0MsV0FBVzt1QkFBQyxjQUFjO2dCQU1pQixTQUFTO3NCQUFwRCxXQUFXO3VCQUFDLDZCQUE2QjtnQkE4QjFDLGdCQUFnQjtzQkFEZixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdENvbXBvbmVudCxcblx0RWxlbWVudFJlZixcblx0SG9zdExpc3RlbmVyLFxuXHRJbnB1dCxcblx0U2ltcGxlQ2hhbmdlcyxcblx0T25DaGFuZ2VzLFxuXHRIb3N0QmluZGluZyxcblx0QWZ0ZXJWaWV3SW5pdFxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29udGV4dE1lbnVNb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtY29udGV4dC1tZW51LS1iYXNpYylcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1tZW51LCBjZHMtY29udGV4dC1tZW51LCBpYm0tY29udGV4dC1tZW51XCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0XHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cdGAsXG5cdHN0eWxlczogW2Bcblx0XHQ6aG9zdCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHR9XG5cdGBdXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblx0QElucHV0KCkgb3BlbiA9IGZhbHNlO1xuXHRASW5wdXQoKSBwb3NpdGlvbiA9IHtcblx0XHRsZWZ0OiAwLFxuXHRcdHRvcDogMFxuXHR9O1xuXHRASW5wdXQoKSBzaXplOiBcInhzXCIgfCBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgPSBcImxnXCI7XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3NcIikgZ2V0IGhvc3RDbGFzcygpIHtcblx0XHRjb25zdCBvcGVuID0gdGhpcy5vcGVuID8gXCJjZHMtLW1lbnUtLW9wZW4gY2RzLS1tZW51LS1zaG93blwiIDogXCJcIjtcblx0XHRyZXR1cm4gYGNkcy0tbWVudSBjZHMtLWF1dG9hbGlnbiBjZHMtLW1lbnUtLSR7dGhpcy5zaXplfSAke29wZW59YDtcblx0fVxuXG5cdEBIb3N0QmluZGluZyhcImF0dHIucm9sZVwiKSByb2xlID0gXCJtZW51XCI7XG5cdEBIb3N0QmluZGluZyhcImF0dHIudGFiaW5kZXhcIikgdGFiaW5kZXggPSBcIi0xXCI7XG5cdEBIb3N0QmluZGluZyhcInN0eWxlLmxlZnQucHhcIikgZ2V0IGxlZnRQb3NpdGlvbigpIHsgcmV0dXJuIHRoaXMucG9zaXRpb24ubGVmdDsgfVxuXHRASG9zdEJpbmRpbmcoXCJzdHlsZS50b3AucHhcIikgZ2V0IHRvcFBvc2l0aW9uKCkgeyByZXR1cm4gdGhpcy5wb3NpdGlvbi50b3A7IH1cblxuXHQvKipcblx0ICogQHRvZG8gLSBjb252ZXJ0IHRvIGdldHRlciBpbiB2Niwgc2hvdWxkIHJlc29sdmUgZXhwcmVzc2lvbiBoYXMgY2hhbmdlZFxuXHQgKiBhZnRlciBzd2l0Y2hpbmcgdG8gb24gT25QdXNoIENoYW5nZSBEZXRlY3Rpb24gU3RyYXRlZ3lcblx0ICovXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbWVudS0td2l0aC1pY29uc1wiKSBpY29uQ2xhc3MgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzLm9wZW4gJiYgY2hhbmdlcy5vcGVuLmN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0dGhpcy5mb2N1c01lbnUoKTtcblx0XHR9XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAobmF0aXZlRWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmljb25DbGFzcyA9ICEhbmF0aXZlRWxlbWVudFxuXHRcdFx0XHRcdC5xdWVyeVNlbGVjdG9yKFwiLmNkcy0tbWVudS1pdGVtIC5jZHMtLW1lbnUtaXRlbV9faWNvbiBzdmdcIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRmb2N1c01lbnUoKSB7XG5cdFx0Ly8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aWNrIHRvIGxldCB0aGUgRE9NIHNldHRsZSBiZWZvcmUgY2hhbmdpbmcgdGhlIGZvY3VzXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRjb25zdCBsaXN0OiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0Y29uc3QgZmlyc3RPcHRpb24gPSBsaXN0LnF1ZXJ5U2VsZWN0b3IoXCIuY2RzLS1tZW51LWl0ZW1cIikgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRmaXJzdE9wdGlvbi5mb2N1cygpO1xuXHRcdH0pO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcImtleWRvd25cIiwgW1wiJGV2ZW50XCJdKVxuXHRoYW5kbGVOYXZpZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0Y29uc3QgbGlzdDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblx0XHRjb25zdCBzdWJNZW51czogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20obGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwiY2RzLWNvbnRleHQtbWVudVtyb2xlPW1lbnVdXCIpKTtcblx0XHRjb25zdCBtZW51SXRlbXM6IEhUTUxFbGVtZW50W10gPSAoXG5cdFx0XHRBcnJheS5mcm9tKGxpc3QucXVlcnlTZWxlY3RvckFsbChcIi5jZHMtLW1lbnUtaXRlbVwiKSkgYXMgSFRNTEVsZW1lbnRbXSlcblx0XHRcdFx0LmZpbHRlcihtZW51SXRlbSA9PiAhc3ViTWVudXMuc29tZShzdWJNZW51ID0+IHN1Yk1lbnUuY29udGFpbnMobWVudUl0ZW0pKVxuXHRcdCk7XG5cdFx0Y29uc3QgY3VycmVudEluZGV4ID0gbWVudUl0ZW1zLmZpbmRJbmRleChtZW51SXRlbSA9PiBwYXJzZUludChtZW51SXRlbS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSwgMTApID09PSAwKTtcblx0XHRjb25zdCBjdXJyZW50TWVudUl0ZW0gPSBtZW51SXRlbXNbY3VycmVudEluZGV4XTtcblxuXHRcdHN3aXRjaCAoZXZlbnQua2V5KSB7XG5cdFx0XHRjYXNlIFwiQXJyb3dEb3duXCI6IHtcblx0XHRcdFx0aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxpc3QpIHtcblx0XHRcdFx0XHRtZW51SXRlbXNbMF0uZm9jdXMoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoY3VycmVudEluZGV4ICE9PSAtMSAmJiBjdXJyZW50SW5kZXggPCBtZW51SXRlbXMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0bWVudUl0ZW1zW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIkFycm93VXBcIjoge1xuXHRcdFx0XHRpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbGlzdCkge1xuXHRcdFx0XHRcdG1lbnVJdGVtc1ttZW51SXRlbXMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoY3VycmVudEluZGV4ICE9PSAtMSAmJiBjdXJyZW50SW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRtZW51SXRlbXNbY3VycmVudEluZGV4IC0gMV0uZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiQXJyb3dSaWdodFwiOiB7XG5cdFx0XHRcdGlmIChjdXJyZW50SW5kZXggIT09IC0xICYmIHN1Yk1lbnVzLnNvbWUoc3ViTWVudSA9PiBjdXJyZW50TWVudUl0ZW0uY29udGFpbnMoc3ViTWVudSkpKSB7XG5cdFx0XHRcdFx0Y3VycmVudE1lbnVJdGVtLmNsaWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gY3VycmVudE1lbnVJdGVtLnBhcmVudEVsZW1lbnQuY2xvc2VzdChcIi5jZHMtLW1lbnUtaXRlbSwgLmNkcy0tbWVudS1pdGVtXCIpIGFzIEhUTUxFbGVtZW50O1xuXHRcdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdFx0cGFyZW50LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXX0=