@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.
- package/bundles/reskin-core-directives.umd.js +48 -3
- package/bundles/reskin-core-directives.umd.js.map +1 -1
- package/bundles/reskin-core-services.umd.js +189 -0
- package/bundles/reskin-core-services.umd.js.map +1 -1
- package/directives/directives.module.d.ts +2 -1
- package/directives/load.styles.directive.d.ts +15 -0
- package/directives/public-api.d.ts +1 -0
- package/esm2015/directives/directives.module.js +5 -4
- package/esm2015/directives/load.styles.directive.js +43 -0
- package/esm2015/directives/public-api.js +2 -1
- package/esm2015/services/public-api.js +2 -1
- package/esm2015/services/style.loader.service.js +180 -0
- package/fesm2015/reskin-core-directives.js +45 -5
- package/fesm2015/reskin-core-directives.js.map +1 -1
- package/fesm2015/reskin-core-services.js +179 -3
- package/fesm2015/reskin-core-services.js.map +1 -1
- package/package.json +1 -1
- package/services/public-api.d.ts +1 -0
- package/services/style.loader.service.d.ts +121 -0
|
@@ -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,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,
|
|
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
|
-
|
|
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
|
-
|
|
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":";;;;;MAQa,eAAe,CAAA;AAuBxB,IAAA,WAAA,CACY,IAAmB,EACnB,gBAAkC,EACnC,WAA6B,EAAA;QAF5B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAe;QACnB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QACnC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAkB;QAKhC,IAAS,CAAA,SAAA,GAAsB,EAAE,CAAC;AAHtC,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;KACtC;AA5BD;;;AAGG;IACH,IACI,MAAM,CAAC,SAA4B,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAED,IACI,UAAU,CAAC,WAA6B,EAAA;AACxC,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAED,IACI,UAAU,CAAC,WAA6B,EAAA;AACxC,QAAA,IAAI,CAAC,eAAe,GAAG,WAAW,CAAC;QACnC,IAAI,CAAC,UAAU,EAAE,CAAC;KACrB;IAeD,WAAW,GAAA;;AACP,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,CAAC;KACxC;IAEO,UAAU,GAAA;;AACd,QAAA,CAAA,EAAA,GAAA,IAAI,CAAC,gBAAgB,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,WAAW,EAAE,CAAC;AACrC,QAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;AACvE,YAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,OAAO,CAAC,MAAM,EAAE;gBAChB,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC3E,iBAAA;AACJ,aAAA;AAAM,iBAAA;gBACH,IAAI,IAAI,CAAC,eAAe,EAAE;oBACtB,IAAI,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;AAC3E,iBAAA;AACJ,aAAA;AACL,SAAC,CAAC,CAAC;KACN;AAEO,IAAA,OAAO,CAAC,IAAuB,EAAA;AACnC,QAAA,MAAM,OAAO,GAAa,OAAO,IAAI,KAAK,QAAQ,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACnE,QAAA,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,CAC/B,GAAG,CAAC,CAAC,IAAI,KAAI;YACT,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC;YAC1F,IAAI,CAAC,KAAK,CAAC,MAAM;gBAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;YAC3D,OAAO;AACH,gBAAA,SAAS,EAAE,OAAO,IAAI,KAAK,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK;AACtD,gBAAA,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM;aACzB,CAAC;SACL,CAAC,CACL,CAAC;KACL;;6GApEQ,eAAe,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,aAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iGAAf,eAAe,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAAA,UAAA,EAAA,YAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAH3B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,UAAU;AACvB,iBAAA,CAAA;6JAOO,MAAM,EAAA,CAAA;sBADT,KAAK;gBAOF,UAAU,EAAA,CAAA;sBADb,KAAK;gBAOF,UAAU,EAAA,CAAA;sBADb,KAAK;;;MCpBG,+BAA+B,CAAA;IA+BxC,WACY,CAAA,aAA+B,EAC/B,WAA6B,EAAA;QAD7B,IAAa,CAAA,aAAA,GAAb,aAAa,CAAkB;QAC/B,IAAW,CAAA,WAAA,GAAX,WAAW,CAAkB;QAhCjC,IAAe,CAAA,eAAA,GAAgC,IAAI,CAAC;AACpD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,6BAA6B,EAAE,CAAC;QAC7C,IAA6B,CAAA,6BAAA,GAAe,IAAI,CAAC;QACjD,IAAsB,CAAA,sBAAA,GAA2B,IAAI,CAAC;KA8B3D;AA5BJ,IAAA,OAAO,sBAAsB,CAAI,IAAwC,EAAE,IAAS,EAAA;AAChF,QAAA,OAAO,IAAI,CAAC;KACf;IAEO,YAAY,GAAA;AAChB,QAAA,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;AAC3B,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,YAAY,WAAW,CAAC;AACzE,QAAA,MAAM,WAAW,IAAI,aAAa,GAAG,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,WAAW,CAAQ,CAAC;QAC5F,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,aAAa,CAAC,kBAAkB,CACxD,WAAW,EACX,aAAa,GAAG,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,OAAO,CACpE,CAAC;KACL;IAEO,aAAa,GAAA;AACjB,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,sBAAsB,YAAY,WAAW,CAAC;AACzE,QAAA,MAAM,MAAM,GAAG,aAAa,GAAG,IAAI,CAAC,6BAA6B,GAAG,IAAI,CAAC,OAAO,CAAC;AACjF,QAAA,MAAM,MAAM,GAAG,IAAI,CAAC,eAAgB,CAAC,OAAc,CAAC;AACpD,QAAA,IAAI,MAAM,EAAE;YACR,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBACxC,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvC,aAAA;AACJ,SAAA;KACJ;AAOD,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,MAAM,EAAE,6BAA6B,EAAE,sBAAsB,EAAE,GAAG,OAAO,CAAC;QAC1E,MAAM,kBAAkB,GAAG,MAAc;YACrC,IAAI,oBAAoB,GAAG,KAAK,CAAC;AACjC,YAAA,IAAI,sBAAsB,EAAE;gBACxB,IAAI,sBAAsB,CAAC,WAAW,EAAE;oBACpC,oBAAoB,GAAG,IAAI,CAAC;AAC/B,iBAAA;AAAM,qBAAA;AACH,oBAAA,MAAM,wBAAwB,GAAG,sBAAsB,CAAC,aAAa,YAAY,WAAW,CAAC;AAC7F,oBAAA,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,YAAY,YAAY,WAAW,CAAC;AAC3F,oBAAA,oBAAoB,GAAG,wBAAwB,IAAI,uBAAuB,CAAC;AAC9E,iBAAA;AACJ,aAAA;AACD,YAAA,MAAM,sBAAsB,GAAG,CAAC,SAAuB,KAAa;AAChE,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC;AAC/D,gBAAA,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;AAC9D,gBAAA,IAAI,WAAW,CAAC,MAAM,KAAK,WAAW,CAAC,MAAM,EAAE;AAC3C,oBAAA,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE;wBAChC,IAAI,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AACtC,4BAAA,OAAO,IAAI,CAAC;AACf,yBAAA;AACJ,qBAAA;AACD,oBAAA,OAAO,KAAK,CAAC;AAChB,iBAAA;AAAM,qBAAA;AACH,oBAAA,OAAO,IAAI,CAAC;AACf,iBAAA;AACL,aAAC,CAAC;YACF,MAAM,qBAAqB,GAAG,6BAA6B,IAAI,sBAAsB,CAAC,6BAA6B,CAAC,CAAC;YACrH,OAAO,qBAAqB,IAAI,oBAAoB,CAAC;AACzD,SAAC,CAAC;AAEF,QAAA,IAAI,sBAAsB,EAAE;YACxB,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,sBAAsB,CAAC,YAAY,CAAC;AAChE,SAAA;AAED,QAAA,MAAM,YAAY,GAAG,kBAAkB,EAAE,CAAC;AAC1C,QAAA,IAAI,YAAY,EAAE;;YAEd,IAAI,CAAC,YAAY,EAAE,CAAC;AACvB,SAAA;AAAM,aAAA;;YAEH,IAAI,CAAC,aAAa,EAAE,CAAC;AACxB,SAAA;KACJ;;6HA/EQ,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,WAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;iHAA/B,+BAA+B,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,EAAA,6BAAA,EAAA,+BAAA,EAAA,sBAAA,EAAA,wBAAA,EAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBAH3C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,0BAA0B;AACvC,iBAAA,CAAA;iIAIY,6BAA6B,EAAA,CAAA;sBAArC,KAAK;gBACG,sBAAsB,EAAA,CAAA;sBAA9B,KAAK;;MA8EG,6BAA6B,CAAA;AAEzC;;MClFY,qBAAqB,CAAA;AAS9B,IAAA,WAAA,CAAoB,WAAiC,EAAA;QAAjC,IAAW,CAAA,WAAA,GAAX,WAAW,CAAsB;QAR9B,IAAK,CAAA,KAAA,GAAsB,EAAE,CAAC;;AAG3C,QAAA,IAAA,CAAA,YAAY,GAAG,IAAI,YAAY,EAAiB,CAAC;QAGnD,IAAS,CAAA,SAAA,GAAa,EAAE,CAAC;KAEwB;IAEzD,QAAQ,GAAA;QACJ,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACvE,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,KAAI;AAC/E,gBAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,aAAC,CAAC,CAAC;AACN,SAAA;KACJ;IAED,WAAW,GAAA;QACP,IAAI,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;AACnC,SAAA;;AAED,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC3B,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC;AAC9C,SAAA;KACJ;;mHA5BQ,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,oBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;uGAArB,qBAAqB,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,CAAA,cAAA,EAAA,OAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,YAAA,EAAA,cAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAHjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC7B,iBAAA,CAAA;2GAE0B,KAAK,EAAA,CAAA;sBAA3B,KAAK;uBAAC,cAAc,CAAA;gBAGX,YAAY,EAAA,CAAA;sBAArB,MAAM;;;MCFE,kBAAkB,CAAA;;gHAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;iHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAHZ,eAAe,EAAE,+BAA+B,EAAE,qBAAqB,CAAA,EAAA,OAAA,EAAA,CAC5E,eAAe,EAAE,+BAA+B,EAAE,qBAAqB,CAAA,EAAA,CAAA,CAAA;iHAExE,kBAAkB,EAAA,CAAA,CAAA;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACN,oBAAA,YAAY,EAAE,CAAC,eAAe,EAAE,+BAA+B,EAAE,qBAAqB,CAAC;AACvF,oBAAA,OAAO,EAAE,CAAC,eAAe,EAAE,+BAA+B,EAAE,qBAAqB,CAAC;AACrF,iBAAA,CAAA;;;ACRD;;AAEG;;;;"}
|