@sd-angular/core 0.0.834 → 0.0.838

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/bundles/sd-angular-core-editor.umd.js +1 -0
  2. package/bundles/sd-angular-core-editor.umd.js.map +1 -1
  3. package/bundles/sd-angular-core-editor.umd.min.js +1 -1
  4. package/bundles/sd-angular-core-editor.umd.min.js.map +1 -1
  5. package/bundles/sd-angular-core-grid-material.umd.js +4 -3
  6. package/bundles/sd-angular-core-grid-material.umd.js.map +1 -1
  7. package/bundles/sd-angular-core-grid-material.umd.min.js +1 -1
  8. package/bundles/sd-angular-core-grid-material.umd.min.js.map +1 -1
  9. package/bundles/sd-angular-core-tab-router.umd.js +827 -0
  10. package/bundles/sd-angular-core-tab-router.umd.js.map +1 -0
  11. package/bundles/sd-angular-core-tab-router.umd.min.js +16 -0
  12. package/bundles/sd-angular-core-tab-router.umd.min.js.map +1 -0
  13. package/bundles/sd-angular-core.umd.js +4 -4
  14. package/bundles/sd-angular-core.umd.js.map +1 -1
  15. package/bundles/sd-angular-core.umd.min.js +1 -1
  16. package/bundles/sd-angular-core.umd.min.js.map +1 -1
  17. package/editor/sd-angular-core-editor.metadata.json +1 -1
  18. package/esm2015/editor/src/lib/editor.component.js +2 -1
  19. package/esm2015/grid-material/src/lib/grid-material.component.js +5 -4
  20. package/esm2015/public-api.js +2 -1
  21. package/esm2015/tab-router/index.js +2 -0
  22. package/esm2015/tab-router/sd-angular-core-tab-router.js +6 -0
  23. package/esm2015/tab-router/src/lib/actions/tab-router.action.js +2 -0
  24. package/esm2015/tab-router/src/lib/components/tab-router-item/tab-router-item.component.js +26 -0
  25. package/esm2015/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.js +33 -0
  26. package/esm2015/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.js +193 -0
  27. package/esm2015/tab-router/src/lib/decorators/tab.decorator.js +9 -0
  28. package/esm2015/tab-router/src/lib/events/tab-router.event.js +17 -0
  29. package/esm2015/tab-router/src/lib/models/tab-router.model.js +5 -0
  30. package/esm2015/tab-router/src/lib/pipes/tab-info.pipe.js +34 -0
  31. package/esm2015/tab-router/src/lib/services/tab-decorator.service.js +26 -0
  32. package/esm2015/tab-router/src/lib/services/tab-router.service.js +106 -0
  33. package/esm2015/tab-router/src/lib/tab-router.module.js +29 -0
  34. package/esm2015/tab-router/src/public-api.js +18 -0
  35. package/fesm2015/sd-angular-core-editor.js +1 -0
  36. package/fesm2015/sd-angular-core-editor.js.map +1 -1
  37. package/fesm2015/sd-angular-core-grid-material.js +4 -3
  38. package/fesm2015/sd-angular-core-grid-material.js.map +1 -1
  39. package/fesm2015/sd-angular-core-tab-router.js +462 -0
  40. package/fesm2015/sd-angular-core-tab-router.js.map +1 -0
  41. package/fesm2015/sd-angular-core.js +1 -0
  42. package/fesm2015/sd-angular-core.js.map +1 -1
  43. package/package.json +1 -1
  44. package/public-api.d.ts +1 -0
  45. package/{sd-angular-core-0.0.834.tgz → sd-angular-core-0.0.838.tgz} +0 -0
  46. package/tab-router/index.d.ts +1 -0
  47. package/tab-router/package.json +12 -0
  48. package/tab-router/sd-angular-core-tab-router.d.ts +5 -0
  49. package/tab-router/sd-angular-core-tab-router.metadata.json +1 -0
  50. package/tab-router/src/lib/actions/tab-router.action.d.ts +5 -0
  51. package/tab-router/src/lib/components/tab-router-item/tab-router-item.component.d.ts +8 -0
  52. package/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.d.ts +10 -0
  53. package/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.d.ts +20 -0
  54. package/tab-router/src/lib/decorators/tab.decorator.d.ts +17 -0
  55. package/tab-router/src/lib/events/tab-router.event.d.ts +11 -0
  56. package/tab-router/src/lib/models/tab-router.model.d.ts +20 -0
  57. package/tab-router/src/lib/pipes/tab-info.pipe.d.ts +9 -0
  58. package/tab-router/src/lib/services/tab-decorator.service.d.ts +6 -0
  59. package/tab-router/src/lib/services/tab-router.service.d.ts +24 -0
  60. package/tab-router/src/lib/tab-router.module.d.ts +2 -0
  61. package/tab-router/src/public-api.d.ts +9 -0
@@ -0,0 +1,462 @@
1
+ import { __classPrivateFieldSet, __classPrivateFieldGet, __awaiter } from 'tslib';
2
+ import { ɵɵdefineInjectable, ɵɵinject, Injectable, Component, Input, ViewChild, HostListener, ChangeDetectorRef, Injector, Compiler, Pipe, NgModule } from '@angular/core';
3
+ import { BehaviorSubject, Subscription } from 'rxjs';
4
+ import { SdNotifyService } from '@sd-angular/core/notify';
5
+ import { RoutesRecognized, Router, ChildrenOutletContexts, ActivatedRoute, RouterModule } from '@angular/router';
6
+ import { CommonModule } from '@angular/common';
7
+ import { MatIconModule } from '@angular/material/icon';
8
+ import { MatTooltipModule } from '@angular/material/tooltip';
9
+ import { map } from 'rxjs/operators';
10
+
11
+ // export interface SdTabComponent {
12
+ // getTabInfo(args: {params: any, queryParams: any});
13
+ // }
14
+
15
+ var _tab;
16
+ class SdTabBase {
17
+ constructor(tab) {
18
+ _tab.set(this, void 0);
19
+ __classPrivateFieldSet(this, _tab, tab);
20
+ }
21
+ get tab() {
22
+ return __classPrivateFieldGet(this, _tab);
23
+ }
24
+ }
25
+ _tab = new WeakMap();
26
+ class SdTabActivated extends SdTabBase {
27
+ }
28
+ class SdTabDeactivated extends SdTabBase {
29
+ }
30
+
31
+ var _currentTab, _componentBuilders;
32
+ class SdTabRouterService {
33
+ constructor(notifyService) {
34
+ this.notifyService = notifyService;
35
+ this.events = new BehaviorSubject(new SdTabBase(null));
36
+ this.actions = new BehaviorSubject(null);
37
+ this.builders = new BehaviorSubject([]);
38
+ _currentTab.set(this, null);
39
+ _componentBuilders.set(this, []);
40
+ this.addBuilder = (builder) => {
41
+ if (!__classPrivateFieldGet(this, _componentBuilders).some(e => e.component === builder.component)) {
42
+ __classPrivateFieldGet(this, _componentBuilders).push(builder);
43
+ this.builders.next(__classPrivateFieldGet(this, _componentBuilders));
44
+ }
45
+ };
46
+ // select = (tabOrKey: string | SdTab): void => {
47
+ // const tab = this.#tabs.find(e => {
48
+ // if (typeof (tabOrKey) === 'string') {
49
+ // return e.key === tabOrKey;
50
+ // }
51
+ // return e.key === tabOrKey?.key;
52
+ // });
53
+ // if (tab) {
54
+ // this.#currentTab = tab;
55
+ // }
56
+ // }
57
+ // add = (tab: SdTab): void => {
58
+ // if (!tab.key) {
59
+ // this.notifyService.notify.warning('Tab key is required');
60
+ // }
61
+ // if (!tab.component) {
62
+ // this.notifyService.notify.warning('Tab component is required');
63
+ // }
64
+ // const existedTab = this.#tabs.find(e => e.key === tab.key);
65
+ // if (!existedTab) {
66
+ // this.#tabs.push(tab);
67
+ // this.select(tab);
68
+ // } else {
69
+ // this.select(existedTab);
70
+ // }
71
+ // }
72
+ // remove = (tabOrKey: string | SdTab): void => {
73
+ // this.#tabs = this.#tabs.filter(e => {
74
+ // if (typeof (tabOrKey) === 'string') {
75
+ // return e.key !== tabOrKey;
76
+ // }
77
+ // return e.key !== tabOrKey?.key;
78
+ // });
79
+ // }
80
+ this.setCurrentTab = (tab) => {
81
+ __classPrivateFieldSet(this, _currentTab, tab);
82
+ };
83
+ this.pushEvent = (tab, Event) => {
84
+ this.events.next(new Event(tab));
85
+ };
86
+ this.setOptions = () => { };
87
+ this.close = (tab) => {
88
+ if (tab) {
89
+ this.actions.next({
90
+ type: 'close',
91
+ tab,
92
+ });
93
+ }
94
+ else if (__classPrivateFieldGet(this, _currentTab)) {
95
+ this.actions.next({
96
+ type: 'close',
97
+ tab: __classPrivateFieldGet(this, _currentTab),
98
+ });
99
+ }
100
+ };
101
+ SdTabRouterService.service = this;
102
+ }
103
+ // #tabs: SdTab[] = [];
104
+ static getService() {
105
+ if (!SdTabRouterService.service) {
106
+ throw new Error('SdTabRouterService is not initialized');
107
+ }
108
+ return SdTabRouterService.service;
109
+ }
110
+ get currentTab() {
111
+ return __classPrivateFieldGet(this, _currentTab);
112
+ }
113
+ get key() {
114
+ var _a;
115
+ return ((_a = __classPrivateFieldGet(this, _currentTab)) === null || _a === void 0 ? void 0 : _a.key) || null;
116
+ }
117
+ }
118
+ _currentTab = new WeakMap(), _componentBuilders = new WeakMap();
119
+ SdTabRouterService.service = undefined;
120
+ SdTabRouterService.ɵprov = ɵɵdefineInjectable({ factory: function SdTabRouterService_Factory() { return new SdTabRouterService(ɵɵinject(SdNotifyService)); }, token: SdTabRouterService, providedIn: "root" });
121
+ SdTabRouterService.decorators = [
122
+ { type: Injectable, args: [{
123
+ providedIn: 'root',
124
+ },] }
125
+ ];
126
+ SdTabRouterService.ctorParameters = () => [
127
+ { type: SdNotifyService }
128
+ ];
129
+
130
+ class SdTabDecoratorService {
131
+ constructor(service) {
132
+ SdTabDecoratorService.service = service;
133
+ }
134
+ static getService() {
135
+ if (!SdTabDecoratorService.service) {
136
+ throw new Error('SdTabDecoratorService not initialized');
137
+ }
138
+ return SdTabDecoratorService.service;
139
+ }
140
+ }
141
+ SdTabDecoratorService.service = undefined;
142
+ SdTabDecoratorService.ɵprov = ɵɵdefineInjectable({ factory: function SdTabDecoratorService_Factory() { return new SdTabDecoratorService(ɵɵinject(SdTabRouterService)); }, token: SdTabDecoratorService, providedIn: "root" });
143
+ SdTabDecoratorService.decorators = [
144
+ { type: Injectable, args: [{
145
+ providedIn: 'root'
146
+ },] }
147
+ ];
148
+ SdTabDecoratorService.ctorParameters = () => [
149
+ { type: SdTabRouterService }
150
+ ];
151
+
152
+ function SdTabComponent(builder) {
153
+ return (constructor) => {
154
+ const service = SdTabDecoratorService.getService();
155
+ service.addBuilder(builder);
156
+ console.log(constructor);
157
+ };
158
+ }
159
+
160
+ class SdTabRouterItemComponent {
161
+ constructor(tabRouterService) {
162
+ this.tabRouterService = tabRouterService;
163
+ this.close = (event) => {
164
+ event.preventDefault();
165
+ event.stopPropagation();
166
+ this.tabRouterService.close(this.tab);
167
+ };
168
+ }
169
+ }
170
+ SdTabRouterItemComponent.decorators = [
171
+ { type: Component, args: [{
172
+ selector: 'sd-tab-router-item',
173
+ template: "<a [routerLink]=\"[tab.url]\" [state]=\"{ switchTab: true }\" class=\"tab-router__item d-flex align-items-center\" [ngClass]=\"{\r\n 'tab-router__item--active': tab.isActive,\r\n 'tab-router__item--child': tab.isChild\r\n }\" matTooltip=\"{{ tab.name }}\" matTooltipPosition=\"below\" matTooltipShowDelay=\"1000\">\r\n <ng-container *ngIf=\"tab | sdTabInfo | async as tabInfo\">\r\n <div class=\"\r\n tab-router__icon\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n mr-8\r\n \" [ngStyle]=\"{\r\n 'background-color': tabInfo.color\r\n }\">\r\n <mat-icon fontSet=\"material-icons-outlined\" *ngIf=\"tab.isChild; else parentIcon\">circle</mat-icon>\r\n <ng-template #parentIcon>{{ tabInfo.initialName || 'W' }}</ng-template>\r\n </div>\r\n <div class=\"flex-1\">\r\n <div class=\"tab-router__name\">{{ tabInfo.name }}</div>\r\n </div>\r\n <button type=\"button\" class=\"\r\n tab-router__close\r\n d-flex\r\n align-items-center\r\n justify-content-center\r\n ml-4\r\n \" (click)=\"close($event)\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </ng-container>\r\n\r\n</a>",
174
+ styles: [":host{flex:1 1 auto;max-width:240px;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:1;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;padding:16px 16px 8px;text-decoration:none}.tab-router__item:hover{background-color:#fff}.tab-router__name{-webkit-box-orient:vertical;-webkit-line-clamp:1;display:-webkit-box;overflow:hidden;text-overflow:ellipsis}.tab-router__item--active{background-color:#fff;border-radius:8px 8px 0 0}"]
175
+ },] }
176
+ ];
177
+ SdTabRouterItemComponent.ctorParameters = () => [
178
+ { type: SdTabRouterService }
179
+ ];
180
+ SdTabRouterItemComponent.propDecorators = {
181
+ tab: [{ type: Input }]
182
+ };
183
+
184
+ class SdTabRouterNavComponent {
185
+ constructor() {
186
+ this.mode = 'default';
187
+ this.checkUI = () => {
188
+ const width = this.tabRouterNav.nativeElement.clientWidth;
189
+ const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;
190
+ if (nameWidth <= 20) {
191
+ this.mode = 'compact';
192
+ }
193
+ else {
194
+ this.mode = 'default';
195
+ }
196
+ };
197
+ }
198
+ onResize(event) {
199
+ this.checkUI();
200
+ }
201
+ }
202
+ SdTabRouterNavComponent.decorators = [
203
+ { type: Component, args: [{
204
+ selector: 'sd-tab-router-nav',
205
+ template: "<div\r\n #tabRouterNav\r\n class=\"tab-router__nav tab-router__nav--{{ mode }} d-flex align-items-center\"\r\n>\r\n <ng-container *ngFor=\"let tab of tabs\">\r\n <sd-tab-router-item [tab]=\"tab\"></sd-tab-router-item>\r\n </ng-container>\r\n</div>\r\n",
206
+ styles: [".tab-router__nav{background:#f9f9f9}.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}"]
207
+ },] }
208
+ ];
209
+ SdTabRouterNavComponent.ctorParameters = () => [];
210
+ SdTabRouterNavComponent.propDecorators = {
211
+ tabRouterNav: [{ type: ViewChild, args: ['tabRouterNav',] }],
212
+ tabs: [{ type: Input }],
213
+ onResize: [{ type: HostListener, args: ['window:resize', ['$event'],] }]
214
+ };
215
+
216
+ var _rootRoute, _subscription, _closeTab, _activeRoute, _getActivatedRouteSnapshot, _getActivatedRoute;
217
+ class SdTabRouterOutletComponent {
218
+ constructor(router, cd, injector, compiler, parentContexts, tabRouterService, sdNotifyService) {
219
+ this.router = router;
220
+ this.cd = cd;
221
+ this.injector = injector;
222
+ this.compiler = compiler;
223
+ this.parentContexts = parentContexts;
224
+ this.tabRouterService = tabRouterService;
225
+ this.sdNotifyService = sdNotifyService;
226
+ this.tabs = [];
227
+ _rootRoute.set(this, void 0);
228
+ _subscription.set(this, new Subscription());
229
+ _closeTab.set(this, (tab) => {
230
+ var _a;
231
+ this.tabs = this.tabs.filter(({ key }) => key !== tab.key);
232
+ if (tab.isActive) {
233
+ const lastTab = this.tabs[this.tabs.length - 1];
234
+ if (lastTab) {
235
+ this.router.navigateByUrl(lastTab.url, {
236
+ state: {
237
+ switchTab: true,
238
+ },
239
+ });
240
+ }
241
+ else {
242
+ this.router.navigateByUrl('/', {
243
+ state: {
244
+ switchTab: true,
245
+ },
246
+ });
247
+ }
248
+ }
249
+ else {
250
+ (_a = this.tabRouterNav) === null || _a === void 0 ? void 0 : _a.checkUI();
251
+ this.cd.markForCheck();
252
+ }
253
+ });
254
+ _activeRoute.set(this, (url, route) => __awaiter(this, void 0, void 0, function* () {
255
+ var _a, _b, _c, _d, _e, _f, _g;
256
+ if (!(route === null || route === void 0 ? void 0 : route.component)) {
257
+ return;
258
+ }
259
+ const component = route.component;
260
+ const queryParams = Object.assign({}, (route.queryParams || {}));
261
+ const params = Object.assign({}, (route.params || {}));
262
+ let existedIndex = -1;
263
+ this.tabs.forEach((tab, index) => {
264
+ if (tab.key === url) {
265
+ tab.isActive = true;
266
+ existedIndex = index;
267
+ }
268
+ else {
269
+ if (tab.isActive) {
270
+ this.tabRouterService.pushEvent(tab, SdTabDeactivated);
271
+ }
272
+ tab.isActive = false;
273
+ }
274
+ });
275
+ const currentNavigation = this.router.getCurrentNavigation();
276
+ if (existedIndex >= 0 && ((_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)) {
277
+ const existedTab = this.tabs[existedIndex];
278
+ this.tabRouterService.setCurrentTab(existedTab);
279
+ this.tabRouterService.pushEvent(existedTab, SdTabActivated);
280
+ }
281
+ else {
282
+ if (typeof ((_d = (_c = route === null || route === void 0 ? void 0 : route.parent) === null || _c === void 0 ? void 0 : _c.routeConfig) === null || _d === void 0 ? void 0 : _d.loadChildren) === 'function') {
283
+ const module = yield route.parent.routeConfig.loadChildren();
284
+ const factory = yield this.compiler.compileModuleAsync(module);
285
+ const injector = factory.create(this.injector);
286
+ // let tabInfo = {};
287
+ // if ('getTabInfo' in component) {
288
+ // tabInfo = component.getTabInfo({
289
+ // params,
290
+ // queryParams,
291
+ // });
292
+ // }
293
+ const activatedRoute = __classPrivateFieldGet(this, _getActivatedRoute).call(this, __classPrivateFieldGet(this, _rootRoute), component);
294
+ const tab = {
295
+ key: url,
296
+ component,
297
+ injector: new SdOutletInjector(activatedRoute, injector),
298
+ isActive: true,
299
+ name: url,
300
+ url,
301
+ params,
302
+ queryParams,
303
+ };
304
+ this.tabRouterService.setCurrentTab(tab);
305
+ if (existedIndex >= 0 && !((_f = (_e = currentNavigation === null || currentNavigation === void 0 ? void 0 : currentNavigation.extras) === null || _e === void 0 ? void 0 : _e.state) === null || _f === void 0 ? void 0 : _f.switchTab)) {
306
+ this.tabs[existedIndex] = tab;
307
+ }
308
+ else {
309
+ this.tabs.push(tab);
310
+ }
311
+ }
312
+ (_g = this.tabRouterNav) === null || _g === void 0 ? void 0 : _g.checkUI();
313
+ if (this.tabs.length > 10) {
314
+ 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.');
315
+ }
316
+ if (this.tabs.length > 12) {
317
+ this.tabs.splice(0, this.tabs.length - 10);
318
+ }
319
+ }
320
+ this.cd.markForCheck();
321
+ }));
322
+ _getActivatedRouteSnapshot.set(this, (activatedRouteSnapshot) => {
323
+ if (!activatedRouteSnapshot) {
324
+ return null;
325
+ }
326
+ if (activatedRouteSnapshot.firstChild) {
327
+ return __classPrivateFieldGet(this, _getActivatedRouteSnapshot).call(this, activatedRouteSnapshot.firstChild);
328
+ }
329
+ else {
330
+ return activatedRouteSnapshot;
331
+ }
332
+ });
333
+ _getActivatedRoute.set(this, (activatedRoute, component) => {
334
+ if (!activatedRoute) {
335
+ return null;
336
+ }
337
+ if (activatedRoute.component && activatedRoute.component === component) {
338
+ return activatedRoute;
339
+ }
340
+ else if (activatedRoute.firstChild) {
341
+ return __classPrivateFieldGet(this, _getActivatedRoute).call(this, activatedRoute.firstChild, component);
342
+ }
343
+ else {
344
+ return null;
345
+ }
346
+ });
347
+ __classPrivateFieldGet(this, _subscription).add(router.events.subscribe((event) => __awaiter(this, void 0, void 0, function* () {
348
+ if (event instanceof RoutesRecognized) {
349
+ const route = __classPrivateFieldGet(this, _getActivatedRouteSnapshot).call(this, event.state.root);
350
+ __classPrivateFieldSet(this, _rootRoute, this.router.routerState.root);
351
+ yield __classPrivateFieldGet(this, _activeRoute).call(this, event.urlAfterRedirects || event.url, route);
352
+ }
353
+ })));
354
+ __classPrivateFieldGet(this, _subscription).add(tabRouterService.actions.subscribe((event) => {
355
+ if (event && event.type === 'close') {
356
+ __classPrivateFieldGet(this, _closeTab).call(this, event.tab);
357
+ }
358
+ }));
359
+ }
360
+ ngOnDestroy() {
361
+ __classPrivateFieldGet(this, _subscription).unsubscribe();
362
+ }
363
+ }
364
+ _rootRoute = new WeakMap(), _subscription = new WeakMap(), _closeTab = new WeakMap(), _activeRoute = new WeakMap(), _getActivatedRouteSnapshot = new WeakMap(), _getActivatedRoute = new WeakMap();
365
+ SdTabRouterOutletComponent.decorators = [
366
+ { type: Component, args: [{
367
+ selector: 'sd-tab-router-outlet',
368
+ 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\">\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",
369
+ styles: [".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%}"]
370
+ },] }
371
+ ];
372
+ SdTabRouterOutletComponent.ctorParameters = () => [
373
+ { type: Router },
374
+ { type: ChangeDetectorRef },
375
+ { type: Injector },
376
+ { type: Compiler },
377
+ { type: ChildrenOutletContexts },
378
+ { type: SdTabRouterService },
379
+ { type: SdNotifyService }
380
+ ];
381
+ SdTabRouterOutletComponent.propDecorators = {
382
+ tabRouterNav: [{ type: ViewChild, args: ['tabRouterNav',] }]
383
+ };
384
+ class SdOutletInjector {
385
+ constructor(route,
386
+ // private childContexts: ChildrenOutletContexts,
387
+ parent) {
388
+ this.route = route;
389
+ this.parent = parent;
390
+ }
391
+ get(token, notFoundValue) {
392
+ if (token === ActivatedRoute && this.route) {
393
+ return this.route;
394
+ }
395
+ // if (token === ChildrenOutletContexts) {
396
+ // return this.childContexts;
397
+ // }
398
+ return this.parent.get(token, notFoundValue);
399
+ }
400
+ }
401
+
402
+ class SdTabInfoPipe {
403
+ constructor(tabRouterService) {
404
+ this.tabRouterService = tabRouterService;
405
+ }
406
+ transform(tab) {
407
+ return this.tabRouterService.builders.pipe(map(builders => {
408
+ const builder = builders.find(e => e.component === tab.component);
409
+ if (builder) {
410
+ const { params, queryParams } = tab;
411
+ return {
412
+ name: typeof (builder.name) === 'function' ? builder.name({ params, queryParams }) : builder.name,
413
+ initialName: typeof (builder.initialName) === 'function' ? builder.initialName({ params, queryParams }) : builder.initialName,
414
+ color: typeof (builder.color) === 'function' ? builder.color({ params, queryParams }) : builder.color
415
+ };
416
+ }
417
+ return {
418
+ name: tab.url,
419
+ initialName: tab.url[0],
420
+ };
421
+ }));
422
+ }
423
+ }
424
+ SdTabInfoPipe.decorators = [
425
+ { type: Pipe, args: [{
426
+ name: 'sdTabInfo'
427
+ },] }
428
+ ];
429
+ SdTabInfoPipe.ctorParameters = () => [
430
+ { type: SdTabRouterService }
431
+ ];
432
+
433
+ class SdTabRouterModule {
434
+ }
435
+ SdTabRouterModule.decorators = [
436
+ { type: NgModule, args: [{
437
+ declarations: [
438
+ SdTabRouterItemComponent,
439
+ SdTabRouterNavComponent,
440
+ SdTabRouterOutletComponent,
441
+ SdTabInfoPipe,
442
+ ],
443
+ imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],
444
+ exports: [
445
+ SdTabRouterItemComponent,
446
+ SdTabRouterNavComponent,
447
+ SdTabRouterOutletComponent,
448
+ ],
449
+ providers: [],
450
+ },] }
451
+ ];
452
+
453
+ /*
454
+ * Public API Surface of superdev-angular-core
455
+ */
456
+
457
+ /**
458
+ * Generated bundle index. Do not edit.
459
+ */
460
+
461
+ export { SdTabActivated, SdTabBase, SdTabComponent, SdTabDeactivated, SdTabRouterItemComponent, SdTabRouterModule, SdTabRouterNavComponent, SdTabRouterOutletComponent, SdTabRouterService, SdTabInfoPipe as ɵa };
462
+ //# sourceMappingURL=sd-angular-core-tab-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sd-angular-core-tab-router.js","sources":["../../../../projects/sd-core/tab-router/src/lib/models/tab-router.model.ts","../../../../projects/sd-core/tab-router/src/lib/events/tab-router.event.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-router.service.ts","../../../../projects/sd-core/tab-router/src/lib/services/tab-decorator.service.ts","../../../../projects/sd-core/tab-router/src/lib/decorators/tab.decorator.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-item/tab-router-item.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-nav/tab-router-nav.component.ts","../../../../projects/sd-core/tab-router/src/lib/components/tab-router-outlet/tab-router-outlet.component.ts","../../../../projects/sd-core/tab-router/src/lib/pipes/tab-info.pipe.ts","../../../../projects/sd-core/tab-router/src/lib/tab-router.module.ts","../../../../projects/sd-core/tab-router/src/public-api.ts","../../../../projects/sd-core/tab-router/sd-angular-core-tab-router.ts"],"sourcesContent":["import { Component, Type } from '@angular/core';\r\n\r\nexport interface SdTabInfo {\r\n name: string;\r\n initialName?: string;\r\n color?: string;\r\n}\r\n\r\nexport interface SdTab extends SdTabInfo {\r\n component: Type<any>;\r\n injector?: any;\r\n key: string;\r\n\r\n isActive: boolean;\r\n url: string;\r\n isChild?: boolean;\r\n params?: {\r\n [key: string]: string | number;\r\n };\r\n queryParams?: {\r\n [key: string]: string | number;\r\n };\r\n}\r\n\r\n// export interface SdTabComponent {\r\n// getTabInfo(args: {params: any, queryParams: any});\r\n// }","import { SdTab } from '../models/tab-router.model';\r\n\r\nexport class SdTabBase {\r\n #tab: SdTab | null;\r\n\r\n constructor(tab: SdTab | null) {\r\n this.#tab = tab;\r\n }\r\n\r\n get tab(): SdTab | null {\r\n return this.#tab;\r\n }\r\n}\r\n\r\nexport class SdTabActivated extends SdTabBase {}\r\n\r\nexport class SdTabDeactivated extends SdTabBase {}\r\n\r\nexport declare type SdTabEvent = SdTabActivated | SdTabDeactivated;\r\n","import { Injectable, Type } from '@angular/core';\r\nimport { BehaviorSubject } from 'rxjs';\r\nimport { SdTab } from '../models/tab-router.model';\r\nimport { SdTabAction } from '../actions/tab-router.action';\r\nimport { SdTabEvent, SdTabBase } from '../events/tab-router.event';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport { SdTabComponentBuilder } from '../decorators/tab.decorator';\r\n\r\n@Injectable({\r\n providedIn: 'root',\r\n})\r\nexport class SdTabRouterService {\r\n private static service: SdTabRouterService | undefined = undefined;\r\n events = new BehaviorSubject<SdTabEvent>(new SdTabBase(null));\r\n actions = new BehaviorSubject<SdTabAction | null>(null);\r\n builders = new BehaviorSubject<SdTabComponentBuilder[]>([]);\r\n\r\n #currentTab: SdTab | null = null;\r\n #componentBuilders: SdTabComponentBuilder[] = [];\r\n // #tabs: SdTab[] = [];\r\n\r\n public static getService(): SdTabRouterService {\r\n if (!SdTabRouterService.service) {\r\n throw new Error('SdTabRouterService is not initialized');\r\n }\r\n return SdTabRouterService.service;\r\n }\r\n constructor(private notifyService: SdNotifyService) {\r\n SdTabRouterService.service = this;\r\n }\r\n\r\n addBuilder = (builder: SdTabComponentBuilder) => {\r\n if (!this.#componentBuilders.some(e => e.component === builder.component)) {\r\n this.#componentBuilders.push(builder);\r\n this.builders.next(this.#componentBuilders);\r\n }\r\n }\r\n\r\n get currentTab() {\r\n return this.#currentTab;\r\n }\r\n\r\n get key() {\r\n return this.#currentTab?.key || null;\r\n }\r\n\r\n // select = (tabOrKey: string | SdTab): void => {\r\n // const tab = this.#tabs.find(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key === tabOrKey;\r\n // }\r\n // return e.key === tabOrKey?.key;\r\n // });\r\n // if (tab) {\r\n // this.#currentTab = tab;\r\n // }\r\n // }\r\n\r\n // add = (tab: SdTab): void => {\r\n // if (!tab.key) {\r\n // this.notifyService.notify.warning('Tab key is required');\r\n // }\r\n // if (!tab.component) {\r\n // this.notifyService.notify.warning('Tab component is required');\r\n // }\r\n // const existedTab = this.#tabs.find(e => e.key === tab.key);\r\n // if (!existedTab) {\r\n // this.#tabs.push(tab);\r\n // this.select(tab);\r\n // } else {\r\n // this.select(existedTab);\r\n // }\r\n // }\r\n\r\n // remove = (tabOrKey: string | SdTab): void => {\r\n // this.#tabs = this.#tabs.filter(e => {\r\n // if (typeof (tabOrKey) === 'string') {\r\n // return e.key !== tabOrKey;\r\n // }\r\n // return e.key !== tabOrKey?.key;\r\n // });\r\n // }\r\n\r\n setCurrentTab = (tab: SdTab): void => {\r\n this.#currentTab = tab;\r\n }\r\n\r\n pushEvent = (tab: SdTab, Event: Type<SdTabEvent>) => {\r\n this.events.next(new Event(tab));\r\n }\r\n\r\n setOptions = () => { };\r\n\r\n close = (tab?: SdTab) => {\r\n if (tab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab,\r\n });\r\n } else if (this.#currentTab) {\r\n this.actions.next({\r\n type: 'close',\r\n tab: this.#currentTab,\r\n });\r\n }\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { SdTabRouterService } from './tab-router.service';\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SdTabDecoratorService {\r\n private static service: SdTabRouterService | undefined = undefined;\r\n public constructor(service: SdTabRouterService) {\r\n SdTabDecoratorService.service = service;\r\n }\r\n public static getService(): SdTabRouterService {\r\n if (!SdTabDecoratorService.service) {\r\n throw new Error('SdTabDecoratorService not initialized');\r\n }\r\n return SdTabDecoratorService.service;\r\n }\r\n}\r\n","import { Type } from '@angular/core';\r\nimport { SdTabDecoratorService } from '../services/tab-decorator.service';\r\n\r\nexport declare interface SdTabComponentBuilder {\r\n component: Type<any>;\r\n name: string | ((args: { params: any, queryParams: any }) => string);\r\n initialName: string | ((args: { params: any, queryParams: any }) => string);\r\n color?: string | ((args: { params: any, queryParams: any }) => string);\r\n}\r\n\r\nexport function SdTabComponent<T>(builder: SdTabComponentBuilder) {\r\n return (constructor: T) => {\r\n const service = SdTabDecoratorService.getService();\r\n service.addBuilder(builder);\r\n console.log(constructor);\r\n };\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-item',\r\n templateUrl: './tab-router-item.component.html',\r\n styleUrls: ['./tab-router-item.component.scss'],\r\n})\r\nexport class SdTabRouterItemComponent {\r\n @Input() tab: SdTab;\r\n\r\n constructor(private tabRouterService: SdTabRouterService) {}\r\n\r\n close = (event: Event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.tabRouterService.close(this.tab);\r\n }\r\n}\r\n","import {\r\n Component,\r\n ElementRef,\r\n HostListener,\r\n Input,\r\n ViewChild,\r\n} from '@angular/core';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-nav',\r\n templateUrl: './tab-router-nav.component.html',\r\n styleUrls: ['./tab-router-nav.component.scss'],\r\n})\r\nexport class SdTabRouterNavComponent {\r\n @ViewChild('tabRouterNav') tabRouterNav: ElementRef;\r\n\r\n @Input() tabs: SdTab[];\r\n mode: 'default' | 'compact' = 'default';\r\n\r\n constructor() {}\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onResize(event): void {\r\n this.checkUI();\r\n }\r\n\r\n checkUI = () => {\r\n const width = this.tabRouterNav.nativeElement.clientWidth;\r\n const nameWidth = (width - this.tabs.length * 64) / this.tabs.length;\r\n if (nameWidth <= 20) {\r\n this.mode = 'compact';\r\n } else {\r\n this.mode = 'default';\r\n }\r\n }\r\n}\r\n","import {\r\n ChangeDetectionStrategy,\r\n ChangeDetectorRef,\r\n Compiler,\r\n Component,\r\n Injector,\r\n NgModuleRef,\r\n OnDestroy,\r\n OnInit,\r\n Type,\r\n ViewChild,\r\n} from '@angular/core';\r\nimport {\r\n ActivatedRoute,\r\n ActivatedRouteSnapshot,\r\n ChildrenOutletContexts,\r\n // ChildrenOutletContexts,\r\n Event,\r\n PRIMARY_OUTLET,\r\n Router,\r\n RoutesRecognized,\r\n} from '@angular/router';\r\nimport { SdNotifyService } from '@sd-angular/core/notify';\r\nimport {\r\n SdTabActivated,\r\n SdTabDeactivated,\r\n} from '../../events/tab-router.event';\r\n\r\nimport { SdTab } from '../../models/tab-router.model';\r\nimport { SdTabAction } from '../../actions/tab-router.action';\r\nimport { SdTabRouterService } from '../../services/tab-router.service';\r\nimport { SdTabRouterNavComponent } from '../tab-router-nav/tab-router-nav.component';\r\nimport { Subscription } from 'rxjs';\r\n\r\n@Component({\r\n selector: 'sd-tab-router-outlet',\r\n templateUrl: './tab-router-outlet.component.html',\r\n styleUrls: ['./tab-router-outlet.component.scss'],\r\n // changeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class SdTabRouterOutletComponent implements OnDestroy {\r\n @ViewChild('tabRouterNav') tabRouterNav: SdTabRouterNavComponent;\r\n tabs: SdTab[] = [];\r\n\r\n #rootRoute: ActivatedRoute;\r\n #subscription = new Subscription();\r\n constructor(\r\n private router: Router,\r\n private cd: ChangeDetectorRef,\r\n private injector: Injector,\r\n private compiler: Compiler,\r\n private parentContexts: ChildrenOutletContexts,\r\n private tabRouterService: SdTabRouterService,\r\n private sdNotifyService: SdNotifyService\r\n ) {\r\n this.#subscription.add(router.events.subscribe(async (event: Event) => {\r\n if (event instanceof RoutesRecognized) {\r\n const route = this.#getActivatedRouteSnapshot(event.state.root);\r\n this.#rootRoute = this.router.routerState.root;\r\n await this.#activeRoute(event.urlAfterRedirects || event.url, route);\r\n }\r\n }));\r\n\r\n this.#subscription.add(tabRouterService.actions.subscribe((event: SdTabAction | null) => {\r\n if (event && event.type === 'close') {\r\n this.#closeTab(event.tab);\r\n }\r\n }));\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.#subscription.unsubscribe();\r\n }\r\n\r\n #closeTab = (tab: SdTab) => {\r\n this.tabs = this.tabs.filter(({ key }) => key !== tab.key);\r\n if (tab.isActive) {\r\n const lastTab = this.tabs[this.tabs.length - 1];\r\n if (lastTab) {\r\n this.router.navigateByUrl(lastTab.url, {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n } else {\r\n this.router.navigateByUrl('/', {\r\n state: {\r\n switchTab: true,\r\n },\r\n });\r\n }\r\n } else {\r\n this.tabRouterNav?.checkUI();\r\n this.cd.markForCheck();\r\n }\r\n }\r\n\r\n #activeRoute = async (url: string, route: ActivatedRouteSnapshot | null) => {\r\n if (!route?.component) {\r\n return;\r\n }\r\n\r\n const component = route.component as Type<any>;\r\n const queryParams = {\r\n ...(route.queryParams || {}),\r\n };\r\n const params = {\r\n ...(route.params || {}),\r\n };\r\n\r\n let existedIndex = -1;\r\n this.tabs.forEach((tab: SdTab, index: number) => {\r\n if (tab.key === url) {\r\n tab.isActive = true;\r\n existedIndex = index;\r\n } else {\r\n if (tab.isActive) {\r\n this.tabRouterService.pushEvent(tab, SdTabDeactivated);\r\n }\r\n tab.isActive = false;\r\n }\r\n });\r\n\r\n const currentNavigation = this.router.getCurrentNavigation();\r\n if (existedIndex >= 0 && currentNavigation?.extras?.state?.switchTab) {\r\n const existedTab = this.tabs[existedIndex];\r\n this.tabRouterService.setCurrentTab(existedTab);\r\n this.tabRouterService.pushEvent(existedTab, SdTabActivated);\r\n } else {\r\n if (typeof route?.parent?.routeConfig?.loadChildren === 'function') {\r\n const module = await route.parent.routeConfig.loadChildren();\r\n const factory = await this.compiler.compileModuleAsync(module);\r\n const injector = factory.create(this.injector);\r\n // let tabInfo = {};\r\n // if ('getTabInfo' in component) {\r\n // tabInfo = component.getTabInfo({\r\n // params,\r\n // queryParams,\r\n // });\r\n // }\r\n\r\n const activatedRoute = this.#getActivatedRoute(\r\n this.#rootRoute,\r\n component\r\n );\r\n\r\n const tab = {\r\n key: url,\r\n component,\r\n injector: new SdOutletInjector(activatedRoute, injector),\r\n\r\n isActive: true,\r\n name: url,\r\n url,\r\n params,\r\n queryParams,\r\n // ...tabInfo,\r\n };\r\n\r\n this.tabRouterService.setCurrentTab(tab);\r\n if (existedIndex >= 0 && !currentNavigation?.extras?.state?.switchTab) {\r\n this.tabs[existedIndex] = tab;\r\n } else {\r\n this.tabs.push(tab);\r\n }\r\n }\r\n\r\n this.tabRouterNav?.checkUI();\r\n if (this.tabs.length > 10) {\r\n this.sdNotifyService.notify.warning(\r\n '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.'\r\n );\r\n }\r\n if (this.tabs.length > 12) {\r\n this.tabs.splice(0, this.tabs.length - 10);\r\n }\r\n }\r\n this.cd.markForCheck();\r\n }\r\n\r\n #getActivatedRouteSnapshot = (\r\n activatedRouteSnapshot: ActivatedRouteSnapshot\r\n ): ActivatedRouteSnapshot | null => {\r\n if (!activatedRouteSnapshot) {\r\n return null;\r\n }\r\n\r\n if (activatedRouteSnapshot.firstChild) {\r\n return this.#getActivatedRouteSnapshot(activatedRouteSnapshot.firstChild);\r\n } else {\r\n return activatedRouteSnapshot;\r\n }\r\n }\r\n\r\n #getActivatedRoute = (\r\n activatedRoute: ActivatedRoute,\r\n component: any\r\n ): ActivatedRoute | null => {\r\n if (!activatedRoute) {\r\n return null;\r\n }\r\n\r\n if (activatedRoute.component && activatedRoute.component === component) {\r\n return activatedRoute;\r\n } else if (activatedRoute.firstChild) {\r\n return this.#getActivatedRoute(activatedRoute.firstChild, component);\r\n } else {\r\n return null;\r\n }\r\n }\r\n}\r\n\r\nclass SdOutletInjector implements Injector {\r\n constructor(\r\n private route: ActivatedRoute | null,\r\n // private childContexts: ChildrenOutletContexts,\r\n private parent: any\r\n ) {}\r\n\r\n get(token: any, notFoundValue?: any): any {\r\n if (token === ActivatedRoute && this.route) {\r\n return this.route;\r\n }\r\n\r\n // if (token === ChildrenOutletContexts) {\r\n // return this.childContexts;\r\n // }\r\n\r\n return this.parent.get(token, notFoundValue);\r\n }\r\n}\r\n","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { SdTab, SdTabInfo } from '../models/tab-router.model';\r\nimport { SdTabRouterService } from '../services/tab-router.service';\r\n@Pipe({\r\n name: 'sdTabInfo'\r\n})\r\nexport class SdTabInfoPipe implements PipeTransform {\r\n constructor(private tabRouterService: SdTabRouterService) { }\r\n transform(tab: SdTab): Observable<SdTabInfo> {\r\n return this.tabRouterService.builders.pipe(map(builders => {\r\n const builder = builders.find(e => e.component === tab.component);\r\n if (builder) {\r\n const { params, queryParams } = tab;\r\n return {\r\n name: typeof (builder.name) === 'function' ? builder.name({ params, queryParams }) : builder.name,\r\n initialName: typeof (builder.initialName) === 'function' ? builder.initialName({ params, queryParams }) : builder.initialName,\r\n color: typeof (builder.color) === 'function' ? builder.color({ params, queryParams }) : builder.color\r\n };\r\n }\r\n return {\r\n name: tab.url,\r\n initialName: tab.url[0],\r\n };\r\n }));\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\nimport { SdTabRouterItemComponent } from './components/tab-router-item/tab-router-item.component';\r\nimport { SdTabRouterNavComponent } from './components/tab-router-nav/tab-router-nav.component';\r\nimport { SdTabRouterOutletComponent } from './components/tab-router-outlet/tab-router-outlet.component';\r\nimport { SdTabInfoPipe } from './pipes/tab-info.pipe';\r\n\r\n@NgModule({\r\n declarations: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n SdTabInfoPipe,\r\n ],\r\n imports: [RouterModule, CommonModule, MatIconModule, MatTooltipModule],\r\n exports: [\r\n SdTabRouterItemComponent,\r\n SdTabRouterNavComponent,\r\n SdTabRouterOutletComponent,\r\n ],\r\n providers: [],\r\n})\r\nexport class SdTabRouterModule {}\r\n","/*\r\n * Public API Surface of superdev-angular-core\r\n */\r\n\r\n// Models\r\nexport * from './lib/models/tab-router.model';\r\nexport * from './lib/events/tab-router.event';\r\nexport * from './lib/actions/tab-router.action';\r\n\r\n// Decorators\r\nexport * from './lib/decorators/tab.decorator';\r\n\r\n// Service\r\nexport * from './lib/services/tab-router.service';\r\n\r\n// Components\r\nexport * from './lib/components/tab-router-item/tab-router-item.component';\r\nexport * from './lib/components/tab-router-nav/tab-router-nav.component';\r\nexport * from './lib/components/tab-router-outlet/tab-router-outlet.component';\r\n\r\n// Module\r\nexport * from './lib/tab-router.module';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n\nexport {SdTabInfoPipe as ɵa} from './src/lib/pipes/tab-info.pipe';"],"names":[],"mappings":"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"}
@@ -52,6 +52,7 @@ import '@sd-angular/core/textarea';
52
52
  import '@sd-angular/core/checkbox';
53
53
  import '@sd-angular/core/time';
54
54
  import '@sd-angular/core/side-drawer';
55
+ import '@sd-angular/core/tab-router';
55
56
  import '@sd-angular/core/excel';
56
57
  import '@sd-angular/core/input';
57
58
  import '@sd-angular/core/select';