UNPKG

@taiga-ui/kit

Version:

Taiga UI Angular main components kit

65 lines 9.46 kB
import { ContentChildren, Directive, ElementRef, inject } from '@angular/core'; import { NgControl, RadioControlValueAccessor } from '@angular/forms'; import { RouterLinkActive } from '@angular/router'; import { EMPTY_QUERY } from '@taiga-ui/cdk/constants'; import { tuiControlValue, tuiQueryListChanges } from '@taiga-ui/cdk/observables'; import { tuiInjectElement } from '@taiga-ui/cdk/utils/dom'; import { map, switchMap } from 'rxjs'; import { TuiSegmented } from './segmented.component'; import * as i0 from "@angular/core"; class TuiSegmentedDirective { constructor() { this.controls = EMPTY_QUERY; this.radios = EMPTY_QUERY; this.links = EMPTY_QUERY; this.elements = EMPTY_QUERY; this.component = inject(TuiSegmented); this.el = tuiInjectElement(); } ngAfterContentInit() { tuiQueryListChanges(this.controls) .pipe(switchMap(() => tuiControlValue(this.controls.first)), map((value) => this.radios.toArray().findIndex((c) => c.value === value))) .subscribe((index) => { this.component.update(index); }); } ngAfterContentChecked() { if (this.links.length) { this.update(this.elements.get(this.linkIndex)?.nativeElement || null); } } update(target) { this.component.update(this.getIndex(target)); } get linkIndex() { return this.links.toArray().findIndex((link) => link.isActive); } getIndex(element) { return Array.from(this.el.children).findIndex((tab) => tab.contains(element)); } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSegmentedDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiSegmentedDirective, isStandalone: true, host: { listeners: { "click": "update($event.target)" } }, queries: [{ propertyName: "controls", predicate: NgControl, descendants: true }, { propertyName: "radios", predicate: RadioControlValueAccessor, descendants: true }, { propertyName: "links", predicate: RouterLinkActive }, { propertyName: "elements", predicate: RouterLinkActive, read: ElementRef }], ngImport: i0 }); } } export { TuiSegmentedDirective }; i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiSegmentedDirective, decorators: [{ type: Directive, args: [{ standalone: true, host: { '(click)': 'update($event.target)', }, }] }], propDecorators: { controls: [{ type: ContentChildren, args: [NgControl, { descendants: true }] }], radios: [{ type: ContentChildren, args: [RadioControlValueAccessor, { descendants: true }] }], links: [{ type: ContentChildren, args: [RouterLinkActive] }], elements: [{ type: ContentChildren, args: [RouterLinkActive, { read: ElementRef }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VnbWVudGVkLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9jb21wb25lbnRzL3NlZ21lbnRlZC9zZWdtZW50ZWQuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0UsT0FBTyxFQUFDLFNBQVMsRUFBRSx5QkFBeUIsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQ3BFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFDLE1BQU0sMkJBQTJCLENBQUM7QUFDL0UsT0FBTyxFQUFDLGdCQUFnQixFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFDekQsT0FBTyxFQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFcEMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLHVCQUF1QixDQUFDOztBQUVuRCxNQU1hLHFCQUFxQjtJQU5sQztRQVFxQixhQUFRLEdBQXlCLFdBQVcsQ0FBQztRQUc3QyxXQUFNLEdBQXlDLFdBQVcsQ0FBQztRQUczRCxVQUFLLEdBQWdDLFdBQVcsQ0FBQztRQUdqRCxhQUFRLEdBQXVDLFdBQVcsQ0FBQztRQUUzRCxjQUFTLEdBQUcsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBQ2pDLE9BQUUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO0tBOEI1QztJQTVCVSxrQkFBa0I7UUFDckIsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQzthQUM3QixJQUFJLENBQ0QsU0FBUyxDQUFDLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQ3JELEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FDNUU7YUFDQSxTQUFTLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqQixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqQyxDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFTSxxQkFBcUI7UUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRTtZQUNuQixJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxhQUFhLElBQUksSUFBSSxDQUFDLENBQUM7U0FDekU7SUFDTCxDQUFDO0lBRVMsTUFBTSxDQUFDLE1BQXNCO1FBQ25DLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRUQsSUFBWSxTQUFTO1FBQ2pCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU8sUUFBUSxDQUFDLE9BQXVCO1FBQ3BDLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2xGLENBQUM7K0dBM0NRLHFCQUFxQjttR0FBckIscUJBQXFCLGtJQUNiLFNBQVMsNERBR1QseUJBQXlCLDJEQUd6QixnQkFBZ0IsMkNBR2hCLGdCQUFnQixRQUFTLFVBQVU7O1NBVjNDLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQU5qQyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUU7d0JBQ0YsU0FBUyxFQUFFLHVCQUF1QjtxQkFDckM7aUJBQ0o7OEJBR29CLFFBQVE7c0JBRHhCLGVBQWU7dUJBQUMsU0FBUyxFQUFFLEVBQUMsV0FBVyxFQUFFLElBQUksRUFBQztnQkFJOUIsTUFBTTtzQkFEdEIsZUFBZTt1QkFBQyx5QkFBeUIsRUFBRSxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUM7Z0JBSTlDLEtBQUs7c0JBRHJCLGVBQWU7dUJBQUMsZ0JBQWdCO2dCQUloQixRQUFRO3NCQUR4QixlQUFlO3VCQUFDLGdCQUFnQixFQUFFLEVBQUMsSUFBSSxFQUFFLFVBQVUsRUFBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHtBZnRlckNvbnRlbnRDaGVja2VkLCBBZnRlckNvbnRlbnRJbml0LCBRdWVyeUxpc3R9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtDb250ZW50Q2hpbGRyZW4sIERpcmVjdGl2ZSwgRWxlbWVudFJlZiwgaW5qZWN0fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7TmdDb250cm9sLCBSYWRpb0NvbnRyb2xWYWx1ZUFjY2Vzc29yfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge1JvdXRlckxpbmtBY3RpdmV9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQge0VNUFRZX1FVRVJZfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge3R1aUNvbnRyb2xWYWx1ZSwgdHVpUXVlcnlMaXN0Q2hhbmdlc30gZnJvbSAnQHRhaWdhLXVpL2Nkay9vYnNlcnZhYmxlcyc7XG5pbXBvcnQge3R1aUluamVjdEVsZW1lbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvZG9tJztcbmltcG9ydCB7bWFwLCBzd2l0Y2hNYXB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQge1R1aVNlZ21lbnRlZH0gZnJvbSAnLi9zZWdtZW50ZWQuY29tcG9uZW50JztcblxuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBob3N0OiB7XG4gICAgICAgICcoY2xpY2spJzogJ3VwZGF0ZSgkZXZlbnQudGFyZ2V0KScsXG4gICAgfSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpU2VnbWVudGVkRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50Q2hlY2tlZCwgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgQENvbnRlbnRDaGlsZHJlbihOZ0NvbnRyb2wsIHtkZXNjZW5kYW50czogdHJ1ZX0pXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb250cm9sczogUXVlcnlMaXN0PE5nQ29udHJvbD4gPSBFTVBUWV9RVUVSWTtcblxuICAgIEBDb250ZW50Q2hpbGRyZW4oUmFkaW9Db250cm9sVmFsdWVBY2Nlc3Nvciwge2Rlc2NlbmRhbnRzOiB0cnVlfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJhZGlvczogUXVlcnlMaXN0PFJhZGlvQ29udHJvbFZhbHVlQWNjZXNzb3I+ID0gRU1QVFlfUVVFUlk7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFJvdXRlckxpbmtBY3RpdmUpXG4gICAgcHJpdmF0ZSByZWFkb25seSBsaW5rczogUXVlcnlMaXN0PFJvdXRlckxpbmtBY3RpdmU+ID0gRU1QVFlfUVVFUlk7XG5cbiAgICBAQ29udGVudENoaWxkcmVuKFJvdXRlckxpbmtBY3RpdmUsIHtyZWFkOiBFbGVtZW50UmVmfSlcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVsZW1lbnRzOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxIVE1MRWxlbWVudD4+ID0gRU1QVFlfUVVFUlk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBvbmVudCA9IGluamVjdChUdWlTZWdtZW50ZWQpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZWwgPSB0dWlJbmplY3RFbGVtZW50KCk7XG5cbiAgICBwdWJsaWMgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgICAgICB0dWlRdWVyeUxpc3RDaGFuZ2VzKHRoaXMuY29udHJvbHMpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gdHVpQ29udHJvbFZhbHVlKHRoaXMuY29udHJvbHMuZmlyc3QpKSxcbiAgICAgICAgICAgICAgICBtYXAoKHZhbHVlKSA9PiB0aGlzLnJhZGlvcy50b0FycmF5KCkuZmluZEluZGV4KChjKSA9PiBjLnZhbHVlID09PSB2YWx1ZSkpLFxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGUoaW5kZXgpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50Q2hlY2tlZCgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMubGlua3MubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZSh0aGlzLmVsZW1lbnRzLmdldCh0aGlzLmxpbmtJbmRleCk/Lm5hdGl2ZUVsZW1lbnQgfHwgbnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcm90ZWN0ZWQgdXBkYXRlKHRhcmdldDogRWxlbWVudCB8IG51bGwpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlKHRoaXMuZ2V0SW5kZXgodGFyZ2V0KSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXQgbGlua0luZGV4KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLmxpbmtzLnRvQXJyYXkoKS5maW5kSW5kZXgoKGxpbmspID0+IGxpbmsuaXNBY3RpdmUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0SW5kZXgoZWxlbWVudDogRWxlbWVudCB8IG51bGwpOiBudW1iZXIge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVsLmNoaWxkcmVuKS5maW5kSW5kZXgoKHRhYikgPT4gdGFiLmNvbnRhaW5zKGVsZW1lbnQpKTtcbiAgICB9XG59XG4iXX0=