UNPKG

@sd-angular/core

Version:

Sd Angular Core Lib

610 lines (596 loc) 30.2 kB
import { __classPrivateFieldSet, __classPrivateFieldGet, __awaiter } from 'tslib'; import { filter, take, debounceTime, map } from 'rxjs/operators'; import { ɵɵdefineInjectable, ɵɵinject, Injectable, Component, ChangeDetectionStrategy, ChangeDetectorRef, Input, ElementRef, ViewChild, HostListener, Injector, Compiler, Pipe, Directive, NgModule } from '@angular/core'; import { BehaviorSubject, Subscription, of } from 'rxjs'; import { SdNotifyService } from '@sd-angular/core/notify'; import { moveItemInArray, DragDropModule } from '@angular/cdk/drag-drop'; import { RoutesRecognized, NavigationEnd, Router, ActivatedRoute, RouterLinkWithHref, RouterModule } from '@angular/router'; import hash from 'object-hash'; import { CommonModule } from '@angular/common'; import { MatIconModule } from '@angular/material/icon'; import { MatTooltipModule } from '@angular/material/tooltip'; var _tab; class SdTabBase { constructor(tab) { _tab.set(this, void 0); __classPrivateFieldSet(this, _tab, tab); } get tab() { return __classPrivateFieldGet(this, _tab); } } _tab = new WeakMap(); class SdTabActivated extends SdTabBase { } class SdTabDeactivated extends SdTabBase { } var _currentTab, _componentBuilders; class SdTabRouterService { constructor(notifyService) { this.notifyService = notifyService; this.events = new BehaviorSubject(new SdTabBase(null)); this.actions = new BehaviorSubject(null); this.builders = new BehaviorSubject([]); this.currentTabChanges = new BehaviorSubject(null); this.newTabs = new BehaviorSubject(null); _currentTab.set(this, null); _componentBuilders.set(this, []); this.addBuilder = (builder) => { if (!__classPrivateFieldGet(this, _componentBuilders).some(e => e.component === builder.component)) { __classPrivateFieldGet(this, _componentBuilders).push(builder); this.builders.next(__classPrivateFieldGet(this, _componentBuilders)); } }; // select = (tabOrKey: string | SdTab): void => { // const tab = this.#tabs.find(e => { // if (typeof (tabOrKey) === 'string') { // return e.key === tabOrKey; // } // return e.key === tabOrKey?.key; // }); // if (tab) { // this.#currentTab = tab; // } // } // add = (tab: SdTab): void => { // if (!tab.key) { // this.notifyService.notify.warning('Tab key is required'); // } // if (!tab.component) { // this.notifyService.notify.warning('Tab component is required'); // } // const existedTab = this.#tabs.find(e => e.key === tab.key); // if (!existedTab) { // this.#tabs.push(tab); // this.select(tab); // } else { // this.select(existedTab); // } // } // remove = (tabOrKey: string | SdTab): void => { // this.#tabs = this.#tabs.filter(e => { // if (typeof (tabOrKey) === 'string') { // return e.key !== tabOrKey; // } // return e.key !== tabOrKey?.key; // }); // } this.setCurrentTab = (tab) => { __classPrivateFieldSet(this, _currentTab, tab); this.currentTabChanges.next(tab); }; this.pushEvent = (tab, Event) => { this.events.next(new Event(tab)); }; this.setOptions = () => { }; this.close = (tab) => { if (tab) { this.actions.next({ type: 'close', tab, }); } else if (__classPrivateFieldGet(this, _currentTab)) { this.actions.next({ type: 'close', tab: __classPrivateFieldGet(this, _currentTab), }); } }; } get currentTab() { return __classPrivateFieldGet(this, _currentTab); } get key() { var _a; return ((_a = __classPrivateFieldGet(this, _currentTab)) === null || _a === void 0 ? void 0 : _a.key) || null; } } _currentTab = new WeakMap(), _componentBuilders = new WeakMap(); SdTabRouterService.ɵprov = ɵɵdefineInjectable({ factory: function SdTabRouterService_Factory() { return new SdTabRouterService(ɵɵinject(SdNotifyService)); }, token: SdTabRouterService, providedIn: "root" }); SdTabRouterService.decorators = [ { type: Injectable, args: [{ providedIn: 'root', },] } ]; SdTabRouterService.ctorParameters = () => [ { type: SdNotifyService } ]; class SdTabDecoratorService { constructor(tabRouterService) { SdTabDecoratorService.tabRouterService.next(tabRouterService); } } SdTabDecoratorService.tabRouterService = new BehaviorSubject(undefined); SdTabDecoratorService.ɵprov = ɵɵdefineInjectable({ factory: function SdTabDecoratorService_Factory() { return new SdTabDecoratorService(ɵɵinject(SdTabRouterService)); }, token: SdTabDecoratorService, providedIn: "root" }); SdTabDecoratorService.decorators = [ { type: Injectable, args: [{ providedIn: 'root' },] } ]; SdTabDecoratorService.ctorParameters = () => [ { type: SdTabRouterService } ]; function SdTabComponent(builder) { return (constructor) => { SdTabDecoratorService.tabRouterService.pipe(filter(service => service !== undefined && service !== null), take(1)).subscribe(service => { service.addBuilder(builder); }); }; } var _subsctiption; class SdTabRouterItemComponent { constructor(cdRef, tabRouterService) { this.cdRef = cdRef; this.tabRouterService = tabRouterService; _subsctiption.set(this, new Subscription()); this.close = (event) => { event.preventDefault(); event.stopPropagation(); this.tabRouterService.close(this.tab); }; } ngOnInit() { __classPrivateFieldGet(this, _subsctiption).add(this.tabRouterService.events.pipe(debounceTime(100)).subscribe(() => { this.cdRef.markForCheck(); })); } ngOnDestroy() { __classPrivateFieldGet(this, _subsctiption).unsubscribe(); } } _subsctiption = new WeakMap(); SdTabRouterItemComponent.decorators = [ { type: Component, args: [{ selector: "sd-tab-router-item", template: "<a [routerLink]=\"[tab.url]\" [queryParams]=\"tab.queryParams\" [state]=\"{ switchTab: true }\"\r\n class=\"tab-router__item d-flex align-items-center\" [ngClass]=\"{\r\n 'tab-router__item--active': tab.isActive\r\n }\">\r\n <ng-container *ngIf=\"tab.overrideTabInfo | sdTabInfo:tab | async as tabInfo\">\r\n <div class=\"\r\n tab-router__icon\r\n mr-8\r\n \" [ngStyle]=\"{\r\n 'background-color': tabInfo.color\r\n }\" [matTooltip]=\"tabInfo.tooltip || tabInfo.name\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">\r\n {{ tabInfo.initialName || 'SD' }}\r\n </div>\r\n <div class=\"flex-1 overflow-hidden\">\r\n <div class=\"tab-router__name\" [matTooltip]=\"tabInfo.tooltip || tabInfo.name\" matTooltipPosition=\"below\"\r\n matTooltipShowDelay=\"1000\">\r\n {{ tabInfo.name }}\r\n </div>\r\n </div>\r\n <button aria-hidden=\"true\" type=\"button\"\r\n class=\"tab-router__close d-flex align-items-center justify-content-center ml-4\" (click)=\"close($event)\"\r\n (mousedown)=\"$event.stopPropagation()\">\r\n <mat-icon aria-hidden=\"true\">close</mat-icon>\r\n </button>\r\n </ng-container>\r\n</a>", changeDetection: ChangeDetectionStrategy.OnPush, styles: [":host{display:block;flex:1 1 64px;max-width:240px;overflow:hidden;position:relative}:host:after{background:#dde0e5;bottom:0;content:\"\";height:16px;margin:auto;position:absolute;right:0;top:0;width:1px}:host:last-child:after{content:none}.flex-1{flex:1}.tab-router__icon{background-color:#5c6bc0;border-radius:2px;color:#fff;font-size:10px;height:16px;line-height:16px;text-align:center;text-transform:uppercase;width:16px}.tab-router__icon .mat-icon{font-size:10px;height:10px;width:10px}.tab-router__close{background:none;border:0;border-radius:50%;color:#757575;height:16px;outline:none;width:16px}.tab-router__close:hover{background-color:rgba(0,0,0,.12)}.tab-router__close .mat-icon{font-size:12px;height:12px;width:12px}.tab-router__item{background:#f2f3f4;color:inherit;font-size:12px;line-height:16px;overflow:hidden;padding:16px 16px 8px;text-decoration:none}.tab-router__item:hover{background-color:#fff}.tab-router__name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tab-router__item--active{background-color:#fff;border-radius:8px 8px 0 0}"] },] } ]; SdTabRouterItemComponent.ctorParameters = () => [ { type: ChangeDetectorRef }, { type: SdTabRouterService } ]; SdTabRouterItemComponent.propDecorators = { tab: [{ type: Input }] }; class SdTabRouterNavComponent { constructor(cdRef, elementRef) { this.cdRef = cdRef; this.elementRef = elementRef; this.mode = 'default'; this.checkUI = () => { const width = this.tabRouterNav.nativeElement.clientWidth; const nameWidth = (width - this.tabs.length * 68) / this.tabs.length; if (nameWidth <= 20) { this.mode = 'compact'; } else { this.mode = 'default'; } this.cdRef.markForCheck(); }; this.onDrop = (event) => { moveItemInArray(this.tabs, event.previousIndex, event.currentIndex); }; } onResize(event) { this.checkUI(); } } SdTabRouterNavComponent.decorators = [ { type: Component, args: [{ selector: 'sd-tab-router-nav', template: "<div\r\n #tabRouterNav\r\n cdkDropList\r\n cdkDropListLockAxis=\"x\"\r\n cdkDropListOrientation=\"horizontal\"\r\n (cdkDropListDropped)=\"onDrop($event)\"\r\n class=\"tab-router__nav tab-router__nav--{{ mode }} d-flex align-items-center flex-nowrap\"\r\n [class.d-none]=\"tabs?.length > 1\"\r\n>\r\n <ng-container *ngFor=\"let tab of tabs\">\r\n <sd-tab-router-item [tab]=\"tab\" cdkDrag [cdkDragBoundary]=\"elementRef?.nativeElement\"></sd-tab-router-item>\r\n </ng-container>\r\n</div>\r\n", changeDetection: ChangeDetectionStrategy.OnPush, styles: [".tab-router__nav{background:#f9f9f9;overflow:hidden}.tab-router__nav--compact::ng-deep .tab-router__name{display:none}.tab-router__nav--compact::ng-deep .tab-router__icon{margin:0!important}.tab-router__nav--compact::ng-deep .tab-router__item--active{min-width:240px}.tab-router__nav--compact::ng-deep .tab-router__item--active .tab-router__icon{margin-right:8px!important}.tab-router__nav--compact::ng-deep .tab-router__item--active .tab-router__name{display:-webkit-box}"] },] } ]; SdTabRouterNavComponent.ctorParameters = () => [ { type: ChangeDetectorRef }, { type: ElementRef } ]; SdTabRouterNavComponent.propDecorators = { tabRouterNav: [{ type: ViewChild, args: ['tabRouterNav',] }], tabs: [{ type: Input }], onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }] }; var _rootRoute, _subscription, _firstLoad, _closeTab, _activeRoute, _getActivatedRouteSnapshot, _getActivatedRoute; class SdTabRouterOutletComponent { constructor(router, activatedRoute, cd, injector, compiler, tabDecoratorService, // KHÔNG XÓA tabRouterService, sdNotifyService) { this.router = router; this.activatedRoute = activatedRoute; this.cd = cd; this.injector = injector; this.compiler = compiler; this.tabDecoratorService = tabDecoratorService; this.tabRouterService = tabRouterService; this.sdNotifyService = sdNotifyService; this.tabs = []; _rootRoute.set(this, void 0); _subscription.set(this, new Subscription()); _firstLoad.set(this, true); this.tabTrackBy = (index, tab) => { return tab.key; }; _closeTab.set(this, (tab) => { var _a; const { isActive, key: activeKey } = tab; if (isActive) { const activeIndex = this.tabs.findIndex(({ key }) => key === activeKey); const nextTab = this.tabs[activeIndex + 1] || this.tabs[activeIndex - 1]; if (nextTab) { const { url: nextUrl } = nextTab; const nextQueryParams = Object.assign({}, (nextTab.queryParams || {})); this.tabs = this.tabs.filter(({ key }) => key !== activeKey); this.router.navigate([nextUrl], { queryParams: nextQueryParams, state: { switchTab: true, }, }); } else { this.tabs = this.tabs.filter(({ key }) => key !== activeKey); this.router.navigateByUrl('/', { state: { switchTab: true, }, }); } } else { this.tabs = this.tabs.filter(({ key }) => key !== tab.key); (_a = this.tabRouterNav) === null || _a === void 0 ? void 0 : _a.checkUI(); this.cd.markForCheck(); } }); _activeRoute.set(this, (fullUrl, route) => __awaiter(this, void 0, void 0, function* () { var _a, _b, _c, _d, _e, _f, _g, _h, _j; if (!(route === null || route === void 0 ? void 0 : route.component)) { return; } const component = route.component; const queryParams = Object.assign({}, (route.queryParams || {})); const params = Object.assign({}, (route.params || {})); const data = Object.assign({}, (route.data || {})); const [url] = fullUrl.split('?'); const key = hash({ url, queryParams }); let existedIndex = -1; let activatedIndex = -1; this.tabs.forEach((tab, index) => { if (tab.key === key) { tab.isActive = true; existedIndex = index; } else { if (tab.isActive) { activatedIndex = index; this.tabRouterService.pushEvent(tab, SdTabDeactivated); } tab.isActive = false; } }); const currentNavigation = this.router.getCurrentNavigation(); // Switch tab sẽ ko re-render lại trang const switchTab = (_b = (_a = currentNavigation === null || currentNavigation === void 0 ? void 0 : currentNavigation.extras) === null || _a === void 0 ? void 0 : _a.state) === null || _b === void 0 ? void 0 : _b.switchTab; // Replace tab sẽ close trang hiện tại const replaceTab = (_d = (_c = currentNavigation === null || currentNavigation === void 0 ? void 0 : currentNavigation.extras) === null || _c === void 0 ? void 0 : _c.state) === null || _d === void 0 ? void 0 : _d.replaceTab; if (existedIndex >= 0) { const existedTab = this.tabs[existedIndex]; if (replaceTab && activatedIndex >= 0) { if (activatedIndex >= 0) { this.tabs.splice(activatedIndex, 1); } } if (switchTab) { this.tabRouterService.setCurrentTab(existedTab); this.tabRouterService.pushEvent(existedTab, SdTabActivated); } else { if (typeof ((_f = (_e = route === null || route === void 0 ? void 0 : route.parent) === null || _e === void 0 ? void 0 : _e.routeConfig) === null || _f === void 0 ? void 0 : _f.loadChildren) === 'function') { const module = yield route.parent.routeConfig.loadChildren(); const factory = yield this.compiler.compileModuleAsync(module); const injector = factory.create(this.injector); const activatedRoute = __classPrivateFieldGet(this, _getActivatedRoute).call(this, __classPrivateFieldGet(this, _rootRoute), component); const tab = { key, component, injector: new SdOutletInjector(activatedRoute, injector), isActive: true, name: url, url, params, queryParams, data }; this.tabs[this.tabs.indexOf(existedTab)] = tab; } } } else { if (typeof ((_h = (_g = route === null || route === void 0 ? void 0 : route.parent) === null || _g === void 0 ? void 0 : _g.routeConfig) === null || _h === void 0 ? void 0 : _h.loadChildren) === 'function') { const module = yield route.parent.routeConfig.loadChildren(); const factory = yield this.compiler.compileModuleAsync(module); const injector = factory.create(this.injector); const activatedRoute = __classPrivateFieldGet(this, _getActivatedRoute).call(this, __classPrivateFieldGet(this, _rootRoute), component); const tab = { key, component, injector: new SdOutletInjector(activatedRoute, injector), isActive: true, name: url, url, params, queryParams, data }; this.tabRouterService.setCurrentTab(tab); if (activatedIndex >= 0 && replaceTab) { this.tabs.splice(activatedIndex, 1); } this.tabs.push(tab); // if (existedIndex >= 0 && !switchTab) { // this.tabs[existedIndex] = tab; // } else { // this.tabs.push(tab); // } } (_j = this.tabRouterNav) === null || _j === void 0 ? void 0 : _j.checkUI(); if (this.tabs.length > 10) { this.sdNotifyService.notify.warning('Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.'); } if (this.tabs.length > 15) { this.tabs.splice(0, this.tabs.length - 10); } } // if (existedIndex >= 0 && switchTab) { // const existedTab = this.tabs[existedIndex]; // this.tabRouterService.setCurrentTab(existedTab); // this.tabRouterService.pushEvent(existedTab, SdTabActivated); // } else { // if (typeof route?.parent?.routeConfig?.loadChildren === 'function') { // const module = await route.parent.routeConfig.loadChildren(); // const factory = await this.compiler.compileModuleAsync(module); // const injector = factory.create(this.injector); // const activatedRoute = this.#getActivatedRoute( // this.#rootRoute, // component // ); // const tab = { // key, // component, // injector: new SdOutletInjector(activatedRoute, injector), // isActive: true, // name: url, // url, // params, // queryParams, // data // }; // this.tabRouterService.setCurrentTab(tab); // if (activatedIndex >= 0 && replaceTab) { // this.tabs.splice(activatedIndex, 1); // } // if (existedIndex >= 0 && !switchTab) { // this.tabs[existedIndex] = tab; // } else { // this.tabs.push(tab); // } // } // this.tabRouterNav?.checkUI(); // if (this.tabs.length > 10) { // this.sdNotifyService.notify.warning( // 'Bạn đã mở quá nhiều tab. Vui lòng tắt các tab không dùng để hệ thống hoạt động tốt hơn.' // ); // } // if (this.tabs.length > 15) { // this.tabs.splice(0, this.tabs.length - 10); // } // } this.cd.markForCheck(); })); _getActivatedRouteSnapshot.set(this, (activatedRouteSnapshot) => { if (!activatedRouteSnapshot) { return null; } while (activatedRouteSnapshot.firstChild) { activatedRouteSnapshot = activatedRouteSnapshot.firstChild; } return activatedRouteSnapshot; }); _getActivatedRoute.set(this, (activatedRoute, component) => { if (!activatedRoute) { return null; } if (activatedRoute.component && activatedRoute.component === component) { return activatedRoute; } while (activatedRoute.firstChild) { activatedRoute = activatedRoute.firstChild; if (activatedRoute.component && activatedRoute.component === component) { return activatedRoute; } } return null; }); __classPrivateFieldGet(this, _subscription).add(router.events .pipe(filter((event) => event instanceof RoutesRecognized || event instanceof NavigationEnd)) .subscribe((event) => __awaiter(this, void 0, void 0, function* () { if (__classPrivateFieldGet(this, _firstLoad) && event instanceof NavigationEnd) { __classPrivateFieldSet(this, _firstLoad, false); const route = __classPrivateFieldGet(this, _getActivatedRouteSnapshot).call(this, this.activatedRoute.snapshot); __classPrivateFieldSet(this, _rootRoute, this.router.routerState.root); yield __classPrivateFieldGet(this, _activeRoute).call(this, event.urlAfterRedirects || event.url, route); return; } if (!__classPrivateFieldGet(this, _firstLoad) && event instanceof RoutesRecognized) { const route = __classPrivateFieldGet(this, _getActivatedRouteSnapshot).call(this, event.state.root); __classPrivateFieldSet(this, _rootRoute, this.router.routerState.root); yield __classPrivateFieldGet(this, _activeRoute).call(this, event.urlAfterRedirects || event.url, route); } }))); __classPrivateFieldGet(this, _subscription).add(tabRouterService.actions.subscribe((event) => { if (event && event.type === 'close') { __classPrivateFieldGet(this, _closeTab).call(this, event.tab); } })); } ngOnDestroy() { __classPrivateFieldGet(this, _subscription).unsubscribe(); } } _rootRoute = new WeakMap(), _subscription = new WeakMap(), _firstLoad = new WeakMap(), _closeTab = new WeakMap(), _activeRoute = new WeakMap(), _getActivatedRouteSnapshot = new WeakMap(), _getActivatedRoute = new WeakMap(); SdTabRouterOutletComponent.decorators = [ { type: Component, args: [{ selector: 'sd-tab-router-outlet', template: "<sd-tab-router-nav [tabs]=\"tabs\" #tabRouterNav></sd-tab-router-nav>\r\n\r\n<div class=\"tab-router__list\">\r\n <ng-container *ngFor=\"let tab of tabs;trackBy:tabTrackBy\">\r\n <div class=\"tab-router__pane\" [class.active]=\"tab.isActive\" [id]=\"tab.key\">\r\n <div class=\"tab-router__content\">\r\n <ng-container\r\n *ngComponentOutlet=\"tab.component; injector: tab.injector\"\r\n ></ng-container>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</div>\r\n", styles: [":host{display:flex;flex-direction:column;height:calc(100vh - 64px);width:100%}:host ::ng-deep .sd-loading{max-height:100%;max-width:100%}::ng-deep page-layout{height:100%!important}.tab-router__list{flex:1}.tab-router__pane{display:none;height:100%;position:relative;width:100%}.tab-router__pane.active{display:block}.tab-router__content{bottom:0;height:100%;left:0;overflow:auto;position:absolute;right:0;top:0;width:100%}"] },] } ]; SdTabRouterOutletComponent.ctorParameters = () => [ { type: Router }, { type: ActivatedRoute }, { type: ChangeDetectorRef }, { type: Injector }, { type: Compiler }, { type: SdTabDecoratorService }, { type: SdTabRouterService }, { type: SdNotifyService } ]; SdTabRouterOutletComponent.propDecorators = { tabRouterNav: [{ type: ViewChild, args: ['tabRouterNav',] }] }; class SdOutletInjector { constructor(route, // private childContexts: ChildrenOutletContexts, parent) { this.route = route; this.parent = parent; } get(token, notFoundValue) { if (token === ActivatedRoute && this.route) { return this.route; } // if (token === ChildrenOutletContexts) { // return this.childContexts; // } return this.parent.get(token, notFoundValue); } } class SdTabInfoPipe { constructor(tabRouterService) { this.tabRouterService = tabRouterService; } transform(tabInfo, tab) { if (tabInfo) { return of(tabInfo); } return this.tabRouterService.builders.pipe(map(builders => { const builder = builders.find(e => e.component === tab.component); if (builder) { const { url, params, queryParams, data } = tab; tab.tabInfo = { name: typeof (builder.name) === 'function' ? builder.name({ url, params, queryParams, data }) : builder.name, initialName: typeof (builder.initialName) === 'function' ? builder.initialName({ url, params, queryParams }) : builder.initialName, tooltip: typeof (builder.tooltip) === 'function' ? builder.tooltip({ url, params, queryParams }) : builder.tooltip, color: typeof (builder.color) === 'function' ? builder.color({ url, params, queryParams }) : builder.color }; return tab.tabInfo; } tab.tabInfo = { name: tab.url, initialName: null, }; return tab.tabInfo; })); } } SdTabInfoPipe.decorators = [ { type: Pipe, args: [{ name: 'sdTabInfo' },] } ]; SdTabInfoPipe.ctorParameters = () => [ { type: SdTabRouterService } ]; class RouterLinkMouseDownDirective extends RouterLinkWithHref { onMouseDown(button, ctrlKey, shiftKey, altKey, metaKey) { return this.onClick(button, ctrlKey, shiftKey, altKey, metaKey); } } RouterLinkMouseDownDirective.decorators = [ { type: Directive, args: [{ selector: "a[routerLink],area[routerLink]", },] } ]; RouterLinkMouseDownDirective.propDecorators = { onMouseDown: [{ type: HostListener, args: ["mousedown", [ "$event.button", "$event.ctrlKey", "$event.shiftKey", "$event.altKey", "$event.metaKey", ],] }] }; class SdTabRouterModule { } SdTabRouterModule.decorators = [ { type: NgModule, args: [{ declarations: [ SdTabRouterItemComponent, SdTabRouterNavComponent, SdTabRouterOutletComponent, SdTabInfoPipe, RouterLinkMouseDownDirective, ], imports: [ RouterModule, CommonModule, MatIconModule, MatTooltipModule, DragDropModule ], exports: [ SdTabRouterItemComponent, SdTabRouterNavComponent, SdTabRouterOutletComponent, ], providers: [], },] } ]; /* * Public API Surface of superdev-angular-core */ /** * Generated bundle index. Do not edit. */ export { SdTabActivated, SdTabBase, SdTabComponent, SdTabDeactivated, SdTabDecoratorService, SdTabRouterItemComponent, SdTabRouterModule, SdTabRouterNavComponent, SdTabRouterOutletComponent, SdTabRouterService, SdTabInfoPipe as ɵa, RouterLinkMouseDownDirective as ɵb }; //# sourceMappingURL=sd-angular-core-tab-router.js.map