@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
46 lines • 6.83 kB
JavaScript
import { Directive, inject, InjectionToken } from '@angular/core';
import { takeUntil } from 'rxjs/operators';
import { MenuItemType } from '../menu-item/menu-item-type.enum';
import { MenuTabbableItemDirective } from '../menu-tabbable-item/menu-tabbable-item.directive';
import * as i0 from "@angular/core";
export const FocusableItemToken = new InjectionToken('Focusable Option');
export class MenuItemCustomControlDirective extends MenuTabbableItemDirective {
constructor() {
super();
this._focusableControl = inject(FocusableItemToken, { optional: true });
/** Indicate the type of the menu item */
this.type = MenuItemType.Custom;
}
ngOnInit() {
// register this item in the MenuComponent
super.ngOnInit();
this._menu.opened
.pipe(takeUntil(this._onDestroy$))
.subscribe(() => {
// remove any existing tab index on component instance and have it handled by this directive
this._focusableControl?.setInputTabIndex(-1);
});
}
/** Focus this item with a given origin */
focus(origin) {
super.focus(origin);
this._focusableControl ? this._focusableControl.focus(origin) : this._elementRef.nativeElement.focus();
}
/** We want to remove the ability to shift+tab back into the parent element */
setTabIndex() {
super.setTabIndex(false);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MenuItemCustomControlDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: MenuItemCustomControlDirective, selector: "[uxMenuItemCustomControl]", host: { attributes: { "role": "menuitem" }, properties: { "class.ux-menu-item": "true" } }, usesInheritance: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: MenuItemCustomControlDirective, decorators: [{
type: Directive,
args: [{
selector: '[uxMenuItemCustomControl]',
host: {
'[class.ux-menu-item]': 'true',
'role': 'menuitem'
}
}]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVudS1pdGVtLWN1c3RvbS1jb250cm9sLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL21lbnUvbWVudS1pdGVtLWN1c3RvbS1jb250cm9sL21lbnUtaXRlbS1jdXN0b20tY29udHJvbC5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNyRixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLG9EQUFvRCxDQUFDOztBQUUvRixNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLGNBQWMsQ0FBbUIsa0JBQWtCLENBQUMsQ0FBQztBQVMzRixNQUFNLE9BQU8sOEJBQStCLFNBQVEseUJBQXlCO0lBTXpFO1FBQ0ksS0FBSyxFQUFFLENBQUM7UUFOSyxzQkFBaUIsR0FBRyxNQUFNLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUVwRix5Q0FBeUM7UUFDaEMsU0FBSSxHQUFpQixZQUFZLENBQUMsTUFBTSxDQUFDO0lBSWxELENBQUM7SUFFRCxRQUFRO1FBQ0osMENBQTBDO1FBQzFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUVqQixJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07YUFDWixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQzthQUNqQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBQ1osNEZBQTRGO1lBQzVGLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELENBQUMsQ0FBQyxDQUFDO0lBQ1gsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxLQUFLLENBQUMsTUFBbUI7UUFDckIsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNwQixJQUFJLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQzNHLENBQUM7SUFFRCw4RUFBOEU7SUFDcEUsV0FBVztRQUNqQixLQUFLLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7K0dBL0JRLDhCQUE4QjttR0FBOUIsOEJBQThCOzs0RkFBOUIsOEJBQThCO2tCQVAxQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLElBQUksRUFBRTt3QkFDRixzQkFBc0IsRUFBRSxNQUFNO3dCQUM5QixNQUFNLEVBQUUsVUFBVTtxQkFDckI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb2N1c2FibGVPcHRpb24sIEZvY3VzT3JpZ2luIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2ExMXknO1xuaW1wb3J0IHsgRGlyZWN0aXZlLCBpbmplY3QsIEluamVjdGlvblRva2VuLCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgRm9jdXNhYmxlQ29udHJvbCB9IGZyb20gJy4uL2ludGVyZmFjZXMvZm9jdXNhYmxlLWNvbnRyb2wuaW50ZXJmYWNlJztcbmltcG9ydCB7IE1lbnVJdGVtVHlwZSB9IGZyb20gJy4uL21lbnUtaXRlbS9tZW51LWl0ZW0tdHlwZS5lbnVtJztcbmltcG9ydCB7IE1lbnVUYWJiYWJsZUl0ZW1EaXJlY3RpdmUgfSBmcm9tICcuLi9tZW51LXRhYmJhYmxlLWl0ZW0vbWVudS10YWJiYWJsZS1pdGVtLmRpcmVjdGl2ZSc7XG5cbmV4cG9ydCBjb25zdCBGb2N1c2FibGVJdGVtVG9rZW4gPSBuZXcgSW5qZWN0aW9uVG9rZW48Rm9jdXNhYmxlQ29udHJvbD4oJ0ZvY3VzYWJsZSBPcHRpb24nKTtcblxuQERpcmVjdGl2ZSh7XG4gICAgc2VsZWN0b3I6ICdbdXhNZW51SXRlbUN1c3RvbUNvbnRyb2xdJyxcbiAgICBob3N0OiB7XG4gICAgICAgICdbY2xhc3MudXgtbWVudS1pdGVtXSc6ICd0cnVlJyxcbiAgICAgICAgJ3JvbGUnOiAnbWVudWl0ZW0nXG4gICAgfVxufSlcbmV4cG9ydCBjbGFzcyBNZW51SXRlbUN1c3RvbUNvbnRyb2xEaXJlY3RpdmUgZXh0ZW5kcyBNZW51VGFiYmFibGVJdGVtRGlyZWN0aXZlIGltcGxlbWVudHMgRm9jdXNhYmxlT3B0aW9uLCBPbkluaXQsIE9uRGVzdHJveSB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBfZm9jdXNhYmxlQ29udHJvbCA9IGluamVjdChGb2N1c2FibGVJdGVtVG9rZW4sIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAvKiogSW5kaWNhdGUgdGhlIHR5cGUgb2YgdGhlIG1lbnUgaXRlbSAqL1xuICAgIHJlYWRvbmx5IHR5cGU6IE1lbnVJdGVtVHlwZSA9IE1lbnVJdGVtVHlwZS5DdXN0b207XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgLy8gcmVnaXN0ZXIgdGhpcyBpdGVtIGluIHRoZSBNZW51Q29tcG9uZW50XG4gICAgICAgIHN1cGVyLm5nT25Jbml0KCk7XG5cbiAgICAgICAgdGhpcy5fbWVudS5vcGVuZWRcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kkKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIHJlbW92ZSBhbnkgZXhpc3RpbmcgdGFiIGluZGV4IG9uIGNvbXBvbmVudCBpbnN0YW5jZSBhbmQgaGF2ZSBpdCBoYW5kbGVkIGJ5IHRoaXMgZGlyZWN0aXZlXG4gICAgICAgICAgICAgICAgdGhpcy5fZm9jdXNhYmxlQ29udHJvbD8uc2V0SW5wdXRUYWJJbmRleCgtMSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKiogRm9jdXMgdGhpcyBpdGVtIHdpdGggYSBnaXZlbiBvcmlnaW4gKi9cbiAgICBmb2N1cyhvcmlnaW46IEZvY3VzT3JpZ2luKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLmZvY3VzKG9yaWdpbik7XG4gICAgICAgIHRoaXMuX2ZvY3VzYWJsZUNvbnRyb2wgPyB0aGlzLl9mb2N1c2FibGVDb250cm9sLmZvY3VzKG9yaWdpbikgOiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG5cbiAgICAvKiogV2Ugd2FudCB0byByZW1vdmUgdGhlIGFiaWxpdHkgdG8gc2hpZnQrdGFiIGJhY2sgaW50byB0aGUgcGFyZW50IGVsZW1lbnQgKi9cbiAgICBwcm90ZWN0ZWQgc2V0VGFiSW5kZXgoKTogdm9pZCB7XG4gICAgICAgIHN1cGVyLnNldFRhYkluZGV4KGZhbHNlKTtcbiAgICB9XG59XG4iXX0=