UNPKG

@ux-aspects/ux-aspects

Version:

Open source user interface framework for building modern, responsive, mobile big data applications

114 lines 14.6 kB
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ContentChild, EventEmitter, inject, Input, Output, TemplateRef } from '@angular/core'; import { Subject } from 'rxjs'; import { distinctUntilChanged, takeUntil } from 'rxjs/operators'; import { tick } from '../../../common'; import { TabsetService } from '../tabset.service'; import { TabsetToken } from '../tabset.token'; import { TabHeadingDirective } from './tab-heading.directive'; import * as i0 from "@angular/core"; let uniqueTabId = 0; export class TabComponent { constructor() { this._tabsetService = inject(TabsetService); this._changeDetector = inject(ChangeDetectorRef); this._tabset = inject(TabsetToken); /** Define if this tab is disabled */ this.disabled = false; /** Emits when the active state changes. */ this.activeChange = new EventEmitter(); /** Emit when this tab is selected */ this.activated = new EventEmitter(); /** Emit when this tab is deselected */ this.deactivated = new EventEmitter(); // Active state of the tab, for use in the template this._active = false; // Id of tab, for use in the template this._id = `ux-tab-${++uniqueTabId}`; /** Unsubscribe from all subscriptions when component is destroyed */ this._onDestroy = new Subject(); } /** Define the tab unique id */ set id(id) { if (id) { this._id = id; } } get id() { return this._id; } /** Define the active state of this tab */ set active(active) { if (active) { this._tabsetService.setTabActive(this); } } ngOnInit() { this._tabsetService.activeTab$.pipe(tick(), distinctUntilChanged(), takeUntil(this._onDestroy)).subscribe(activeTab => { const isActive = (activeTab === this); if (this._active !== isActive) { this.setActive(isActive); } }); } ngOnChanges(changes) { if (changes.disabled && changes.disabled.previousValue !== changes.disabled.currentValue) { this._tabset.markForCheck(); } } ngOnDestroy() { this._onDestroy.next(); this._onDestroy.complete(); } activate() { this.activated.emit(); } deactivate() { this.deactivated.emit(); } /** * Update the internal active state and emit appropriate events. */ setActive(active) { this._active = active; this.activeChange.emit(active); if (!this._tabsetService.manual) { if (active) { this.activate(); } else { this.deactivate(); } } this._changeDetector.detectChanges(); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TabComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); } static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.12", type: TabComponent, selector: "ux-tab", inputs: { id: "id", active: "active", disabled: "disabled", heading: "heading", route: "route", routerLinkExtras: "routerLinkExtras", customClass: "customClass" }, outputs: { activeChange: "activeChange", activated: "activated", deactivated: "deactivated" }, queries: [{ propertyName: "headingRef", first: true, predicate: TabHeadingDirective, descendants: true, read: TemplateRef }], usesOnChanges: true, ngImport: i0, template: "<div\n role=\"tabpanel\"\n class=\"tab-pane\"\n [style.display]=\"_active ? 'block' : 'none'\"\n [id]=\"id + '-panel'\"\n [attr.aria-labelledby]=\"id\"\n [attr.aria-hidden]=\"!_active\"\n>\n <ng-content></ng-content>\n</div>\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.12", ngImport: i0, type: TabComponent, decorators: [{ type: Component, args: [{ selector: 'ux-tab', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n role=\"tabpanel\"\n class=\"tab-pane\"\n [style.display]=\"_active ? 'block' : 'none'\"\n [id]=\"id + '-panel'\"\n [attr.aria-labelledby]=\"id\"\n [attr.aria-hidden]=\"!_active\"\n>\n <ng-content></ng-content>\n</div>\n" }] }], propDecorators: { id: [{ type: Input }], active: [{ type: Input }], disabled: [{ type: Input }], heading: [{ type: Input }], route: [{ type: Input }], routerLinkExtras: [{ type: Input }], customClass: [{ type: Input }], activeChange: [{ type: Output }], activated: [{ type: Output }], deactivated: [{ type: Output }], headingRef: [{ type: ContentChild, args: [TabHeadingDirective, { read: TemplateRef, static: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RhYnNldC90YWIvdGFiLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jb21wb25lbnRzL3RhYnNldC90YWIvdGFiLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFnQyxNQUFNLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuTSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFFOUQsSUFBSSxXQUFXLEdBQUcsQ0FBQyxDQUFDO0FBT3BCLE1BQU0sT0FBTyxZQUFZO0lBTHpCO1FBTXFCLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXZDLG9CQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFFNUMsWUFBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQXNCL0MscUNBQXFDO1FBQzVCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFjbkMsMkNBQTJDO1FBQ2pDLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQVcsQ0FBQztRQUVyRCxxQ0FB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O2dCQVFHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csT0FBTztzQkFBZixLQUFLO2dCQUdHLEtBQUs7c0JBQWIsS0FBSztnQkFHRyxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHSSxZQUFZO3NCQUFyQixNQUFNO2dCQUdHLFNBQVM7c0JBQWxCLE1BQU07Z0JBR0csV0FBVztzQkFBcEIsTUFBTTtnQkFHa0UsVUFBVTtzQkFBbEYsWUFBWTt1QkFBQyxtQkFBbUIsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBDb250ZW50Q2hpbGQsIEV2ZW50RW1pdHRlciwgaW5qZWN0LCBJbnB1dCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmF2aWdhdGlvbkV4dHJhcyB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgdGljayB9IGZyb20gJy4uLy4uLy4uL2NvbW1vbic7XG5pbXBvcnQgeyBUYWJzZXRTZXJ2aWNlIH0gZnJvbSAnLi4vdGFic2V0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGFic2V0VG9rZW4gfSBmcm9tICcuLi90YWJzZXQudG9rZW4nO1xuaW1wb3J0IHsgVGFiSGVhZGluZ0RpcmVjdGl2ZSB9IGZyb20gJy4vdGFiLWhlYWRpbmcuZGlyZWN0aXZlJztcblxubGV0IHVuaXF1ZVRhYklkID0gMDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICd1eC10YWInLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWIuY29tcG9uZW50Lmh0bWwnLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSwgT25DaGFuZ2VzIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IF90YWJzZXRTZXJ2aWNlID0gaW5qZWN0KFRhYnNldFNlcnZpY2UpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfY2hhbmdlRGV0ZWN0b3IgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBfdGFic2V0ID0gaW5qZWN0KFRhYnNldFRva2VuKTtcblxuICAgIC8qKiBEZWZpbmUgdGhlIHRhYiB1bmlxdWUgaWQgKi9cbiAgICBASW5wdXQoKVxuICAgIHNldCBpZChpZDogc3RyaW5nKSB7XG4gICAgICAgIGlmIChpZCkge1xuICAgICAgICAgICAgdGhpcy5faWQgPSBpZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cblxuICAgIC8qKiBEZWZpbmUgdGhlIGFjdGl2ZSBzdGF0ZSBvZiB0aGlzIHRhYiAqL1xuICAgIEBJbnB1dCgpXG4gICAgc2V0IGFjdGl2ZShhY3RpdmU6IGJvb2xlYW4pIHtcbiAgICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFic2V0U2VydmljZS5zZXRUYWJBY3RpdmUodGhpcyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogRGVmaW5lIGlmIHRoaXMgdGFiIGlzIGRpc2FibGVkICovXG4gICAgQElucHV0KCkgZGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKiBEZWZpbmUgdGhlIHRhYiBoZWFkaW5nICovXG4gICAgQElucHV0KCkgaGVhZGluZzogc3RyaW5nO1xuXG4gICAgLyoqIERlZmluZSB0aGUgdGFiIHJvdXRlciBwYXRoICovXG4gICAgQElucHV0KCkgcm91dGU6IHN0cmluZyB8IHVua25vd25bXTtcblxuICAgIC8qKiBEZWZpbmUgdGhlIHRhYiByb3V0ZXIgYWRkaXRpb25hbCBwYXJhbWV0ZXJzICovXG4gICAgQElucHV0KCkgcm91dGVyTGlua0V4dHJhczogTmF2aWdhdGlvbkV4dHJhcztcblxuICAgIC8qKiBwcm92aWRlIGEgY3VzdG9tIGNsYXNzIGZvciB0aGUgdGFiICovXG4gICAgQElucHV0KCkgY3VzdG9tQ2xhc3M6IHN0cmluZztcblxuICAgIC8qKiBFbWl0cyB3aGVuIHRoZSBhY3RpdmUgc3RhdGUgY2hhbmdlcy4gKi9cbiAgICBAT3V0cHV0KCkgYWN0aXZlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuXG4gICAgLyoqIEVtaXQgd2hlbiB0aGlzIHRhYiBpcyBzZWxlY3RlZCAqL1xuICAgIEBPdXRwdXQoKSBhY3RpdmF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogRW1pdCB3aGVuIHRoaXMgdGFiIGlzIGRlc2VsZWN0ZWQgKi9cbiAgICBAT3V0cHV0KCkgZGVhY3RpdmF0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgICAvKiogU3RvcmUgYSBjdXN0b20gaGVhZGVyIHRlbXBsYXRlUmVmICovXG4gICAgQENvbnRlbnRDaGlsZChUYWJIZWFkaW5nRGlyZWN0aXZlLCB7IHJlYWQ6IFRlbXBsYXRlUmVmLCBzdGF0aWM6IGZhbHNlIH0pIGhlYWRpbmdSZWY6IFRlbXBsYXRlUmVmPHZvaWQ+O1xuXG4gICAgLy8gQWN0aXZlIHN0YXRlIG9mIHRoZSB0YWIsIGZvciB1c2UgaW4gdGhlIHRlbXBsYXRlXG4gICAgX2FjdGl2ZSA9IGZhbHNlO1xuXG4gICAgLy8gSWQgb2YgdGFiLCBmb3IgdXNlIGluIHRoZSB0ZW1wbGF0ZVxuICAgIF9pZDogc3RyaW5nID0gYHV4LXRhYi0keysrdW5pcXVlVGFiSWR9YDtcblxuICAgIC8qKiBVbnN1YnNjcmliZSBmcm9tIGFsbCBzdWJzY3JpcHRpb25zIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZCAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgX29uRGVzdHJveSA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fdGFic2V0U2VydmljZS5hY3RpdmVUYWIkLnBpcGUodGljaygpLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLCB0YWtlVW50aWwodGhpcy5fb25EZXN0cm95KSkuc3Vic2NyaWJlKGFjdGl2ZVRhYiA9PiB7XG4gICAgICAgICAgICBjb25zdCBpc0FjdGl2ZSA9IChhY3RpdmVUYWIgPT09IHRoaXMpO1xuICAgICAgICAgICAgaWYgKHRoaXMuX2FjdGl2ZSAhPT0gaXNBY3RpdmUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldEFjdGl2ZShpc0FjdGl2ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgaWYgKGNoYW5nZXMuZGlzYWJsZWQgJiYgY2hhbmdlcy5kaXNhYmxlZC5wcmV2aW91c1ZhbHVlICE9PSBjaGFuZ2VzLmRpc2FibGVkLmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fdGFic2V0Lm1hcmtGb3JDaGVjaygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5uZXh0KCk7XG4gICAgICAgIHRoaXMuX29uRGVzdHJveS5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIGFjdGl2YXRlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmFjdGl2YXRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgZGVhY3RpdmF0ZSgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5kZWFjdGl2YXRlZC5lbWl0KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlIHRoZSBpbnRlcm5hbCBhY3RpdmUgc3RhdGUgYW5kIGVtaXQgYXBwcm9wcmlhdGUgZXZlbnRzLlxuICAgICAqL1xuICAgIHByaXZhdGUgc2V0QWN0aXZlKGFjdGl2ZTogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICB0aGlzLl9hY3RpdmUgPSBhY3RpdmU7XG4gICAgICAgIHRoaXMuYWN0aXZlQ2hhbmdlLmVtaXQoYWN0aXZlKTtcblxuICAgICAgICBpZiAoIXRoaXMuX3RhYnNldFNlcnZpY2UubWFudWFsKSB7XG4gICAgICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hY3RpdmF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlYWN0aXZhdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2NoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgcm9sZT1cInRhYnBhbmVsXCJcbiAgICBjbGFzcz1cInRhYi1wYW5lXCJcbiAgICBbc3R5bGUuZGlzcGxheV09XCJfYWN0aXZlID8gJ2Jsb2NrJyA6ICdub25lJ1wiXG4gICAgW2lkXT1cImlkICsgJy1wYW5lbCdcIlxuICAgIFthdHRyLmFyaWEtbGFiZWxsZWRieV09XCJpZFwiXG4gICAgW2F0dHIuYXJpYS1oaWRkZW5dPVwiIV9hY3RpdmVcIlxuPlxuICAgIDxuZy1jb250ZW50PjwvbmctY29udGVudD5cbjwvZGl2PlxuIl19