@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
JavaScript
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=