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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dC1tZW51LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb250ZXh0LW1lbnUvY29udGV4dC1tZW51LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsV0FBVyxFQUdYLE1BQU0sZUFBZSxDQUFDOztBQUV2Qjs7Ozs7Ozs7R0FRRztBQVlILE1BQU0sT0FBTyxvQkFBb0I7SUF3QmhDLFlBQXNCLFVBQXNCO1FBQXRCLGVBQVUsR0FBVixVQUFVLENBQVk7UUF2Qm5DLFNBQUksR0FBRyxLQUFLLENBQUM7UUFDYixhQUFRLEdBQUc7WUFDbkIsSUFBSSxFQUFFLENBQUM7WUFDUCxHQUFHLEVBQUUsQ0FBQztTQUNOLENBQUM7UUFDTyxTQUFJLEdBQXVCLElBQUksQ0FBQztRQU9mLFNBQUksR0FBRyxNQUFNLENBQUM7UUFDVixhQUFRLEdBQUcsSUFBSSxDQUFDO1FBSTlDOzs7V0FHRztRQUN5QyxjQUFTLEdBQUcsS0FBSyxDQUFDO0lBRWQsQ0FBQztJQWhCakQsSUFBMEIsU0FBUztRQUNsQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2pFLE9BQU8sdUNBQXVDLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7SUFDbkUsQ0FBQztJQUlELElBQWtDLFlBQVksS0FBSyxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMvRSxJQUFpQyxXQUFXLEtBQUssT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFVNUUsV0FBVyxDQUFDLE9BQXNCO1FBQ2pDLElBQUksT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFlB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LGVBQWUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDeEI7Z0JBQ0QsTUFBTTthQUNOO1lBQ0QsS0FBSyxXQUFXLENBQUMsQ0FBQztnQkFDakIsTUFBTSxNQUFNLEdBQUcsZUFBZSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQWdCLENBQUM7Z0JBQ3hHLElBQUksTUFBTSxFQUFFO29CQUNYLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDZjtnQkFDRCxNQUFNO2FBQ047U0FDRDtJQUNGLENBQUM7O2lIQWpHVyxvQkFBb0I7cUdBQXBCLG9CQUFvQix5Y0FUdEI7O0VBRVQ7MkZBT1csb0JBQW9CO2tCQVhoQyxTQUFTOytCQUNDLDhDQUE4QyxZQUM5Qzs7RUFFVDtpR0FRUSxJQUFJO3NCQUFaLEtBQUs7Z0JBQ0csUUFBUTtzQkFBaEIsS0FBSztnQkFJRyxJQUFJO3NCQUFaLEtBQUs7Z0JBRW9CLFNBQVM7c0JBQWxDLFdBQVc7dUJBQUMsT0FBTztnQkFLTSxJQUFJO3NCQUE3QixXQUFXO3VCQUFDLFdBQVc7Z0JBQ00sUUFBUTtzQkFBckMsV0FBVzt1QkFBQyxlQUFlO2dCQUNNLFlBQVk7c0JBQTdDLFdBQVc7dUJBQUMsZUFBZTtnQkFDSyxXQUFXO3NCQUEzQyxXQUFXO3VCQUFDLGNBQWM7Z0JBTWlCLFNBQVM7c0JBQXBELFdBQVc7dUJBQUMsNkJBQTZCO2dCQThCMUMsZ0JBQWdCO3NCQURmLFlBQVk7dUJBQUMsU0FBUyxFQUFFLENBQUMsUUFBUSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q29tcG9uZW50LFxuXHRFbGVtZW50UmVmLFxuXHRIb3N0TGlzdGVuZXIsXG5cdElucHV0LFxuXHRTaW1wbGVDaGFuZ2VzLFxuXHRPbkNoYW5nZXMsXG5cdEhvc3RCaW5kaW5nLFxuXHRBZnRlclZpZXdJbml0LFxuXHRDaGFuZ2VEZXRlY3RvclJlZlxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuXG4vKipcbiAqIEdldCBzdGFydGVkIHdpdGggaW1wb3J0aW5nIHRoZSBtb2R1bGU6XG4gKlxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29udGV4dE1lbnVNb2R1bGUgfSBmcm9tICdjYXJib24tY29tcG9uZW50cy1hbmd1bGFyJztcbiAqIGBgYFxuICpcbiAqIFtTZWUgZGVtb10oLi4vLi4vP3BhdGg9L3N0b3J5L2NvbXBvbmVudHMtY29udGV4dC1tZW51LS1iYXNpYylcbiAqL1xuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiBcImNkcy1tZW51LCBjZHMtY29udGV4dC1tZW51LCBpYm0tY29udGV4dC1tZW51XCIsXG5cdHRlbXBsYXRlOiBgXG5cdFx0XHQ8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG5cdGAsXG5cdHN0eWxlczogW2Bcblx0XHQ6aG9zdCB7XG5cdFx0XHRkaXNwbGF5OiBibG9jaztcblx0XHR9XG5cdGBdXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcblx0QElucHV0KCkgb3BlbiA9IGZhbHNlO1xuXHRASW5wdXQoKSBwb3NpdGlvbiA9IHtcblx0XHRsZWZ0OiAwLFxuXHRcdHRvcDogMFxuXHR9O1xuXHRASW5wdXQoKSBzaXplOiBcInNtXCIgfCBcIm1kXCIgfCBcImxnXCIgPSBcImxnXCI7XG5cblx0QEhvc3RCaW5kaW5nKFwiY2xhc3NcIikgZ2V0IGhvc3RDbGFzcygpIHtcblx0XHRjb25zdCBvcGVuID0gdGhpcy5vcGVuID8gXCJjZHMtLW1lbnUtLW9wZW4gY2RzLS1tZW51LS1zaG93blwiIDogXCJcIjtcblx0XHRyZXR1cm4gYGNkcy0tbWVudSBjZHMtLWF1dG9hbGlnbiBjZHMtLW1lbnUtLSR7dGhpcy5zaXplfSAke29wZW59YDtcblx0fVxuXG5cdEBIb3N0QmluZGluZyhcImF0dHIucm9sZVwiKSByb2xlID0gXCJtZW51XCI7XG5cdEBIb3N0QmluZGluZyhcImF0dHIudGFiaW5kZXhcIikgdGFiaW5kZXggPSBcIi0xXCI7XG5cdEBIb3N0QmluZGluZyhcInN0eWxlLmxlZnQucHhcIikgZ2V0IGxlZnRQb3NpdGlvbigpIHsgcmV0dXJuIHRoaXMucG9zaXRpb24ubGVmdDsgfVxuXHRASG9zdEJpbmRpbmcoXCJzdHlsZS50b3AucHhcIikgZ2V0IHRvcFBvc2l0aW9uKCkgeyByZXR1cm4gdGhpcy5wb3NpdGlvbi50b3A7IH1cblxuXHQvKipcblx0ICogQHRvZG8gLSBjb252ZXJ0IHRvIGdldHRlciBpbiB2Niwgc2hvdWxkIHJlc29sdmUgZXhwcmVzc2lvbiBoYXMgY2hhbmdlZFxuXHQgKiBhZnRlciBzd2l0Y2hpbmcgdG8gb24gT25QdXNoIENoYW5nZSBEZXRlY3Rpb24gU3RyYXRlZ3lcblx0ICovXG5cdEBIb3N0QmluZGluZyhcImNsYXNzLmNkcy0tbWVudS0td2l0aC1pY29uc1wiKSBpY29uQ2xhc3MgPSBmYWxzZTtcblxuXHRjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgZWxlbWVudFJlZjogRWxlbWVudFJlZikgeyB9XG5cblx0bmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuXHRcdGlmIChjaGFuZ2VzLm9wZW4gJiYgY2hhbmdlcy5vcGVuLmN1cnJlbnRWYWx1ZSkge1xuXHRcdFx0dGhpcy5mb2N1c01lbnUoKTtcblx0XHR9XG5cdH1cblxuXHRuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRjb25zdCBuYXRpdmVFbGVtZW50ID0gdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQ7XG5cdFx0XHRpZiAobmF0aXZlRWxlbWVudCkge1xuXHRcdFx0XHR0aGlzLmljb25DbGFzcyA9ICEhbmF0aXZlRWxlbWVudFxuXHRcdFx0XHRcdC5xdWVyeVNlbGVjdG9yKFwiLmNkcy0tbWVudS1pdGVtIC5jZHMtLW1lbnUtaXRlbV9faWNvbiBzdmdcIik7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblxuXHRmb2N1c01lbnUoKSB7XG5cdFx0Ly8gd2FpdCB1bnRpbCB0aGUgbmV4dCB0aWNrIHRvIGxldCB0aGUgRE9NIHNldHRsZSBiZWZvcmUgY2hhbmdpbmcgdGhlIGZvY3VzXG5cdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRjb25zdCBsaXN0OiBIVE1MRWxlbWVudCA9IHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXHRcdFx0Y29uc3QgZmlyc3RPcHRpb24gPSBsaXN0LnF1ZXJ5U2VsZWN0b3IoXCIuY2RzLS1tZW51LWl0ZW1cIikgYXMgSFRNTEVsZW1lbnQ7XG5cdFx0XHRmaXJzdE9wdGlvbi5mb2N1cygpO1xuXHRcdH0pO1xuXHR9XG5cblx0QEhvc3RMaXN0ZW5lcihcImtleWRvd25cIiwgW1wiJGV2ZW50XCJdKVxuXHRoYW5kbGVOYXZpZ2F0aW9uKGV2ZW50OiBLZXlib2FyZEV2ZW50KSB7XG5cdFx0Y29uc3QgbGlzdDogSFRNTEVsZW1lbnQgPSB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcblx0XHRjb25zdCBzdWJNZW51czogSFRNTEVsZW1lbnRbXSA9IEFycmF5LmZyb20obGlzdC5xdWVyeVNlbGVjdG9yQWxsKFwiY2RzLWNvbnRleHQtbWVudVtyb2xlPW1lbnVdXCIpKTtcblx0XHRjb25zdCBtZW51SXRlbXM6IEhUTUxFbGVtZW50W10gPSAoXG5cdFx0XHRBcnJheS5mcm9tKGxpc3QucXVlcnlTZWxlY3RvckFsbChcIi5jZHMtLW1lbnUtaXRlbVwiKSkgYXMgSFRNTEVsZW1lbnRbXSlcblx0XHRcdFx0LmZpbHRlcihtZW51SXRlbSA9PiAhc3ViTWVudXMuc29tZShzdWJNZW51ID0+IHN1Yk1lbnUuY29udGFpbnMobWVudUl0ZW0pKVxuXHRcdCk7XG5cdFx0Y29uc3QgY3VycmVudEluZGV4ID0gbWVudUl0ZW1zLmZpbmRJbmRleChtZW51SXRlbSA9PiBwYXJzZUludChtZW51SXRlbS5nZXRBdHRyaWJ1dGUoXCJ0YWJpbmRleFwiKSwgMTApID09PSAwKTtcblx0XHRjb25zdCBjdXJyZW50TWVudUl0ZW0gPSBtZW51SXRlbXNbY3VycmVudEluZGV4XTtcblxuXHRcdHN3aXRjaCAoZXZlbnQua2V5KSB7XG5cdFx0XHRjYXNlIFwiQXJyb3dEb3duXCI6IHtcblx0XHRcdFx0aWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxpc3QpIHtcblx0XHRcdFx0XHRtZW51SXRlbXNbMF0uZm9jdXMoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoY3VycmVudEluZGV4ICE9PSAtMSAmJiBjdXJyZW50SW5kZXggPCBtZW51SXRlbXMubGVuZ3RoIC0gMSkge1xuXHRcdFx0XHRcdFx0bWVudUl0ZW1zW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0Y2FzZSBcIkFycm93VXBcIjoge1xuXHRcdFx0XHRpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gbGlzdCkge1xuXHRcdFx0XHRcdG1lbnVJdGVtc1ttZW51SXRlbXMubGVuZ3RoIC0gMV0uZm9jdXMoKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpZiAoY3VycmVudEluZGV4ICE9PSAtMSAmJiBjdXJyZW50SW5kZXggPiAwKSB7XG5cdFx0XHRcdFx0XHRtZW51SXRlbXNbY3VycmVudEluZGV4IC0gMV0uZm9jdXMoKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiQXJyb3dSaWdodFwiOiB7XG5cdFx0XHRcdGlmIChjdXJyZW50SW5kZXggIT09IC0xICYmIHN1Yk1lbnVzLnNvbWUoc3ViTWVudSA9PiBjdXJyZW50TWVudUl0ZW0uY29udGFpbnMoc3ViTWVudSkpKSB7XG5cdFx0XHRcdFx0Y3VycmVudE1lbnVJdGVtLmNsaWNrKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRjYXNlIFwiQXJyb3dMZWZ0XCI6IHtcblx0XHRcdFx0Y29uc3QgcGFyZW50ID0gY3VycmVudE1lbnVJdGVtLnBhcmVudEVsZW1lbnQuY2xvc2VzdChcIi5jZHMtLW1lbnUtaXRlbSwgLmNkcy0tbWVudS1pdGVtXCIpIGFzIEhUTUxFbGVtZW50O1xuXHRcdFx0XHRpZiAocGFyZW50KSB7XG5cdFx0XHRcdFx0cGFyZW50LmZvY3VzKCk7XG5cdFx0XHRcdH1cblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG4iXX0=