UNPKG

@doku-dev/doku-fragment

Version:

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

139 lines 16.5 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); }); } 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"], 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFiLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rva3UtZnJhZ21lbnQvc3JjL2xpYi90YWJzL3RhYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFHTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFFWixNQUFNLEVBQ04sS0FBSyxFQUdMLGlCQUFpQixHQUNsQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsYUFBYSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFckQsT0FBTyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDOUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFFN0MsSUFBSSxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBaUJmLE1BQU0sT0FBTyxPQUFPO0lBcUNsQixZQUNVLE1BQXNCLEVBQ3RCLFFBQW1CLEVBQ0EsSUFBZTtRQUZsQyxXQUFNLEdBQU4sTUFBTSxDQUFnQjtRQUN0QixhQUFRLEdBQVIsUUFBUSxDQUFXO1FBQ0EsU0FBSSxHQUFKLElBQUksQ0FBVztRQXZDNUM7Ozs7O1dBS0c7UUFDTSxPQUFFLEdBQUcsU0FBUyxNQUFNLEVBQUUsRUFBRSxDQUFDO1FBRWxDOzs7Ozs7V0FNRztRQUNNLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUI7Ozs7OztXQU1HO1FBQ00sYUFBUSxHQUFHLEtBQUssQ0FBQztRQVVsQixh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QkFBQyxjQUFjLEVBQUUsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gIEFmdGVyQ29udGVudEluaXQsXG4gIEFwcGxpY2F0aW9uUmVmLFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVtYmVkZGVkVmlld1JlZixcbiAgSW5qZWN0LFxuICBJbnB1dCxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFZpZXdFbmNhcHN1bGF0aW9uLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFJlcGxheVN1YmplY3QsIGRlbGF5LCBmaWx0ZXIsIGZyb21FdmVudCwgb2YsIHN3aXRjaE1hcCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBEb2t1VGFiQ29udGVudCB9IGZyb20gJy4vdGFiLWNvbnRlbnQuZGlyZWN0aXZlJztcbmltcG9ydCB7IERva3VUYWJMYWJlbCB9IGZyb20gJy4vdGFiLWxhYmVsLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBEb2t1VGFicyB9IGZyb20gJy4vdGFicy5jb21wb25lbnQnO1xuaW1wb3J0IHsgRE9LVV9UQUIsIERPS1VfVEFCUyB9IGZyb20gJy4vdG9rZW4nO1xuaW1wb3J0IHsgVmlld0VsZW1lbnQgfSBmcm9tICcuL3ZpZXctZWxlbWVudCc7XG5cbmxldCBuZXh0SWQgPSAxO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdkb2t1LXRhYicsXG4gIGV4cG9ydEFzOiAnZG9rdVRhYicsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtDb21tb25Nb2R1bGVdLFxuICB0ZW1wbGF0ZTogJycsXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnM6IFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBET0tVX1RBQixcbiAgICAgIHVzZUV4aXN0aW5nOiBEb2t1VGFiLFxuICAgIH0sXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIERva3VUYWIgaW1wbGVtZW50cyBPbkRlc3Ryb3ksIEFmdGVyQ29udGVudEluaXQge1xuICAvKipcbiAgICogVW5pcXVlIGlkIG9mIHRoZSB0YWIuXG4gICAqIERlZmF1bHQgdmFsdWUgaXMgYXV0by1nZW5lcmF0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0ICdkLXRhYi1bbmV4dElkXScnXG4gICAqL1xuICBASW5wdXQoKSBpZCA9IGBkLXRhYi0ke25leHRJZCsrfWA7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIHRhYiBpcyBkaXNhYmxlZC5cbiAgICpcbiAgICogVGhlIHRhYiBjb250ZW50IGlzIG5vdCBnb2luZyB0byBiZSBsb2FkZWQgb24gZGlzYWJsZWQgdGFiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgQElucHV0KCkgZGlzYWJsZWQgPSBmYWxzZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgdGFiIGNvbnRlbnQgaXMgbGF6eSBsb2FkZWQgd2hpY2ggbWVhbnNcbiAgICogdGhlIGNvbnRlbnQgd2lsbCBiZSBsb2FkZWQgd2hlbiB0aGUgdGFiIGlzIGFjdGl2ZSBhbmRcbiAgICogZGVzdHJveWVkIHdoZW4gYXdheSBmcm9tIHRoZSB0YWIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBASW5wdXQoKSBsYXp5TG9hZCA9IGZhbHNlO1xuXG4gIHByb3RlY3RlZCBsYWJlbEVsZW1lbnQ/OiBIVE1MRGl2RWxlbWVudDtcbiAgcHJvdGVjdGVkIGxhYmVsVmlld1JlZj86IEVtYmVkZGVkVmlld1JlZjxhbnk+O1xuICBwcm90ZWN0ZWQgY29udGVudEVsZW1lbnQ/OiBIVE1MRGl2RWxlbWVudDtcbiAgcHJvdGVjdGVkIGNvbnRlbnRWaWV3UmVmPzogRW1iZWRkZWRWaWV3UmVmPGFueT47XG5cbiAgQENvbnRlbnRDaGlsZChEb2t1VGFiTGFiZWwsIHsgZGVzY2VuZGFudHM6IGZhbHNlIH0pIHByb3RlY3RlZCBsYWJlbFRlbXBsYXRlPzogRG9rdVRhYkxhYmVsO1xuICBAQ29udGVudENoaWxkKERva3VUYWJDb250ZW50LCB7IGRlc2NlbmRhbnRzOiBmYWxzZSB9KSBwcm90ZWN0ZWQgY29udGVudFRlbXBsYXRlPzogRG9rdVRhYkNvbnRlbnQ7XG5cbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBSZXBsYXlTdWJqZWN0KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhcHBSZWY6IEFwcGxpY2F0aW9uUmVmLFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBASW5qZWN0KERPS1VfVEFCUykgcHJpdmF0ZSB0YWJzPzogRG9rdVRhYnNcbiAgKSB7fVxuXG4gIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLnRhYnM/LlsndGFiQ2hhbmdlRm9yQ2hpbGQkJ10ucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSgoYWN0aXZlSXRlbSkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVBY3RpdmVTdGF0ZShhY3RpdmVJdGVtKTtcbiAgICAgIHRoaXMuaGFuZGxlRGlzYWJsZWRTdGF0ZSgpO1xuICAgICAgdGhpcy5oYW5kbGVMYXp5TG9hZGVkKGFjdGl2ZUl0ZW0pO1xuICAgIH0pO1xuXG4gICAgb2YodHJ1ZSlcbiAgICAgIC5waXBlKFxuICAgICAgICBkZWxheSgxMDApLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLW5vbi1udWxsLWFzc2VydGlvblxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT4gZnJvbUV2ZW50KHRoaXMubGFiZWxFbGVtZW50ISwgJ2NsaWNrJykpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gIXRoaXMuZGlzYWJsZWQpLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnRhYnM/LmNoYW5nZUFjdGl2ZVRhYih0aGlzLmlkKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlQWN0aXZlU3RhdGUoYWN0aXZlSXRlbTogRG9rdVRhYikge1xuICAgIGlmICghdGhpcy5sYWJlbEVsZW1lbnQgfHwgIXRoaXMuY29udGVudEVsZW1lbnQpIHJldHVybjtcblxuICAgIGlmIChhY3RpdmVJdGVtPy5pZCA9PT0gdGhpcy5pZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmxhYmVsRWxlbWVudCwgJ2FjdGl2ZScpO1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmNvbnRlbnRFbGVtZW50LCAnYWN0aXZlJyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5sYWJlbEVsZW1lbnQsICdhY3RpdmUnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5jb250ZW50RWxlbWVudCwgJ2FjdGl2ZScpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlRGlzYWJsZWRTdGF0ZSgpIHtcbiAgICBpZiAoIXRoaXMubGFiZWxFbGVtZW50IHx8ICF0aGlzLmNvbnRlbnRFbGVtZW50KSByZXR1cm47XG5cbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmxhYmVsRWxlbWVudCwgJ2Rpc2FibGVkJyk7XG4gICAgICB0aGlzLnJlbmRlcmVyLmFkZENsYXNzKHRoaXMuY29udGVudEVsZW1lbnQsICdkaXNhYmxlZCcpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKHRoaXMubGFiZWxFbGVtZW50LCAnZGlzYWJsZWQnKTtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5jb250ZW50RWxlbWVudCwgJ2Rpc2FibGVkJyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVMYXp5TG9hZGVkKGFjdGl2ZUl0ZW06IERva3VUYWIpIHtcbiAgICBpZiAoIXRoaXMubGF6eUxvYWQpIHJldHVybjtcbiAgICBpZiAoYWN0aXZlSXRlbT8uaWQgPT09IHRoaXMuaWQgJiYgdGhpcy5jb250ZW50VGVtcGxhdGUgJiYgdGhpcy5jb250ZW50RWxlbWVudCkge1xuICAgICAgdGhpcy5jb250ZW50Vmlld1JlZiA9IFZpZXdFbGVtZW50LmNyZWF0ZUNvbnRlbnRWaWV3UmVmQW5kQXBwZW5kKHtcbiAgICAgICAgYXBwbGljYXRpb25SZWY6IHRoaXMuYXBwUmVmLFxuICAgICAgICByZW5kZXJlcjogdGhpcy5yZW5kZXJlcixcbiAgICAgICAgY29udGVudEVsZW1lbnQ6IHRoaXMuY29udGVudEVsZW1lbnQsXG4gICAgICAgIGNvbnRlbnRUZW1wbGF0ZTogdGhpcy5jb250ZW50VGVtcGxhdGUsXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jb250ZW50Vmlld1JlZj8uZGVzdHJveSgpO1xuICAgIH1cbiAgfVxufVxuIl19