UNPKG

@doku-dev/doku-fragment

Version:

A new Angular UI library that moving away from Bootstrap and built from scratch.

144 lines 17.2 kB
import { CommonModule } from '@angular/common'; import { ChangeDetectionStrategy, Component, ContentChild, Inject, Input, ViewEncapsulation, } from '@angular/core'; import { ReplaySubject, delay, filter, fromEvent, of, switchMap, takeUntil } from 'rxjs'; import { DokuTabContent } from './tab-content.directive'; import { DokuTabLabel } from './tab-label.directive'; import { DOKU_TAB, DOKU_TABS } from './token'; import { ViewElement } from './view-element'; import * as i0 from "@angular/core"; import * as i1 from "./tabs.component"; let nextId = 1; export class DokuTab { constructor(appRef, renderer, tabs) { this.appRef = appRef; this.renderer = renderer; this.tabs = tabs; /** * Unique id of the tab. * Default value is auto-generated. * * @default 'd-tab-[nextId]'' */ this.id = `d-tab-${nextId++}`; /** * Whether the tab is disabled. * * The tab content is not going to be loaded on disabled tab. * * @default false */ this.disabled = false; /** * Whether the tab content is lazy loaded which means * the content will be loaded when the tab is active and * destroyed when away from the tab. * * @default false */ this.lazyLoad = false; this.destroy$ = new ReplaySubject(); } ngAfterContentInit() { this.tabs?.['tabChangeForChild$'].pipe(takeUntil(this.destroy$)).subscribe((activeItem) => { this.handleActiveState(activeItem); this.handleDisabledState(); this.handleLazyLoaded(activeItem); }); of(true) .pipe(delay(100), // eslint-disable-next-line @typescript-eslint/no-non-null-assertion switchMap(() => fromEvent(this.labelElement, 'click')), filter(() => !this.disabled), takeUntil(this.destroy$)) .subscribe(() => { this.tabs?.changeActiveTab(this.id); }); } ngOnChanges(changes) { if (changes['disabled']?.previousValue !== changes['disabled']?.currentValue) { this.handleDisabledState(); } } ngOnDestroy() { this.destroy$.next(true); this.destroy$.complete(); } handleActiveState(activeItem) { if (!this.labelElement || !this.contentElement) return; if (activeItem?.id === this.id) { this.renderer.addClass(this.labelElement, 'active'); this.renderer.addClass(this.contentElement, 'active'); } else { this.renderer.removeClass(this.labelElement, 'active'); this.renderer.removeClass(this.contentElement, 'active'); } } handleDisabledState() { if (!this.labelElement || !this.contentElement) return; if (this.disabled) { this.renderer.addClass(this.labelElement, 'disabled'); this.renderer.addClass(this.contentElement, 'disabled'); } else { this.renderer.removeClass(this.labelElement, 'disabled'); this.renderer.removeClass(this.contentElement, 'disabled'); } } handleLazyLoaded(activeItem) { if (!this.lazyLoad) return; if (activeItem?.id === this.id && this.contentTemplate && this.contentElement) { this.contentViewRef = ViewElement.createContentViewRefAndAppend({ applicationRef: this.appRef, renderer: this.renderer, contentElement: this.contentElement, contentTemplate: this.contentTemplate, }); } else { this.contentViewRef?.destroy(); } } } DokuTab.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuTab, deps: [{ token: i0.ApplicationRef }, { token: i0.Renderer2 }, { token: DOKU_TABS }], target: i0.ɵɵFactoryTarget.Component }); DokuTab.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.9", type: DokuTab, isStandalone: true, selector: "doku-tab", inputs: { id: "id", disabled: "disabled", lazyLoad: "lazyLoad" }, providers: [ { provide: DOKU_TAB, useExisting: DokuTab, }, ], queries: [{ propertyName: "labelTemplate", first: true, predicate: DokuTabLabel }, { propertyName: "contentTemplate", first: true, predicate: DokuTabContent }], exportAs: ["dokuTab"], usesOnChanges: true, ngImport: i0, template: '', isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: DokuTab, decorators: [{ type: Component, args: [{ selector: 'doku-tab', exportAs: 'dokuTab', standalone: true, imports: [CommonModule], template: '', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, providers: [ { provide: DOKU_TAB, useExisting: DokuTab, }, ], }] }], ctorParameters: function () { return [{ type: i0.ApplicationRef }, { type: i0.Renderer2 }, { type: i1.DokuTabs, decorators: [{ type: Inject, args: [DOKU_TABS] }] }]; }, propDecorators: { id: [{ type: Input }], disabled: [{ type: Input }], lazyLoad: [{ type: Input }], labelTemplate: [{ type: ContentChild, args: [DokuTabLabel, { descendants: false }] }], contentTemplate: [{ type: ContentChild, args: [DokuTabContent, { descendants: false }] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rva3UtZnJhZ21lbnQvc3JjL2xpYi90YWJzL3RhYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixNQUFNLEVBQ04sS0FBSyxFQUtMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFN0MsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBaUJmLE1BQU0sT0FBTyxPQUFPO0lBcUNsQixZQUNVLE1BQXNCLEVBQ3RCLFFBQW1CLEVBQ0EsSUFBZTtRQUZsQyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ0EsU0FBSSxHQUFKLElBQUksQ0FBVztRQXZDNUM7Ozs7O1dBS0c7UUFDTSxPQUFFLEdBQUcsU0FBUyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBRWxDOzs7Ozs7V0FNRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7Ozs7OztXQU1HO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQVVsQixh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RUFBRTtzQkFBVixLQUFLO2dCQVNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBU0csUUFBUTtzQkFBaEIsS0FBSztnQkFPd0QsYUFBYTtzQkFBMUUsWUFBWTt1QkFBQyxZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFO2dCQUNjLGVBQWU7c0JBQTlFLFlBQVk7dUJBQUMsY0FBYyxFQUFFLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuICBBZnRlckNvbnRlbnRJbml0LFxuICBBcHBsaWNhdGlvblJlZixcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbWJlZGRlZFZpZXdSZWYsXG4gIEluamVjdCxcbiAgSW5wdXQsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIGRlbGF5LCBmaWx0ZXIsIGZyb21FdmVudCwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEb2t1VGFiQ29udGVudCB9IGZyb20gJy4vdGFiLWNvbnRlbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IERva3VUYWJMYWJlbCB9IGZyb20gJy4vdGFiLWxhYmVsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEb2t1VGFicyB9IGZyb20gJy4vdGFicy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRE9LVV9UQUIsIERPS1VfVEFCUyB9IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IHsgVmlld0VsZW1lbnQgfSBmcm9tICcuL3ZpZXctZWxlbWVudCc7XG5cbmxldCBuZXh0SWQgPSAxO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkb2t1LXRhYicsXG4gIGV4cG9ydEFzOiAnZG9rdVRhYicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogJycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBET0tVX1RBQixcbiAgICAgIHVzZUV4aXN0aW5nOiBEb2t1VGFiLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERva3VUYWIgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQsIE9uQ2hhbmdlcyB7XG4gIC8qKlxuICAgKiBVbmlxdWUgaWQgb2YgdGhlIHRhYi5cbiAgICogRGVmYXVsdCB2YWx1ZSBpcyBhdXRvLWdlbmVyYXRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ2QtdGFiLVtuZXh0SWRdJydcbiAgICovXG4gIEBJbnB1dCgpIGlkID0gYGQtdGFiLSR7bmV4dElkKyt9YDtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdGFiIGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiBUaGUgdGFiIGNvbnRlbnQgaXMgbm90IGdvaW5nIHRvIGJlIGxvYWRlZCBvbiBkaXNhYmxlZCB0YWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSB0YWIgY29udGVudCBpcyBsYXp5IGxvYWRlZCB3aGljaCBtZWFuc1xuICAgKiB0aGUgY29udGVudCB3aWxsIGJlIGxvYWRlZCB3aGVuIHRoZSB0YWIgaXMgYWN0aXZlIGFuZFxuICAgKiBkZXN0cm95ZWQgd2hlbiBhd2F5IGZyb20gdGhlIHRhYi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIEBJbnB1dCgpIGxhenlMb2FkID0gZmFsc2U7XG5cbiAgcHJvdGVjdGVkIGxhYmVsRWxlbWVudD86IEhUTUxEaXZFbGVtZW50O1xuICBwcm90ZWN0ZWQgbGFiZWxWaWV3UmVmPzogRW1iZWRkZWRWaWV3UmVmPGFueT47XG4gIHByb3RlY3RlZCBjb250ZW50RWxlbWVudD86IEhUTUxEaXZFbGVtZW50O1xuICBwcm90ZWN0ZWQgY29udGVudFZpZXdSZWY/OiBFbWJlZGRlZFZpZXdSZWY8YW55PjtcblxuICBAQ29udGVudENoaWxkKERva3VUYWJMYWJlbCwgeyBkZXNjZW5kYW50czogZmFsc2UgfSkgcHJvdGVjdGVkIGxhYmVsVGVtcGxhdGU/OiBEb2t1VGFiTGFiZWw7XG4gIEBDb250ZW50Q2hpbGQoRG9rdVRhYkNvbnRlbnQsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIHByb3RlY3RlZCBjb250ZW50VGVtcGxhdGU/OiBEb2t1VGFiQ29udGVudDtcblxuICBwcml2YXRlIGRlc3Ryb3kkID0gbmV3IFJlcGxheVN1YmplY3QoKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFwcFJlZjogQXBwbGljYXRpb25SZWYsXG4gICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgIEBJbmplY3QoRE9LVV9UQUJTKSBwcml2YXRlIHRhYnM/OiBEb2t1VGFic1xuICApIHt9XG5cbiAgbmdBZnRlckNvbnRlbnRJbml0KCk6IHZvaWQge1xuICAgIHRoaXMudGFicz8uWyd0YWJDaGFuZ2VGb3JDaGlsZCQnXS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKChhY3RpdmVJdGVtKSA9PiB7XG4gICAgICB0aGlzLmhhbmRsZUFjdGl2ZVN0YXRlKGFjdGl2ZUl0ZW0pO1xuICAgICAgdGhpcy5oYW5kbGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgICB0aGlzLmhhbmRsZUxhenlMb2FkZWQoYWN0aXZlSXRlbSk7XG4gICAgfSk7XG5cbiAgICBvZih0cnVlKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGRlbGF5KDEwMCksXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tbm9uLW51bGwtYXNzZXJ0aW9uXG4gICAgICAgIHN3aXRjaE1hcCgoKSA9PiBmcm9tRXZlbnQodGhpcy5sYWJlbEVsZW1lbnQhLCAnY2xpY2snKSksXG4gICAgICAgIGZpbHRlcigoKSA9PiAhdGhpcy5kaXNhYmxlZCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudGFicz8uY2hhbmdlQWN0aXZlVGFiKHRoaXMuaWQpO1xuICAgICAgfSk7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXNbJ2Rpc2FibGVkJ10/LnByZXZpb3VzVmFsdWUgIT09IGNoYW5nZXNbJ2Rpc2FibGVkJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgdGhpcy5oYW5kbGVEaXNhYmxlZFN0YXRlKCk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWN0aXZlU3RhdGUoYWN0aXZlSXRlbTogRG9rdVRhYikge1xuICAgIGlmICghdGhpcy5sYWJlbEVsZW1lbnQgfHwgIXRoaXMuY29udGVudEVsZW1lbnQpIHJldHVybjtcblxuICAgIGlmIChhY3RpdmVJdGVtPy5pZCA9PT0gdGhpcy5pZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmxhYmVsRWxlbWVudCwgJ2FjdGl2ZScpO1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmNvbnRlbnRFbGVtZW50LCAnYWN0aXZlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5sYWJlbEVsZW1lbnQsICdhY3RpdmUnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5jb250ZW50RWxlbWVudCwgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGlzYWJsZWRTdGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubGFiZWxFbGVtZW50IHx8ICF0aGlzLmNvbnRlbnRFbGVtZW50KSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmxhYmVsRWxlbWVudCwgJ2Rpc2FibGVkJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuY29udGVudEVsZW1lbnQsICdkaXNhYmxlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMubGFiZWxFbGVtZW50LCAnZGlzYWJsZWQnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5jb250ZW50RWxlbWVudCwgJ2Rpc2FibGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVMYXp5TG9hZGVkKGFjdGl2ZUl0ZW06IERva3VUYWIpIHtcbiAgICBpZiAoIXRoaXMubGF6eUxvYWQpIHJldHVybjtcbiAgICBpZiAoYWN0aXZlSXRlbT8uaWQgPT09IHRoaXMuaWQgJiYgdGhpcy5jb250ZW50VGVtcGxhdGUgJiYgdGhpcy5jb250ZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5jb250ZW50Vmlld1JlZiA9IFZpZXdFbGVtZW50LmNyZWF0ZUNvbnRlbnRWaWV3UmVmQW5kQXBwZW5kKHtcbiAgICAgICAgYXBwbGljYXRpb25SZWY6IHRoaXMuYXBwUmVmLFxuICAgICAgICByZW5kZXJlcjogdGhpcy5yZW5kZXJlcixcbiAgICAgICAgY29udGVudEVsZW1lbnQ6IHRoaXMuY29udGVudEVsZW1lbnQsXG4gICAgICAgIGNvbnRlbnRUZW1wbGF0ZTogdGhpcy5jb250ZW50VGVtcGxhdGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50Vmlld1JlZj8uZGVzdHJveSgpO1xuICAgIH1cbiAgfVxufVxuIl19