@solar-angular/platform-browser 1.0.0
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/README.md +7 -0
- package/esm2022/file-manager.mjs +45 -0
- package/esm2022/fullscreen.service.mjs +35 -0
- package/esm2022/image-compressor.mjs +169 -0
- package/esm2022/index.mjs +7 -0
- package/esm2022/resource-loader.mjs +44 -0
- package/esm2022/solar-angular-platform-browser.mjs +5 -0
- package/esm2022/spreadsheet.service.mjs +282 -0
- package/esm2022/storage/index.mjs +3 -0
- package/esm2022/storage/local-storage.mjs +40 -0
- package/esm2022/storage/session-storage.mjs +41 -0
- package/fesm2022/solar-angular-platform-browser.mjs +643 -0
- package/fesm2022/solar-angular-platform-browser.mjs.map +1 -0
- package/file-manager.d.ts +17 -0
- package/fullscreen.service.d.ts +17 -0
- package/image-compressor.d.ts +62 -0
- package/index.d.ts +6 -0
- package/package.json +28 -0
- package/resource-loader.d.ts +8 -0
- package/spreadsheet.service.d.ts +55 -0
- package/storage/index.d.ts +2 -0
- package/storage/local-storage.d.ts +22 -0
- package/storage/session-storage.d.ts +23 -0
package/README.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class FileManager {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.document = inject(DOCUMENT);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Opens a file selection dialog.
|
|
10
|
+
* @param options - Options for the file selection.
|
|
11
|
+
* @returns A promise that resolves to an array of selected files.
|
|
12
|
+
* @see https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
|
|
13
|
+
*/
|
|
14
|
+
pick(options) {
|
|
15
|
+
const input = this.document.createElement('input');
|
|
16
|
+
input.type = 'file';
|
|
17
|
+
input.accept = options.accept || '';
|
|
18
|
+
input.multiple = !!options.multiple;
|
|
19
|
+
return new Promise((resolve, reject) => {
|
|
20
|
+
input.onchange = () => {
|
|
21
|
+
resolve(Array.from(input.files || []));
|
|
22
|
+
};
|
|
23
|
+
input.onerror = reject;
|
|
24
|
+
input.click();
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
async download(url, filename) {
|
|
28
|
+
const response = await fetch(url);
|
|
29
|
+
const blob = await response.blob();
|
|
30
|
+
const anchor = this.document.createElement('a');
|
|
31
|
+
anchor.href = URL.createObjectURL(blob);
|
|
32
|
+
anchor.download = filename ?? new URL(url).pathname.split('/').pop();
|
|
33
|
+
anchor.click();
|
|
34
|
+
return blob;
|
|
35
|
+
}
|
|
36
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
37
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileManager, providedIn: 'root' }); }
|
|
38
|
+
}
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FileManager, decorators: [{
|
|
40
|
+
type: Injectable,
|
|
41
|
+
args: [{
|
|
42
|
+
providedIn: 'root'
|
|
43
|
+
}]
|
|
44
|
+
}] });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvZmlsZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLFdBQVc7SUFIeEI7UUFJbUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQWlDOUM7SUEvQkM7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsT0FBZ0Q7UUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDcEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBRXBDLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDN0MsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUU7Z0JBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUM7WUFDRixLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUN2QixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsUUFBaUI7UUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFaEQsTUFBTSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3hDLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFHLENBQUM7UUFDdEUsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDOytHQWpDVSxXQUFXO21IQUFYLFdBQVcsY0FGVixNQUFNOzs0RkFFUCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBGaWxlTWFuYWdlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIC8qKlxuICAgKiBPcGVucyBhIGZpbGUgc2VsZWN0aW9uIGRpYWxvZy5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgZmlsZSBzZWxlY3Rpb24uXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHRvIGFuIGFycmF5IG9mIHNlbGVjdGVkIGZpbGVzLlxuICAgKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL3poLUNOL2RvY3MvV2ViL0hUVFAvQmFzaWNzX29mX0hUVFAvTUlNRV90eXBlcy9Db21tb25fdHlwZXNcbiAgICovXG4gIHBpY2sob3B0aW9uczogeyBhY2NlcHQ/OiBzdHJpbmc7IG11bHRpcGxlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgaW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICBpbnB1dC5hY2NlcHQgPSBvcHRpb25zLmFjY2VwdCB8fCAnJztcbiAgICBpbnB1dC5tdWx0aXBsZSA9ICEhb3B0aW9ucy5tdWx0aXBsZTtcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxGaWxlW10+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlucHV0Lm9uY2hhbmdlID0gKCkgPT4ge1xuICAgICAgICByZXNvbHZlKEFycmF5LmZyb20oaW5wdXQuZmlsZXMgfHwgW10pKTtcbiAgICAgIH07XG4gICAgICBpbnB1dC5vbmVycm9yID0gcmVqZWN0O1xuICAgICAgaW5wdXQuY2xpY2soKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkKHVybDogc3RyaW5nLCBmaWxlbmFtZT86IHN0cmluZykge1xuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsKTtcbiAgICBjb25zdCBibG9iID0gYXdhaXQgcmVzcG9uc2UuYmxvYigpO1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuXG4gICAgYW5jaG9yLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGFuY2hvci5kb3dubG9hZCA9IGZpbGVuYW1lID8/IG5ldyBVUkwodXJsKS5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpITtcbiAgICBhbmNob3IuY2xpY2soKTtcbiAgICByZXR1cm4gYmxvYjtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class FullscreenService {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.document = inject(DOCUMENT);
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* 切换全屏
|
|
10
|
+
* @param target
|
|
11
|
+
* @param options
|
|
12
|
+
*/
|
|
13
|
+
toggle(target = this.document.documentElement, options) {
|
|
14
|
+
if (this.isFullscreen(target)) {
|
|
15
|
+
return this.document.exitFullscreen();
|
|
16
|
+
}
|
|
17
|
+
return target.requestFullscreen(options);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 元素是否为全屏
|
|
21
|
+
* @param target
|
|
22
|
+
*/
|
|
23
|
+
isFullscreen(target = this.document.documentElement) {
|
|
24
|
+
return target === this.document.fullscreenElement;
|
|
25
|
+
}
|
|
26
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FullscreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
27
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FullscreenService, providedIn: 'root' }); }
|
|
28
|
+
}
|
|
29
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FullscreenService, decorators: [{
|
|
30
|
+
type: Injectable,
|
|
31
|
+
args: [{
|
|
32
|
+
providedIn: 'root'
|
|
33
|
+
}]
|
|
34
|
+
}] });
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbHNjcmVlbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvZnVsbHNjcmVlbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUltQixhQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBc0J4RDtJQXBCQzs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFNBQXNCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLE9BQTJCO1FBQ3JGLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxTQUFzQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWU7UUFDOUQsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztJQUNwRCxDQUFDOytHQXRCVSxpQkFBaUI7bUhBQWpCLGlCQUFpQixjQUZoQixNQUFNOzs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZ1bGxzY3JlZW5TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIC8qKlxuICAgKiDliIfmjaLlhajlsY9cbiAgICogQHBhcmFtIHRhcmdldFxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgdG9nZ2xlKHRhcmdldDogSFRNTEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgb3B0aW9ucz86IEZ1bGxzY3JlZW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNGdWxsc2NyZWVuKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldC5yZXF1ZXN0RnVsbHNjcmVlbihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlhYPntKDmmK/lkKbkuLrlhajlsY9cbiAgICogQHBhcmFtIHRhcmdldFxuICAgKi9cbiAgaXNGdWxsc2NyZWVuKHRhcmdldDogSFRNTEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0YXJnZXQgPT09IHRoaXMuZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { Injectable, InjectionToken, inject } from '@angular/core';
|
|
3
|
+
import { Observable, from } from 'rxjs';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
/**
|
|
6
|
+
* 目前 NG 库 中还不能包含 WebWorker,这里使用 DI 的方式,由 App 提供 WebWorker:
|
|
7
|
+
* ```ts
|
|
8
|
+
* {
|
|
9
|
+
* provide: IMAGE_COMPRESSOR_WEBWORKER_FACTORY,
|
|
10
|
+
* useValue: () => new Worker(new URL('xxx.worker', import.meta.url), { type: 'module' })
|
|
11
|
+
* }
|
|
12
|
+
* ```
|
|
13
|
+
* https://github.com/angular/angular-cli/issues/15059
|
|
14
|
+
*/
|
|
15
|
+
export const SUN_IMAGE_COMPRESSOR_WORKER_FACTORY = new InjectionToken('ImageCompressorWorkerFactory');
|
|
16
|
+
export class ImageCompressor {
|
|
17
|
+
constructor() {
|
|
18
|
+
this.document = inject(DOCUMENT);
|
|
19
|
+
this.workerFactory = inject(SUN_IMAGE_COMPRESSOR_WORKER_FACTORY, { optional: true });
|
|
20
|
+
this.canvas = this.document.createElement('canvas');
|
|
21
|
+
}
|
|
22
|
+
/** 最佳图片格式,优先级:webp -> jpeg -> png */
|
|
23
|
+
get format() {
|
|
24
|
+
return this._format || (this._format = this.isSupportWEBP ? 'webp' : this.isSupportJPEG ? 'jpeg' : 'png');
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 是否支持WebP格式
|
|
28
|
+
*/
|
|
29
|
+
get isSupportWEBP() {
|
|
30
|
+
try {
|
|
31
|
+
return this.canvas.toDataURL('image/webp').startsWith('data:image/webp');
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 是否支持JPEG格式
|
|
39
|
+
*/
|
|
40
|
+
get isSupportJPEG() {
|
|
41
|
+
try {
|
|
42
|
+
return this.canvas.toDataURL('image/jpeg').startsWith('data:image/jpeg');
|
|
43
|
+
}
|
|
44
|
+
catch (e) {
|
|
45
|
+
return false;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* 压缩图片
|
|
50
|
+
* @param src 图片URL
|
|
51
|
+
* @param quality 质量
|
|
52
|
+
*/
|
|
53
|
+
compress(src, quality = 0.85) {
|
|
54
|
+
const format = this.format;
|
|
55
|
+
const img = new Image();
|
|
56
|
+
img.crossOrigin = 'anonymous';
|
|
57
|
+
return new Observable((observer) => {
|
|
58
|
+
img.onload = () => {
|
|
59
|
+
this.resize(img);
|
|
60
|
+
(('OffscreenCanvas' in window && this.workerFactory) ? this.drawInWorker(img, quality, format) : this.draw(img, quality, format)).subscribe(blob => {
|
|
61
|
+
observer.next(blob);
|
|
62
|
+
observer.complete();
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
img.onerror = (error) => {
|
|
66
|
+
observer.error(error);
|
|
67
|
+
observer.complete();
|
|
68
|
+
};
|
|
69
|
+
img.src = src;
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 调整图像尺寸
|
|
74
|
+
* @param img
|
|
75
|
+
*/
|
|
76
|
+
resize(img) {
|
|
77
|
+
const maxWidth = 1280;
|
|
78
|
+
const maxHeight = 720;
|
|
79
|
+
if (img.width > maxWidth) {
|
|
80
|
+
const divisor = img.width / maxWidth;
|
|
81
|
+
img.width /= divisor;
|
|
82
|
+
img.height /= divisor;
|
|
83
|
+
}
|
|
84
|
+
if (img.height > maxHeight) {
|
|
85
|
+
const divisor = img.height / maxHeight;
|
|
86
|
+
img.width /= divisor;
|
|
87
|
+
img.height /= divisor;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* 在主线程中绘制
|
|
92
|
+
* @param img 图像
|
|
93
|
+
* @param quality 质量
|
|
94
|
+
* @param format 格式
|
|
95
|
+
*/
|
|
96
|
+
draw(img, quality, format) {
|
|
97
|
+
return new Observable(observer => {
|
|
98
|
+
const canvas = document.createElement('canvas');
|
|
99
|
+
canvas.width = img.width;
|
|
100
|
+
canvas.height = img.height;
|
|
101
|
+
const ctx = canvas.getContext('2d');
|
|
102
|
+
ctx.drawImage(img, 0, 0, img.width, img.height);
|
|
103
|
+
canvas.toBlob(blob => {
|
|
104
|
+
observer.next(blob);
|
|
105
|
+
observer.complete();
|
|
106
|
+
}, 'image/' + format, quality);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 在WebWorker线程中绘制
|
|
111
|
+
* @param img 图像
|
|
112
|
+
* @param quality 质量
|
|
113
|
+
* @param format 格式
|
|
114
|
+
*/
|
|
115
|
+
drawInWorker(img, quality, format) {
|
|
116
|
+
const worker = this.workerFactory();
|
|
117
|
+
return new Observable(observer => {
|
|
118
|
+
const complete = () => {
|
|
119
|
+
worker.terminate();
|
|
120
|
+
observer.complete();
|
|
121
|
+
};
|
|
122
|
+
this.createImageBitmap(img).subscribe({
|
|
123
|
+
next: imageBitmap => {
|
|
124
|
+
worker.onmessage = ({ data }) => {
|
|
125
|
+
observer.next(data);
|
|
126
|
+
complete();
|
|
127
|
+
};
|
|
128
|
+
worker.onerror = error => {
|
|
129
|
+
observer.error(error);
|
|
130
|
+
complete();
|
|
131
|
+
};
|
|
132
|
+
worker.postMessage({ quality, format, imageBitmap }, [imageBitmap]);
|
|
133
|
+
},
|
|
134
|
+
error: error => {
|
|
135
|
+
observer.error(error);
|
|
136
|
+
complete();
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* 创建图像位图
|
|
143
|
+
* @param img 图像源
|
|
144
|
+
*/
|
|
145
|
+
createImageBitmap(img) {
|
|
146
|
+
return from(window.createImageBitmap(img, {
|
|
147
|
+
resizeWidth: img.width,
|
|
148
|
+
resizeHeight: img.height
|
|
149
|
+
}).then(bitmap => {
|
|
150
|
+
// 某些情况下,图片宽度与高度会调换,因此这里要做一个判断
|
|
151
|
+
if (bitmap.width !== img.width) {
|
|
152
|
+
return window.createImageBitmap(img, {
|
|
153
|
+
resizeWidth: img.height,
|
|
154
|
+
resizeHeight: img.width
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return bitmap;
|
|
158
|
+
}));
|
|
159
|
+
}
|
|
160
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageCompressor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
161
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageCompressor, providedIn: 'root' }); }
|
|
162
|
+
}
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ImageCompressor, decorators: [{
|
|
164
|
+
type: Injectable,
|
|
165
|
+
args: [{
|
|
166
|
+
providedIn: 'root'
|
|
167
|
+
}]
|
|
168
|
+
}] });
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY29tcHJlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLWJyb3dzZXIvc3JjL2ltYWdlLWNvbXByZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFeEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsSUFBSSxjQUFjLENBQ25FLDhCQUE4QixDQUMvQixDQUFDO0FBS0YsTUFBTSxPQUFPLGVBQWU7SUFINUI7UUFLVSxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLG1DQUFtQyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEYsV0FBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBK0p4RDtJQTdKQyxxQ0FBcUM7SUFDckMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxhQUFhO1FBQ2YsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENB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ZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IEluamVjdGFibGUsIEluamVjdGlvblRva2VuLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDnm67liY0gTkcg5bqTIOS4rei/mOS4jeiDveWMheWQqyBXZWJXb3JrZXLvvIzov5nph4zkvb/nlKggREkg55qE5pa55byP77yM55SxIEFwcCDmj5DkvpsgV2ViV29ya2Vy77yaXG4gKiBgYGB0c1xuICoge1xuICogICAgcHJvdmlkZTogSU1BR0VfQ09NUFJFU1NPUl9XRUJXT1JLRVJfRkFDVE9SWSxcbiAqICAgIHVzZVZhbHVlOiAoKSA9PiBuZXcgV29ya2VyKG5ldyBVUkwoJ3h4eC53b3JrZXInLCBpbXBvcnQubWV0YS51cmwpLCB7IHR5cGU6ICdtb2R1bGUnIH0pXG4gKiB9XG4gKiBgYGBcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXItY2xpL2lzc3Vlcy8xNTA1OVxuICovXG5leHBvcnQgY29uc3QgU1VOX0lNQUdFX0NPTVBSRVNTT1JfV09SS0VSX0ZBQ1RPUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48KCkgPT4gV29ya2VyPihcbiAgJ0ltYWdlQ29tcHJlc3NvcldvcmtlckZhY3RvcnknXG4pO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBJbWFnZUNvbXByZXNzb3Ige1xuICBwcml2YXRlIF9mb3JtYXQ/OiAnd2VicCcgfCAnanBlZycgfCAncG5nJztcbiAgcHJpdmF0ZSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG4gIHByaXZhdGUgd29ya2VyRmFjdG9yeSA9IGluamVjdChTVU5fSU1BR0VfQ09NUFJFU1NPUl9XT1JLRVJfRkFDVE9SWSwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgcHJpdmF0ZSBjYW52YXMgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO1xuXG4gIC8qKiDmnIDkvbPlm77niYfmoLzlvI/vvIzkvJjlhYjnuqfvvJp3ZWJwIC0+IGpwZWcgLT4gcG5nICovXG4gIGdldCBmb3JtYXQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2Zvcm1hdCB8fCAodGhpcy5fZm9ybWF0ID0gdGhpcy5pc1N1cHBvcnRXRUJQID8gJ3dlYnAnIDogdGhpcy5pc1N1cHBvcnRKUEVHID8gJ2pwZWcnIDogJ3BuZycpO1xuICB9XG5cbiAgLyoqXG4gICAqIOaYr+WQpuaUr+aMgVdlYlDmoLzlvI9cbiAgICovXG4gIGdldCBpc1N1cHBvcnRXRUJQKCk6IGJvb2xlYW4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5jYW52YXMudG9EYXRhVVJMKCdpbWFnZS93ZWJwJykuc3RhcnRzV2l0aCgnZGF0YTppbWFnZS93ZWJwJyk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiDmmK/lkKbmlK/mjIFKUEVH5qC85byPXG4gICAqL1xuICBnZXQgaXNTdXBwb3J0SlBFRygpOiBib29sZWFuIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpLnN0YXJ0c1dpdGgoJ2RhdGE6aW1hZ2UvanBlZycpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Y6L57yp5Zu+54mHXG4gICAqIEBwYXJhbSBzcmMg5Zu+54mHVVJMXG4gICAqIEBwYXJhbSBxdWFsaXR5IOi0qOmHj1xuICAgKi9cbiAgY29tcHJlc3Moc3JjOiBzdHJpbmcsIHF1YWxpdHkgPSAwLjg1KTogT2JzZXJ2YWJsZTxCbG9iPiB7XG4gICAgY29uc3QgZm9ybWF0ID0gdGhpcy5mb3JtYXQ7XG4gICAgY29uc3QgaW1nID0gbmV3IEltYWdlKCk7XG4gICAgaW1nLmNyb3NzT3JpZ2luID0gJ2Fub255bW91cyc7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8QmxvYj4oKG9ic2VydmVyKSA9PiB7XG4gICAgICBpbWcub25sb2FkID0gKCkgPT4ge1xuICAgICAgICB0aGlzLnJlc2l6ZShpbWcpO1xuXG4gICAgICAgICgoJ09mZnNjcmVlbkNhbnZhcycgaW4gd2luZG93ICYmIHRoaXMud29ya2VyRmFjdG9yeSkgPyB0aGlzLmRyYXdJbldvcmtlcihpbWcsIHF1YWxpdHksIGZvcm1hdCkgOiB0aGlzLmRyYXcoaW1nLCBxdWFsaXR5LCBmb3JtYXQpKS5zdWJzY3JpYmUoYmxvYiA9PiB7XG4gICAgICAgICAgb2JzZXJ2ZXIubmV4dChibG9iKTtcbiAgICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIGltZy5vbmVycm9yID0gKGVycm9yOiBFdmVudCB8IHN0cmluZykgPT4ge1xuICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgIG9ic2VydmVyLmNvbXBsZXRlKCk7XG4gICAgICB9O1xuXG4gICAgICBpbWcuc3JjID0gc3JjO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOiwg+aVtOWbvuWDj+WwuuWvuFxuICAgKiBAcGFyYW0gaW1nXG4gICAqL1xuICBwcml2YXRlIHJlc2l6ZShpbWc6IEhUTUxJbWFnZUVsZW1lbnQpIHtcbiAgICBjb25zdCBtYXhXaWR0aCA9IDEyODA7XG4gICAgY29uc3QgbWF4SGVpZ2h0ID0gNzIwO1xuXG4gICAgaWYgKGltZy53aWR0aCA+IG1heFdpZHRoKSB7XG4gICAgICBjb25zdCBkaXZpc29yID0gaW1nLndpZHRoIC8gbWF4V2lkdGg7XG4gICAgICBpbWcud2lkdGggLz0gZGl2aXNvcjtcbiAgICAgIGltZy5oZWlnaHQgLz0gZGl2aXNvcjtcbiAgICB9XG5cbiAgICBpZiAoaW1nLmhlaWdodCA+IG1heEhlaWdodCkge1xuICAgICAgY29uc3QgZGl2aXNvciA9IGltZy5oZWlnaHQgLyBtYXhIZWlnaHQ7XG4gICAgICBpbWcud2lkdGggLz0gZGl2aXNvcjtcbiAgICAgIGltZy5oZWlnaHQgLz0gZGl2aXNvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICog5Zyo5Li757q/56iL5Lit57uY5Yi2XG4gICAqIEBwYXJhbSBpbWcg5Zu+5YOPXG4gICAqIEBwYXJhbSBxdWFsaXR5IOi0qOmHj1xuICAgKiBAcGFyYW0gZm9ybWF0IOagvOW8j1xuICAgKi9cbiAgZHJhdyhpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHF1YWxpdHk6IG51bWJlciwgZm9ybWF0OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8QmxvYj4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICBjYW52YXMud2lkdGggPSBpbWcud2lkdGg7XG4gICAgICBjYW52YXMuaGVpZ2h0ID0gaW1nLmhlaWdodDtcblxuICAgICAgY29uc3QgY3R4ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykhO1xuICAgICAgY3R4LmRyYXdJbWFnZShpbWcsIDAsIDAsIGltZy53aWR0aCwgaW1nLmhlaWdodCk7XG5cbiAgICAgIGNhbnZhcy50b0Jsb2IoYmxvYiA9PiB7XG4gICAgICAgIG9ic2VydmVyLm5leHQoYmxvYiEpO1xuICAgICAgICBvYnNlcnZlci5jb21wbGV0ZSgpO1xuICAgICAgfSwgJ2ltYWdlLycgKyBmb3JtYXQsIHF1YWxpdHkpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIOWcqFdlYldvcmtlcue6v+eoi+S4ree7mOWItlxuICAgKiBAcGFyYW0gaW1nIOWbvuWDj1xuICAgKiBAcGFyYW0gcXVhbGl0eSDotKjph49cbiAgICogQHBhcmFtIGZvcm1hdCDmoLzlvI9cbiAgICovXG4gIGRyYXdJbldvcmtlcihpbWc6IEhUTUxJbWFnZUVsZW1lbnQsIHF1YWxpdHk6IG51bWJlciwgZm9ybWF0OiBzdHJpbmcpIHtcbiAgICBjb25zdCB3b3JrZXIgPSB0aGlzLndvcmtlckZhY3RvcnkhKCk7XG5cbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8QmxvYj4ob2JzZXJ2ZXIgPT4ge1xuICAgICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgb2JzZXJ2ZXIuY29tcGxldGUoKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuY3JlYXRlSW1hZ2VCaXRtYXAoaW1nKS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiBpbWFnZUJpdG1hcCA9PiB7XG4gICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9ICh7IGRhdGEgfSkgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIubmV4dChkYXRhKTtcbiAgICAgICAgICAgIGNvbXBsZXRlKCk7XG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHdvcmtlci5vbmVycm9yID0gZXJyb3IgPT4ge1xuICAgICAgICAgICAgb2JzZXJ2ZXIuZXJyb3IoZXJyb3IpO1xuICAgICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHsgcXVhbGl0eSwgZm9ybWF0LCBpbWFnZUJpdG1hcCB9LCBbaW1hZ2VCaXRtYXBdKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IGVycm9yID0+IHtcbiAgICAgICAgICBvYnNlcnZlci5lcnJvcihlcnJvcik7XG4gICAgICAgICAgY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICog5Yib5bu65Zu+5YOP5L2N5Zu+XG4gICAqIEBwYXJhbSBpbWcg5Zu+5YOP5rqQXG4gICAqL1xuICBjcmVhdGVJbWFnZUJpdG1hcChpbWc6IEhUTUxJbWFnZUVsZW1lbnQpOiBPYnNlcnZhYmxlPEltYWdlQml0bWFwPiB7XG4gICAgcmV0dXJuIGZyb20od2luZG93LmNyZWF0ZUltYWdlQml0bWFwKGltZywge1xuICAgICAgcmVzaXplV2lkdGg6IGltZy53aWR0aCxcbiAgICAgIHJlc2l6ZUhlaWdodDogaW1nLmhlaWdodFxuICAgIH0pLnRoZW4oYml0bWFwID0+IHtcbiAgICAgIC8vIOafkOS6m+aDheWGteS4i++8jOWbvueJh+WuveW6puS4jumrmOW6puS8muiwg+aNou+8jOWboOatpOi/memHjOimgeWBmuS4gOS4quWIpOaWrVxuICAgICAgaWYgKGJpdG1hcC53aWR0aCAhPT0gaW1nLndpZHRoKSB7XG4gICAgICAgIHJldHVybiB3aW5kb3cuY3JlYXRlSW1hZ2VCaXRtYXAoaW1nLCB7XG4gICAgICAgICAgcmVzaXplV2lkdGg6IGltZy5oZWlnaHQsXG4gICAgICAgICAgcmVzaXplSGVpZ2h0OiBpbWcud2lkdGhcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBiaXRtYXA7XG4gICAgfSkpO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from './file-manager';
|
|
2
|
+
export * from './fullscreen.service';
|
|
3
|
+
export * from './image-compressor';
|
|
4
|
+
export * from './resource-loader';
|
|
5
|
+
export * from './spreadsheet.service';
|
|
6
|
+
export * from './storage';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9wbGF0Zm9ybS1icm93c2VyL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsc0JBQXNCLENBQUM7QUFDckMsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLG1CQUFtQixDQUFDO0FBQ2xDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxXQUFXLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ZpbGUtbWFuYWdlcic7XG5leHBvcnQgKiBmcm9tICcuL2Z1bGxzY3JlZW4uc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL2ltYWdlLWNvbXByZXNzb3InO1xuZXhwb3J0ICogZnJvbSAnLi9yZXNvdXJjZS1sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zcHJlYWRzaGVldC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc3RvcmFnZSc7XG4iXX0=
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { DOCUMENT } from '@angular/common';
|
|
2
|
+
import { inject, Injectable } from '@angular/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export class ResourceLoader {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.document = inject(DOCUMENT);
|
|
7
|
+
}
|
|
8
|
+
loadScript(url) {
|
|
9
|
+
return new Promise((resolve, reject) => {
|
|
10
|
+
const script = this.document.createElement('script');
|
|
11
|
+
script.type = 'text/javascript';
|
|
12
|
+
script.src = url;
|
|
13
|
+
script.onload = () => resolve();
|
|
14
|
+
script.onerror = () => {
|
|
15
|
+
this.document.head.removeChild(script);
|
|
16
|
+
reject();
|
|
17
|
+
};
|
|
18
|
+
this.document.head.appendChild(script);
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
loadStylesheet(url) {
|
|
22
|
+
return new Promise((resolve, reject) => {
|
|
23
|
+
const link = this.document.createElement('link');
|
|
24
|
+
link.rel = 'stylesheet';
|
|
25
|
+
link.type = 'text/css';
|
|
26
|
+
link.href = url;
|
|
27
|
+
link.onload = () => resolve();
|
|
28
|
+
link.onerror = () => {
|
|
29
|
+
this.document.head.removeChild(link);
|
|
30
|
+
reject();
|
|
31
|
+
};
|
|
32
|
+
this.document.head.appendChild(link);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResourceLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
36
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResourceLoader, providedIn: 'root' }); }
|
|
37
|
+
}
|
|
38
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ResourceLoader, decorators: [{
|
|
39
|
+
type: Injectable,
|
|
40
|
+
args: [{
|
|
41
|
+
providedIn: 'root'
|
|
42
|
+
}]
|
|
43
|
+
}] });
|
|
44
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvcmVzb3VyY2UtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLGNBQWM7SUFIM0I7UUFJbUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQWtDOUM7SUFoQ0MsVUFBVSxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxNQUFNLE1BQU0sR0FBc0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEUsTUFBTSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztZQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUVqQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFXO1FBQ3hCLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxJQUFJLEdBQW9CLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBRWhCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsTUFBTSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOytHQWxDVSxjQUFjO21IQUFkLGNBQWMsY0FGYixNQUFNOzs0RkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUxvYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIGxvYWRTY3JpcHQodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgc2NyaXB0LnNyYyA9IHVybDtcblxuICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgcmVqZWN0KCk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRTdHlsZXNoZWV0KHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGxpbms6IEhUTUxMaW5rRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgbGluay5ocmVmID0gdXJsO1xuXG4gICAgICBsaW5rLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgIGxpbmsub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICByZWplY3QoKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICB9KTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sYXItYW5ndWxhci1wbGF0Zm9ybS1icm93c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvc29sYXItYW5ndWxhci1wbGF0Zm9ybS1icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
|