@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
139 lines • 16.5 kB
JavaScript
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