@reskin/core 0.0.17 → 0.0.19

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.
@@ -1,8 +1,9 @@
1
1
  import * as i0 from "@angular/core";
2
2
  import * as i1 from "./auth.directive";
3
3
  import * as i2 from "./string.template.outlet.directive";
4
+ import * as i3 from "./load.styles.directive";
4
5
  export declare class RkDirectivesModule {
5
6
  static ɵfac: i0.ɵɵFactoryDeclaration<RkDirectivesModule, never>;
6
- static ɵmod: i0.ɵɵNgModuleDeclaration<RkDirectivesModule, [typeof i1.RkAuthDirective, typeof i2.RkStringTemplateOutletDirective], never, [typeof i1.RkAuthDirective, typeof i2.RkStringTemplateOutletDirective]>;
7
+ static ɵmod: i0.ɵɵNgModuleDeclaration<RkDirectivesModule, [typeof i1.RkAuthDirective, typeof i2.RkStringTemplateOutletDirective, typeof i3.RkLoadStylesDirective], never, [typeof i1.RkAuthDirective, typeof i2.RkStringTemplateOutletDirective, typeof i3.RkLoadStylesDirective]>;
7
8
  static ɵinj: i0.ɵɵInjectorDeclaration<RkDirectivesModule>;
8
9
  }
@@ -0,0 +1,15 @@
1
+ import { OnInit, OnDestroy, EventEmitter } from '@angular/core';
2
+ import { ILoadResult, RkStyleLoaderService } from '@reskin/core/services';
3
+ import * as i0 from "@angular/core";
4
+ export declare class RkLoadStylesDirective implements OnInit, OnDestroy {
5
+ private styleLoader;
6
+ hrefs: string[] | string;
7
+ stylesLoaded: EventEmitter<ILoadResult[]>;
8
+ private subscription;
9
+ private styleUrls;
10
+ constructor(styleLoader: RkStyleLoaderService);
11
+ ngOnInit(): void;
12
+ ngOnDestroy(): void;
13
+ static ɵfac: i0.ɵɵFactoryDeclaration<RkLoadStylesDirective, never>;
14
+ static ɵdir: i0.ɵɵDirectiveDeclaration<RkLoadStylesDirective, "[rkLoadStyles]", never, { "hrefs": "rkLoadStyles"; }, { "stylesLoaded": "stylesLoaded"; }, never>;
15
+ }
@@ -1,3 +1,4 @@
1
1
  export * from './directives.module';
2
2
  export * from './auth.directive';
3
3
  export * from './string.template.outlet.directive';
4
+ export * from './load.styles.directive';
@@ -1,17 +1,18 @@
1
1
  import { NgModule } from '@angular/core';
2
2
  import { RkAuthDirective } from './auth.directive';
3
3
  import { RkStringTemplateOutletDirective } from './string.template.outlet.directive';
4
+ import { RkLoadStylesDirective } from './load.styles.directive';
4
5
  import * as i0 from "@angular/core";
5
6
  export class RkDirectivesModule {
6
7
  }
7
8
  RkDirectivesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
8
- RkDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule, declarations: [RkAuthDirective, RkStringTemplateOutletDirective], exports: [RkAuthDirective, RkStringTemplateOutletDirective] });
9
+ RkDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule, declarations: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective], exports: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective] });
9
10
  RkDirectivesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule });
10
11
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule, decorators: [{
11
12
  type: NgModule,
12
13
  args: [{
13
- declarations: [RkAuthDirective, RkStringTemplateOutletDirective],
14
- exports: [RkAuthDirective, RkStringTemplateOutletDirective],
14
+ declarations: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective],
15
+ exports: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective],
15
16
  }]
16
17
  }] });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvZGlyZWN0aXZlcy9kaXJlY3RpdmVzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7QUFNckYsTUFBTSxPQUFPLGtCQUFrQjs7Z0hBQWxCLGtCQUFrQjtpSEFBbEIsa0JBQWtCLGlCQUhaLGVBQWUsRUFBRSwrQkFBK0IsYUFDckQsZUFBZSxFQUFFLCtCQUErQjtpSEFFakQsa0JBQWtCOzRGQUFsQixrQkFBa0I7a0JBSjlCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsZUFBZSxFQUFFLCtCQUErQixDQUFDO29CQUNoRSxPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsK0JBQStCLENBQUM7aUJBQzlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmtBdXRoRGlyZWN0aXZlIH0gZnJvbSAnLi9hdXRoLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJrU3RyaW5nVGVtcGxhdGVPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuL3N0cmluZy50ZW1wbGF0ZS5vdXRsZXQuZGlyZWN0aXZlJztcclxuXHJcbkBOZ01vZHVsZSh7XHJcbiAgICBkZWNsYXJhdGlvbnM6IFtSa0F1dGhEaXJlY3RpdmUsIFJrU3RyaW5nVGVtcGxhdGVPdXRsZXREaXJlY3RpdmVdLFxyXG4gICAgZXhwb3J0czogW1JrQXV0aERpcmVjdGl2ZSwgUmtTdHJpbmdUZW1wbGF0ZU91dGxldERpcmVjdGl2ZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSa0RpcmVjdGl2ZXNNb2R1bGUge31cclxuIl19
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlcy5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvZGlyZWN0aXZlcy9kaXJlY3RpdmVzLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNyRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQzs7QUFNaEUsTUFBTSxPQUFPLGtCQUFrQjs7Z0hBQWxCLGtCQUFrQjtpSEFBbEIsa0JBQWtCLGlCQUhaLGVBQWUsRUFBRSwrQkFBK0IsRUFBRSxxQkFBcUIsYUFDNUUsZUFBZSxFQUFFLCtCQUErQixFQUFFLHFCQUFxQjtpSEFFeEUsa0JBQWtCOzRGQUFsQixrQkFBa0I7a0JBSjlCLFFBQVE7bUJBQUM7b0JBQ04sWUFBWSxFQUFFLENBQUMsZUFBZSxFQUFFLCtCQUErQixFQUFFLHFCQUFxQixDQUFDO29CQUN2RixPQUFPLEVBQUUsQ0FBQyxlQUFlLEVBQUUsK0JBQStCLEVBQUUscUJBQXFCLENBQUM7aUJBQ3JGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUmtBdXRoRGlyZWN0aXZlIH0gZnJvbSAnLi9hdXRoLmRpcmVjdGl2ZSc7XHJcbmltcG9ydCB7IFJrU3RyaW5nVGVtcGxhdGVPdXRsZXREaXJlY3RpdmUgfSBmcm9tICcuL3N0cmluZy50ZW1wbGF0ZS5vdXRsZXQuZGlyZWN0aXZlJztcclxuaW1wb3J0IHsgUmtMb2FkU3R5bGVzRGlyZWN0aXZlIH0gZnJvbSAnLi9sb2FkLnN0eWxlcy5kaXJlY3RpdmUnO1xyXG5cclxuQE5nTW9kdWxlKHtcclxuICAgIGRlY2xhcmF0aW9uczogW1JrQXV0aERpcmVjdGl2ZSwgUmtTdHJpbmdUZW1wbGF0ZU91dGxldERpcmVjdGl2ZSwgUmtMb2FkU3R5bGVzRGlyZWN0aXZlXSxcclxuICAgIGV4cG9ydHM6IFtSa0F1dGhEaXJlY3RpdmUsIFJrU3RyaW5nVGVtcGxhdGVPdXRsZXREaXJlY3RpdmUsIFJrTG9hZFN0eWxlc0RpcmVjdGl2ZV0sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSa0RpcmVjdGl2ZXNNb2R1bGUge31cclxuIl19
@@ -0,0 +1,43 @@
1
+ import { Directive, Input, Output, EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ import * as i1 from "@reskin/core/services";
4
+ export class RkLoadStylesDirective {
5
+ constructor(styleLoader) {
6
+ this.styleLoader = styleLoader;
7
+ this.hrefs = [];
8
+ // (可选) 输出加载完成事件,以便父组件可以响应
9
+ this.stylesLoaded = new EventEmitter();
10
+ this.styleUrls = [];
11
+ }
12
+ ngOnInit() {
13
+ this.styleUrls = Array.isArray(this.hrefs) ? this.hrefs : [this.hrefs];
14
+ if (this.styleUrls.length > 0) {
15
+ this.subscription = this.styleLoader.load(...this.styleUrls).subscribe((results) => {
16
+ this.stylesLoaded.emit(results);
17
+ });
18
+ }
19
+ }
20
+ ngOnDestroy() {
21
+ if (this.subscription) {
22
+ this.subscription.unsubscribe();
23
+ }
24
+ // 指令销毁时,自动调用 unload,服务内部会处理引用计数
25
+ if (this.styleUrls.length > 0) {
26
+ this.styleLoader.unload(...this.styleUrls);
27
+ }
28
+ }
29
+ }
30
+ RkLoadStylesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkLoadStylesDirective, deps: [{ token: i1.RkStyleLoaderService }], target: i0.ɵɵFactoryTarget.Directive });
31
+ RkLoadStylesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: RkLoadStylesDirective, selector: "[rkLoadStyles]", inputs: { hrefs: ["rkLoadStyles", "hrefs"] }, outputs: { stylesLoaded: "stylesLoaded" }, ngImport: i0 });
32
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkLoadStylesDirective, decorators: [{
33
+ type: Directive,
34
+ args: [{
35
+ selector: '[rkLoadStyles]',
36
+ }]
37
+ }], ctorParameters: function () { return [{ type: i1.RkStyleLoaderService }]; }, propDecorators: { hrefs: [{
38
+ type: Input,
39
+ args: ['rkLoadStyles']
40
+ }], stylesLoaded: [{
41
+ type: Output
42
+ }] } });
43
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZC5zdHlsZXMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicmFyeS9jb3JlL2RpcmVjdGl2ZXMvbG9hZC5zdHlsZXMuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDOzs7QUFPMUYsTUFBTSxPQUFPLHFCQUFxQjtJQVM5QixZQUFvQixXQUFpQztRQUFqQyxnQkFBVyxHQUFYLFdBQVcsQ0FBc0I7UUFSOUIsVUFBSyxHQUFzQixFQUFFLENBQUM7UUFFckQsMEJBQTBCO1FBQ2hCLGlCQUFZLEdBQUcsSUFBSSxZQUFZLEVBQWlCLENBQUM7UUFHbkQsY0FBUyxHQUFhLEVBQUUsQ0FBQztJQUV1QixDQUFDO0lBRXpELFFBQVE7UUFDSixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN2RSxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO2dCQUMvRSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNwQyxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNuQztRQUNELGdDQUFnQztRQUNoQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7O21IQTVCUSxxQkFBcUI7dUdBQXJCLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQUhqQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxnQkFBZ0I7aUJBQzdCOzJHQUUwQixLQUFLO3NCQUEzQixLQUFLO3VCQUFDLGNBQWM7Z0JBR1gsWUFBWTtzQkFBckIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQsIE9uSW5pdCwgT25EZXN0cm95LCBPdXRwdXQsIEV2ZW50RW1pdHRlciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgSUxvYWRSZXN1bHQsIFJrU3R5bGVMb2FkZXJTZXJ2aWNlIH0gZnJvbSAnQHJlc2tpbi9jb3JlL3NlcnZpY2VzJztcclxuXHJcbkBEaXJlY3RpdmUoe1xyXG4gICAgc2VsZWN0b3I6ICdbcmtMb2FkU3R5bGVzXScsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBSa0xvYWRTdHlsZXNEaXJlY3RpdmUgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBASW5wdXQoJ3JrTG9hZFN0eWxlcycpIGhyZWZzOiBzdHJpbmdbXSB8IHN0cmluZyA9IFtdO1xyXG5cclxuICAgIC8vICjlj6/pgIkpIOi+k+WHuuWKoOi9veWujOaIkOS6i+S7tu+8jOS7peS+v+eItue7hOS7tuWPr+S7peWTjeW6lFxyXG4gICAgQE91dHB1dCgpIHN0eWxlc0xvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8SUxvYWRSZXN1bHRbXT4oKTtcclxuXHJcbiAgICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xyXG4gICAgcHJpdmF0ZSBzdHlsZVVybHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBzdHlsZUxvYWRlcjogUmtTdHlsZUxvYWRlclNlcnZpY2UpIHt9XHJcblxyXG4gICAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgdGhpcy5zdHlsZVVybHMgPSBBcnJheS5pc0FycmF5KHRoaXMuaHJlZnMpID8gdGhpcy5ocmVmcyA6IFt0aGlzLmhyZWZzXTtcclxuICAgICAgICBpZiAodGhpcy5zdHlsZVVybHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuc3R5bGVMb2FkZXIubG9hZCguLi50aGlzLnN0eWxlVXJscykuc3Vic2NyaWJlKChyZXN1bHRzKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN0eWxlc0xvYWRlZC5lbWl0KHJlc3VsdHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIOaMh+S7pOmUgOavgeaXtu+8jOiHquWKqOiwg+eUqCB1bmxvYWTvvIzmnI3liqHlhoXpg6jkvJrlpITnkIblvJXnlKjorqHmlbBcclxuICAgICAgICBpZiAodGhpcy5zdHlsZVVybHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLnN0eWxlTG9hZGVyLnVubG9hZCguLi50aGlzLnN0eWxlVXJscyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -1,4 +1,5 @@
1
1
  export * from './directives.module';
2
2
  export * from './auth.directive';
3
3
  export * from './string.template.outlet.directive';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS9kaXJlY3RpdmVzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0NBQW9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RpcmVjdGl2ZXMubW9kdWxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hdXRoLmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3RyaW5nLnRlbXBsYXRlLm91dGxldC5kaXJlY3RpdmUnO1xyXG4iXX0=
4
+ export * from './load.styles.directive';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS9kaXJlY3RpdmVzL3B1YmxpYy1hcGkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMsb0NBQW9DLENBQUM7QUFDbkQsY0FBYyx5QkFBeUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcy5tb2R1bGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F1dGguZGlyZWN0aXZlJztcclxuZXhwb3J0ICogZnJvbSAnLi9zdHJpbmcudGVtcGxhdGUub3V0bGV0LmRpcmVjdGl2ZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbG9hZC5zdHlsZXMuZGlyZWN0aXZlJztcclxuIl19
@@ -13,4 +13,5 @@ export * from './destroy.service';
13
13
  export * from './annex.catalog.service';
14
14
  export * from './person.dataset.service';
15
15
  export * from './unit.dataset.service';
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS9zZXJ2aWNlcy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsd0JBQXdCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FwcC5jb25maWcnO1xyXG5leHBvcnQgKiBmcm9tICcuL2F1dGguc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYWNjb3VudC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9jYWNoZS5odHRwLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL21lbnUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZG93bi5maWxlLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpbGUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vb3JnLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RpY3Rpb25hcnkuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc2NoZW1lLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2ZpZWxkLnNjaGVtZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9kZXN0cm95LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2FubmV4LmNhdGFsb2cuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vcGVyc29uLmRhdGFzZXQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vdW5pdC5kYXRhc2V0LnNlcnZpY2UnO1xyXG4iXX0=
16
+ export * from './style.loader.service';
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnJhcnkvY29yZS9zZXJ2aWNlcy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsY0FBYyxDQUFDO0FBQzdCLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLHNCQUFzQixDQUFDO0FBQ3JDLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLHdCQUF3QixDQUFDO0FBQ3ZDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyx3QkFBd0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vYXBwLmNvbmZpZyc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYXV0aC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9hY2NvdW50LnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2NhY2hlLmh0dHAuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbWVudS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9kb3duLmZpbGUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9vcmcuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGljdGlvbmFyeS5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9zY2hlbWUuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZmllbGQuc2NoZW1lLnNlcnZpY2UnO1xyXG5leHBvcnQgKiBmcm9tICcuL2Rlc3Ryb3kuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vYW5uZXguY2F0YWxvZy5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi9wZXJzb24uZGF0YXNldC5zZXJ2aWNlJztcclxuZXhwb3J0ICogZnJvbSAnLi91bml0LmRhdGFzZXQuc2VydmljZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vc3R5bGUubG9hZGVyLnNlcnZpY2UnO1xyXG4iXX0=
@@ -0,0 +1,180 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { Observable, forkJoin, of } from 'rxjs';
3
+ import { map, catchError, shareReplay } from 'rxjs/operators';
4
+ import * as i0 from "@angular/core";
5
+ /**
6
+ * 样式加载服务
7
+ * 提供动态加载和卸载CSS样式文件的功能,支持引用计数和缓存机制
8
+ *
9
+ * @description
10
+ * 该服务允许在运行时动态加载CSS文件,并通过引用计数机制管理样式文件的生命周期。
11
+ * 当多个组件需要同一个样式文件时,只会加载一次,但会增加引用计数。
12
+ * 当所有组件都卸载样式后,才会真正从DOM中移除该样式文件。
13
+ *
14
+ * 该服务使用预加载策略优化性能,首先使用`rel="preload"`加载样式文件,
15
+ * 加载完成后再将其设置为`rel="stylesheet"`以应用样式,避免页面闪烁问题。
16
+ *
17
+ * 服务特性:
18
+ * 1. 引用计数管理 - 避免重复加载和过早卸载
19
+ * 2. 缓存机制 - 使用shareReplay确保多次订阅复用同一结果
20
+ * 3. 容错处理 - 单个文件加载失败不影响其他文件
21
+ * 4. 内存优化 - 及时清理不再使用的样式文件
22
+ */
23
+ export class RkStyleLoaderService {
24
+ /**
25
+ * 构造函数
26
+ * @param rendererFactory Angular渲染器工厂,用于创建Renderer2实例
27
+ */
28
+ constructor(rendererFactory) {
29
+ /** 存储已加载样式的状态映射表,key为样式URL,value为样式状态 */
30
+ this.styleStates = new Map();
31
+ this.renderer = rendererFactory.createRenderer(null, null);
32
+ }
33
+ /**
34
+ * 加载一个或多个 CSS 文件,并返回每个文件的加载结果。
35
+ * 此方法具有容错性,即使部分文件失败,也会返回所有结果。
36
+ *
37
+ * @param hrefs CSS 文件 URL列表
38
+ * @returns Observable<ILoadResult[]> 每个CSS文件的加载结果数组
39
+ *
40
+ * @example
41
+ * ```typescript
42
+ * // 加载单个样式文件
43
+ * styleLoaderService.load('/assets/styles/theme.css')
44
+ * .subscribe(results => {
45
+ * if (results[0].success) {
46
+ * console.log('样式加载成功');
47
+ * } else {
48
+ * console.error('样式加载失败:', results[0].error);
49
+ * }
50
+ * });
51
+ *
52
+ * // 加载多个样式文件
53
+ * styleLoaderService.load('/assets/styles/theme.css', '/assets/styles/components.css')
54
+ * .subscribe(results => {
55
+ * results.forEach(result => {
56
+ * if (result.success) {
57
+ * console.log(`样式 ${result.href} 加载成功`);
58
+ * } else {
59
+ * console.error(`样式 ${result.href} 加载失败:`, result.error);
60
+ * }
61
+ * });
62
+ * });
63
+ * ```
64
+ *
65
+ * @description
66
+ * 该方法使用forkJoin并行加载所有CSS文件,即使其中某些文件加载失败,
67
+ * 也会等待所有文件加载完成后再返回结果,确保调用方能获取完整的加载状态信息。
68
+ */
69
+ load(...hrefs) {
70
+ if (hrefs.length === 0) {
71
+ return of([]);
72
+ }
73
+ const loadObservables = hrefs.map((href) => this.loadSingle(href).pipe(map(() => ({ href, success: true })),
74
+ // 容错机制 - 捕获单个加载流的错误,并将其转换为成功发出的值
75
+ catchError((error) => of({ href, success: false, error }))));
76
+ return forkJoin(loadObservables);
77
+ }
78
+ /**
79
+ * 卸载一个或多个 CSS 文件。
80
+ * 使用引用计数,只有当没有任何组件需要此样式时,才会真正从 DOM 中移除。
81
+ *
82
+ * @param hrefs 要卸载的 CSS 文件 URL列表
83
+ *
84
+ * @example
85
+ * ```typescript
86
+ * // 卸载单个样式文件
87
+ * styleLoaderService.unload('/assets/styles/theme.css');
88
+ *
89
+ * // 卸载多个样式文件
90
+ * styleLoaderService.unload('/assets/styles/theme.css', '/assets/styles/components.css');
91
+ * ```
92
+ *
93
+ * @description
94
+ * 该方法通过减少引用计数来管理样式文件的生命周期。当引用计数降到0时,
95
+ * 才会真正从DOM中移除对应的<link>元素,从而避免样式文件被提前移除导致页面样式异常。
96
+ */
97
+ unload(...hrefs) {
98
+ hrefs.forEach((href) => {
99
+ const state = this.styleStates.get(href);
100
+ if (state) {
101
+ state.refCount--;
102
+ // 当引用计数为0时,从DOM中移除样式文件
103
+ if (state.refCount === 0) {
104
+ const linkElement = document.head.querySelector(`link[href="${href}"]`);
105
+ if (linkElement) {
106
+ this.renderer.removeChild(document.head, linkElement);
107
+ }
108
+ // 清理状态缓存
109
+ this.styleStates.delete(href);
110
+ }
111
+ }
112
+ });
113
+ }
114
+ /**
115
+ * 加载单个CSS文件
116
+ * 使用预加载策略和引用计数机制优化性能
117
+ *
118
+ * @param href CSS文件URL
119
+ * @returns 返回加载CSS文件的Observable
120
+ *
121
+ * @description
122
+ * 该方法使用预加载技术优化样式加载过程:
123
+ * 1. 首先创建<link>元素并设置为预加载(rel="preload")
124
+ * 2. 监听加载完成事件
125
+ * 3. 加载完成后将元素设置为样式表(rel="stylesheet")
126
+ * 4. 使用shareReplay(1)确保多次订阅复用同一结果
127
+ * 5. 通过引用计数避免重复加载
128
+ *
129
+ * 这种方式可以避免样式加载过程中的页面闪烁问题,同时提高性能。
130
+ */
131
+ loadSingle(href) {
132
+ // 检查是否已存在该样式文件的加载状态
133
+ let state = this.styleStates.get(href);
134
+ if (state) {
135
+ // 增加引用计数
136
+ state.refCount++;
137
+ return state.observable;
138
+ }
139
+ // 创建新的加载Observable
140
+ const load$ = new Observable((observer) => {
141
+ // 创建link元素
142
+ const link = this.renderer.createElement('link');
143
+ // 设置预加载属性
144
+ this.renderer.setAttribute(link, 'rel', 'preload');
145
+ this.renderer.setAttribute(link, 'as', 'style');
146
+ this.renderer.setAttribute(link, 'href', href);
147
+ // 监听加载完成事件
148
+ link.onload = () => {
149
+ // 清除事件处理函数避免内存泄漏
150
+ link.onload = null;
151
+ // 将预加载改为样式表应用
152
+ this.renderer.setAttribute(link, 'rel', 'stylesheet');
153
+ // 通知观察者加载完成
154
+ observer.next(link);
155
+ observer.complete();
156
+ };
157
+ // 监听加载错误事件
158
+ link.onerror = (error) => {
159
+ observer.error(error);
160
+ };
161
+ // 将link元素添加到head中开始加载
162
+ this.renderer.appendChild(document.head, link);
163
+ }).pipe(
164
+ // 使用shareReplay确保多次订阅复用同一结果
165
+ shareReplay(1));
166
+ // 创建并存储新的状态
167
+ state = { observable: load$, refCount: 1 };
168
+ this.styleStates.set(href, state);
169
+ return state.observable;
170
+ }
171
+ }
172
+ RkStyleLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkStyleLoaderService, deps: [{ token: i0.RendererFactory2 }], target: i0.ɵɵFactoryTarget.Injectable });
173
+ RkStyleLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkStyleLoaderService, providedIn: 'root' });
174
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkStyleLoaderService, decorators: [{
175
+ type: Injectable,
176
+ args: [{
177
+ providedIn: 'root',
178
+ }]
179
+ }], ctorParameters: function () { return [{ type: i0.RendererFactory2 }]; } });
180
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGUubG9hZGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJyYXJ5L2NvcmUvc2VydmljZXMvc3R5bGUubG9hZGVyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBK0IsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hELE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQTBCOUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBSUgsTUFBTSxPQUFPLG9CQUFvQjtJQU03Qjs7O09BR0c7SUFDSCxZQUFZLGVBQWlDO1FBUDdDLHlDQUF5QztRQUNqQyxnQkFBVyxHQUE0QixJQUFJLEdBQUcsRUFBRSxDQUFDO1FBT3JELElBQUksQ0FBQyxRQUFRLEdBQUcsZUFBZSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztPQW1DRztJQUNILElBQUksQ0FBQyxHQUFHLEtBQWU7UUFDbkIsSUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNwQixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztTQUNqQjtRQUVELE1BQU0sZUFBZSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUN2QyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDdEIsR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFnQixDQUFDO1FBQ25ELGlDQUFpQztRQUNqQyxVQUFV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QyxJQUFJO1FBQ0gsNEJBQTRCO1FBQzVCLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FDakIsQ0FBQztRQUVGLFlBQVk7UUFDWixLQUFLLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFbEMsT0FBTyxLQUFLLENBQUMsVUFBVSxDQUFDO0lBQzVCLENBQUM7O2tIQXRLUSxvQkFBb0I7c0hBQXBCLG9CQUFvQixjQUZqQixNQUFNOzRGQUVULG9CQUFvQjtrQkFIaEMsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBSZW5kZXJlcjIsIFJlbmRlcmVyRmFjdG9yeTIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgZm9ya0pvaW4sIG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IG1hcCwgY2F0Y2hFcnJvciwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcblxyXG4vKipcclxuICog5qC35byP5Yqg6L2957uT5p6c5o6l5Y+jXHJcbiAqIOWumuS5ieavj+S4qkNTU+aWh+S7tuWKoOi9veeahOe7k+aenOS/oeaBr1xyXG4gKi9cclxuZXhwb3J0IGludGVyZmFjZSBJTG9hZFJlc3VsdCB7XHJcbiAgICAvKiogQ1NT5paH5Lu255qEVVJM6Lev5b6EICovXHJcbiAgICBocmVmOiBzdHJpbmc7XHJcbiAgICAvKiog5Yqg6L295piv5ZCm5oiQ5YqfICovXHJcbiAgICBzdWNjZXNzOiBib29sZWFuO1xyXG4gICAgLyoqIOWKoOi9veWksei0peaXtueahOmUmeivr+S/oeaBryAqL1xyXG4gICAgZXJyb3I/OiBhbnk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiDlhoXpg6jnirbmgIHmjqXlj6NcclxuICog55So5LqO6Lef6Liq5q+P5LiqQ1NT5paH5Lu255qE5Yqg6L2954q25oCB5ZKM5byV55So6K6h5pWwXHJcbiAqL1xyXG5pbnRlcmZhY2UgU3R5bGVTdGF0ZSB7XHJcbiAgICAvKiog5Yqg6L29Q1NT5paH5Lu255qET2JzZXJ2YWJsZSAqL1xyXG4gICAgb2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxIVE1MTGlua0VsZW1lbnQ+O1xyXG4gICAgLyoqIOW8leeUqOiuoeaVsO+8jOi3n+i4quacieWkmuWwkeS4que7hOS7tuato+WcqOS9v+eUqOatpOagt+W8jyAqL1xyXG4gICAgcmVmQ291bnQ6IG51bWJlcjtcclxufVxyXG5cclxuLyoqXHJcbiAqIOagt+W8j+WKoOi9veacjeWKoVxyXG4gKiDmj5DkvpvliqjmgIHliqDovb3lkozljbjovb1DU1PmoLflvI/mlofku7bnmoTlip/og73vvIzmlK/mjIHlvJXnlKjorqHmlbDlkoznvJPlrZjmnLrliLZcclxuICpcclxuICogQGRlc2NyaXB0aW9uXHJcbiAqIOivpeacjeWKoeWFgeiuuOWcqOi/kOihjOaXtuWKqOaAgeWKoOi9vUNTU+aWh+S7tu+8jOW5tumAmui/h+W8leeUqOiuoeaVsOacuuWItueuoeeQhuagt+W8j+aWh+S7tueahOeUn+WRveWRqOacn+OAglxyXG4gKiDlvZPlpJrkuKrnu4Tku7bpnIDopoHlkIzkuIDkuKrmoLflvI/mlofku7bml7bvvIzlj6rkvJrliqDovb3kuIDmrKHvvIzkvYbkvJrlop7liqDlvJXnlKjorqHmlbDjgIJcclxuICog5b2T5omA5pyJ57uE5Lu26YO95Y246L295qC35byP5ZCO77yM5omN5Lya55yf5q2j5LuORE9N5Lit56e76Zmk6K+l5qC35byP5paH5Lu244CCXHJcbiAqIFxyXG4gKiDor6XmnI3liqHkvb/nlKjpooTliqDovb3nrZbnlaXkvJjljJbmgKfog73vvIzpppblhYjkvb/nlKhgcmVsPVwicHJlbG9hZFwiYOWKoOi9veagt+W8j+aWh+S7tu+8jFxyXG4gKiDliqDovb3lrozmiJDlkI7lho3lsIblhbborr7nva7kuLpgcmVsPVwic3R5bGVzaGVldFwiYOS7peW6lOeUqOagt+W8j++8jOmBv+WFjemhtemdoumXqueDgemXrumimOOAglxyXG4gKiBcclxuICog5pyN5Yqh54m55oCnOlxyXG4gKiAxLiDlvJXnlKjorqHmlbDnrqHnkIYgLSDpgb/lhY3ph43lpI3liqDovb3lkozov4fml6nljbjovb1cclxuICogMi4g57yT5a2Y5py65Yi2IC0g5L2/55Soc2hhcmVSZXBsYXnnoa7kv53lpJrmrKHorqLpmIXlpI3nlKjlkIzkuIDnu5PmnpxcclxuICogMy4g5a656ZSZ5aSE55CGIC0g5Y2V5Liq5paH5Lu25Yqg6L295aSx6LSl5LiN5b2x5ZON5YW25LuW5paH5Lu2XHJcbiAqIDQuIOWGheWtmOS8mOWMliAtIOWPiuaXtua4heeQhuS4jeWGjeS9v+eUqOeahOagt+W8j+aWh+S7tlxyXG4gKi9cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUmtTdHlsZUxvYWRlclNlcnZpY2Uge1xyXG4gICAgLyoqIEFuZ3VsYXLmuLLmn5PlmajvvIznlKjkuo5ET03mk43kvZwgKi9cclxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMjtcclxuICAgIC8qKiDlrZjlgqjlt7LliqDovb3moLflvI/nmoTnirbmgIHmmKDlsITooajvvIxrZXnkuLrmoLflvI9VUkzvvIx2YWx1ZeS4uuagt+W8j+eKtuaAgSAqL1xyXG4gICAgcHJpdmF0ZSBzdHlsZVN0YXRlczogTWFwPHN0cmluZywgU3R5bGVTdGF0ZT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDmnoTpgKDlh73mlbBcclxuICAgICAqIEBwYXJhbSByZW5kZXJlckZhY3RvcnkgQW5ndWxhcua4suafk+WZqOW3peWOgu+8jOeUqOS6juWIm+W7ulJlbmRlcmVyMuWunuS+i1xyXG4gICAgICovXHJcbiAgICBjb25zdHJ1Y3RvcihyZW5kZXJlckZhY3Rvcnk6IFJlbmRlcmVyRmFjdG9yeTIpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyID0gcmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKG51bGwsIG51bGwpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICog5Yqg6L295LiA5Liq5oiW5aSa5LiqIENTUyDmlofku7bvvIzlubbov5Tlm57mr4/kuKrmlofku7bnmoTliqDovb3nu5PmnpzjgIJcclxuICAgICAqIOatpOaWueazleWFt+acieWuuemUmeaAp++8jOWNs+S9v+mDqOWIhuaWh+S7tuWksei0pe+8jOS5n+S8mui/lOWbnuaJgOaciee7k+aenOOAglxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gaHJlZnMgQ1NTIOaWh+S7tiBVUkzliJfooahcclxuICAgICAqIEByZXR1cm5zIE9ic2VydmFibGU8SUxvYWRSZXN1bHRbXT4g5q+P5LiqQ1NT5paH5Lu255qE5Yqg6L2957uT5p6c5pWw57uEXHJcbiAgICAgKiBcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyDliqDovb3ljZXkuKrmoLflvI/mlofku7ZcclxuICAgICAqIHN0eWxlTG9hZGVyU2VydmljZS5sb2FkKCcvYXNzZXRzL3N0eWxlcy90aGVtZS5jc3MnKVxyXG4gICAgICogICAuc3Vic2NyaWJlKHJlc3VsdHMgPT4ge1xyXG4gICAgICogICAgIGlmIChyZXN1bHRzWzBdLnN1Y2Nlc3MpIHtcclxuICAgICAqICAgICAgIGNvbnNvbGUubG9nKCfmoLflvI/liqDovb3miJDlip8nKTtcclxuICAgICAqICAgICB9IGVsc2Uge1xyXG4gICAgICogICAgICAgY29uc29sZS5lcnJvcign5qC35byP5Yqg6L295aSx6LSlOicsIHJlc3VsdHNbMF0uZXJyb3IpO1xyXG4gICAgICogICAgIH1cclxuICAgICAqICAgfSk7XHJcbiAgICAgKiBcclxuICAgICAqIC8vIOWKoOi9veWkmuS4quagt+W8j+aWh+S7tlxyXG4gICAgICogc3R5bGVMb2FkZXJTZXJ2aWNlLmxvYWQoJy9hc3NldHMvc3R5bGVzL3RoZW1lLmNzcycsICcvYXNzZXRzL3N0eWxlcy9jb21wb25lbnRzLmNzcycpXHJcbiAgICAgKiAgIC5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XHJcbiAgICAgKiAgICAgcmVzdWx0cy5mb3JFYWNoKHJlc3VsdCA9PiB7XHJcbiAgICAgKiAgICAgICBpZiAocmVzdWx0LnN1Y2Nlc3MpIHtcclxuICAgICAqICAgICAgICAgY29uc29sZS5sb2coYOagt+W8jyAke3Jlc3VsdC5ocmVmfSDliqDovb3miJDlip9gKTtcclxuICAgICAqICAgICAgIH0gZWxzZSB7XHJcbiAgICAgKiAgICAgICAgIGNvbnNvbGUuZXJyb3IoYOagt+W8jyAke3Jlc3VsdC5ocmVmfSDliqDovb3lpLHotKU6YCwgcmVzdWx0LmVycm9yKTtcclxuICAgICAqICAgICAgIH1cclxuICAgICAqICAgICB9KTtcclxuICAgICAqICAgfSk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiDor6Xmlrnms5Xkvb/nlKhmb3JrSm9pbuW5tuihjOWKoOi9veaJgOaciUNTU+aWh+S7tu+8jOWNs+S9v+WFtuS4reafkOS6m+aWh+S7tuWKoOi9veWksei0pe+8jFxyXG4gICAgICog5Lmf5Lya562J5b6F5omA5pyJ5paH5Lu25Yqg6L295a6M5oiQ5ZCO5YaN6L+U5Zue57uT5p6c77yM56Gu5L+d6LCD55So5pa56IO96I635Y+W5a6M5pW055qE5Yqg6L2954q25oCB5L+h5oGv44CCXHJcbiAgICAgKi9cclxuICAgIGxvYWQoLi4uaHJlZnM6IHN0cmluZ1tdKTogT2JzZXJ2YWJsZTxJTG9hZFJlc3VsdFtdPiB7XHJcbiAgICAgICAgaWYgKGhyZWZzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gb2YoW10pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbG9hZE9ic2VydmFibGVzID0gaHJlZnMubWFwKChocmVmKSA9PlxyXG4gICAgICAgICAgICB0aGlzLmxvYWRTaW5nbGUoaHJlZikucGlwZShcclxuICAgICAgICAgICAgICAgIG1hcCgoKSA9PiAoeyBocmVmLCBzdWNjZXNzOiB0cnVlIH0pIGFzIElMb2FkUmVzdWx0KSxcclxuICAgICAgICAgICAgICAgIC8vIOWuuemUmeacuuWItiAtIOaNleiOt+WNleS4quWKoOi9vea1geeahOmUmeivr++8jOW5tuWwhuWFtui9rOaNouS4uuaIkOWKn+WPkeWHuueahOWAvFxyXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IG9mKHsgaHJlZiwgc3VjY2VzczogZmFsc2UsIGVycm9yIH0gYXMgSUxvYWRSZXN1bHQpKSxcclxuICAgICAgICAgICAgKSxcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICByZXR1cm4gZm9ya0pvaW4obG9hZE9ic2VydmFibGVzKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOWNuOi9veS4gOS4quaIluWkmuS4qiBDU1Mg5paH5Lu244CCXHJcbiAgICAgKiDkvb/nlKjlvJXnlKjorqHmlbDvvIzlj6rmnInlvZPmsqHmnInku7vkvZXnu4Tku7bpnIDopoHmraTmoLflvI/ml7bvvIzmiY3kvJrnnJ/mraPku44gRE9NIOS4reenu+mZpOOAglxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gaHJlZnMg6KaB5Y246L2955qEIENTUyDmlofku7YgVVJM5YiX6KGoXHJcbiAgICAgKiBcclxuICAgICAqIEBleGFtcGxlXHJcbiAgICAgKiBgYGB0eXBlc2NyaXB0XHJcbiAgICAgKiAvLyDljbjovb3ljZXkuKrmoLflvI/mlofku7ZcclxuICAgICAqIHN0eWxlTG9hZGVyU2VydmljZS51bmxvYWQoJy9hc3NldHMvc3R5bGVzL3RoZW1lLmNzcycpO1xyXG4gICAgICpcclxuICAgICAqIC8vIOWNuOi9veWkmuS4quagt+W8j+aWh+S7tlxyXG4gICAgICogc3R5bGVMb2FkZXJTZXJ2aWNlLnVubG9hZCgnL2Fzc2V0cy9zdHlsZXMvdGhlbWUuY3NzJywgJy9hc3NldHMvc3R5bGVzL2NvbXBvbmVudHMuY3NzJyk7XHJcbiAgICAgKiBgYGBcclxuICAgICAqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiDor6Xmlrnms5XpgJrov4flh4/lsJHlvJXnlKjorqHmlbDmnaXnrqHnkIbmoLflvI/mlofku7bnmoTnlJ/lkb3lkajmnJ/jgILlvZPlvJXnlKjorqHmlbDpmY3liLAw5pe277yMXHJcbiAgICAgKiDmiY3kvJrnnJ/mraPku45ET03kuK3np7vpmaTlr7nlupTnmoQ8bGluaz7lhYPntKDvvIzku47ogIzpgb/lhY3moLflvI/mlofku7booqvmj5DliY3np7vpmaTlr7zoh7TpobXpnaLmoLflvI/lvILluLjjgIJcclxuICAgICAqL1xyXG4gICAgdW5sb2FkKC4uLmhyZWZzOiBzdHJpbmdbXSk6IHZvaWQge1xyXG4gICAgICAgIGhyZWZzLmZvckVhY2goKGhyZWYpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhdGUgPSB0aGlzLnN0eWxlU3RhdGVzLmdldChocmVmKTtcclxuICAgICAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICBzdGF0ZS5yZWZDb3VudC0tO1xyXG4gICAgICAgICAgICAgICAgLy8g5b2T5byV55So6K6h5pWw5Li6MOaXtu+8jOS7jkRPTeS4reenu+mZpOagt+W8j+aWh+S7tlxyXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlLnJlZkNvdW50ID09PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlua0VsZW1lbnQgPSBkb2N1bWVudC5oZWFkLnF1ZXJ5U2VsZWN0b3IoYGxpbmtbaHJlZj1cIiR7aHJlZn1cIl1gKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGlua0VsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDaGlsZChkb2N1bWVudC5oZWFkLCBsaW5rRWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOa4heeQhueKtuaAgee8k+WtmFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVTdGF0ZXMuZGVsZXRlKGhyZWYpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDliqDovb3ljZXkuKpDU1Pmlofku7ZcclxuICAgICAqIOS9v+eUqOmihOWKoOi9veetlueVpeWSjOW8leeUqOiuoeaVsOacuuWItuS8mOWMluaAp+iDvVxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0gaHJlZiBDU1Pmlofku7ZVUkxcclxuICAgICAqIEByZXR1cm5zIOi/lOWbnuWKoOi9vUNTU+aWh+S7tueahE9ic2VydmFibGVcclxuICAgICAqIFxyXG4gICAgICogQGRlc2NyaXB0aW9uXHJcbiAgICAgKiDor6Xmlrnms5Xkvb/nlKjpooTliqDovb3mioDmnK/kvJjljJbmoLflvI/liqDovb3ov4fnqIs6XHJcbiAgICAgKiAxLiDpppblhYjliJvlu7o8bGluaz7lhYPntKDlubborr7nva7kuLrpooTliqDovb0ocmVsPVwicHJlbG9hZFwiKVxyXG4gICAgICogMi4g55uR5ZCs5Yqg6L295a6M5oiQ5LqL5Lu2XHJcbiAgICAgKiAzLiDliqDovb3lrozmiJDlkI7lsIblhYPntKDorr7nva7kuLrmoLflvI/ooagocmVsPVwic3R5bGVzaGVldFwiKVxyXG4gICAgICogNC4g5L2/55Soc2hhcmVSZXBsYXkoMSnnoa7kv53lpJrmrKHorqLpmIXlpI3nlKjlkIzkuIDnu5PmnpxcclxuICAgICAqIDUuIOmAmui/h+W8leeUqOiuoeaVsOmBv+WFjemHjeWkjeWKoOi9vVxyXG4gICAgICogXHJcbiAgICAgKiDov5nnp43mlrnlvI/lj6/ku6Xpgb/lhY3moLflvI/liqDovb3ov4fnqIvkuK3nmoTpobXpnaLpl6rng4Hpl67popjvvIzlkIzml7bmj5Dpq5jmgKfog73jgIJcclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBsb2FkU2luZ2xlKGhyZWY6IHN0cmluZyk6IE9ic2VydmFibGU8SFRNTExpbmtFbGVtZW50PiB7XHJcbiAgICAgICAgLy8g5qOA5p+l5piv5ZCm5bey5a2Y5Zyo6K+l5qC35byP5paH5Lu255qE5Yqg6L2954q25oCBXHJcbiAgICAgICAgbGV0IHN0YXRlID0gdGhpcy5zdHlsZVN0YXRlcy5nZXQoaHJlZik7XHJcbiAgICAgICAgaWYgKHN0YXRlKSB7XHJcbiAgICAgICAgICAgIC8vIOWinuWKoOW8leeUqOiuoeaVsFxyXG4gICAgICAgICAgICBzdGF0ZS5yZWZDb3VudCsrO1xyXG4gICAgICAgICAgICByZXR1cm4gc3RhdGUub2JzZXJ2YWJsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIOWIm+W7uuaWsOeahOWKoOi9vU9ic2VydmFibGVcclxuICAgICAgICBjb25zdCBsb2FkJCA9IG5ldyBPYnNlcnZhYmxlPEhUTUxMaW5rRWxlbWVudD4oKG9ic2VydmVyKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIOWIm+W7umxpbmvlhYPntKBcclxuICAgICAgICAgICAgY29uc3QgbGluazogSFRNTExpbmtFbGVtZW50ID0gdGhpcy5yZW5kZXJlci5jcmVhdGVFbGVtZW50KCdsaW5rJyk7XHJcbiAgICAgICAgICAgIC8vIOiuvue9rumihOWKoOi9veWxnuaAp1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnNldEF0dHJpYnV0ZShsaW5rLCAncmVsJywgJ3ByZWxvYWQnKTtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGluaywgJ2FzJywgJ3N0eWxlJyk7XHJcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKGxpbmssICdocmVmJywgaHJlZik7XHJcblxyXG4gICAgICAgICAgICAvLyDnm5HlkKzliqDovb3lrozmiJDkuovku7ZcclxuICAgICAgICAgICAgbGluay5vbmxvYWQgPSAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvLyDmuIXpmaTkuovku7blpITnkIblh73mlbDpgb/lhY3lhoXlrZjms4TmvI9cclxuICAgICAgICAgICAgICAgIGxpbmsub25sb2FkID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIC8vIOWwhumihOWKoOi9veaUueS4uuagt+W8j+ihqOW6lOeUqFxyXG4gICAgICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5zZXRBdHRyaWJ1dGUobGluaywgJ3JlbCcsICdzdHlsZXNoZWV0Jyk7XHJcbiAgICAgICAgICAgICAgICAvLyDpgJrnn6Xop4Llr5/ogIXliqDovb3lrozmiJBcclxuICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQobGluayk7XHJcbiAgICAgICAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g55uR5ZCs5Yqg6L296ZSZ6K+v5LqL5Lu2XHJcbiAgICAgICAgICAgIGxpbmsub25lcnJvciA9IChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgLy8g5bCGbGlua+WFg+e0oOa3u+WKoOWIsGhlYWTkuK3lvIDlp4vliqDovb1cclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJlci5hcHBlbmRDaGlsZChkb2N1bWVudC5oZWFkLCBsaW5rKTtcclxuICAgICAgICB9KS5waXBlKFxyXG4gICAgICAgICAgICAvLyDkvb/nlKhzaGFyZVJlcGxheeehruS/neWkmuasoeiuoumYheWkjeeUqOWQjOS4gOe7k+aenFxyXG4gICAgICAgICAgICBzaGFyZVJlcGxheSgxKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIOWIm+W7uuW5tuWtmOWCqOaWsOeahOeKtuaAgVxyXG4gICAgICAgIHN0YXRlID0geyBvYnNlcnZhYmxlOiBsb2FkJCwgcmVmQ291bnQ6IDEgfTtcclxuICAgICAgICB0aGlzLnN0eWxlU3RhdGVzLnNldChocmVmLCBzdGF0ZSk7XHJcblxyXG4gICAgICAgIHJldHVybiBzdGF0ZS5vYnNlcnZhYmxlO1xyXG4gICAgfVxyXG59Il19
@@ -1,5 +1,5 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Directive, Input, TemplateRef, NgModule } from '@angular/core';
2
+ import { Directive, Input, TemplateRef, EventEmitter, Output, NgModule } from '@angular/core';
3
3
  import { map } from 'rxjs/operators';
4
4
  import * as i1 from '@reskin/core/services';
5
5
 
@@ -165,16 +165,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
165
165
  class RkStringTemplateOutletContext {
166
166
  }
167
167
 
168
+ class RkLoadStylesDirective {
169
+ constructor(styleLoader) {
170
+ this.styleLoader = styleLoader;
171
+ this.hrefs = [];
172
+ // (可选) 输出加载完成事件,以便父组件可以响应
173
+ this.stylesLoaded = new EventEmitter();
174
+ this.styleUrls = [];
175
+ }
176
+ ngOnInit() {
177
+ this.styleUrls = Array.isArray(this.hrefs) ? this.hrefs : [this.hrefs];
178
+ if (this.styleUrls.length > 0) {
179
+ this.subscription = this.styleLoader.load(...this.styleUrls).subscribe((results) => {
180
+ this.stylesLoaded.emit(results);
181
+ });
182
+ }
183
+ }
184
+ ngOnDestroy() {
185
+ if (this.subscription) {
186
+ this.subscription.unsubscribe();
187
+ }
188
+ // 指令销毁时,自动调用 unload,服务内部会处理引用计数
189
+ if (this.styleUrls.length > 0) {
190
+ this.styleLoader.unload(...this.styleUrls);
191
+ }
192
+ }
193
+ }
194
+ RkLoadStylesDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkLoadStylesDirective, deps: [{ token: i1.RkStyleLoaderService }], target: i0.ɵɵFactoryTarget.Directive });
195
+ RkLoadStylesDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: RkLoadStylesDirective, selector: "[rkLoadStyles]", inputs: { hrefs: ["rkLoadStyles", "hrefs"] }, outputs: { stylesLoaded: "stylesLoaded" }, ngImport: i0 });
196
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkLoadStylesDirective, decorators: [{
197
+ type: Directive,
198
+ args: [{
199
+ selector: '[rkLoadStyles]',
200
+ }]
201
+ }], ctorParameters: function () { return [{ type: i1.RkStyleLoaderService }]; }, propDecorators: { hrefs: [{
202
+ type: Input,
203
+ args: ['rkLoadStyles']
204
+ }], stylesLoaded: [{
205
+ type: Output
206
+ }] } });
207
+
168
208
  class RkDirectivesModule {
169
209
  }
170
210
  RkDirectivesModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
171
- RkDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule, declarations: [RkAuthDirective, RkStringTemplateOutletDirective], exports: [RkAuthDirective, RkStringTemplateOutletDirective] });
211
+ RkDirectivesModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule, declarations: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective], exports: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective] });
172
212
  RkDirectivesModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule });
173
213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: RkDirectivesModule, decorators: [{
174
214
  type: NgModule,
175
215
  args: [{
176
- declarations: [RkAuthDirective, RkStringTemplateOutletDirective],
177
- exports: [RkAuthDirective, RkStringTemplateOutletDirective],
216
+ declarations: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective],
217
+ exports: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective],
178
218
  }]
179
219
  }] });
180
220
 
@@ -182,5 +222,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
182
222
  * Generated bundle index. Do not edit.
183
223
  */
184
224
 
185
- export { RkAuthDirective, RkDirectivesModule, RkStringTemplateOutletContext, RkStringTemplateOutletDirective };
225
+ export { RkAuthDirective, RkDirectivesModule, RkLoadStylesDirective, RkStringTemplateOutletContext, RkStringTemplateOutletDirective };
186
226
  //# sourceMappingURL=reskin-core-directives.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reskin-core-directives.js","sources":["../../../library/core/directives/auth.directive.ts","../../../library/core/directives/string.template.outlet.directive.ts","../../../library/core/directives/directives.module.ts","../../../library/core/directives/reskin-core-directives.ts"],"sourcesContent":["import { Directive, Input, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { RkMenuService } from '@reskin/core/services';\r\n\r\n@Directive({\r\n selector: '[rkAuth]',\r\n})\r\nexport class RkAuthDirective implements OnDestroy {\r\n /**\r\n * 传递多个标识符时,逗号分隔,匹配按\"或者\"运算\r\n * @param condition\r\n */\r\n @Input()\r\n set rkAuth(condition: string | string[]) {\r\n this.condition = condition;\r\n this.updateView();\r\n }\r\n\r\n @Input()\r\n set rkAuthThen(templateRef: TemplateRef<any>) {\r\n this.thenTemplateRef = templateRef;\r\n this.updateView();\r\n }\r\n\r\n @Input()\r\n set rkAuthElse(templateRef: TemplateRef<any>) {\r\n this.elseTemplateRef = templateRef;\r\n this.updateView();\r\n }\r\n\r\n constructor(\r\n private menu: RkMenuService,\r\n private viewContainerRef: ViewContainerRef,\r\n public templateRef: TemplateRef<any>,\r\n ) {\r\n this.thenTemplateRef = templateRef;\r\n }\r\n\r\n private condition: string | string[] = '';\r\n private thenTemplateRef?: TemplateRef<any>;\r\n private elseTemplateRef?: TemplateRef<any>;\r\n private authSubscription?: Subscription;\r\n\r\n ngOnDestroy() {\r\n this.authSubscription?.unsubscribe();\r\n }\r\n\r\n private updateView() {\r\n this.authSubscription?.unsubscribe();\r\n this.authSubscription = this.hasAuth(this.condition).subscribe((context) => {\r\n this.viewContainerRef.clear();\r\n if (context.status) {\r\n if (this.thenTemplateRef) {\r\n this.viewContainerRef.createEmbeddedView(this.thenTemplateRef, context);\r\n }\r\n } else {\r\n if (this.elseTemplateRef) {\r\n this.viewContainerRef.createEmbeddedView(this.elseTemplateRef, context);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private hasAuth(tags: string | string[]) {\r\n const tagList: string[] = typeof tags === 'string' ? [tags] : tags;\r\n return this.menu.requestData().pipe(\r\n map((json) => {\r\n const menus = json.data.filter((menu) => tagList.includes(menu.SYSTEM_RESOURCE_GUARD_ID));\r\n if (!menus.length) return { $implicit: [], status: false };\r\n return {\r\n $implicit: typeof tags === 'string' ? menus[0] : menus,\r\n status: !!menus.length,\r\n };\r\n }),\r\n );\r\n }\r\n}\r\n","import { Directive, EmbeddedViewRef, Input, OnChanges, SimpleChange, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[rkStringTemplateOutlet]',\r\n})\r\nexport class RkStringTemplateOutletDirective<_T = unknown> implements OnChanges {\r\n private embeddedViewRef: EmbeddedViewRef<any> | null = null;\r\n private context = new RkStringTemplateOutletContext();\r\n @Input() rkStringTemplateOutletContext: any | null = null;\r\n @Input() rkStringTemplateOutlet: any | TemplateRef<any> = null;\r\n\r\n static rkTemplateContextGuard<T>(_dir: RkStringTemplateOutletDirective<T>, _ctx: any): _ctx is RkStringTemplateOutletContext {\r\n return true;\r\n }\r\n\r\n private recreateView(): void {\r\n this.viewContainer.clear();\r\n const isTemplateRef = this.rkStringTemplateOutlet instanceof TemplateRef;\r\n const templateRef = (isTemplateRef ? this.rkStringTemplateOutlet : this.templateRef) as any;\r\n this.embeddedViewRef = this.viewContainer.createEmbeddedView(\r\n templateRef,\r\n isTemplateRef ? this.rkStringTemplateOutletContext : this.context,\r\n );\r\n }\r\n\r\n private updateContext(): void {\r\n const isTemplateRef = this.rkStringTemplateOutlet instanceof TemplateRef;\r\n const newCtx = isTemplateRef ? this.rkStringTemplateOutletContext : this.context;\r\n const oldCtx = this.embeddedViewRef!.context as any;\r\n if (newCtx) {\r\n for (const propName of Object.keys(newCtx)) {\r\n oldCtx[propName] = newCtx[propName];\r\n }\r\n }\r\n }\r\n\r\n constructor(\r\n private viewContainer: ViewContainerRef,\r\n private templateRef: TemplateRef<any>,\r\n ) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const { rkStringTemplateOutletContext, rkStringTemplateOutlet } = changes;\r\n const shouldRecreateView = (): boolean => {\r\n let shouldOutletRecreate = false;\r\n if (rkStringTemplateOutlet) {\r\n if (rkStringTemplateOutlet.firstChange) {\r\n shouldOutletRecreate = true;\r\n } else {\r\n const isPreviousOutletTemplate = rkStringTemplateOutlet.previousValue instanceof TemplateRef;\r\n const isCurrentOutletTemplate = rkStringTemplateOutlet.currentValue instanceof TemplateRef;\r\n shouldOutletRecreate = isPreviousOutletTemplate || isCurrentOutletTemplate;\r\n }\r\n }\r\n const hasContextShapeChanged = (ctxChange: SimpleChange): boolean => {\r\n const prevCtxKeys = Object.keys(ctxChange.previousValue || {});\r\n const currCtxKeys = Object.keys(ctxChange.currentValue || {});\r\n if (prevCtxKeys.length === currCtxKeys.length) {\r\n for (const propName of currCtxKeys) {\r\n if (prevCtxKeys.indexOf(propName) === -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n };\r\n const shouldContextRecreate = rkStringTemplateOutletContext && hasContextShapeChanged(rkStringTemplateOutletContext);\r\n return shouldContextRecreate || shouldOutletRecreate;\r\n };\r\n\r\n if (rkStringTemplateOutlet) {\r\n this.context.$implicit = rkStringTemplateOutlet.currentValue;\r\n }\r\n\r\n const recreateView = shouldRecreateView();\r\n if (recreateView) {\r\n /** recreate view when context shape or outlet change **/\r\n this.recreateView();\r\n } else {\r\n /** update context **/\r\n this.updateContext();\r\n }\r\n }\r\n}\r\n\r\nexport class RkStringTemplateOutletContext {\r\n public $implicit: any;\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RkAuthDirective } from './auth.directive';\r\nimport { RkStringTemplateOutletDirective } from './string.template.outlet.directive';\r\n\r\n@NgModule({\r\n declarations: [RkAuthDirective, RkStringTemplateOutletDirective],\r\n exports: [RkAuthDirective, RkStringTemplateOutletDirective],\r\n})\r\nexport class RkDirectivesModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reskin-core-directives.js","sources":["../../../library/core/directives/auth.directive.ts","../../../library/core/directives/string.template.outlet.directive.ts","../../../library/core/directives/load.styles.directive.ts","../../../library/core/directives/directives.module.ts","../../../library/core/directives/reskin-core-directives.ts"],"sourcesContent":["import { Directive, Input, OnDestroy, TemplateRef, ViewContainerRef } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { RkMenuService } from '@reskin/core/services';\r\n\r\n@Directive({\r\n selector: '[rkAuth]',\r\n})\r\nexport class RkAuthDirective implements OnDestroy {\r\n /**\r\n * 传递多个标识符时,逗号分隔,匹配按\"或者\"运算\r\n * @param condition\r\n */\r\n @Input()\r\n set rkAuth(condition: string | string[]) {\r\n this.condition = condition;\r\n this.updateView();\r\n }\r\n\r\n @Input()\r\n set rkAuthThen(templateRef: TemplateRef<any>) {\r\n this.thenTemplateRef = templateRef;\r\n this.updateView();\r\n }\r\n\r\n @Input()\r\n set rkAuthElse(templateRef: TemplateRef<any>) {\r\n this.elseTemplateRef = templateRef;\r\n this.updateView();\r\n }\r\n\r\n constructor(\r\n private menu: RkMenuService,\r\n private viewContainerRef: ViewContainerRef,\r\n public templateRef: TemplateRef<any>,\r\n ) {\r\n this.thenTemplateRef = templateRef;\r\n }\r\n\r\n private condition: string | string[] = '';\r\n private thenTemplateRef?: TemplateRef<any>;\r\n private elseTemplateRef?: TemplateRef<any>;\r\n private authSubscription?: Subscription;\r\n\r\n ngOnDestroy() {\r\n this.authSubscription?.unsubscribe();\r\n }\r\n\r\n private updateView() {\r\n this.authSubscription?.unsubscribe();\r\n this.authSubscription = this.hasAuth(this.condition).subscribe((context) => {\r\n this.viewContainerRef.clear();\r\n if (context.status) {\r\n if (this.thenTemplateRef) {\r\n this.viewContainerRef.createEmbeddedView(this.thenTemplateRef, context);\r\n }\r\n } else {\r\n if (this.elseTemplateRef) {\r\n this.viewContainerRef.createEmbeddedView(this.elseTemplateRef, context);\r\n }\r\n }\r\n });\r\n }\r\n\r\n private hasAuth(tags: string | string[]) {\r\n const tagList: string[] = typeof tags === 'string' ? [tags] : tags;\r\n return this.menu.requestData().pipe(\r\n map((json) => {\r\n const menus = json.data.filter((menu) => tagList.includes(menu.SYSTEM_RESOURCE_GUARD_ID));\r\n if (!menus.length) return { $implicit: [], status: false };\r\n return {\r\n $implicit: typeof tags === 'string' ? menus[0] : menus,\r\n status: !!menus.length,\r\n };\r\n }),\r\n );\r\n }\r\n}\r\n","import { Directive, EmbeddedViewRef, Input, OnChanges, SimpleChange, SimpleChanges, TemplateRef, ViewContainerRef } from '@angular/core';\r\n\r\n@Directive({\r\n selector: '[rkStringTemplateOutlet]',\r\n})\r\nexport class RkStringTemplateOutletDirective<_T = unknown> implements OnChanges {\r\n private embeddedViewRef: EmbeddedViewRef<any> | null = null;\r\n private context = new RkStringTemplateOutletContext();\r\n @Input() rkStringTemplateOutletContext: any | null = null;\r\n @Input() rkStringTemplateOutlet: any | TemplateRef<any> = null;\r\n\r\n static rkTemplateContextGuard<T>(_dir: RkStringTemplateOutletDirective<T>, _ctx: any): _ctx is RkStringTemplateOutletContext {\r\n return true;\r\n }\r\n\r\n private recreateView(): void {\r\n this.viewContainer.clear();\r\n const isTemplateRef = this.rkStringTemplateOutlet instanceof TemplateRef;\r\n const templateRef = (isTemplateRef ? this.rkStringTemplateOutlet : this.templateRef) as any;\r\n this.embeddedViewRef = this.viewContainer.createEmbeddedView(\r\n templateRef,\r\n isTemplateRef ? this.rkStringTemplateOutletContext : this.context,\r\n );\r\n }\r\n\r\n private updateContext(): void {\r\n const isTemplateRef = this.rkStringTemplateOutlet instanceof TemplateRef;\r\n const newCtx = isTemplateRef ? this.rkStringTemplateOutletContext : this.context;\r\n const oldCtx = this.embeddedViewRef!.context as any;\r\n if (newCtx) {\r\n for (const propName of Object.keys(newCtx)) {\r\n oldCtx[propName] = newCtx[propName];\r\n }\r\n }\r\n }\r\n\r\n constructor(\r\n private viewContainer: ViewContainerRef,\r\n private templateRef: TemplateRef<any>,\r\n ) {}\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const { rkStringTemplateOutletContext, rkStringTemplateOutlet } = changes;\r\n const shouldRecreateView = (): boolean => {\r\n let shouldOutletRecreate = false;\r\n if (rkStringTemplateOutlet) {\r\n if (rkStringTemplateOutlet.firstChange) {\r\n shouldOutletRecreate = true;\r\n } else {\r\n const isPreviousOutletTemplate = rkStringTemplateOutlet.previousValue instanceof TemplateRef;\r\n const isCurrentOutletTemplate = rkStringTemplateOutlet.currentValue instanceof TemplateRef;\r\n shouldOutletRecreate = isPreviousOutletTemplate || isCurrentOutletTemplate;\r\n }\r\n }\r\n const hasContextShapeChanged = (ctxChange: SimpleChange): boolean => {\r\n const prevCtxKeys = Object.keys(ctxChange.previousValue || {});\r\n const currCtxKeys = Object.keys(ctxChange.currentValue || {});\r\n if (prevCtxKeys.length === currCtxKeys.length) {\r\n for (const propName of currCtxKeys) {\r\n if (prevCtxKeys.indexOf(propName) === -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n };\r\n const shouldContextRecreate = rkStringTemplateOutletContext && hasContextShapeChanged(rkStringTemplateOutletContext);\r\n return shouldContextRecreate || shouldOutletRecreate;\r\n };\r\n\r\n if (rkStringTemplateOutlet) {\r\n this.context.$implicit = rkStringTemplateOutlet.currentValue;\r\n }\r\n\r\n const recreateView = shouldRecreateView();\r\n if (recreateView) {\r\n /** recreate view when context shape or outlet change **/\r\n this.recreateView();\r\n } else {\r\n /** update context **/\r\n this.updateContext();\r\n }\r\n }\r\n}\r\n\r\nexport class RkStringTemplateOutletContext {\r\n public $implicit: any;\r\n}\r\n","import { Directive, Input, OnInit, OnDestroy, Output, EventEmitter } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { ILoadResult, RkStyleLoaderService } from '@reskin/core/services';\r\n\r\n@Directive({\r\n selector: '[rkLoadStyles]',\r\n})\r\nexport class RkLoadStylesDirective implements OnInit, OnDestroy {\r\n @Input('rkLoadStyles') hrefs: string[] | string = [];\r\n\r\n // (可选) 输出加载完成事件,以便父组件可以响应\r\n @Output() stylesLoaded = new EventEmitter<ILoadResult[]>();\r\n\r\n private subscription: Subscription | undefined;\r\n private styleUrls: string[] = [];\r\n\r\n constructor(private styleLoader: RkStyleLoaderService) {}\r\n\r\n ngOnInit(): void {\r\n this.styleUrls = Array.isArray(this.hrefs) ? this.hrefs : [this.hrefs];\r\n if (this.styleUrls.length > 0) {\r\n this.subscription = this.styleLoader.load(...this.styleUrls).subscribe((results) => {\r\n this.stylesLoaded.emit(results);\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.subscription) {\r\n this.subscription.unsubscribe();\r\n }\r\n // 指令销毁时,自动调用 unload,服务内部会处理引用计数\r\n if (this.styleUrls.length > 0) {\r\n this.styleLoader.unload(...this.styleUrls);\r\n }\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { RkAuthDirective } from './auth.directive';\r\nimport { RkStringTemplateOutletDirective } from './string.template.outlet.directive';\r\nimport { RkLoadStylesDirective } from './load.styles.directive';\r\n\r\n@NgModule({\r\n declarations: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective],\r\n exports: [RkAuthDirective, RkStringTemplateOutletDirective, RkLoadStylesDirective],\r\n})\r\nexport class RkDirectivesModule {}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}