tab-group.component.mjs 8.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { ChangeDetectionStrategy, Component, ContentChildren, DestroyRef, inject, Input, } from '@angular/core';
  2. import { TabButtonComponent } from '../../atoms/tab-button/tab-button.component';
  3. import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
  4. import { TabPanelDirective } from '../../../directives/tab-panel.directive';
  5. import * as i0 from "@angular/core";
  6. export class TabGroupComponent {
  7. constructor() {
  8. this.destroyRef = inject(DestroyRef);
  9. this.activeTab = '';
  10. }
  11. ngOnChanges(changes) {
  12. if (changes['activeTab'].previousValue !== this.activeTab) {
  13. this.setActiveTab(this.activeTab);
  14. }
  15. }
  16. ngAfterContentInit() {
  17. this.setActiveTab(this.activeTab);
  18. this.buttons.forEach(button => button.clicked.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(key => this.setActiveTab(key)));
  19. }
  20. setActiveTab(key) {
  21. if (this.panels && this.buttons) {
  22. this.panels.forEach(panel => {
  23. if (panel.ctTabPanel === key) {
  24. panel.show();
  25. this.getTabButtonTrigger(panel.ctTabPanel).isActive.set(true);
  26. }
  27. else {
  28. this.getTabButtonTrigger(panel.ctTabPanel).isActive.set(false);
  29. panel.hide.next(true);
  30. }
  31. });
  32. }
  33. }
  34. getTabButtonTrigger(key) {
  35. return this.buttons.find(panel => panel.key === key);
  36. }
  37. static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TabGroupComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
  38. static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.5", type: TabGroupComponent, isStandalone: true, selector: "ct-tab-group", inputs: { activeTab: "activeTab" }, queries: [{ propertyName: "buttons", predicate: TabButtonComponent }, { propertyName: "panels", predicate: TabPanelDirective }], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"my-4 flex flex-row gap-2 border-y border-surface-variant py-2 dark:border-surface-variant-dark dark:text-on-surface-variant-dark\">\n <ng-content select=\"[header]\" />\n</div>\n<ng-content select=\"[body]\" />\n", changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
  39. }
  40. i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: TabGroupComponent, decorators: [{
  41. type: Component,
  42. args: [{ selector: 'ct-tab-group', standalone: true, imports: [], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"my-4 flex flex-row gap-2 border-y border-surface-variant py-2 dark:border-surface-variant-dark dark:text-on-surface-variant-dark\">\n <ng-content select=\"[header]\" />\n</div>\n<ng-content select=\"[body]\" />\n" }]
  43. }], propDecorators: { activeTab: [{
  44. type: Input
  45. }], buttons: [{
  46. type: ContentChildren,
  47. args: [TabButtonComponent]
  48. }], panels: [{
  49. type: ContentChildren,
  50. args: [TabPanelDirective]
  51. }] } });
  52. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLWdyb3VwLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpcmNsZXRvbmUvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy90YWItZ3JvdXAvdGFiLWdyb3VwLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NpcmNsZXRvbmUvc3JjL2xpYi9jb21wb25lbnRzL21vbGVjdWxlcy90YWItZ3JvdXAvdGFiLWdyb3VwLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsTUFBTSxFQUNOLEtBQUssR0FJTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUNqRixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQzs7QUFTNUUsTUFBTSxPQUFPLGlCQUFpQjtJQVA5QjtRQVFVLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsY0FBUyxHQUFHLEVBQUUsQ0FBQztLQW1DekI7SUE5QkMsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLGFBQWEsS0FBSyxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNILENBQUM7SUFFRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDNUIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUNsRyxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxHQUFXO1FBQ3RCLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQzFCLElBQUksS0FBSyxDQUFDLFVBQVUsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDN0IsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNiLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakUsQ0FBQztxQkFBTSxDQUFDO29CQUNOLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDaEUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3hCLENBQUM7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sbUJBQW1CLENBQUMsR0FBVztRQUNyQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsS0FBSyxHQUFHLENBQXVCLENBQUM7SUFDN0UsQ0FBQzs4R0FwQ1UsaUJBQWlCO2tHQUFqQixpQkFBaUIsb0lBSVgsa0JBQWtCLHlDQUNsQixpQkFBaUIsa0RDNUJwQyx1T0FLQTs7MkZEa0JhLGlCQUFpQjtrQkFQN0IsU0FBUzsrQkFDRSxjQUFjLGNBQ1osSUFBSSxXQUNQLEVBQUUsbUJBRU0sdUJBQXVCLENBQUMsTUFBTTs4QkFJdEMsU0FBUztzQkFBakIsS0FBSztnQkFFK0IsT0FBTztzQkFBM0MsZUFBZTt1QkFBQyxrQkFBa0I7Z0JBQ0MsTUFBTTtzQkFBekMsZUFBZTt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGRyZW4sXG4gIERlc3Ryb3lSZWYsXG4gIGluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgUXVlcnlMaXN0LFxuICBTaW1wbGVDaGFuZ2VzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFRhYkJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2F0b21zL3RhYi1idXR0b24vdGFiLWJ1dHRvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgVGFiUGFuZWxEaXJlY3RpdmUgfSBmcm9tICcuLi8uLi8uLi9kaXJlY3RpdmVzL3RhYi1wYW5lbC5kaXJlY3RpdmUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjdC10YWItZ3JvdXAnLFxuICBzdGFuZGFsb25lOiB0cnVlLFxuICBpbXBvcnRzOiBbXSxcbiAgdGVtcGxhdGVVcmw6ICcuL3RhYi1ncm91cC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJHcm91cENvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcbiAgQElucHV0KCkgYWN0aXZlVGFiID0gJyc7XG5cbiAgQENvbnRlbnRDaGlsZHJlbihUYWJCdXR0b25Db21wb25lbnQpIGJ1dHRvbnMhOiBRdWVyeUxpc3Q8VGFiQnV0dG9uQ29tcG9uZW50PjtcbiAgQENvbnRlbnRDaGlsZHJlbihUYWJQYW5lbERpcmVjdGl2ZSkgcGFuZWxzITogUXVlcnlMaXN0PFRhYlBhbmVsRGlyZWN0aXZlPjtcblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2FjdGl2ZVRhYiddLnByZXZpb3VzVmFsdWUgIT09IHRoaXMuYWN0aXZlVGFiKSB7XG4gICAgICB0aGlzLnNldEFjdGl2ZVRhYih0aGlzLmFjdGl2ZVRhYik7XG4gICAgfVxuICB9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMuc2V0QWN0aXZlVGFiKHRoaXMuYWN0aXZlVGFiKTtcbiAgICB0aGlzLmJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT5cbiAgICAgIGJ1dHRvbi5jbGlja2VkLnBpcGUodGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZikpLnN1YnNjcmliZShrZXkgPT4gdGhpcy5zZXRBY3RpdmVUYWIoa2V5KSlcbiAgICApO1xuICB9XG5cbiAgc2V0QWN0aXZlVGFiKGtleTogc3RyaW5nKTogdm9pZCB7XG4gICAgaWYgKHRoaXMucGFuZWxzICYmIHRoaXMuYnV0dG9ucykge1xuICAgICAgdGhpcy5wYW5lbHMuZm9yRWFjaChwYW5lbCA9PiB7XG4gICAgICAgIGlmIChwYW5lbC5jdFRhYlBhbmVsID09PSBrZXkpIHtcbiAgICAgICAgICBwYW5lbC5zaG93KCk7XG4gICAgICAgICAgdGhpcy5nZXRUYWJCdXR0b25UcmlnZ2VyKHBhbmVsLmN0VGFiUGFuZWwpIS5pc0FjdGl2ZS5zZXQodHJ1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5nZXRUYWJCdXR0b25UcmlnZ2VyKHBhbmVsLmN0VGFiUGFuZWwpIS5pc0FjdGl2ZS5zZXQoZmFsc2UpO1xuICAgICAgICAgIHBhbmVsLmhpZGUubmV4dCh0cnVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRUYWJCdXR0b25UcmlnZ2VyKGtleTogc3RyaW5nKTogVGFiQnV0dG9uQ29tcG9uZW50IHtcbiAgICByZXR1cm4gdGhpcy5idXR0b25zLmZpbmQocGFuZWwgPT4gcGFuZWwua2V5ID09PSBrZXkpIGFzIFRhYkJ1dHRvbkNvbXBvbmVudDtcbiAgfVxufVxuIiwiPGRpdlxuICBjbGFzcz1cIm15LTQgZmxleCBmbGV4LXJvdyBnYXAtMiBib3JkZXIteSBib3JkZXItc3VyZmFjZS12YXJpYW50IHB5LTIgZGFyazpib3JkZXItc3VyZmFjZS12YXJpYW50LWRhcmsgZGFyazp0ZXh0LW9uLXN1cmZhY2UtdmFyaWFudC1kYXJrXCI+XG4gIDxuZy1jb250ZW50IHNlbGVjdD1cIltoZWFkZXJdXCIgLz5cbjwvZGl2PlxuPG5nLWNvbnRlbnQgc2VsZWN0PVwiW2JvZHldXCIgLz5cbiJdfQ==