UNPKG

@universal-material/angular

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 16.1.0.

64 lines 8.53 kB
import { Directive, EventEmitter, Input, Output } from '@angular/core'; import { Subject } from 'rxjs'; import { debounceTime } from 'rxjs/operators'; import * as i0 from "@angular/core"; export class TabBarDirective { #activeTabIndex; #tabBar; #mutationObserver; #justSetTabIndex; get activeTabIndex() { return this.#activeTabIndex; } set activeTabIndex(index) { this.#activeTabIndex = index; this.#tabBar.activeTabIndex = index; this.#justSetTabIndex = true; this.#tabChangedSubject.next(); } #tabChangedSubject; constructor(elementRef) { this.#activeTabIndex = 0; this.#justSetTabIndex = false; this.#tabChangedSubject = new Subject(); this.activeTabIndexChange = new EventEmitter(); this.#tabBar = elementRef.nativeElement; elementRef.nativeElement.addEventListener('change', () => this.activeTabIndexChange.emit(this.#tabBar.activeTabIndex)); this.#mutationObserver = new MutationObserver(() => this.#tabChangedSubject.next()); this.#mutationObserver.observe(elementRef.nativeElement, { characterData: true, childList: true, subtree: true }); this.#tabChangedSubject .pipe(debounceTime(100)) .subscribe(() => this.ensureCorrectTabIndex()); } ensureCorrectTabIndex() { if (this.#activeTabIndex === this.#tabBar.activeTabIndex) { return; } if (!this.#justSetTabIndex) { this.#activeTabIndex = this.#tabBar.activeTabIndex; this.activeTabIndexChange.next(this.#activeTabIndex); return; } this.#justSetTabIndex = false; this.#tabBar.activeTabIndex = this.#activeTabIndex; if (this.#activeTabIndex === this.#tabBar.activeTabIndex) { return; } this.#activeTabIndex = this.#tabBar.activeTabIndex; this.activeTabIndexChange.next(this.#activeTabIndex); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabBarDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TabBarDirective, isStandalone: true, selector: "u-tab-bar", inputs: { activeTabIndex: "activeTabIndex" }, outputs: { activeTabIndexChange: "activeTabIndexChange" }, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TabBarDirective, decorators: [{ type: Directive, args: [{ selector: 'u-tab-bar', standalone: true }] }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { activeTabIndex: [{ type: Input }], activeTabIndexChange: [{ type: Output }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWJhci5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdGFiLWJhci90YWItYmFyLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLFlBQVksRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBR25GLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQU05QyxNQUFNLE9BQU8sZUFBZTtJQUUxQixlQUFlLENBQUs7SUFDWCxPQUFPLENBQVc7SUFDbEIsaUJBQWlCLENBQW1CO0lBRTdDLGdCQUFnQixDQUFTO0lBRXpCLElBQ0ksY0FBYztRQUNoQixPQUFPLElBQUksQ0FBQyxlQUFlLENBQUM7SUFDOUIsQ0FBQztJQUNELElBQUksY0FBYyxDQUFDLEtBQWE7UUFDOUIsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUM7UUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFDO1FBQ3BDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7UUFDN0IsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxrQkFBa0IsQ0FBdUI7SUFJekMsWUFBWSxVQUFnQztRQXJCNUMsb0JBQWUsR0FBRyxDQUFDLENBQUM7UUFJcEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBYXpCLHVCQUFrQixHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFFL0IseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQVUsQ0FBQztRQUcxRCxJQUFJLENBQUMsT0FBTyxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUM7UUFFeEMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFDdkgsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksZ0JBQWdCLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7UUFDcEYsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLEVBQUMsYUFBYSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFDO1FBRWhILElBQUksQ0FBQyxrQkFBa0I7YUFDcEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUN2QixTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRU8scUJBQXFCO1FBQzNCLElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUN4RCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQzFCLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7WUFDbkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDckQsT0FBTztTQUNSO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDO1FBRW5ELElBQUksSUFBSSxDQUFDLGVBQWUsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUN4RCxPQUFPO1NBQ1I7UUFFRCxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBQ25ELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7K0dBdkRVLGVBQWU7bUdBQWYsZUFBZTs7NEZBQWYsZUFBZTtrQkFKM0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsV0FBVztvQkFDckIsVUFBVSxFQUFFLElBQUk7aUJBQ2pCO2lHQVVLLGNBQWM7c0JBRGpCLEtBQUs7Z0JBYUksb0JBQW9CO3NCQUE3QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVW1UYWJCYXIgfSBmcm9tICdAdW5pdmVyc2FsLW1hdGVyaWFsL3dlYic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ3UtdGFiLWJhcicsXG4gIHN0YW5kYWxvbmU6IHRydWVcbn0pXG5leHBvcnQgY2xhc3MgVGFiQmFyRGlyZWN0aXZlIHtcblxuICAjYWN0aXZlVGFiSW5kZXggPSAwO1xuICByZWFkb25seSAjdGFiQmFyOiBVbVRhYkJhcjtcbiAgcmVhZG9ubHkgI211dGF0aW9uT2JzZXJ2ZXI6IE11dGF0aW9uT2JzZXJ2ZXI7XG5cbiAgI2p1c3RTZXRUYWJJbmRleCA9IGZhbHNlO1xuXG4gIEBJbnB1dCgpXG4gIGdldCBhY3RpdmVUYWJJbmRleCgpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLiNhY3RpdmVUYWJJbmRleDtcbiAgfVxuICBzZXQgYWN0aXZlVGFiSW5kZXgoaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuI2FjdGl2ZVRhYkluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy4jdGFiQmFyLmFjdGl2ZVRhYkluZGV4ID0gaW5kZXg7XG4gICAgdGhpcy4janVzdFNldFRhYkluZGV4ID0gdHJ1ZTtcbiAgICB0aGlzLiN0YWJDaGFuZ2VkU3ViamVjdC5uZXh0KCk7XG4gIH1cblxuICAjdGFiQ2hhbmdlZFN1YmplY3QgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIEBPdXRwdXQoKSBhY3RpdmVUYWJJbmRleENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xuXG4gIGNvbnN0cnVjdG9yKGVsZW1lbnRSZWY6IEVsZW1lbnRSZWY8VW1UYWJCYXI+KSB7XG4gICAgdGhpcy4jdGFiQmFyID0gZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50O1xuXG4gICAgZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsICgpID0+IHRoaXMuYWN0aXZlVGFiSW5kZXhDaGFuZ2UuZW1pdCh0aGlzLiN0YWJCYXIuYWN0aXZlVGFiSW5kZXgpKTtcbiAgICB0aGlzLiNtdXRhdGlvbk9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoKCkgPT4gdGhpcy4jdGFiQ2hhbmdlZFN1YmplY3QubmV4dCgpKTtcbiAgICB0aGlzLiNtdXRhdGlvbk9ic2VydmVyLm9ic2VydmUoZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCB7Y2hhcmFjdGVyRGF0YTogdHJ1ZSwgY2hpbGRMaXN0OiB0cnVlLCBzdWJ0cmVlOiB0cnVlfSk7XG5cbiAgICB0aGlzLiN0YWJDaGFuZ2VkU3ViamVjdFxuICAgICAgLnBpcGUoZGVib3VuY2VUaW1lKDEwMCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuZW5zdXJlQ29ycmVjdFRhYkluZGV4KCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVDb3JyZWN0VGFiSW5kZXgoKSB7XG4gICAgaWYgKHRoaXMuI2FjdGl2ZVRhYkluZGV4ID09PSB0aGlzLiN0YWJCYXIuYWN0aXZlVGFiSW5kZXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuI2p1c3RTZXRUYWJJbmRleCkge1xuICAgICAgdGhpcy4jYWN0aXZlVGFiSW5kZXggPSB0aGlzLiN0YWJCYXIuYWN0aXZlVGFiSW5kZXg7XG4gICAgICB0aGlzLmFjdGl2ZVRhYkluZGV4Q2hhbmdlLm5leHQodGhpcy4jYWN0aXZlVGFiSW5kZXgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuI2p1c3RTZXRUYWJJbmRleCA9IGZhbHNlO1xuICAgIHRoaXMuI3RhYkJhci5hY3RpdmVUYWJJbmRleCA9IHRoaXMuI2FjdGl2ZVRhYkluZGV4O1xuXG4gICAgaWYgKHRoaXMuI2FjdGl2ZVRhYkluZGV4ID09PSB0aGlzLiN0YWJCYXIuYWN0aXZlVGFiSW5kZXgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLiNhY3RpdmVUYWJJbmRleCA9IHRoaXMuI3RhYkJhci5hY3RpdmVUYWJJbmRleDtcbiAgICB0aGlzLmFjdGl2ZVRhYkluZGV4Q2hhbmdlLm5leHQodGhpcy4jYWN0aXZlVGFiSW5kZXgpO1xuICB9XG59XG4iXX0=