@taiga-ui/kit
Version:
Taiga UI Angular main components kit
47 lines • 7.87 kB
JavaScript
import { Directive, inject } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { RouterLinkActive } from '@angular/router';
import { WaMutationObserverService } from '@ng-web-apis/mutation-observer';
import { tuiTypedFromEvent } from '@taiga-ui/cdk/observables';
import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom';
import { tuiIsNativeFocused } from '@taiga-ui/cdk/utils/focus';
import { TuiWithIcons } from '@taiga-ui/core/directives/icons';
import { EMPTY, filter, merge, switchMap, take } from 'rxjs';
import * as i0 from "@angular/core";
import * as i1 from "@taiga-ui/core/directives/icons";
export const TUI_TAB_ACTIVATE = 'tui-tab-activate';
class TuiTab {
constructor() {
this.el = tuiInjectElement();
this.rla = inject(RouterLinkActive, { optional: true });
this.observer = this.rla &&
inject(WaMutationObserverService, { optional: true })?.pipe(filter(() => !!this.rla?.isActive));
this.sub = merge(this.observer || EMPTY, this.rla?.isActiveChange.pipe(filter(Boolean)) || EMPTY, this.el.matches('button')
? tuiTypedFromEvent(this.el, 'click').pipe(
// Delaying execution until after all other click callbacks
switchMap(() => tuiTypedFromEvent(this.el.parentElement, 'click').pipe(take(1))))
: EMPTY)
.pipe(takeUntilDestroyed())
.subscribe(() => this.el.dispatchEvent(new CustomEvent(TUI_TAB_ACTIVATE, { bubbles: true })));
}
ngOnDestroy() {
if (tuiIsNativeFocused(this.el)) {
this.el.blur();
}
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTab, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiTab, isStandalone: true, selector: "a[tuiTab]:not([routerLink]), a[tuiTab][routerLink][routerLinkActive], button[tuiTab]", host: { attributes: { "type": "button" } }, hostDirectives: [{ directive: i1.TuiWithIcons }], ngImport: i0 }); }
}
export { TuiTab };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiTab, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: 'a[tuiTab]:not([routerLink]), a[tuiTab][routerLink][routerLinkActive], button[tuiTab]',
hostDirectives: [TuiWithIcons],
host: {
type: 'button',
},
}]
}] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9jb21wb25lbnRzL3RhYnMvdGFiLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsU0FBUyxFQUFFLE1BQU0sRUFBaUIsTUFBTSxlQUFlLENBQUM7QUFDaEUsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sNEJBQTRCLENBQUM7QUFDOUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0saUJBQWlCLENBQUM7QUFDakQsT0FBTyxFQUFDLHlCQUF5QixFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLGtCQUFrQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQzdELE9BQU8sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFDLE1BQU0sTUFBTSxDQUFDOzs7QUFFM0QsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsa0JBQWtCLENBQUM7QUFFbkQsTUFTYSxNQUFNO0lBVG5CO1FBVXFCLE9BQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3hCLFFBQUcsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQztRQUNqRCxhQUFRLEdBQ3JCLElBQUksQ0FBQyxHQUFHO1lBQ1IsTUFBTSxDQUFDLHlCQUF5QixFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLEVBQUUsSUFBSSxDQUNyRCxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQ3JDLENBQUM7UUFFYSxRQUFHLEdBQUcsS0FBSyxDQUMxQixJQUFJLENBQUMsUUFBUSxJQUFJLEtBQUssRUFDdEIsSUFBSSxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFDdkQsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1lBQ3JCLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUk7WUFDcEMsMkRBQTJEO1lBQzNELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDWCxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLGFBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ25FLENBQ0o7WUFDSCxDQUFDLENBQUMsS0FBSyxDQUNkO2FBQ0ksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7YUFDMUIsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUNaLElBQUksQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsQ0FDNUUsQ0FBQztLQU9UO0lBTFUsV0FBVztRQUNkLElBQUksa0JBQWtCLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFO1lBQzdCLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7U0FDbEI7SUFDTCxDQUFDOytHQTlCUSxNQUFNO21HQUFOLE1BQU07O1NBQU4sTUFBTTs0RkFBTixNQUFNO2tCQVRsQixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQ0osc0ZBQXNGO29CQUMxRixjQUFjLEVBQUUsQ0FBQyxZQUFZLENBQUM7b0JBQzlCLElBQUksRUFBRTt3QkFDRixJQUFJLEVBQUUsUUFBUTtxQkFDakI7aUJBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0RpcmVjdGl2ZSwgaW5qZWN0LCB0eXBlIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge3Rha2VVbnRpbERlc3Ryb3llZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHtSb3V0ZXJMaW5rQWN0aXZlfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHtXYU11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlfSBmcm9tICdAbmctd2ViLWFwaXMvbXV0YXRpb24tb2JzZXJ2ZXInO1xuaW1wb3J0IHt0dWlUeXBlZEZyb21FdmVudH0gZnJvbSAnQHRhaWdhLXVpL2Nkay9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7dHVpSXNOYXRpdmVGb2N1c2VkfSBmcm9tICdAdGFpZ2EtdWkvY2RrL3V0aWxzL2ZvY3VzJztcbmltcG9ydCB7VHVpV2l0aEljb25zfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2ljb25zJztcbmltcG9ydCB7RU1QVFksIGZpbHRlciwgbWVyZ2UsIHN3aXRjaE1hcCwgdGFrZX0gZnJvbSAncnhqcyc7XG5cbmV4cG9ydCBjb25zdCBUVUlfVEFCX0FDVElWQVRFID0gJ3R1aS10YWItYWN0aXZhdGUnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOlxuICAgICAgICAnYVt0dWlUYWJdOm5vdChbcm91dGVyTGlua10pLCBhW3R1aVRhYl1bcm91dGVyTGlua11bcm91dGVyTGlua0FjdGl2ZV0sIGJ1dHRvblt0dWlUYWJdJyxcbiAgICBob3N0RGlyZWN0aXZlczogW1R1aVdpdGhJY29uc10sXG4gICAgaG9zdDoge1xuICAgICAgICB0eXBlOiAnYnV0dG9uJyxcbiAgICB9LFxufSlcbmV4cG9ydCBjbGFzcyBUdWlUYWIgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSB0dWlJbmplY3RFbGVtZW50KCk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBybGEgPSBpbmplY3QoUm91dGVyTGlua0FjdGl2ZSwge29wdGlvbmFsOiB0cnVlfSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBvYnNlcnZlciA9XG4gICAgICAgIHRoaXMucmxhICYmXG4gICAgICAgIGluamVjdChXYU11dGF0aW9uT2JzZXJ2ZXJTZXJ2aWNlLCB7b3B0aW9uYWw6IHRydWV9KT8ucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiAhIXRoaXMucmxhPy5pc0FjdGl2ZSksXG4gICAgICAgICk7XG5cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc3ViID0gbWVyZ2UoXG4gICAgICAgIHRoaXMub2JzZXJ2ZXIgfHwgRU1QVFksXG4gICAgICAgIHRoaXMucmxhPy5pc0FjdGl2ZUNoYW5nZS5waXBlKGZpbHRlcihCb29sZWFuKSkgfHwgRU1QVFksXG4gICAgICAgIHRoaXMuZWwubWF0Y2hlcygnYnV0dG9uJylcbiAgICAgICAgICAgID8gdHVpVHlwZWRGcm9tRXZlbnQodGhpcy5lbCwgJ2NsaWNrJykucGlwZShcbiAgICAgICAgICAgICAgICAgIC8vIERlbGF5aW5nIGV4ZWN1dGlvbiB1bnRpbCBhZnRlciBhbGwgb3RoZXIgY2xpY2sgY2FsbGJhY2tzXG4gICAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgICAgICAgICAgICB0dWlUeXBlZEZyb21FdmVudCh0aGlzLmVsLnBhcmVudEVsZW1lbnQhLCAnY2xpY2snKS5waXBlKHRha2UoMSkpLFxuICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiBFTVBUWSxcbiAgICApXG4gICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKVxuICAgICAgICAuc3Vic2NyaWJlKCgpID0+XG4gICAgICAgICAgICB0aGlzLmVsLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KFRVSV9UQUJfQUNUSVZBVEUsIHtidWJibGVzOiB0cnVlfSkpLFxuICAgICAgICApO1xuXG4gICAgcHVibGljIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICBpZiAodHVpSXNOYXRpdmVGb2N1c2VkKHRoaXMuZWwpKSB7XG4gICAgICAgICAgICB0aGlzLmVsLmJsdXIoKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiJdfQ==