@taiga-ui/kit
Version:
Taiga UI Angular main components kit
56 lines • 9.4 kB
JavaScript
import { ContentChildren, DestroyRef, Directive, inject, Input, } from '@angular/core';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { EMPTY_QUERY } from '@taiga-ui/cdk/constants';
import { tuiQueryListChanges } from '@taiga-ui/cdk/observables';
import { tuiIsPresent } from '@taiga-ui/cdk/utils/miscellaneous';
import { TuiGroup } from '@taiga-ui/core/directives/group';
import { filter, identity, map, merge, pairwise, switchMap } from 'rxjs';
import { TuiAccordionItem } from './accordion-item.component';
import * as i0 from "@angular/core";
import * as i1 from "@taiga-ui/core/directives/group";
class TuiAccordionDirective {
constructor() {
this.destroyRef = inject(DestroyRef);
this.accordionItems = EMPTY_QUERY;
this.closeOthers = true;
// Not using DI options to avoid changed defaults spilling to content
const group = inject(TuiGroup);
group.orientation = 'vertical';
group.collapsed = true;
}
ngAfterContentInit() {
const { accordionItems } = this;
const rows$ = tuiQueryListChanges(accordionItems);
const newOpenRow$ = rows$.pipe(pairwise(), map(([previous, current]) => current.find((item) => !previous.includes(item) && item.open)), filter(tuiIsPresent));
const rowsOpen$ = merge(rows$.pipe(switchMap((rows) => merge(...rows.map((row) => row.openChange.pipe(filter(identity), map(() => row)))))), newOpenRow$).pipe(filter(() => this.closeOthers), takeUntilDestroyed(this.destroyRef));
rowsOpen$.subscribe((currentRow) => {
accordionItems.forEach((row) => {
if (currentRow !== row) {
row.close();
}
});
});
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiAccordionDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: TuiAccordionDirective, isStandalone: true, selector: "tui-accordion", inputs: { closeOthers: "closeOthers" }, queries: [{ propertyName: "accordionItems", predicate: TuiAccordionItem }], hostDirectives: [{ directive: i1.TuiGroup, inputs: ["rounded", "rounded"] }], ngImport: i0 }); }
}
export { TuiAccordionDirective };
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: TuiAccordionDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: 'tui-accordion',
hostDirectives: [
{
directive: TuiGroup,
inputs: ['rounded'],
},
],
}]
}], ctorParameters: function () { return []; }, propDecorators: { accordionItems: [{
type: ContentChildren,
args: [TuiAccordionItem]
}], closeOthers: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjb3JkaW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2tpdC9jb21wb25lbnRzL2FjY29yZGlvbi9hY2NvcmRpb24uZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFSCxlQUFlLEVBQ2YsVUFBVSxFQUNWLFNBQVMsRUFDVCxNQUFNLEVBQ04sS0FBSyxHQUVSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBQyxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFDO0FBQzlELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQztBQUNwRCxPQUFPLEVBQUMsbUJBQW1CLEVBQUMsTUFBTSwyQkFBMkIsQ0FBQztBQUM5RCxPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFDL0QsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUV2RSxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQzs7O0FBRTVELE1BVWEscUJBQXFCO0lBUzlCO1FBUmlCLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFHOUIsbUJBQWMsR0FBZ0MsV0FBVyxDQUFDO1FBR3RFLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBR3RCLHFFQUFxRTtRQUNyRSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFL0IsS0FBSyxDQUFDLFdBQVcsR0FBRyxVQUFVLENBQUM7UUFDL0IsS0FBSyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7SUFDM0IsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixNQUFNLEVBQUMsY0FBYyxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzlCLE1BQU0sS0FBSyxHQUFHLG1CQUFtQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzFCLFFBQVEsRUFBRSxFQUNWLEdBQUcsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxFQUFFLEVBQUUsQ0FDeEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDaEUsRUFDRCxNQUFNLENBQUMsWUFBWSxDQUFDLENBQ3ZCLENBQUM7UUFDRixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQ25CLEtBQUssQ0FBQyxJQUFJLENBQ04sU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDZixLQUFLLENBQ0QsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDaEIsR0FBRyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQ2YsTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUNoQixHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQ2pCLENBQ0osQ0FDSixDQUNKLENBQ0osRUFDRCxXQUFXLENBQ2QsQ0FBQyxJQUFJLENBQ0YsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFDOUIsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUN0QyxDQUFDO1FBRUYsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFO1lBQy9CLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDM0IsSUFBSSxVQUFVLEtBQUssR0FBRyxFQUFFO29CQUNwQixHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7aUJBQ2Y7WUFDTCxDQUFDLENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQzsrR0FyRFEscUJBQXFCO21HQUFyQixxQkFBcUIsZ0pBR2IsZ0JBQWdCOztTQUh4QixxQkFBcUI7NEZBQXJCLHFCQUFxQjtrQkFWakMsU0FBUzttQkFBQztvQkFDUCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFLGVBQWU7b0JBQ3pCLGNBQWMsRUFBRTt3QkFDWjs0QkFDSSxTQUFTLEVBQUUsUUFBUTs0QkFDbkIsTUFBTSxFQUFFLENBQUMsU0FBUyxDQUFDO3lCQUN0QjtxQkFDSjtpQkFDSjswRUFLc0IsY0FBYztzQkFEaEMsZUFBZTt1QkFBQyxnQkFBZ0I7Z0JBSTFCLFdBQVc7c0JBRGpCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIHR5cGUgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRGVzdHJveVJlZixcbiAgICBEaXJlY3RpdmUsXG4gICAgaW5qZWN0LFxuICAgIElucHV0LFxuICAgIHR5cGUgUXVlcnlMaXN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7dGFrZVVudGlsRGVzdHJveWVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQge0VNUFRZX1FVRVJZfSBmcm9tICdAdGFpZ2EtdWkvY2RrL2NvbnN0YW50cyc7XG5pbXBvcnQge3R1aVF1ZXJ5TGlzdENoYW5nZXN9IGZyb20gJ0B0YWlnYS11aS9jZGsvb2JzZXJ2YWJsZXMnO1xuaW1wb3J0IHt0dWlJc1ByZXNlbnR9IGZyb20gJ0B0YWlnYS11aS9jZGsvdXRpbHMvbWlzY2VsbGFuZW91cyc7XG5pbXBvcnQge1R1aUdyb3VwfSBmcm9tICdAdGFpZ2EtdWkvY29yZS9kaXJlY3RpdmVzL2dyb3VwJztcbmltcG9ydCB7ZmlsdGVyLCBpZGVudGl0eSwgbWFwLCBtZXJnZSwgcGFpcndpc2UsIHN3aXRjaE1hcH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7VHVpQWNjb3JkaW9uSXRlbX0gZnJvbSAnLi9hY2NvcmRpb24taXRlbS5jb21wb25lbnQnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAndHVpLWFjY29yZGlvbicsXG4gICAgaG9zdERpcmVjdGl2ZXM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgZGlyZWN0aXZlOiBUdWlHcm91cCxcbiAgICAgICAgICAgIGlucHV0czogWydyb3VuZGVkJ10sXG4gICAgICAgIH0sXG4gICAgXSxcbn0pXG5leHBvcnQgY2xhc3MgVHVpQWNjb3JkaW9uRGlyZWN0aXZlIGltcGxlbWVudHMgQWZ0ZXJDb250ZW50SW5pdCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpO1xuXG4gICAgQENvbnRlbnRDaGlsZHJlbihUdWlBY2NvcmRpb25JdGVtKVxuICAgIHByb3RlY3RlZCByZWFkb25seSBhY2NvcmRpb25JdGVtczogUXVlcnlMaXN0PFR1aUFjY29yZGlvbkl0ZW0+ID0gRU1QVFlfUVVFUlk7XG5cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjbG9zZU90aGVycyA9IHRydWU7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8gTm90IHVzaW5nIERJIG9wdGlvbnMgdG8gYXZvaWQgY2hhbmdlZCBkZWZhdWx0cyBzcGlsbGluZyB0byBjb250ZW50XG4gICAgICAgIGNvbnN0IGdyb3VwID0gaW5qZWN0KFR1aUdyb3VwKTtcblxuICAgICAgICBncm91cC5vcmllbnRhdGlvbiA9ICd2ZXJ0aWNhbCc7XG4gICAgICAgIGdyb3VwLmNvbGxhcHNlZCA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qge2FjY29yZGlvbkl0ZW1zfSA9IHRoaXM7XG4gICAgICAgIGNvbnN0IHJvd3MkID0gdHVpUXVlcnlMaXN0Q2hhbmdlcyhhY2NvcmRpb25JdGVtcyk7XG4gICAgICAgIGNvbnN0IG5ld09wZW5Sb3ckID0gcm93cyQucGlwZShcbiAgICAgICAgICAgIHBhaXJ3aXNlKCksXG4gICAgICAgICAgICBtYXAoKFtwcmV2aW91cywgY3VycmVudF0pID0+XG4gICAgICAgICAgICAgICAgY3VycmVudC5maW5kKChpdGVtKSA9PiAhcHJldmlvdXMuaW5jbHVkZXMoaXRlbSkgJiYgaXRlbS5vcGVuKSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBmaWx0ZXIodHVpSXNQcmVzZW50KSxcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3Qgcm93c09wZW4kID0gbWVyZ2UoXG4gICAgICAgICAgICByb3dzJC5waXBlKFxuICAgICAgICAgICAgICAgIHN3aXRjaE1hcCgocm93cykgPT5cbiAgICAgICAgICAgICAgICAgICAgbWVyZ2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yb3dzLm1hcCgocm93KSA9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy5vcGVuQ2hhbmdlLnBpcGUoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihpZGVudGl0eSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcCgoKSA9PiByb3cpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgbmV3T3BlblJvdyQsXG4gICAgICAgICkucGlwZShcbiAgICAgICAgICAgIGZpbHRlcigoKSA9PiB0aGlzLmNsb3NlT3RoZXJzKSxcbiAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpLFxuICAgICAgICApO1xuXG4gICAgICAgIHJvd3NPcGVuJC5zdWJzY3JpYmUoKGN1cnJlbnRSb3cpID0+IHtcbiAgICAgICAgICAgIGFjY29yZGlvbkl0ZW1zLmZvckVhY2goKHJvdykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Um93ICE9PSByb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcm93LmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==