@ux-aspects/ux-aspects
Version:
Open source user interface framework for building modern, responsive, mobile big data applications
53 lines • 7.35 kB
JavaScript
import { Directive, ElementRef, HostBinding, HostListener, inject, Input } from '@angular/core';
import { Subject } from 'rxjs';
import { filter, map, takeUntil } from 'rxjs/operators';
import { SankeyFocusManager } from './sankey-focus-manager';
import * as i0 from "@angular/core";
export class SankeyNodeDirective {
constructor() {
this._focusManager = inject(SankeyFocusManager);
this._elementRef = inject(ElementRef);
/** Specify the tab index of the current item */
this.tabIndex = -1;
/** Unsubscribe from all observables on destroy */
this._onDestroy = new Subject();
}
ngOnInit() {
// Update the tabindex based on the current active item
this._focusManager.active$.pipe(map(item => item && item.node.id === this.node.node.id), takeUntil(this._onDestroy))
.subscribe(isActive => this.tabIndex = isActive ? 0 : -1);
// If this element should be focused perform the focus
this._focusManager.focused$.pipe(filter(node => node.node.id === this.node.node.id), takeUntil(this._onDestroy))
.subscribe(() => this._elementRef.nativeElement.focus());
}
ngOnDestroy() {
this._onDestroy.next();
this._onDestroy.complete();
}
onClick() {
this._focusManager.setActiveItem(this.node);
}
onKeydown(event) {
this._focusManager.onKeydown(event);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SankeyNodeDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.12", type: SankeyNodeDirective, selector: "[uxSankeyNode]", inputs: { node: ["uxSankeyNode", "node"] }, host: { listeners: { "click": "onClick()", "keydown": "onKeydown($event)" }, properties: { "tabIndex": "this.tabIndex" } }, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: SankeyNodeDirective, decorators: [{
type: Directive,
args: [{
selector: '[uxSankeyNode]',
}]
}], propDecorators: { node: [{
type: Input,
args: ['uxSankeyNode']
}], tabIndex: [{
type: HostBinding
}], onClick: [{
type: HostListener,
args: ['click']
}], onKeydown: [{
type: HostListener,
args: ['keydown', ['$event']]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Fua2V5LWNoYXJ0LW5vZGUuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvc2Fua2V5LWNoYXJ0L3NhbmtleS1jaGFydC1ub2RlLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQXFCLE1BQU0sZUFBZSxDQUFDO0FBQ25ILE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7O0FBSzVELE1BQU0sT0FBTyxtQkFBbUI7SUFIaEM7UUFJbUIsa0JBQWEsR0FBRyxNQUFNLENBQXdCLGtCQUFrQixDQUFDLENBQUM7UUFDbEUsZ0JBQVcsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFLbEQsZ0RBQWdEO1FBQ2pDLGFBQVEsR0FBVyxDQUFDLENBQUMsQ0FBQztRQUVyQyxrREFBa0Q7UUFDakMsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7S0EwQm5EO0lBeEJDLFFBQVE7UUFDTix1REFBdUQ7UUFDdkQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQ2pILFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsc0RBQXNEO1FBQ3RELElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzdHLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQzdELENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFHRCxPQUFPO1FBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFHRCxTQUFTLENBQUMsS0FBb0I7UUFDNUIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdEMsQ0FBQzsrR0FwQ1UsbUJBQW1CO21HQUFuQixtQkFBbUI7OzRGQUFuQixtQkFBbUI7a0JBSC9CLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGdCQUFnQjtpQkFDM0I7OEJBTXdCLElBQUk7c0JBQTFCLEtBQUs7dUJBQUMsY0FBYztnQkFHTixRQUFRO3NCQUF0QixXQUFXO2dCQXFCWixPQUFPO3NCQUROLFlBQVk7dUJBQUMsT0FBTztnQkFNckIsU0FBUztzQkFEUixZQUFZO3VCQUFDLFNBQVMsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBTYW5rZXlOb2RlTGluayB9IGZyb20gJy4vaW50ZXJmYWNlcy9ub2RlLWxpbmsuaW50ZXJmYWNlJztcbmltcG9ydCB7IFNhbmtleUZvY3VzTWFuYWdlciB9IGZyb20gJy4vc2Fua2V5LWZvY3VzLW1hbmFnZXInO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdXhTYW5rZXlOb2RlXScsXG59KVxuZXhwb3J0IGNsYXNzIFNhbmtleU5vZGVEaXJlY3RpdmU8VD4gaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZvY3VzTWFuYWdlciA9IGluamVjdDxTYW5rZXlGb2N1c01hbmFnZXI8VD4+KFNhbmtleUZvY3VzTWFuYWdlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgX2VsZW1lbnRSZWYgPSBpbmplY3QoRWxlbWVudFJlZik7XG5cbiAgLyoqIEFjY2VzcyB0aGUgbm9kZSBkYXRhICovXG4gIEBJbnB1dCgndXhTYW5rZXlOb2RlJykgbm9kZTogU2Fua2V5Tm9kZUxpbms8VD47XG5cbiAgLyoqIFNwZWNpZnkgdGhlIHRhYiBpbmRleCBvZiB0aGUgY3VycmVudCBpdGVtICovXG4gIEBIb3N0QmluZGluZygpIHRhYkluZGV4OiBudW1iZXIgPSAtMTtcblxuICAvKiogVW5zdWJzY3JpYmUgZnJvbSBhbGwgb2JzZXJ2YWJsZXMgb24gZGVzdHJveSAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9vbkRlc3Ryb3kgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIC8vIFVwZGF0ZSB0aGUgdGFiaW5kZXggYmFzZWQgb24gdGhlIGN1cnJlbnQgYWN0aXZlIGl0ZW1cbiAgICB0aGlzLl9mb2N1c01hbmFnZXIuYWN0aXZlJC5waXBlKG1hcChpdGVtID0+IGl0ZW0gJiYgaXRlbS5ub2RlLmlkID09PSB0aGlzLm5vZGUubm9kZS5pZCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZShpc0FjdGl2ZSA9PiB0aGlzLnRhYkluZGV4ID0gaXNBY3RpdmUgPyAwIDogLTEpO1xuXG4gICAgLy8gSWYgdGhpcyBlbGVtZW50IHNob3VsZCBiZSBmb2N1c2VkIHBlcmZvcm0gdGhlIGZvY3VzXG4gICAgdGhpcy5fZm9jdXNNYW5hZ2VyLmZvY3VzZWQkLnBpcGUoZmlsdGVyKG5vZGUgPT4gbm9kZS5ub2RlLmlkID09PSB0aGlzLm5vZGUubm9kZS5pZCksIHRha2VVbnRpbCh0aGlzLl9vbkRlc3Ryb3kpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB0aGlzLl9lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkRlc3Ryb3kubmV4dCgpO1xuICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBvbkNsaWNrKCk6IHZvaWQge1xuICAgIHRoaXMuX2ZvY3VzTWFuYWdlci5zZXRBY3RpdmVJdGVtKHRoaXMubm9kZSk7XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdrZXlkb3duJywgWyckZXZlbnQnXSlcbiAgb25LZXlkb3duKGV2ZW50OiBLZXlib2FyZEV2ZW50KTogdm9pZCB7XG4gICAgdGhpcy5fZm9jdXNNYW5hZ2VyLm9uS2V5ZG93bihldmVudCk7XG4gIH1cbn1cbiJdfQ==