@solar-angular/platform-browser 19.4.2 → 20.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
- import { DOCUMENT, DatePipe } from '@angular/common';
2
1
  import * as i0 from '@angular/core';
3
- import { inject, Injectable, InjectionToken, LOCALE_ID } from '@angular/core';
2
+ import { inject, DOCUMENT, Injectable, InjectionToken, LOCALE_ID } from '@angular/core';
4
3
  import { Observable, from, defer, map, shareReplay, firstValueFrom } from 'rxjs';
4
+ import { DatePipe } from '@angular/common';
5
5
 
6
6
  class FileManager {
7
7
  constructor() {
@@ -40,10 +40,10 @@ class FileManager {
40
40
  anchor.download = filename;
41
41
  anchor.click();
42
42
  }
43
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FileManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FileManager, providedIn: 'root' }); }
43
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: FileManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
44
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: FileManager, providedIn: 'root' }); }
45
45
  }
46
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FileManager, decorators: [{
46
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: FileManager, decorators: [{
47
47
  type: Injectable,
48
48
  args: [{
49
49
  providedIn: 'root'
@@ -72,10 +72,10 @@ class FullscreenService {
72
72
  isFullscreen(target = this.document.documentElement) {
73
73
  return target === this.document.fullscreenElement;
74
74
  }
75
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FullscreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
76
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FullscreenService, providedIn: 'root' }); }
75
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: FullscreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
76
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: FullscreenService, providedIn: 'root' }); }
77
77
  }
78
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: FullscreenService, decorators: [{
78
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: FullscreenService, decorators: [{
79
79
  type: Injectable,
80
80
  args: [{
81
81
  providedIn: 'root'
@@ -237,10 +237,10 @@ class ImageCompressor {
237
237
  return bitmap;
238
238
  }));
239
239
  }
240
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ImageCompressor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
241
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ImageCompressor, providedIn: 'root' }); }
240
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ImageCompressor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
241
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ImageCompressor, providedIn: 'root' }); }
242
242
  }
243
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ImageCompressor, decorators: [{
243
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ImageCompressor, decorators: [{
244
244
  type: Injectable,
245
245
  args: [{
246
246
  providedIn: 'root'
@@ -278,10 +278,10 @@ class ResourceLoader {
278
278
  this.document.head.appendChild(link);
279
279
  });
280
280
  }
281
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ResourceLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
282
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ResourceLoader, providedIn: 'root' }); }
281
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ResourceLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
282
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ResourceLoader, providedIn: 'root' }); }
283
283
  }
284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: ResourceLoader, decorators: [{
284
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ResourceLoader, decorators: [{
285
285
  type: Injectable,
286
286
  args: [{
287
287
  providedIn: 'root'
@@ -499,10 +499,10 @@ class SpreadsheetService {
499
499
  const blob = new Blob([excelData], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" /* MediaType.Xlsx */ });
500
500
  this.fileManager.save(blob, fileName + '.xlsx');
501
501
  }
502
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SpreadsheetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
503
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SpreadsheetService, providedIn: 'root' }); }
502
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SpreadsheetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
503
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SpreadsheetService, providedIn: 'root' }); }
504
504
  }
505
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SpreadsheetService, decorators: [{
505
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SpreadsheetService, decorators: [{
506
506
  type: Injectable,
507
507
  args: [{
508
508
  providedIn: 'root'
@@ -593,10 +593,10 @@ class LocalStorage {
593
593
  remove(key) {
594
594
  this.storage.removeItem(key);
595
595
  }
596
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
597
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LocalStorage, providedIn: 'root' }); }
596
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: LocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
597
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: LocalStorage, providedIn: 'root' }); }
598
598
  }
599
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: LocalStorage, decorators: [{
599
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: LocalStorage, decorators: [{
600
600
  type: Injectable,
601
601
  args: [{
602
602
  providedIn: 'root'
@@ -631,10 +631,10 @@ class SessionStorage {
631
631
  remove(key) {
632
632
  this.storage.removeItem(key);
633
633
  }
634
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
635
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SessionStorage, providedIn: 'root' }); }
634
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
635
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SessionStorage, providedIn: 'root' }); }
636
636
  }
637
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.15", ngImport: i0, type: SessionStorage, decorators: [{
637
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: SessionStorage, decorators: [{
638
638
  type: Injectable,
639
639
  args: [{
640
640
  providedIn: 'root'
@@ -1 +1 @@
1
- {"version":3,"file":"solar-angular-platform-browser.mjs","sources":["../../../packages/platform-browser/src/file-manager.ts","../../../packages/platform-browser/src/fullscreen.service.ts","../../../packages/platform-browser/src/image-compressor.ts","../../../packages/platform-browser/src/resource-loader.ts","../../../packages/platform-browser/src/spreadsheet.service.ts","../../../packages/platform-browser/src/storage/local-storage.ts","../../../packages/platform-browser/src/storage/session-storage.ts","../../../packages/platform-browser/src/solar-angular-platform-browser.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FileManager {\n private readonly document = inject(DOCUMENT);\n\n /**\n * Opens a file picker dialog to allow the user to select files.\n *\n * @param options - Configuration options for the file picker.\n * @param options.accept - A string or array of strings specifying the file types accepted by the file picker.\n * @param options.multiple - If `true`, allows multiple file selections.\n * @returns A promise that resolves with an array of selected `File` objects.\n */\n pick(options: { accept?: string | string[]; multiple?: boolean }) {\n const input = this.document.createElement('input');\n input.type = 'file';\n input.accept = Array.isArray(options.accept) ? options.accept.join(',') : options.accept || '';\n input.multiple = !!options.multiple;\n\n return new Promise<File[]>((resolve, reject) => {\n input.onchange = () => {\n resolve(Array.from(input.files || []));\n };\n input.onerror = reject;\n input.click();\n });\n }\n\n async download(url: string, filename?: string) {\n const response = await fetch(url);\n const blob = await response.blob();\n this.save(blob, filename ?? new URL(url).pathname.split('/').pop()!)\n return blob;\n }\n\n save(blob: Blob, filename: string) {\n const anchor = this.document.createElement('a');\n anchor.href = URL.createObjectURL(blob);\n anchor.download = filename;\n anchor.click();\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class FullscreenService {\n private readonly document: Document = inject(DOCUMENT);\n\n /**\n * 切换全屏\n * @param target\n * @param options\n */\n toggle(target: HTMLElement = this.document.documentElement, options?: FullscreenOptions): Promise<void> {\n if (this.isFullscreen(target)) {\n return this.document.exitFullscreen();\n }\n\n return target.requestFullscreen(options);\n }\n\n /**\n * 元素是否为全屏\n * @param target\n */\n isFullscreen(target: HTMLElement = this.document.documentElement): boolean {\n return target === this.document.fullscreenElement;\n }\n}\n","import { DOCUMENT } from '@angular/common';\nimport { Injectable, InjectionToken, inject } from '@angular/core';\nimport { Observable, from } from 'rxjs';\n\n/**\n * 目前 NG 库 中还不能包含 WebWorker,这里使用 DI 的方式,由 App 提供 WebWorker:\n * ```ts\n * {\n * provide: IMAGE_COMPRESSOR_WEBWORKER_FACTORY,\n * useValue: () => new Worker(new URL('xxx.worker', import.meta.url), { type: 'module' })\n * }\n * ```\n * https://github.com/angular/angular-cli/issues/15059\n */\nexport const SUN_IMAGE_COMPRESSOR_WORKER_FACTORY = new InjectionToken<() => Worker>(\n 'ImageCompressorWorkerFactory'\n);\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ImageCompressor {\n private _format?: 'webp' | 'jpeg' | 'png';\n private document = inject(DOCUMENT);\n private workerFactory = inject(SUN_IMAGE_COMPRESSOR_WORKER_FACTORY, { optional: true });\n private canvas = this.document.createElement('canvas');\n\n /** 最佳图片格式,优先级:webp -> jpeg -> png */\n get format() {\n return this._format || (this._format = this.isSupportWEBP ? 'webp' : this.isSupportJPEG ? 'jpeg' : 'png');\n }\n\n /**\n * 是否支持WebP格式\n */\n get isSupportWEBP(): boolean {\n try {\n return this.canvas.toDataURL('image/webp').startsWith('data:image/webp');\n } catch (e) {\n return false;\n }\n }\n\n /**\n * 是否支持JPEG格式\n */\n get isSupportJPEG(): boolean {\n try {\n return this.canvas.toDataURL('image/jpeg').startsWith('data:image/jpeg');\n } catch (e) {\n return false;\n }\n }\n\n /**\n * 压缩图片\n * @param src 图片URL\n * @param quality 质量\n */\n compress(src: string, quality = 0.85): Observable<Blob> {\n const format = this.format;\n const img = new Image();\n img.crossOrigin = 'anonymous';\n\n return new Observable<Blob>((observer) => {\n img.onload = () => {\n this.resize(img);\n\n (('OffscreenCanvas' in window && this.workerFactory) ? this.drawInWorker(img, quality, format) : this.draw(img, quality, format)).subscribe(blob => {\n observer.next(blob);\n observer.complete();\n });\n };\n\n img.onerror = (error: Event | string) => {\n observer.error(error);\n observer.complete();\n };\n\n img.src = src;\n });\n }\n\n /**\n * 调整图像尺寸\n * @param img\n */\n private resize(img: HTMLImageElement) {\n const maxWidth = 1280;\n const maxHeight = 720;\n\n if (img.width > maxWidth) {\n const divisor = img.width / maxWidth;\n img.width /= divisor;\n img.height /= divisor;\n }\n\n if (img.height > maxHeight) {\n const divisor = img.height / maxHeight;\n img.width /= divisor;\n img.height /= divisor;\n }\n }\n\n /**\n * 在主线程中绘制\n * @param img 图像\n * @param quality 质量\n * @param format 格式\n */\n draw(img: HTMLImageElement, quality: number, format: string) {\n return new Observable<Blob>(observer => {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n\n const ctx = canvas.getContext('2d')!;\n ctx.drawImage(img, 0, 0, img.width, img.height);\n\n canvas.toBlob(blob => {\n observer.next(blob!);\n observer.complete();\n }, 'image/' + format, quality);\n });\n }\n\n /**\n * 在WebWorker线程中绘制\n * @param img 图像\n * @param quality 质量\n * @param format 格式\n */\n drawInWorker(img: HTMLImageElement, quality: number, format: string) {\n const worker = this.workerFactory!();\n\n return new Observable<Blob>(observer => {\n const complete = () => {\n worker.terminate();\n observer.complete();\n };\n\n this.createImageBitmap(img).subscribe({\n next: imageBitmap => {\n worker.onmessage = ({ data }) => {\n observer.next(data);\n complete();\n };\n\n worker.onerror = error => {\n observer.error(error);\n complete();\n };\n\n worker.postMessage({ quality, format, imageBitmap }, [imageBitmap]);\n },\n error: error => {\n observer.error(error);\n complete();\n }\n });\n });\n }\n\n /**\n * 创建图像位图\n * @param img 图像源\n */\n createImageBitmap(img: HTMLImageElement): Observable<ImageBitmap> {\n return from(window.createImageBitmap(img, {\n resizeWidth: img.width,\n resizeHeight: img.height\n }).then(bitmap => {\n // 某些情况下,图片宽度与高度会调换,因此这里要做一个判断\n if (bitmap.width !== img.width) {\n return window.createImageBitmap(img, {\n resizeWidth: img.height,\n resizeHeight: img.width\n });\n }\n\n return bitmap;\n }));\n }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class ResourceLoader {\n private readonly document = inject(DOCUMENT);\n\n loadScript(url: string) {\n return new Promise<void>((resolve, reject) => {\n const script: HTMLScriptElement = this.document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n\n script.onload = () => resolve();\n script.onerror = () => {\n this.document.head.removeChild(script);\n reject();\n };\n\n this.document.head.appendChild(script);\n });\n }\n\n loadStylesheet(url: string) {\n return new Promise<void>((resolve, reject) => {\n const link: HTMLLinkElement = this.document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n\n link.onload = () => resolve();\n link.onerror = () => {\n this.document.head.removeChild(link);\n reject();\n };\n\n this.document.head.appendChild(link);\n });\n }\n}\n","import { DatePipe, DOCUMENT } from '@angular/common';\nimport { inject, Injectable, LOCALE_ID } from '@angular/core';\nimport { MediaType } from '@solar-kit/core';\nimport { defer, firstValueFrom, map, shareReplay } from 'rxjs';\nimport { FileManager } from './file-manager';\nimport { ResourceLoader } from './resource-loader';\n// 不默认集成exceljs了,需要的时候注入XlsxService动态加载,因为不是每个地方都需要导出excel\n// import {TableParser, Workbook} from 'aieyes-exceljs-o';\ndeclare let ExcelJS: any; // from exceljs\n\nconst EXCEL_COL_ALIAS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst NUMBER_PATTERN = /[0-9]/g;\nconst CHAR_PATTERN = /[a-zA-Z]/g;\n\n/**\n * @deprecated 使用 `@composize/excel` 替代\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class SpreadsheetService {\n private readonly document: Document = inject(DOCUMENT);\n private readonly resourceLoader = inject(ResourceLoader);\n private readonly fileManager = inject(FileManager);\n private readonly datePipe = new DatePipe(inject(LOCALE_ID));\n\n // ExcelJS 对象,用时异步自动加载\n private readonly excel = defer(() => Promise.all([\n this.resourceLoader.loadScript('https://img.omofresh.com/js/aieyes-exceljs-o_1_8_10.min.js'), // 修改过的 https://www.npmjs.com/package/aieyes-exceljs-o\n this.resourceLoader.loadStylesheet('https://img.omofresh.com/css/exceljs.min.css'), // aieyes-exceljs-o 中定义的\n ])).pipe(\n map(() => ExcelJS),\n shareReplay(1)\n );\n\n private async parseElement(table: HTMLTableElement, _opts?: any) {\n const excel = await firstValueFrom(this.excel);\n return excel.TableParser.utils.parseDomTable(table, _opts);\n }\n\n /**\n * 只导出一个table, 内容放在第一个sheet上\n */\n async exportTable(idOrElement: string | HTMLTableElement, fileName: string, _opts?: any) {\n const table = typeof idOrElement === 'string' ? this.document.getElementById(idOrElement)! as HTMLTableElement : idOrElement;\n const excel = await firstValueFrom(this.excel);\n const wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n const re = await this.export(wb, ws, table, null, null, _opts);\n await this.saveAsFile(re.wb, fileName);\n }\n\n /**\n * 导出多个table, 内容放在多个sheet上\n */\n async exportTableSheets(tableIds: string[], sheetNames: string[], fileName: string, _opts?: any) {\n const excel = await firstValueFrom(this.excel);\n let wb = new excel.Workbook();\n\n for (let index = 0; index < tableIds.length; index++) {\n const table = this.document.getElementById(tableIds[index]) as HTMLTableElement;\n const sheetName = sheetNames[index];\n const ws = wb.addWorksheet(sheetName);\n const re = await this.export(wb, ws, table, null, null, _opts);\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 在一页中导出多个table, 每个table默认间隔1列\n */\n async exportTableParallel(tableIds: string[], fileName: string, gap = 1, _opts?: any) {\n const excel = await firstValueFrom(this.excel);\n\n let wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n let cursor = 'A'; // 从第一列开始导出,并列几个table\n\n for (const tableId of tableIds) {\n const table = this.document.getElementById(tableId) as HTMLTableElement;\n const re = await this.export(wb, ws, table, cursor, null, _opts);\n const lastCol = re.cols[re.cols.length - 1];\n cursor = nextColOfCell(lastCol);\n for (let k = 0; k < gap; k++) {\n cursor = nextColOfCell(cursor);\n }\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 在一页中垂直导出多个table\n */\n async exportTableVertical(tableIds: string[], fileName: string, gap = 0, _opts?: any) {\n let rowOffset = 0;\n const excel = await firstValueFrom(this.excel);\n let wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n\n for (const tableId of tableIds) {\n const table = this.document.getElementById(tableId) as HTMLTableElement;\n const re = await this.export(wb, ws, table, null, rowOffset, _opts);\n rowOffset += re.rows.length + gap;\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 导出dom table\n * colCursor: 标记起始列\n * rowOffset: 偏移的行数\n * @return 返回最后一列的列名\n */\n private async export(wb: any, ws: any, table: HTMLTableElement, colCursor?: string | null, rowOffset?: number | null, _opts?: any) {\n if (!_opts) {\n _opts = { cellDates: true, dateNF: 'yyyy/M/d' }; // 默认的日期格式\n } else {\n _opts.cellDates = true;\n }\n\n const ref = await this.parseElement(table, _opts);\n let colOffset = 0; // colCursor偏移量,默认为0\n if (colCursor) {\n const c = ws.getColumn(colCursor);\n colOffset = c.number - 1;\n }\n rowOffset = rowOffset || 0; // rowOffset默认为0\n const cellMap: Record<string, any> = {};\n Object.keys(ref).sort().forEach(cellAlias => {\n if (!cellAlias.startsWith('!')) {\n let rowNum = rowOfCell(cellAlias);\n rowNum = String(parseInt(rowNum, 10) + rowOffset);\n const colNum = colNumberOfCell(cellAlias);\n const col = ws.getColumn(colOffset + colNum); // 根据偏移量找出所在的列\n const finalCell = col.letter + rowNum;\n cellMap[finalCell] = ref[cellAlias];\n }\n });\n const colSet = new Set<string>();\n Object.keys(cellMap).forEach(k => {\n colSet.add(colOfCell(k));\n });\n let cols = Array.from(colSet);\n // 因为excel的列都是连续的,如果导出table存在跨列的话这里面可能却少某一列,所以需要补充缺少的列名保证这一段是连续的\n let cursor = cols[0];\n for (let i = 0; i < ref['!cols'].length - 1; i++) {\n const next = nextColOfCell(cursor);\n colSet.add(next);\n cursor = next;\n }\n cols = Array.from(colSet).sort((a: string, b: string) => {\n if (a.length === b.length) {\n return a.localeCompare(b);\n } else if (a.length > b.length) {\n return 1;\n } else if (b.length > a.length) {\n return -1;\n }\n return -1;\n });\n // 赋值\n Object.keys(cellMap).forEach(alias => {\n const cell = ws.getCell(alias);\n const cellConfig = cellMap[alias];\n if (cellConfig.t === 'd') { // 日期格式需格式化后显示,换言之转为了字符串\n cell.value = this.datePipe.transform(cellConfig.v, cellConfig.z);\n } else {\n cell.value = cellConfig.v;\n }\n // 默认就有边框的\n if (cellConfig.style.bordered) { // 表示需要加边框\n cell.style.border = {\n top: { style: 'thin' },\n left: { style: 'thin' },\n bottom: { style: 'thin' },\n right: { style: 'thin' }\n };\n }\n // 默认内容垂直居中,左右居中不一定\n cell.style.alignment = {\n horizontal: cellConfig.style.align,\n vertical: 'middle',\n wrapText: true\n };\n // 字体默认为宋体\n cell.style.font = {\n bold: cellConfig.style.bold,\n name: '宋体',\n size: cellConfig.style.pound // 字号\n };\n // 背景色/前景色\n if (cellConfig.style.background) {\n cell.fill = {\n type: 'pattern',\n pattern: 'solid',\n fgColor: { argb: cellConfig.style.background }, // 实际上fgColor是理解上的背景色,而不是前景色,不知道excel怎么定义的\n // bgColor: {argb: 'ffd8e6de'}\n } as any;\n }\n });\n // 设置每行的高度\n (ref['!rows'] as any[]).forEach((rowConfig, rowIndex) => {\n const row = ws.getRow(rowIndex + rowOffset + 1);\n row.height = rowConfig.height;\n });\n // 设置列宽\n (ref['!cols'] as any[]).forEach((colConfig, colIndex) => {\n const colAlias = cols[colIndex];\n const col = ws.getColumn(colAlias);\n if (colConfig.width) {\n col.width = colConfig.width;\n }\n });\n // 合并单元格, 由于不一定有,所以要判断一下\n (ref['!merges'] as any[] | null)?.forEach(mergeParam => {\n const s = mergeParam['s'];\n const e = mergeParam['e'];\n const startCell = ws.getCell(rowOffset + s.r + 1, colOffset + s.c + 1);\n const endCell = ws.getCell(rowOffset + e.r + 1, colOffset + e.c + 1);\n ws.mergeCells([startCell.address, endCell.address]);\n });\n return { wb, cols, rows: ref['!rows'] };\n }\n\n /**\n * 保存Workbook到磁盘上\n */\n private async saveAsFile(wb: any, fileName: string) {\n const excelData = await wb.xlsx.writeBuffer();\n const blob = new Blob([excelData], { type: MediaType.Xlsx });\n this.fileManager.save(blob, fileName + '.xlsx')\n }\n}\n\n/**\n * 根据当前的单元格找到下一列的地址\n * 采用倒序进位法,这样就不需要递归了\n */\nfunction nextColOfCell(cell: string) {\n // 先把字母和数字分开,字母是列,数字是行,倒序排列\n const args = cell.match(CHAR_PATTERN)!.reverse();\n let needAppend = false;\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg !== 'Z') {\n const idx = EXCEL_COL_ALIAS.indexOf(arg);\n args[i] = EXCEL_COL_ALIAS[idx + 1];\n break;\n } else {\n args[i] = 'A';\n if (i === args.length - 1) { // 说明是最后一个了,需要补A\n needAppend = true;\n }\n }\n }\n if (needAppend) {\n args.push('A');\n }\n return args.reverse().join(''); // 最终的结果,反转再合并\n}\n\n/**\n * 获取单元格的行\n */\nfunction rowOfCell(cell: string) {\n return cell.match(NUMBER_PATTERN)!.join('');\n}\n\n/**\n * 获取单元格的列\n */\nfunction colOfCell(cell: string) {\n return cell.match(CHAR_PATTERN)!.join('');\n}\n\n/**\n * 单元格的列号\n * 当作26进制计算列的编号\n */\nfunction colNumberOfCell(cell: string) {\n let col = 0;\n cell.match(CHAR_PATTERN)!.reverse().forEach((c, i) => {\n if (i == 0) {\n // 个位\n col += EXCEL_COL_ALIAS.indexOf(c) + 1;\n } else {\n // 十位以上\n col += (EXCEL_COL_ALIAS.indexOf(c) + 1) * i * 26;\n }\n });\n return col;\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocalStorage {\n private readonly storage = inject(DOCUMENT).defaultView!.localStorage;\n\n /**\n * 保存数据\n * @param key 键名\n * @param value 数据\n */\n set<T = any>(key: string, value: T): void {\n this.storage.setItem(key, JSON.stringify(value));\n }\n\n /**\n * 获取数据\n * @param key 键名\n */\n get<T>(key: string): T | null {\n const data = this.storage.getItem(key);\n return data ? JSON.parse(data) : null;\n }\n\n /**\n * 移除数据\n * @param key 键名\n */\n remove(key: string): void {\n this.storage.removeItem(key);\n }\n\n}\n","import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class SessionStorage {\n private readonly storage = inject(DOCUMENT).defaultView!.sessionStorage;\n\n /**\n * 保存数据\n * @param key 键名\n * @param value 数据\n */\n set<T = any>(key: string, value: T): void {\n this.storage.setItem(key, JSON.stringify(value));\n }\n\n /**\n * 获取数据\n * @param key 键名\n * @param defaults 默认值\n */\n get<T = any>(key: string): T | null {\n const data = this.storage.getItem(key);\n return data ? JSON.parse(data) : null;\n }\n\n /**\n * 移除数据\n * @param key 键名\n */\n remove(key: string): void {\n this.storage.removeItem(key);\n }\n\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"solar-angular-platform-browser.mjs","sources":["../tmp-esm2022/file-manager.js","../tmp-esm2022/fullscreen.service.js","../tmp-esm2022/image-compressor.js","../tmp-esm2022/resource-loader.js","../tmp-esm2022/spreadsheet.service.js","../tmp-esm2022/storage/local-storage.js","../tmp-esm2022/storage/session-storage.js","../tmp-esm2022/solar-angular-platform-browser.js"],"sourcesContent":["import { inject, Injectable, DOCUMENT } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class FileManager {\n constructor() {\n this.document = inject(DOCUMENT);\n }\n /**\n * Opens a file picker dialog to allow the user to select files.\n *\n * @param options - Configuration options for the file picker.\n * @param options.accept - A string or array of strings specifying the file types accepted by the file picker.\n * @param options.multiple - If `true`, allows multiple file selections.\n * @returns A promise that resolves with an array of selected `File` objects.\n */\n pick(options) {\n const input = this.document.createElement('input');\n input.type = 'file';\n input.accept = Array.isArray(options.accept) ? options.accept.join(',') : options.accept || '';\n input.multiple = !!options.multiple;\n return new Promise((resolve, reject) => {\n input.onchange = () => {\n resolve(Array.from(input.files || []));\n };\n input.onerror = reject;\n input.click();\n });\n }\n async download(url, filename) {\n const response = await fetch(url);\n const blob = await response.blob();\n this.save(blob, filename ?? new URL(url).pathname.split('/').pop());\n return blob;\n }\n save(blob, filename) {\n const anchor = this.document.createElement('a');\n anchor.href = URL.createObjectURL(blob);\n anchor.download = filename;\n anchor.click();\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: FileManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: FileManager, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: FileManager, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvZmlsZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLN0QsTUFBTSxPQUFPLFdBQVc7SUFIeEI7UUFJbUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQXNDOUM7SUFwQ0M7Ozs7Ozs7T0FPRztJQUNILElBQUksQ0FBQyxPQUEyRDtRQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNwQixLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDL0YsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUVwQyxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzdDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDO1lBQ0YsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdkIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLFFBQWlCO1FBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRyxDQUFDLENBQUE7UUFDcEUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVUsRUFBRSxRQUFnQjtRQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDM0IsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7OEdBdENVLFdBQVc7a0hBQVgsV0FBVyxjQUZWLE1BQU07OzJGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgZmlsZSBwaWNrZXIgZGlhbG9nIHRvIGFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBmaWxlIHBpY2tlci5cbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXB0IC0gQSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIHRoZSBmaWxlIHR5cGVzIGFjY2VwdGVkIGJ5IHRoZSBmaWxlIHBpY2tlci5cbiAgICogQHBhcmFtIG9wdGlvbnMubXVsdGlwbGUgLSBJZiBgdHJ1ZWAsIGFsbG93cyBtdWx0aXBsZSBmaWxlIHNlbGVjdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2Ygc2VsZWN0ZWQgYEZpbGVgIG9iamVjdHMuXG4gICAqL1xuICBwaWNrKG9wdGlvbnM6IHsgYWNjZXB0Pzogc3RyaW5nIHwgc3RyaW5nW107IG11bHRpcGxlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgaW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICBpbnB1dC5hY2NlcHQgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMuYWNjZXB0KSA/IG9wdGlvbnMuYWNjZXB0LmpvaW4oJywnKSA6IG9wdGlvbnMuYWNjZXB0IHx8ICcnO1xuICAgIGlucHV0Lm11bHRpcGxlID0gISFvcHRpb25zLm11bHRpcGxlO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZpbGVbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW5wdXQub25jaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoQXJyYXkuZnJvbShpbnB1dC5maWxlcyB8fCBbXSkpO1xuICAgICAgfTtcbiAgICAgIGlucHV0Lm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICBpbnB1dC5jbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWQodXJsOiBzdHJpbmcsIGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgdGhpcy5zYXZlKGJsb2IsIGZpbGVuYW1lID8/IG5ldyBVUkwodXJsKS5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpISlcbiAgICByZXR1cm4gYmxvYjtcbiAgfVxuXG4gIHNhdmUoYmxvYjogQmxvYiwgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGFuY2hvci5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBhbmNob3IuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICBhbmNob3IuY2xpY2soKTtcbiAgfVxufVxuIl19","import { inject, Injectable, DOCUMENT } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class FullscreenService {\n constructor() {\n this.document = inject(DOCUMENT);\n }\n /**\n * 切换全屏\n * @param target\n * @param options\n */\n toggle(target = this.document.documentElement, options) {\n if (this.isFullscreen(target)) {\n return this.document.exitFullscreen();\n }\n return target.requestFullscreen(options);\n }\n /**\n * 元素是否为全屏\n * @param target\n */\n isFullscreen(target = this.document.documentElement) {\n return target === this.document.fullscreenElement;\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: FullscreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: FullscreenService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: FullscreenService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVsbHNjcmVlbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvZnVsbHNjcmVlbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLN0QsTUFBTSxPQUFPLGlCQUFpQjtJQUg5QjtRQUltQixhQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBc0J4RDtJQXBCQzs7OztPQUlHO0lBQ0gsTUFBTSxDQUFDLFNBQXNCLElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxFQUFFLE9BQTJCO1FBQ3JGLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1lBQzlCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBRUQsT0FBTyxNQUFNLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVEOzs7T0FHRztJQUNILFlBQVksQ0FBQyxTQUFzQixJQUFJLENBQUMsUUFBUSxDQUFDLGVBQWU7UUFDOUQsT0FBTyxNQUFNLEtBQUssSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQztJQUNwRCxDQUFDOzhHQXRCVSxpQkFBaUI7a0hBQWpCLGlCQUFpQixjQUZoQixNQUFNOzsyRkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZ1bGxzY3JlZW5TZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIC8qKlxuICAgKiDliIfmjaLlhajlsY9cbiAgICogQHBhcmFtIHRhcmdldFxuICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgKi9cbiAgdG9nZ2xlKHRhcmdldDogSFRNTEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCwgb3B0aW9ucz86IEZ1bGxzY3JlZW5PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKHRoaXMuaXNGdWxsc2NyZWVuKHRhcmdldCkpIHtcbiAgICAgIHJldHVybiB0aGlzLmRvY3VtZW50LmV4aXRGdWxsc2NyZWVuKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldC5yZXF1ZXN0RnVsbHNjcmVlbihvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlhYPntKDmmK/lkKbkuLrlhajlsY9cbiAgICogQHBhcmFtIHRhcmdldFxuICAgKi9cbiAgaXNGdWxsc2NyZWVuKHRhcmdldDogSFRNTEVsZW1lbnQgPSB0aGlzLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0YXJnZXQgPT09IHRoaXMuZG9jdW1lbnQuZnVsbHNjcmVlbkVsZW1lbnQ7XG4gIH1cbn1cbiJdfQ==","import { Injectable, InjectionToken, inject, DOCUMENT } from '@angular/core';\nimport { Observable, from } from 'rxjs';\nimport * as i0 from \"@angular/core\";\n/**\n * 目前 NG 库 中还不能包含 WebWorker,这里使用 DI 的方式,由 App 提供 WebWorker:\n * ```ts\n * {\n * provide: IMAGE_COMPRESSOR_WEBWORKER_FACTORY,\n * useValue: () => new Worker(new URL('xxx.worker', import.meta.url), { type: 'module' })\n * }\n * ```\n * https://github.com/angular/angular-cli/issues/15059\n */\nexport const SUN_IMAGE_COMPRESSOR_WORKER_FACTORY = new InjectionToken('ImageCompressorWorkerFactory');\nexport class ImageCompressor {\n constructor() {\n this.document = inject(DOCUMENT);\n this.workerFactory = inject(SUN_IMAGE_COMPRESSOR_WORKER_FACTORY, { optional: true });\n this.canvas = this.document.createElement('canvas');\n }\n /** 最佳图片格式,优先级:webp -> jpeg -> png */\n get format() {\n return this._format || (this._format = this.isSupportWEBP ? 'webp' : this.isSupportJPEG ? 'jpeg' : 'png');\n }\n /**\n * 是否支持WebP格式\n */\n get isSupportWEBP() {\n try {\n return this.canvas.toDataURL('image/webp').startsWith('data:image/webp');\n }\n catch (e) {\n return false;\n }\n }\n /**\n * 是否支持JPEG格式\n */\n get isSupportJPEG() {\n try {\n return this.canvas.toDataURL('image/jpeg').startsWith('data:image/jpeg');\n }\n catch (e) {\n return false;\n }\n }\n /**\n * 压缩图片\n * @param src 图片URL\n * @param quality 质量\n */\n compress(src, quality = 0.85) {\n const format = this.format;\n const img = new Image();\n img.crossOrigin = 'anonymous';\n return new Observable((observer) => {\n img.onload = () => {\n this.resize(img);\n (('OffscreenCanvas' in window && this.workerFactory) ? this.drawInWorker(img, quality, format) : this.draw(img, quality, format)).subscribe(blob => {\n observer.next(blob);\n observer.complete();\n });\n };\n img.onerror = (error) => {\n observer.error(error);\n observer.complete();\n };\n img.src = src;\n });\n }\n /**\n * 调整图像尺寸\n * @param img\n */\n resize(img) {\n const maxWidth = 1280;\n const maxHeight = 720;\n if (img.width > maxWidth) {\n const divisor = img.width / maxWidth;\n img.width /= divisor;\n img.height /= divisor;\n }\n if (img.height > maxHeight) {\n const divisor = img.height / maxHeight;\n img.width /= divisor;\n img.height /= divisor;\n }\n }\n /**\n * 在主线程中绘制\n * @param img 图像\n * @param quality 质量\n * @param format 格式\n */\n draw(img, quality, format) {\n return new Observable(observer => {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, img.width, img.height);\n canvas.toBlob(blob => {\n observer.next(blob);\n observer.complete();\n }, 'image/' + format, quality);\n });\n }\n /**\n * 在WebWorker线程中绘制\n * @param img 图像\n * @param quality 质量\n * @param format 格式\n */\n drawInWorker(img, quality, format) {\n const worker = this.workerFactory();\n return new Observable(observer => {\n const complete = () => {\n worker.terminate();\n observer.complete();\n };\n this.createImageBitmap(img).subscribe({\n next: imageBitmap => {\n worker.onmessage = ({ data }) => {\n observer.next(data);\n complete();\n };\n worker.onerror = error => {\n observer.error(error);\n complete();\n };\n worker.postMessage({ quality, format, imageBitmap }, [imageBitmap]);\n },\n error: error => {\n observer.error(error);\n complete();\n }\n });\n });\n }\n /**\n * 创建图像位图\n * @param img 图像源\n */\n createImageBitmap(img) {\n return from(window.createImageBitmap(img, {\n resizeWidth: img.width,\n resizeHeight: img.height\n }).then(bitmap => {\n // 某些情况下,图片宽度与高度会调换,因此这里要做一个判断\n if (bitmap.width !== img.width) {\n return window.createImageBitmap(img, {\n resizeWidth: img.height,\n resizeHeight: img.width\n });\n }\n return bitmap;\n }));\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: ImageCompressor, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: ImageCompressor, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: ImageCompressor, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2UtY29tcHJlc3Nvci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLWJyb3dzZXIvc3JjL2ltYWdlLWNvbXByZXNzb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM3RSxPQUFPLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLE1BQU0sQ0FBQzs7QUFFeEM7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sbUNBQW1DLEdBQUcsSUFBSSxjQUFjLENBQ25FLDhCQUE4QixDQUMvQixDQUFDO0FBS0YsTUFBTSxPQUFPLGVBQWU7SUFINUI7UUFLVSxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzVCLGtCQUFhLEdBQUcsTUFBTSxDQUFDLG1DQUFtQyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDaEYsV0FBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBK0p4RDtJQTdKQyxxQ0FBcUM7SUFDckMsSUFBSSxNQUFNO1FBQ1IsT0FBTyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUcsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxhQUFhO1FBQ2YsSUFBSSxDQUFDO1lBQ0gsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FB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ZSwgSW5qZWN0aW9uVG9rZW4sIGluamVjdCwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIGZyb20gfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDnm67liY0gTkcg5bqTIOS4rei/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==","import { inject, Injectable, DOCUMENT } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class ResourceLoader {\n constructor() {\n this.document = inject(DOCUMENT);\n }\n loadScript(url) {\n return new Promise((resolve, reject) => {\n const script = this.document.createElement('script');\n script.type = 'text/javascript';\n script.src = url;\n script.onload = () => resolve();\n script.onerror = () => {\n this.document.head.removeChild(script);\n reject();\n };\n this.document.head.appendChild(script);\n });\n }\n loadStylesheet(url) {\n return new Promise((resolve, reject) => {\n const link = this.document.createElement('link');\n link.rel = 'stylesheet';\n link.type = 'text/css';\n link.href = url;\n link.onload = () => resolve();\n link.onerror = () => {\n this.document.head.removeChild(link);\n reject();\n };\n this.document.head.appendChild(link);\n });\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: ResourceLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: ResourceLoader, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: ResourceLoader, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzb3VyY2UtbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvcmVzb3VyY2UtbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLN0QsTUFBTSxPQUFPLGNBQWM7SUFIM0I7UUFJbUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQWtDOUM7SUFoQ0MsVUFBVSxDQUFDLEdBQVc7UUFDcEIsT0FBTyxJQUFJLE9BQU8sQ0FBTyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUMzQyxNQUFNLE1BQU0sR0FBc0IsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDeEUsTUFBTSxDQUFDLElBQUksR0FBRyxpQkFBaUIsQ0FBQztZQUNoQyxNQUFNLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQztZQUVqQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3ZDLE1BQU0sRUFBRSxDQUFDO1lBQ1gsQ0FBQyxDQUFDO1lBRUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELGNBQWMsQ0FBQyxHQUFXO1FBQ3hCLE9BQU8sSUFBSSxPQUFPLENBQU8sQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDM0MsTUFBTSxJQUFJLEdBQW9CLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ2xFLElBQUksQ0FBQyxHQUFHLEdBQUcsWUFBWSxDQUFDO1lBQ3hCLElBQUksQ0FBQyxJQUFJLEdBQUcsVUFBVSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1lBRWhCLElBQUksQ0FBQyxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDOUIsSUFBSSxDQUFDLE9BQU8sR0FBRyxHQUFHLEVBQUU7Z0JBQ2xCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDckMsTUFBTSxFQUFFLENBQUM7WUFDWCxDQUFDLENBQUM7WUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOzhHQWxDVSxjQUFjO2tIQUFkLGNBQWMsY0FGYixNQUFNOzsyRkFFUCxjQUFjO2tCQUgxQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUxvYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuXG4gIGxvYWRTY3JpcHQodXJsOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2NyaXB0OiBIVE1MU2NyaXB0RWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7XG4gICAgICBzY3JpcHQudHlwZSA9ICd0ZXh0L2phdmFzY3JpcHQnO1xuICAgICAgc2NyaXB0LnNyYyA9IHVybDtcblxuICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgIHNjcmlwdC5vbmVycm9yID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmRvY3VtZW50LmhlYWQucmVtb3ZlQ2hpbGQoc2NyaXB0KTtcbiAgICAgICAgcmVqZWN0KCk7XG4gICAgICB9O1xuXG4gICAgICB0aGlzLmRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTtcbiAgICB9KTtcbiAgfVxuXG4gIGxvYWRTdHlsZXNoZWV0KHVybDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbnN0IGxpbms6IEhUTUxMaW5rRWxlbWVudCA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnbGluaycpO1xuICAgICAgbGluay5yZWwgPSAnc3R5bGVzaGVldCc7XG4gICAgICBsaW5rLnR5cGUgPSAndGV4dC9jc3MnO1xuICAgICAgbGluay5ocmVmID0gdXJsO1xuXG4gICAgICBsaW5rLm9ubG9hZCA9ICgpID0+IHJlc29sdmUoKTtcbiAgICAgIGxpbmsub25lcnJvciA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kb2N1bWVudC5oZWFkLnJlbW92ZUNoaWxkKGxpbmspO1xuICAgICAgICByZWplY3QoKTtcbiAgICAgIH07XG5cbiAgICAgIHRoaXMuZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTtcbiAgICB9KTtcbiAgfVxufVxuIl19","import { DatePipe } from '@angular/common';\nimport { inject, Injectable, LOCALE_ID, DOCUMENT } from '@angular/core';\nimport { defer, firstValueFrom, map, shareReplay } from 'rxjs';\nimport { FileManager } from './file-manager';\nimport { ResourceLoader } from './resource-loader';\nimport * as i0 from \"@angular/core\";\nconst EXCEL_COL_ALIAS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\nconst NUMBER_PATTERN = /[0-9]/g;\nconst CHAR_PATTERN = /[a-zA-Z]/g;\n/**\n * @deprecated 使用 `@composize/excel` 替代\n */\nexport class SpreadsheetService {\n constructor() {\n this.document = inject(DOCUMENT);\n this.resourceLoader = inject(ResourceLoader);\n this.fileManager = inject(FileManager);\n this.datePipe = new DatePipe(inject(LOCALE_ID));\n // ExcelJS 对象,用时异步自动加载\n this.excel = defer(() => Promise.all([\n this.resourceLoader.loadScript('https://img.omofresh.com/js/aieyes-exceljs-o_1_8_10.min.js'), // 修改过的 https://www.npmjs.com/package/aieyes-exceljs-o\n this.resourceLoader.loadStylesheet('https://img.omofresh.com/css/exceljs.min.css'), // aieyes-exceljs-o 中定义的\n ])).pipe(map(() => ExcelJS), shareReplay(1));\n }\n async parseElement(table, _opts) {\n const excel = await firstValueFrom(this.excel);\n return excel.TableParser.utils.parseDomTable(table, _opts);\n }\n /**\n * 只导出一个table, 内容放在第一个sheet上\n */\n async exportTable(idOrElement, fileName, _opts) {\n const table = typeof idOrElement === 'string' ? this.document.getElementById(idOrElement) : idOrElement;\n const excel = await firstValueFrom(this.excel);\n const wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n const re = await this.export(wb, ws, table, null, null, _opts);\n await this.saveAsFile(re.wb, fileName);\n }\n /**\n * 导出多个table, 内容放在多个sheet上\n */\n async exportTableSheets(tableIds, sheetNames, fileName, _opts) {\n const excel = await firstValueFrom(this.excel);\n let wb = new excel.Workbook();\n for (let index = 0; index < tableIds.length; index++) {\n const table = this.document.getElementById(tableIds[index]);\n const sheetName = sheetNames[index];\n const ws = wb.addWorksheet(sheetName);\n const re = await this.export(wb, ws, table, null, null, _opts);\n wb = re.wb;\n }\n await this.saveAsFile(wb, fileName);\n }\n /**\n * 在一页中导出多个table, 每个table默认间隔1列\n */\n async exportTableParallel(tableIds, fileName, gap = 1, _opts) {\n const excel = await firstValueFrom(this.excel);\n let wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n let cursor = 'A'; // 从第一列开始导出,并列几个table\n for (const tableId of tableIds) {\n const table = this.document.getElementById(tableId);\n const re = await this.export(wb, ws, table, cursor, null, _opts);\n const lastCol = re.cols[re.cols.length - 1];\n cursor = nextColOfCell(lastCol);\n for (let k = 0; k < gap; k++) {\n cursor = nextColOfCell(cursor);\n }\n wb = re.wb;\n }\n await this.saveAsFile(wb, fileName);\n }\n /**\n * 在一页中垂直导出多个table\n */\n async exportTableVertical(tableIds, fileName, gap = 0, _opts) {\n let rowOffset = 0;\n const excel = await firstValueFrom(this.excel);\n let wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n for (const tableId of tableIds) {\n const table = this.document.getElementById(tableId);\n const re = await this.export(wb, ws, table, null, rowOffset, _opts);\n rowOffset += re.rows.length + gap;\n wb = re.wb;\n }\n await this.saveAsFile(wb, fileName);\n }\n /**\n * 导出dom table\n * colCursor: 标记起始列\n * rowOffset: 偏移的行数\n * @return 返回最后一列的列名\n */\n async export(wb, ws, table, colCursor, rowOffset, _opts) {\n if (!_opts) {\n _opts = { cellDates: true, dateNF: 'yyyy/M/d' }; // 默认的日期格式\n }\n else {\n _opts.cellDates = true;\n }\n const ref = await this.parseElement(table, _opts);\n let colOffset = 0; // colCursor偏移量,默认为0\n if (colCursor) {\n const c = ws.getColumn(colCursor);\n colOffset = c.number - 1;\n }\n rowOffset = rowOffset || 0; // rowOffset默认为0\n const cellMap = {};\n Object.keys(ref).sort().forEach(cellAlias => {\n if (!cellAlias.startsWith('!')) {\n let rowNum = rowOfCell(cellAlias);\n rowNum = String(parseInt(rowNum, 10) + rowOffset);\n const colNum = colNumberOfCell(cellAlias);\n const col = ws.getColumn(colOffset + colNum); // 根据偏移量找出所在的列\n const finalCell = col.letter + rowNum;\n cellMap[finalCell] = ref[cellAlias];\n }\n });\n const colSet = new Set();\n Object.keys(cellMap).forEach(k => {\n colSet.add(colOfCell(k));\n });\n let cols = Array.from(colSet);\n // 因为excel的列都是连续的,如果导出table存在跨列的话这里面可能却少某一列,所以需要补充缺少的列名保证这一段是连续的\n let cursor = cols[0];\n for (let i = 0; i < ref['!cols'].length - 1; i++) {\n const next = nextColOfCell(cursor);\n colSet.add(next);\n cursor = next;\n }\n cols = Array.from(colSet).sort((a, b) => {\n if (a.length === b.length) {\n return a.localeCompare(b);\n }\n else if (a.length > b.length) {\n return 1;\n }\n else if (b.length > a.length) {\n return -1;\n }\n return -1;\n });\n // 赋值\n Object.keys(cellMap).forEach(alias => {\n const cell = ws.getCell(alias);\n const cellConfig = cellMap[alias];\n if (cellConfig.t === 'd') { // 日期格式需格式化后显示,换言之转为了字符串\n cell.value = this.datePipe.transform(cellConfig.v, cellConfig.z);\n }\n else {\n cell.value = cellConfig.v;\n }\n // 默认就有边框的\n if (cellConfig.style.bordered) { // 表示需要加边框\n cell.style.border = {\n top: { style: 'thin' },\n left: { style: 'thin' },\n bottom: { style: 'thin' },\n right: { style: 'thin' }\n };\n }\n // 默认内容垂直居中,左右居中不一定\n cell.style.alignment = {\n horizontal: cellConfig.style.align,\n vertical: 'middle',\n wrapText: true\n };\n // 字体默认为宋体\n cell.style.font = {\n bold: cellConfig.style.bold,\n name: '宋体',\n size: cellConfig.style.pound // 字号\n };\n // 背景色/前景色\n if (cellConfig.style.background) {\n cell.fill = {\n type: 'pattern',\n pattern: 'solid',\n fgColor: { argb: cellConfig.style.background }, // 实际上fgColor是理解上的背景色,而不是前景色,不知道excel怎么定义的\n // bgColor: {argb: 'ffd8e6de'}\n };\n }\n });\n // 设置每行的高度\n ref['!rows'].forEach((rowConfig, rowIndex) => {\n const row = ws.getRow(rowIndex + rowOffset + 1);\n row.height = rowConfig.height;\n });\n // 设置列宽\n ref['!cols'].forEach((colConfig, colIndex) => {\n const colAlias = cols[colIndex];\n const col = ws.getColumn(colAlias);\n if (colConfig.width) {\n col.width = colConfig.width;\n }\n });\n // 合并单元格, 由于不一定有,所以要判断一下\n ref['!merges']?.forEach(mergeParam => {\n const s = mergeParam['s'];\n const e = mergeParam['e'];\n const startCell = ws.getCell(rowOffset + s.r + 1, colOffset + s.c + 1);\n const endCell = ws.getCell(rowOffset + e.r + 1, colOffset + e.c + 1);\n ws.mergeCells([startCell.address, endCell.address]);\n });\n return { wb, cols, rows: ref['!rows'] };\n }\n /**\n * 保存Workbook到磁盘上\n */\n async saveAsFile(wb, fileName) {\n const excelData = await wb.xlsx.writeBuffer();\n const blob = new Blob([excelData], { type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\" /* MediaType.Xlsx */ });\n this.fileManager.save(blob, fileName + '.xlsx');\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: SpreadsheetService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: SpreadsheetService, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: SpreadsheetService, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n/**\n * 根据当前的单元格找到下一列的地址\n * 采用倒序进位法,这样就不需要递归了\n */\nfunction nextColOfCell(cell) {\n // 先把字母和数字分开,字母是列,数字是行,倒序排列\n const args = cell.match(CHAR_PATTERN).reverse();\n let needAppend = false;\n for (let i = 0; i < args.length; i++) {\n const arg = args[i];\n if (arg !== 'Z') {\n const idx = EXCEL_COL_ALIAS.indexOf(arg);\n args[i] = EXCEL_COL_ALIAS[idx + 1];\n break;\n }\n else {\n args[i] = 'A';\n if (i === args.length - 1) { // 说明是最后一个了,需要补A\n needAppend = true;\n }\n }\n }\n if (needAppend) {\n args.push('A');\n }\n return args.reverse().join(''); // 最终的结果,反转再合并\n}\n/**\n * 获取单元格的行\n */\nfunction rowOfCell(cell) {\n return cell.match(NUMBER_PATTERN).join('');\n}\n/**\n * 获取单元格的列\n */\nfunction colOfCell(cell) {\n return cell.match(CHAR_PATTERN).join('');\n}\n/**\n * 单元格的列号\n * 当作26进制计算列的编号\n */\nfunction colNumberOfCell(cell) {\n let col = 0;\n cell.match(CHAR_PATTERN).reverse().forEach((c, i) => {\n if (i == 0) {\n // 个位\n col += EXCEL_COL_ALIAS.indexOf(c) + 1;\n }\n else {\n // 十位以上\n col += (EXCEL_COL_ALIAS.indexOf(c) + 1) * i * 26;\n }\n });\n return col;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByZWFkc2hlZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLWJyb3dzZXIvc3JjL3NwcmVhZHNoZWV0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFeEUsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUtuRCxNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQztBQUNyRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDaEMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBRWpDOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUltQixhQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUU1RCxzQkFBc0I7UUFDTCxVQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsNERBQTRELENBQUMsRUFBRSxzREFBc0Q7WUFDcEosSUFBSSxDQUFD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LENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLElBQVk7SUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDWCxLQUFLO1lBQ0wsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTztZQUNQLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIExPQ0FMRV9JRCwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lZGlhVHlwZSB9IGZyb20gJ0Bzb2xhci1raXQvY29yZSc7XG5pbXBvcnQgeyBkZWZlciwgZmlyc3RWYWx1ZUZyb20sIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbGVNYW5hZ2VyIH0gZnJvbSAnLi9maWxlLW1hbmFnZXInO1xuaW1wb3J0IHsgUmVzb3VyY2VMb2FkZXIgfSBmcm9tICcuL3Jlc291cmNlLWxvYWRlcic7XG4vLyDkuI3pu5jorqTpm4bmiJBleGNlbGpz5LqG77yM6ZyA6KaB55qE5pe25YCZ5rOo5YWlWGxzeFNlcnZpY2XliqjmgIHliqDovb3vvIzlm6DkuLrkuI3mmK/mr4/kuKrlnLDmlrnpg73pnIDopoHlr7zlh7pleGNlbFxuLy8gaW1wb3J0IHtUYWJsZVBhcnNlciwgV29ya2Jvb2t9IGZyb20gJ2FpZXllcy1leGNlbGpzLW8nO1xuZGVjbGFyZSBsZXQgRXhjZWxKUzogYW55OyAgIC8vIGZyb20gZXhjZWxqc1xuXG5jb25zdCBFWENFTF9DT0xfQUxJQVMgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonO1xuY29uc3QgTlVNQkVSX1BBVFRFUk4gPSAvWzAtOV0vZztcbmNvbnN0IENIQVJfUEFUVEVSTiA9IC9bYS16QS1aXS9nO1xuXG4vKipcbiAqIEBkZXByZWNhdGVkIOS9v+eUqCBgQGNvbXBvc2l6ZS9leGNlbGAg5pu/5LujXG4gKi9cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNwcmVhZHNoZWV0U2VydmljZSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZG9jdW1lbnQ6IERvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZUxvYWRlciA9IGluamVjdChSZXNvdXJjZUxvYWRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZmlsZU1hbmFnZXIgPSBpbmplY3QoRmlsZU1hbmFnZXIpO1xuICBwcml2YXRlIHJlYWRvbmx5IGRhdGVQaXBlID0gbmV3IERhdGVQaXBlKGluamVjdChMT0NBTEVfSUQpKTtcblxuICAvLyBFeGNlbEpTIOWvueixoe+8jOeUqOaXtuW8guatpeiHquWKqOWKoOi9vVxuICBwcml2YXRlIHJlYWRvbmx5IGV4Y2VsID0gZGVmZXIoKCkgPT4gUHJvbWlzZS5hbGwoW1xuICAgIHRoaXMucmVzb3VyY2VMb2FkZXIubG9hZFNjcmlwdCgnaHR0cHM6Ly9pbWcub21vZnJlc2guY29tL2pzL2FpZXllcy1leGNlbGpzLW9fMV84XzEwLm1pbi5qcycpLCAvLyDkv67mlLnov4fnmoQgaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvYWlleWVzLWV4Y2VsanMtb1xuICAgIHRoaXMucmVzb3VyY2VMb2FkZXIubG9hZFN0eWxlc2hlZXQoJ2h0dHBzOi8vaW1nLm9tb2ZyZXNoLmNvbS9jc3MvZXhjZWxqcy5taW4uY3NzJyksIC8vIGFpZXllcy1leGNlbGpzLW8g5Lit5a6a5LmJ55qEXG4gIF0pKS5waXBlKFxuICAgIG1hcCgoKSA9PiBFeGNlbEpTKSxcbiAgICBzaGFyZVJlcGxheSgxKVxuICApO1xuXG4gIHByaXZhdGUgYXN5bmMgcGFyc2VFbGVtZW50KHRhYmxlOiBIVE1MVGFibGVFbGVtZW50LCBfb3B0cz86IGFueSkge1xuICAgIGNvbnN0IGV4Y2VsID0gYXdhaXQgZmlyc3RWYWx1ZUZyb20odGhpcy5leGNlbCk7XG4gICAgcmV0dXJuIGV4Y2VsLlRhYmxlUGFyc2VyLnV0aWxzLnBhcnNlRG9tVGFibGUodGFibGUsIF9vcHRzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlj6rlr7zlh7rkuIDkuKp0YWJsZSwg5YaF5a655pS+5Zyo56ys5LiA5Liqc2hlZXTkuIpcbiAgICovXG4gIGFzeW5jIGV4cG9ydFRhYmxlKGlkT3JFbGVtZW50OiBzdHJpbmcgfCBIVE1MVGFibGVFbGVtZW50LCBmaWxlTmFtZTogc3RyaW5nLCBfb3B0cz86IGFueSkge1xuICAgIGNvbnN0IHRhYmxlID0gdHlwZW9mIGlkT3JFbGVtZW50ID09PSAnc3RyaW5nJyA/IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWRPckVsZW1lbnQpISBhcyBIVE1MVGFibGVFbGVtZW50IDogaWRPckVsZW1lbnQ7XG4gICAgY29uc3QgZXhjZWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2VsKTtcbiAgICBjb25zdCB3YiA9IG5ldyBleGNlbC5Xb3JrYm9vaygpO1xuICAgIGNvbnN0IHdzID0gd2IuYWRkV29ya3NoZWV0KGZpbGVOYW1lKTtcbiAgICBjb25zdCByZSA9IGF3YWl0IHRoaXMuZXhwb3J0KHdiLCB3cywgdGFibGUsIG51bGwsIG51bGwsIF9vcHRzKTtcbiAgICBhd2FpdCB0aGlzLnNhdmVBc0ZpbGUocmUud2IsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlh7rlpJrkuKp0YWJsZSwg5YaF5a655pS+5Zyo5aSa5Liqc2hlZXTkuIpcbiAgICovXG4gIGFzeW5jIGV4cG9ydFRhYmxlU2hlZXRzKHRhYmxlSWRzOiBzdHJpbmdbXSwgc2hlZXROYW1lczogc3RyaW5nW10sIGZpbGVOYW1lOiBzdHJpbmcsIF9vcHRzPzogYW55KSB7XG4gICAgY29uc3QgZXhjZWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2VsKTtcbiAgICBsZXQgd2IgPSBuZXcgZXhjZWwuV29ya2Jvb2soKTtcblxuICAgIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCB0YWJsZUlkcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUlkc1tpbmRleF0pIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XG4gICAgICBjb25zdCBzaGVldE5hbWUgPSBzaGVldE5hbWVzW2luZGV4XTtcbiAgICAgIGNvbnN0IHdzID0gd2IuYWRkV29ya3NoZWV0KHNoZWV0TmFtZSk7XG4gICAgICBjb25zdCByZSA9IGF3YWl0IHRoaXMuZXhwb3J0KHdiLCB3cywgdGFibGUsIG51bGwsIG51bGwsIF9vcHRzKTtcbiAgICAgIHdiID0gcmUud2I7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zYXZlQXNGaWxlKHdiLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICog5Zyo5LiA6aG15Lit5a+85Ye65aSa5LiqdGFibGUsIOavj+S4qnRhYmxl6buY6K6k6Ze06ZqUMeWIl1xuICAgKi9cbiAgYXN5bmMgZXhwb3J0VGFibGVQYXJhbGxlbCh0YWJsZUlkczogc3RyaW5nW10sIGZpbGVOYW1lOiBzdHJpbmcsIGdhcCA9IDEsIF9vcHRzPzogYW55KSB7XG4gICAgY29uc3QgZXhjZWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2VsKTtcblxuICAgIGxldCB3YiA9IG5ldyBleGNlbC5Xb3JrYm9vaygpO1xuICAgIGNvbnN0IHdzID0gd2IuYWRkV29ya3NoZWV0KGZpbGVOYW1lKTtcbiAgICBsZXQgY3Vyc29yID0gJ0EnOyAgICAvLyDku47nrKzkuIDliJflvIDlp4vlr7zlh7rvvIzlubbliJflh6DkuKp0YWJsZVxuXG4gICAgZm9yIChjb25zdCB0YWJsZUlkIG9mIHRhYmxlSWRzKSB7XG4gICAgICBjb25zdCB0YWJsZSA9IHRoaXMuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodGFibGVJZCkgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgIGNvbnN0IHJlID0gYXdhaXQgdGhpcy5leHBvcnQod2IsIHdzLCB0YWJsZSwgY3Vyc29yLCBudWxsLCBfb3B0cyk7XG4gICAgICBjb25zdCBsYXN0Q29sID0gcmUuY29sc1tyZS5jb2xzLmxlbmd0aCAtIDFdO1xuICAgICAgY3Vyc29yID0gbmV4dENvbE9mQ2VsbChsYXN0Q29sKTtcbiAgICAgIGZvciAobGV0IGsgPSAwOyBrIDwgZ2FwOyBrKyspIHtcbiAgICAgICAgY3Vyc29yID0gbmV4dENvbE9mQ2VsbChjdXJzb3IpO1xuICAgICAgfVxuICAgICAgd2IgPSByZS53YjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVBc0ZpbGUod2IsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlnKjkuIDpobXkuK3lnoLnm7Tlr7zlh7rlpJrkuKp0YWJsZVxuICAgKi9cbiAgYXN5bmMgZXhwb3J0VGFibGVWZXJ0aWNhbCh0YWJsZUlkczogc3RyaW5nW10sIGZpbGVOYW1lOiBzdHJpbmcsIGdhcCA9IDAsIF9vcHRzPzogYW55KSB7XG4gICAgbGV0IHJvd09mZnNldCA9IDA7XG4gICAgY29uc3QgZXhjZWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2VsKTtcbiAgICBsZXQgd2IgPSBuZXcgZXhjZWwuV29ya2Jvb2soKTtcbiAgICBjb25zdCB3cyA9IHdiLmFkZFdvcmtzaGVldChmaWxlTmFtZSk7XG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlSWQgb2YgdGFibGVJZHMpIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUlkKSBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgY29uc3QgcmUgPSBhd2FpdCB0aGlzLmV4cG9ydCh3Yiwgd3MsIHRhYmxlLCBudWxsLCByb3dPZmZzZXQsIF9vcHRzKTtcbiAgICAgIHJvd09mZnNldCArPSByZS5yb3dzLmxlbmd0aCArIGdhcDtcbiAgICAgIHdiID0gcmUud2I7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5zYXZlQXNGaWxlKHdiLCBmaWxlTmFtZSk7XG4gIH1cblxuICAvKipcbiAgICog5a+85Ye6ZG9tIHRhYmxlXG4gICAqIGNvbEN1cnNvcjog5qCH6K6w6LW35aeL5YiXXG4gICAqIHJvd09mZnNldDog5YGP56e755qE6KGM5pWwXG4gICAqIEByZXR1cm4g6L+U5Zue5pyA5ZCO5LiA5YiX55qE5YiX5ZCNXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV4cG9ydCh3YjogYW55LCB3czogYW55LCB0YWJsZTogSFRNTFRhYmxlRWxlbWVudCwgY29sQ3Vyc29yPzogc3RyaW5nIHwgbnVsbCwgcm93T2Zmc2V0PzogbnVtYmVyIHwgbnVsbCwgX29wdHM/OiBhbnkpIHtcbiAgICBpZiAoIV9vcHRzKSB7XG4gICAgICBfb3B0cyA9IHsgY2VsbERhdGVzOiB0cnVlLCBkYXRlTkY6ICd5eXl5L00vZCcgfTsgICAgLy8g6buY6K6k55qE5pel5pyf5qC85byPXG4gICAgfSBlbHNlIHtcbiAgICAgIF9vcHRzLmNlbGxEYXRlcyA9IHRydWU7XG4gICAgfVxuXG4gICAgY29uc3QgcmVmID0gYXdhaXQgdGhpcy5wYXJzZUVsZW1lbnQodGFibGUsIF9vcHRzKTtcbiAgICBsZXQgY29sT2Zmc2V0ID0gMDsgICAgLy8gY29sQ3Vyc29y5YGP56e76YeP77yM6buY6K6k5Li6MFxuICAgIGlmIChjb2xDdXJzb3IpIHtcbiAgICAgIGNvbnN0IGMgPSB3cy5nZXRDb2x1bW4oY29sQ3Vyc29yKTtcbiAgICAgIGNvbE9mZnNldCA9IGMubnVtYmVyIC0gMTtcbiAgICB9XG4gICAgcm93T2Zmc2V0ID0gcm93T2Zmc2V0IHx8IDA7ICAgLy8gcm93T2Zmc2V06buY6K6k5Li6MFxuICAgIGNvbnN0IGNlbGxNYXA6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcbiAgICBPYmplY3Qua2V5cyhyZWYpLnNvcnQoKS5mb3JFYWNoKGNlbGxBbGlhcyA9PiB7XG4gICAgICBpZiAoIWNlbGxBbGlhcy5zdGFydHNXaXRoKCchJykpIHtcbiAgICAgICAgbGV0IHJvd051bSA9IHJvd09mQ2VsbChjZWxsQWxpYXMpO1xuICAgICAgICByb3dOdW0gPSBTdHJpbmcocGFyc2VJbnQocm93TnVtLCAxMCkgKyByb3dPZmZzZXQpO1xuICAgICAgICBjb25zdCBjb2xOdW0gPSBjb2xOdW1iZXJPZkNlbGwoY2VsbEFsaWFzKTtcbiAgICAgICAgY29uc3QgY29sID0gd3MuZ2V0Q29sdW1uKGNvbE9mZnNldCArIGNvbE51bSk7IC8vIOagueaNruWBj+enu+mHj+aJvuWHuuaJgOWcqOeahOWIl1xuICAgICAgICBjb25zdCBmaW5hbENlbGwgPSBjb2wubGV0dGVyICsgcm93TnVtO1xuICAgICAgICBjZWxsTWFwW2ZpbmFsQ2VsbF0gPSByZWZbY2VsbEFsaWFzXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBjb2xTZXQgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgICBPYmplY3Qua2V5cyhjZWxsTWFwKS5mb3JFYWNoKGsgPT4ge1xuICAgICAgY29sU2V0LmFkZChjb2xPZkNlbGwoaykpO1xuICAgIH0pO1xuICAgIGxldCBjb2xzID0gQXJyYXkuZnJvbShjb2xTZXQpO1xuICAgIC8vIOWboOS4umV4Y2Vs55qE5YiX6YO95piv6L+e57ut55qE77yM5aaC5p6c5a+85Ye6dGFibGXlrZjlnKjot6jliJfnmoTor53ov5nph4zpnaLlj6/og73ljbTlsJHmn5DkuIDliJfvvIzmiYDku6XpnIDopoHooaXlhYXnvLrlsJHnmoTliJflkI3kv53or4Hov5nkuIDmrrXmmK/ov57nu63nmoRcbiAgICBsZXQgY3Vyc29yID0gY29sc1swXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlZlsnIWNvbHMnXS5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgIGNvbnN0IG5leHQgPSBuZXh0Q29sT2ZDZWxsKGN1cnNvcik7XG4gICAgICBjb2xTZXQuYWRkKG5leHQpO1xuICAgICAgY3Vyc29yID0gbmV4dDtcbiAgICB9XG4gICAgY29scyA9IEFycmF5LmZyb20oY29sU2V0KS5zb3J0KChhOiBzdHJpbmcsIGI6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKGEubGVuZ3RoID09PSBiLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gYS5sb2NhbGVDb21wYXJlKGIpO1xuICAgICAgfSBlbHNlIGlmIChhLmxlbmd0aCA+IGIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAxO1xuICAgICAgfSBlbHNlIGlmIChiLmxlbmd0aCA+IGEubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAtMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAtMTtcbiAgICB9KTtcbiAgICAvLyDotYvlgLxcbiAgICBPYmplY3Qua2V5cyhjZWxsTWFwKS5mb3JFYWNoKGFsaWFzID0+IHtcbiAgICAgIGNvbnN0IGNlbGwgPSB3cy5nZXRDZWxsKGFsaWFzKTtcbiAgICAgIGNvbnN0IGNlbGxDb25maWcgPSBjZWxsTWFwW2FsaWFzXTtcbiAgICAgIGlmIChjZWxsQ29uZmlnLnQgPT09ICdkJykgeyAgIC8vIOaXpeacn+agvOW8j+mcgOagvOW8j+WMluWQjuaYvuekuu+8jOaNouiogOS5i+i9rOS4uuS6huWtl+espuS4slxuICAgICAgICBjZWxsLnZhbHVlID0gdGhpcy5kYXRlUGlwZS50cmFuc2Zvcm0oY2VsbENvbmZpZy52LCBjZWxsQ29uZmlnLnopO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2VsbC52YWx1ZSA9IGNlbGxDb25maWcudjtcbiAgICAgIH1cbiAgICAgIC8vIOm7mOiupOWwseaciei+ueahhueahFxuICAgICAgaWYgKGNlbGxDb25maWcuc3R5bGUuYm9yZGVyZWQpIHsgICAgLy8g6KGo56S66ZyA6KaB5Yqg6L655qGGXG4gICAgICAgIGNlbGwuc3R5bGUuYm9yZGVyID0ge1xuICAgICAgICAgIHRvcDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gICAgICAgICAgbGVmdDogeyBzdHlsZTogJ3RoaW4nIH0sXG4gICAgICAgICAgYm90dG9tOiB7IHN0eWxlOiAndGhpbicgfSxcbiAgICAgICAgICByaWdodDogeyBzdHlsZTogJ3RoaW4nIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIC8vIOm7mOiupOWGheWuueWeguebtOWxheS4re+8jOW3puWPs+WxheS4reS4jeS4gOWumlxuICAgICAgY2VsbC5zdHlsZS5hbGlnbm1lbnQgPSB7XG4gICAgICAgIGhvcml6b250YWw6IGNlbGxDb25maWcuc3R5bGUuYWxpZ24sXG4gICAgICAgIHZlcnRpY2FsOiAnbWlkZGxlJyxcbiAgICAgICAgd3JhcFRleHQ6IHRydWVcbiAgICAgIH07XG4gICAgICAvLyDlrZfkvZPpu5jorqTkuLrlrovkvZNcbiAgICAgIGNlbGwuc3R5bGUuZm9udCA9IHtcbiAgICAgICAgYm9sZDogY2VsbENvbmZpZy5zdHlsZS5ib2xkLFxuICAgICAgICBuYW1lOiAn5a6L5L2TJyxcbiAgICAgICAgc2l6ZTogY2VsbENvbmZpZy5zdHlsZS5wb3VuZCAvLyDlrZflj7dcbiAgICAgIH07XG4gICAgICAvLyDog4zmma/oibIv5YmN5pmv6ImyXG4gICAgICBpZiAoY2VsbENvbmZpZy5zdHlsZS5iYWNrZ3JvdW5kKSB7XG4gICAgICAgIGNlbGwuZmlsbCA9IHtcbiAgICAgICAgICB0eXBlOiAncGF0dGVybicsXG4gICAgICAgICAgcGF0dGVybjogJ3NvbGlkJyxcbiAgICAgICAgICBmZ0NvbG9yOiB7IGFyZ2I6IGNlbGxDb25maWcuc3R5bGUuYmFja2dyb3VuZCB9LCAgICAvLyDlrp7pmYXkuIpmZ0NvbG9y5piv55CG6Kej5LiK55qE6IOM5pmv6Imy77yM6ICM5LiN5piv5YmN5pmv6Imy77yM5LiN55+l6YGTZXhjZWzmgI7kuYjlrprkuYnnmoRcbiAgICAgICAgICAvLyBiZ0NvbG9yOiB7YXJnYjogJ2ZmZDhlNmRlJ31cbiAgICAgICAgfSBhcyBhbnk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8g6K6+572u5q+P6KGM55qE6auY5bqmXG4gICAgKHJlZlsnIXJvd3MnXSBhcyBhbnlbXSkuZm9yRWFjaCgocm93Q29uZmlnLCByb3dJbmRleCkgPT4ge1xuICAgICAgY29uc3Qgcm93ID0gd3MuZ2V0Um93KHJvd0luZGV4ICsgcm93T2Zmc2V0ICsgMSk7XG4gICAgICByb3cuaGVpZ2h0ID0gcm93Q29uZmlnLmhlaWdodDtcbiAgICB9KTtcbiAgICAvLyDorr7nva7liJflrr1cbiAgICAocmVmWychY29scyddIGFzIGFueVtdKS5mb3JFYWNoKChjb2xDb25maWcsIGNvbEluZGV4KSA9PiB7XG4gICAgICBjb25zdCBjb2xBbGlhcyA9IGNvbHNbY29sSW5kZXhdO1xuICAgICAgY29uc3QgY29sID0gd3MuZ2V0Q29sdW1uKGNvbEFsaWFzKTtcbiAgICAgIGlmIChjb2xDb25maWcud2lkdGgpIHtcbiAgICAgICAgY29sLndpZHRoID0gY29sQ29uZmlnLndpZHRoO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIOWQiOW5tuWNleWFg+agvCwg55Sx5LqO5LiN5LiA5a6a5pyJ77yM5omA5Lul6KaB5Yik5pat5LiA5LiLXG4gICAgKHJlZlsnIW1lcmdlcyddIGFzIGFueVtdIHwgbnVsbCk/LmZvckVhY2gobWVyZ2VQYXJhbSA9PiB7XG4gICAgICBjb25zdCBzID0gbWVyZ2VQYXJhbVsncyddO1xuICAgICAgY29uc3QgZSA9IG1lcmdlUGFyYW1bJ2UnXTtcbiAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHdzLmdldENlbGwocm93T2Zmc2V0ICsgcy5yICsgMSwgY29sT2Zmc2V0ICsgcy5jICsgMSk7XG4gICAgICBjb25zdCBlbmRDZWxsID0gd3MuZ2V0Q2VsbChyb3dPZmZzZXQgKyBlLnIgKyAxLCBjb2xPZmZzZXQgKyBlLmMgKyAxKTtcbiAgICAgIHdzLm1lcmdlQ2VsbHMoW3N0YXJ0Q2VsbC5hZGRyZXNzLCBlbmRDZWxsLmFkZHJlc3NdKTtcbiAgICB9KTtcbiAgICByZXR1cm4geyB3YiwgY29scywgcm93czogcmVmWychcm93cyddIH07XG4gIH1cblxuICAvKipcbiAgICog5L+d5a2YV29ya2Jvb2vliLDno4Hnm5jkuIpcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgc2F2ZUFzRmlsZSh3YjogYW55LCBmaWxlTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgZXhjZWxEYXRhID0gYXdhaXQgd2IueGxzeC53cml0ZUJ1ZmZlcigpO1xuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbZXhjZWxEYXRhXSwgeyB0eXBlOiBNZWRpYVR5cGUuWGxzeCB9KTtcbiAgICB0aGlzLmZpbGVNYW5hZ2VyLnNhdmUoYmxvYiwgZmlsZU5hbWUgKyAnLnhsc3gnKVxuICB9XG59XG5cbi8qKlxuICog5qC55o2u5b2T5YmN55qE5Y2V5YWD5qC85om+5Yiw5LiL5LiA5YiX55qE5Zyw5Z2AXG4gKiDph4fnlKjlgJLluo/ov5vkvY3ms5XvvIzov5nmoLflsLHkuI3pnIDopoHpgJLlvZLkuoZcbiAqL1xuZnVuY3Rpb24gbmV4dENvbE9mQ2VsbChjZWxsOiBzdHJpbmcpIHtcbiAgLy8g5YWI5oqK5a2X5q+N5ZKM5pWw5a2X5YiG5byA77yM5a2X5q+N5piv5YiX77yM5pWw5a2X5piv6KGM77yM5YCS5bqP5o6S5YiXXG4gIGNvbnN0IGFyZ3MgPSBjZWxsLm1hdGNoKENIQVJfUEFUVEVSTikhLnJldmVyc2UoKTtcbiAgbGV0IG5lZWRBcHBlbmQgPSBmYWxzZTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYXJnID0gYXJnc1tpXTtcbiAgICBpZiAoYXJnICE9PSAnWicpIHtcbiAgICAgIGNvbnN0IGlkeCA9IEVYQ0VMX0NPTF9BTElBUy5pbmRleE9mKGFyZyk7XG4gICAgICBhcmdzW2ldID0gRVhDRUxfQ09MX0FMSUFTW2lkeCArIDFdO1xuICAgICAgYnJlYWs7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3NbaV0gPSAnQSc7XG4gICAgICBpZiAoaSA9PT0gYXJncy5sZW5ndGggLSAxKSB7ICAgIC8vIOivtOaYjuaYr+acgOWQjuS4gOS4quS6hu+8jOmcgOimgeihpUFcbiAgICAgICAgbmVlZEFwcGVuZCA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmIChuZWVkQXBwZW5kKSB7XG4gICAgYXJncy5wdXNoKCdBJyk7XG4gIH1cbiAgcmV0dXJuIGFyZ3MucmV2ZXJzZSgpLmpvaW4oJycpOyAgICAvLyDmnIDnu4jnmoTnu5PmnpzvvIzlj43ovazlho3lkIjlubZcbn1cblxuLyoqXG4gKiDojrflj5bljZXlhYPmoLznmoTooYxcbiAqL1xuZnVuY3Rpb24gcm93T2ZDZWxsKGNlbGw6IHN0cmluZykge1xuICByZXR1cm4gY2VsbC5tYXRjaChOVU1CRVJfUEFUVEVSTikhLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIOiOt+WPluWNleWFg+agvOeahOWIl1xuICovXG5mdW5jdGlvbiBjb2xPZkNlbGwoY2VsbDogc3RyaW5nKSB7XG4gIHJldHVybiBjZWxsLm1hdGNoKENIQVJfUEFUVEVSTikhLmpvaW4oJycpO1xufVxuXG4vKipcbiAqIOWNleWFg+agvOeahOWIl+WPt1xuICog5b2T5L2cMjbov5vliLborqHnrpfliJfnmoTnvJblj7dcbiAqL1xuZnVuY3Rpb24gY29sTnVtYmVyT2ZDZWxsKGNlbGw6IHN0cmluZykge1xuICBsZXQgY29sID0gMDtcbiAgY2VsbC5tYXRjaChDSEFSX1BBVFRFUk4pIS5yZXZlcnNlKCkuZm9yRWFjaCgoYywgaSkgPT4ge1xuICAgIGlmIChpID09IDApIHtcbiAgICAgIC8vIOS4quS9jVxuICAgICAgY29sICs9IEVYQ0VMX0NPTF9BTElBUy5pbmRleE9mKGMpICsgMTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8g5Y2B5L2N5Lul5LiKXG4gICAgICBjb2wgKz0gKEVYQ0VMX0NPTF9BTElBUy5pbmRleE9mKGMpICsgMSkgKiBpICogMjY7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGNvbDtcbn1cbiJdfQ==","import { inject, Injectable, DOCUMENT } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class LocalStorage {\n constructor() {\n this.storage = inject(DOCUMENT).defaultView.localStorage;\n }\n /**\n * 保存数据\n * @param key 键名\n * @param value 数据\n */\n set(key, value) {\n this.storage.setItem(key, JSON.stringify(value));\n }\n /**\n * 获取数据\n * @param key 键名\n */\n get(key) {\n const data = this.storage.getItem(key);\n return data ? JSON.parse(data) : null;\n }\n /**\n * 移除数据\n * @param key 键名\n */\n remove(key) {\n this.storage.removeItem(key);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: LocalStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: LocalStorage, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: LocalStorage, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWwtc3RvcmFnZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLWJyb3dzZXIvc3JjL3N0b3JhZ2UvbG9jYWwtc3RvcmFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSzdELE1BQU0sT0FBTyxZQUFZO0lBSHpCO1FBSW1CLFlBQU8sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsV0FBWSxDQUFDLFlBQVksQ0FBQztLQTRCdkU7SUExQkM7Ozs7T0FJRztJQUNILEdBQUcsQ0FBVSxHQUFXLEVBQUUsS0FBUTtRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRDs7O09BR0c7SUFDSCxHQUFHLENBQUksR0FBVztRQUNoQixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ3hDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxNQUFNLENBQUMsR0FBVztRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDOzhHQTNCVSxZQUFZO2tIQUFaLFlBQVksY0FGWCxNQUFNOzsyRkFFUCxZQUFZO2tCQUh4QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMb2NhbFN0b3JhZ2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IHN0b3JhZ2UgPSBpbmplY3QoRE9DVU1FTlQpLmRlZmF1bHRWaWV3IS5sb2NhbFN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIOS/neWtmOaVsOaNrlxuICAgKiBAcGFyYW0ga2V5IOmUruWQjVxuICAgKiBAcGFyYW0gdmFsdWUg5pWw5o2uXG4gICAqL1xuICBzZXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaVsOaNrlxuICAgKiBAcGFyYW0ga2V5IOmUruWQjVxuICAgKi9cbiAgZ2V0PFQ+KGtleTogc3RyaW5nKTogVCB8IG51bGwge1xuICAgIGNvbnN0IGRhdGEgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbShrZXkpO1xuICAgIHJldHVybiBkYXRhID8gSlNPTi5wYXJzZShkYXRhKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICog56e76Zmk5pWw5o2uXG4gICAqIEBwYXJhbSBrZXkg6ZSu5ZCNXG4gICAqL1xuICByZW1vdmUoa2V5OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnN0b3JhZ2UucmVtb3ZlSXRlbShrZXkpO1xuICB9XG5cbn1cbiJdfQ==","import { inject, Injectable, DOCUMENT } from '@angular/core';\nimport * as i0 from \"@angular/core\";\nexport class SessionStorage {\n constructor() {\n this.storage = inject(DOCUMENT).defaultView.sessionStorage;\n }\n /**\n * 保存数据\n * @param key 键名\n * @param value 数据\n */\n set(key, value) {\n this.storage.setItem(key, JSON.stringify(value));\n }\n /**\n * 获取数据\n * @param key 键名\n * @param defaults 默认值\n */\n get(key) {\n const data = this.storage.getItem(key);\n return data ? JSON.parse(data) : null;\n }\n /**\n * 移除数据\n * @param key 键名\n */\n remove(key) {\n this.storage.removeItem(key);\n }\n static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: SessionStorage, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }\n static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: SessionStorage, providedIn: 'root' }); }\n}\ni0.ɵɵngDeclareClassMetadata({ minVersion: \"12.0.0\", version: \"20.3.9\", ngImport: i0, type: SessionStorage, decorators: [{\n type: Injectable,\n args: [{\n providedIn: 'root'\n }]\n }] });\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1zdG9yYWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvc3RvcmFnZS9zZXNzaW9uLXN0b3JhZ2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDOztBQUs3RCxNQUFNLE9BQU8sY0FBYztJQUgzQjtRQUltQixZQUFPLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFdBQVksQ0FBQyxjQUFjLENBQUM7S0E2QnpFO0lBM0JDOzs7O09BSUc7SUFDSCxHQUFHLENBQVUsR0FBVyxFQUFFLEtBQVE7UUFDaEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILEdBQUcsQ0FBVSxHQUFXO1FBQ3RCLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7SUFDeEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILE1BQU0sQ0FBQyxHQUFXO1FBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQy9CLENBQUM7OEdBNUJVLGNBQWM7a0hBQWQsY0FBYyxjQUZiLE1BQU07OzJGQUVQLGNBQWM7a0JBSDFCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiXG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIFNlc3Npb25TdG9yYWdlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBzdG9yYWdlID0gaW5qZWN0KERPQ1VNRU5UKS5kZWZhdWx0VmlldyEuc2Vzc2lvblN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIOS/neWtmOaVsOaNrlxuICAgKiBAcGFyYW0ga2V5IOmUruWQjVxuICAgKiBAcGFyYW0gdmFsdWUg5pWw5o2uXG4gICAqL1xuICBzZXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogdm9pZCB7XG4gICAgdGhpcy5zdG9yYWdlLnNldEl0ZW0oa2V5LCBKU09OLnN0cmluZ2lmeSh2YWx1ZSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIOiOt+WPluaVsOaNrlxuICAgKiBAcGFyYW0ga2V5IOmUruWQjVxuICAgKiBAcGFyYW0gZGVmYXVsdHMg6buY6K6k5YC8XG4gICAqL1xuICBnZXQ8VCA9IGFueT4oa2V5OiBzdHJpbmcpOiBUIHwgbnVsbCB7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKGtleSk7XG4gICAgcmV0dXJuIGRhdGEgPyBKU09OLnBhcnNlKGRhdGEpIDogbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiDnp7vpmaTmlbDmja5cbiAgICogQHBhcmFtIGtleSDplK7lkI1cbiAgICovXG4gIHJlbW92ZShrZXk6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuc3RvcmFnZS5yZW1vdmVJdGVtKGtleSk7XG4gIH1cblxufVxuIl19","/**\n * Generated bundle index. Do not edit.\n */\nexport * from './index';\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sYXItYW5ndWxhci1wbGF0Zm9ybS1icm93c2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvc29sYXItYW5ndWxhci1wbGF0Zm9ybS1icm93c2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19"],"names":[],"mappings":"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"}
package/index.d.ts CHANGED
@@ -1,6 +1,196 @@
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';
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken } from '@angular/core';
3
+ import { Observable } from 'rxjs';
4
+
5
+ declare class FileManager {
6
+ private readonly document;
7
+ /**
8
+ * Opens a file picker dialog to allow the user to select files.
9
+ *
10
+ * @param options - Configuration options for the file picker.
11
+ * @param options.accept - A string or array of strings specifying the file types accepted by the file picker.
12
+ * @param options.multiple - If `true`, allows multiple file selections.
13
+ * @returns A promise that resolves with an array of selected `File` objects.
14
+ */
15
+ pick(options: {
16
+ accept?: string | string[];
17
+ multiple?: boolean;
18
+ }): Promise<File[]>;
19
+ download(url: string, filename?: string): Promise<Blob>;
20
+ save(blob: Blob, filename: string): void;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<FileManager, never>;
22
+ static ɵprov: i0.ɵɵInjectableDeclaration<FileManager>;
23
+ }
24
+
25
+ declare class FullscreenService {
26
+ private readonly document;
27
+ /**
28
+ * 切换全屏
29
+ * @param target
30
+ * @param options
31
+ */
32
+ toggle(target?: HTMLElement, options?: FullscreenOptions): Promise<void>;
33
+ /**
34
+ * 元素是否为全屏
35
+ * @param target
36
+ */
37
+ isFullscreen(target?: HTMLElement): boolean;
38
+ static ɵfac: i0.ɵɵFactoryDeclaration<FullscreenService, never>;
39
+ static ɵprov: i0.ɵɵInjectableDeclaration<FullscreenService>;
40
+ }
41
+
42
+ /**
43
+ * 目前 NG 库 中还不能包含 WebWorker,这里使用 DI 的方式,由 App 提供 WebWorker:
44
+ * ```ts
45
+ * {
46
+ * provide: IMAGE_COMPRESSOR_WEBWORKER_FACTORY,
47
+ * useValue: () => new Worker(new URL('xxx.worker', import.meta.url), { type: 'module' })
48
+ * }
49
+ * ```
50
+ * https://github.com/angular/angular-cli/issues/15059
51
+ */
52
+ declare const SUN_IMAGE_COMPRESSOR_WORKER_FACTORY: InjectionToken<() => Worker>;
53
+ declare class ImageCompressor {
54
+ private _format?;
55
+ private document;
56
+ private workerFactory;
57
+ private canvas;
58
+ /** 最佳图片格式,优先级:webp -> jpeg -> png */
59
+ get format(): "webp" | "jpeg" | "png";
60
+ /**
61
+ * 是否支持WebP格式
62
+ */
63
+ get isSupportWEBP(): boolean;
64
+ /**
65
+ * 是否支持JPEG格式
66
+ */
67
+ get isSupportJPEG(): boolean;
68
+ /**
69
+ * 压缩图片
70
+ * @param src 图片URL
71
+ * @param quality 质量
72
+ */
73
+ compress(src: string, quality?: number): Observable<Blob>;
74
+ /**
75
+ * 调整图像尺寸
76
+ * @param img
77
+ */
78
+ private resize;
79
+ /**
80
+ * 在主线程中绘制
81
+ * @param img 图像
82
+ * @param quality 质量
83
+ * @param format 格式
84
+ */
85
+ draw(img: HTMLImageElement, quality: number, format: string): Observable<Blob>;
86
+ /**
87
+ * 在WebWorker线程中绘制
88
+ * @param img 图像
89
+ * @param quality 质量
90
+ * @param format 格式
91
+ */
92
+ drawInWorker(img: HTMLImageElement, quality: number, format: string): Observable<Blob>;
93
+ /**
94
+ * 创建图像位图
95
+ * @param img 图像源
96
+ */
97
+ createImageBitmap(img: HTMLImageElement): Observable<ImageBitmap>;
98
+ static ɵfac: i0.ɵɵFactoryDeclaration<ImageCompressor, never>;
99
+ static ɵprov: i0.ɵɵInjectableDeclaration<ImageCompressor>;
100
+ }
101
+
102
+ declare class ResourceLoader {
103
+ private readonly document;
104
+ loadScript(url: string): Promise<void>;
105
+ loadStylesheet(url: string): Promise<void>;
106
+ static ɵfac: i0.ɵɵFactoryDeclaration<ResourceLoader, never>;
107
+ static ɵprov: i0.ɵɵInjectableDeclaration<ResourceLoader>;
108
+ }
109
+
110
+ /**
111
+ * @deprecated 使用 `@composize/excel` 替代
112
+ */
113
+ declare class SpreadsheetService {
114
+ private readonly document;
115
+ private readonly resourceLoader;
116
+ private readonly fileManager;
117
+ private readonly datePipe;
118
+ private readonly excel;
119
+ private parseElement;
120
+ /**
121
+ * 只导出一个table, 内容放在第一个sheet上
122
+ */
123
+ exportTable(idOrElement: string | HTMLTableElement, fileName: string, _opts?: any): Promise<void>;
124
+ /**
125
+ * 导出多个table, 内容放在多个sheet上
126
+ */
127
+ exportTableSheets(tableIds: string[], sheetNames: string[], fileName: string, _opts?: any): Promise<void>;
128
+ /**
129
+ * 在一页中导出多个table, 每个table默认间隔1列
130
+ */
131
+ exportTableParallel(tableIds: string[], fileName: string, gap?: number, _opts?: any): Promise<void>;
132
+ /**
133
+ * 在一页中垂直导出多个table
134
+ */
135
+ exportTableVertical(tableIds: string[], fileName: string, gap?: number, _opts?: any): Promise<void>;
136
+ /**
137
+ * 导出dom table
138
+ * colCursor: 标记起始列
139
+ * rowOffset: 偏移的行数
140
+ * @return 返回最后一列的列名
141
+ */
142
+ private export;
143
+ /**
144
+ * 保存Workbook到磁盘上
145
+ */
146
+ private saveAsFile;
147
+ static ɵfac: i0.ɵɵFactoryDeclaration<SpreadsheetService, never>;
148
+ static ɵprov: i0.ɵɵInjectableDeclaration<SpreadsheetService>;
149
+ }
150
+
151
+ declare class LocalStorage {
152
+ private readonly storage;
153
+ /**
154
+ * 保存数据
155
+ * @param key 键名
156
+ * @param value 数据
157
+ */
158
+ set<T = any>(key: string, value: T): void;
159
+ /**
160
+ * 获取数据
161
+ * @param key 键名
162
+ */
163
+ get<T>(key: string): T | null;
164
+ /**
165
+ * 移除数据
166
+ * @param key 键名
167
+ */
168
+ remove(key: string): void;
169
+ static ɵfac: i0.ɵɵFactoryDeclaration<LocalStorage, never>;
170
+ static ɵprov: i0.ɵɵInjectableDeclaration<LocalStorage>;
171
+ }
172
+
173
+ declare class SessionStorage {
174
+ private readonly storage;
175
+ /**
176
+ * 保存数据
177
+ * @param key 键名
178
+ * @param value 数据
179
+ */
180
+ set<T = any>(key: string, value: T): void;
181
+ /**
182
+ * 获取数据
183
+ * @param key 键名
184
+ * @param defaults 默认值
185
+ */
186
+ get<T = any>(key: string): T | null;
187
+ /**
188
+ * 移除数据
189
+ * @param key 键名
190
+ */
191
+ remove(key: string): void;
192
+ static ɵfac: i0.ɵɵFactoryDeclaration<SessionStorage, never>;
193
+ static ɵprov: i0.ɵɵInjectableDeclaration<SessionStorage>;
194
+ }
195
+
196
+ export { FileManager, FullscreenService, ImageCompressor, LocalStorage, ResourceLoader, SUN_IMAGE_COMPRESSOR_WORKER_FACTORY, SessionStorage, SpreadsheetService };
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@solar-angular/platform-browser",
3
- "version": "19.4.2",
3
+ "version": "20.0.1",
4
4
  "sideEffects": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
8
8
  "peerDependencies": {
9
- "@angular/common": ">=19.0.0",
10
- "@angular/core": ">=19.0.0"
9
+ "@angular/common": ">=20.0.0",
10
+ "@angular/core": ">=20.0.0"
11
11
  },
12
12
  "module": "fesm2022/solar-angular-platform-browser.mjs",
13
13
  "typings": "index.d.ts",
package/file-manager.d.ts DELETED
@@ -1,20 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class FileManager {
3
- private readonly document;
4
- /**
5
- * Opens a file picker dialog to allow the user to select files.
6
- *
7
- * @param options - Configuration options for the file picker.
8
- * @param options.accept - A string or array of strings specifying the file types accepted by the file picker.
9
- * @param options.multiple - If `true`, allows multiple file selections.
10
- * @returns A promise that resolves with an array of selected `File` objects.
11
- */
12
- pick(options: {
13
- accept?: string | string[];
14
- multiple?: boolean;
15
- }): Promise<File[]>;
16
- download(url: string, filename?: string): Promise<Blob>;
17
- save(blob: Blob, filename: string): void;
18
- static ɵfac: i0.ɵɵFactoryDeclaration<FileManager, never>;
19
- static ɵprov: i0.ɵɵInjectableDeclaration<FileManager>;
20
- }
@@ -1,17 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class FullscreenService {
3
- private readonly document;
4
- /**
5
- * 切换全屏
6
- * @param target
7
- * @param options
8
- */
9
- toggle(target?: HTMLElement, options?: FullscreenOptions): Promise<void>;
10
- /**
11
- * 元素是否为全屏
12
- * @param target
13
- */
14
- isFullscreen(target?: HTMLElement): boolean;
15
- static ɵfac: i0.ɵɵFactoryDeclaration<FullscreenService, never>;
16
- static ɵprov: i0.ɵɵInjectableDeclaration<FullscreenService>;
17
- }
@@ -1,62 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- import { Observable } from 'rxjs';
3
- import * as i0 from "@angular/core";
4
- /**
5
- * 目前 NG 库 中还不能包含 WebWorker,这里使用 DI 的方式,由 App 提供 WebWorker:
6
- * ```ts
7
- * {
8
- * provide: IMAGE_COMPRESSOR_WEBWORKER_FACTORY,
9
- * useValue: () => new Worker(new URL('xxx.worker', import.meta.url), { type: 'module' })
10
- * }
11
- * ```
12
- * https://github.com/angular/angular-cli/issues/15059
13
- */
14
- export declare const SUN_IMAGE_COMPRESSOR_WORKER_FACTORY: InjectionToken<() => Worker>;
15
- export declare class ImageCompressor {
16
- private _format?;
17
- private document;
18
- private workerFactory;
19
- private canvas;
20
- /** 最佳图片格式,优先级:webp -> jpeg -> png */
21
- get format(): "webp" | "jpeg" | "png";
22
- /**
23
- * 是否支持WebP格式
24
- */
25
- get isSupportWEBP(): boolean;
26
- /**
27
- * 是否支持JPEG格式
28
- */
29
- get isSupportJPEG(): boolean;
30
- /**
31
- * 压缩图片
32
- * @param src 图片URL
33
- * @param quality 质量
34
- */
35
- compress(src: string, quality?: number): Observable<Blob>;
36
- /**
37
- * 调整图像尺寸
38
- * @param img
39
- */
40
- private resize;
41
- /**
42
- * 在主线程中绘制
43
- * @param img 图像
44
- * @param quality 质量
45
- * @param format 格式
46
- */
47
- draw(img: HTMLImageElement, quality: number, format: string): Observable<Blob>;
48
- /**
49
- * 在WebWorker线程中绘制
50
- * @param img 图像
51
- * @param quality 质量
52
- * @param format 格式
53
- */
54
- drawInWorker(img: HTMLImageElement, quality: number, format: string): Observable<Blob>;
55
- /**
56
- * 创建图像位图
57
- * @param img 图像源
58
- */
59
- createImageBitmap(img: HTMLImageElement): Observable<ImageBitmap>;
60
- static ɵfac: i0.ɵɵFactoryDeclaration<ImageCompressor, never>;
61
- static ɵprov: i0.ɵɵInjectableDeclaration<ImageCompressor>;
62
- }
@@ -1,8 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class ResourceLoader {
3
- private readonly document;
4
- loadScript(url: string): Promise<void>;
5
- loadStylesheet(url: string): Promise<void>;
6
- static ɵfac: i0.ɵɵFactoryDeclaration<ResourceLoader, never>;
7
- static ɵprov: i0.ɵɵInjectableDeclaration<ResourceLoader>;
8
- }
@@ -1,41 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- /**
3
- * @deprecated 使用 `@composize/excel` 替代
4
- */
5
- export declare class SpreadsheetService {
6
- private readonly document;
7
- private readonly resourceLoader;
8
- private readonly fileManager;
9
- private readonly datePipe;
10
- private readonly excel;
11
- private parseElement;
12
- /**
13
- * 只导出一个table, 内容放在第一个sheet上
14
- */
15
- exportTable(idOrElement: string | HTMLTableElement, fileName: string, _opts?: any): Promise<void>;
16
- /**
17
- * 导出多个table, 内容放在多个sheet上
18
- */
19
- exportTableSheets(tableIds: string[], sheetNames: string[], fileName: string, _opts?: any): Promise<void>;
20
- /**
21
- * 在一页中导出多个table, 每个table默认间隔1列
22
- */
23
- exportTableParallel(tableIds: string[], fileName: string, gap?: number, _opts?: any): Promise<void>;
24
- /**
25
- * 在一页中垂直导出多个table
26
- */
27
- exportTableVertical(tableIds: string[], fileName: string, gap?: number, _opts?: any): Promise<void>;
28
- /**
29
- * 导出dom table
30
- * colCursor: 标记起始列
31
- * rowOffset: 偏移的行数
32
- * @return 返回最后一列的列名
33
- */
34
- private export;
35
- /**
36
- * 保存Workbook到磁盘上
37
- */
38
- private saveAsFile;
39
- static ɵfac: i0.ɵɵFactoryDeclaration<SpreadsheetService, never>;
40
- static ɵprov: i0.ɵɵInjectableDeclaration<SpreadsheetService>;
41
- }
@@ -1,2 +0,0 @@
1
- export * from './local-storage';
2
- export * from './session-storage';
@@ -1,22 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class LocalStorage {
3
- private readonly storage;
4
- /**
5
- * 保存数据
6
- * @param key 键名
7
- * @param value 数据
8
- */
9
- set<T = any>(key: string, value: T): void;
10
- /**
11
- * 获取数据
12
- * @param key 键名
13
- */
14
- get<T>(key: string): T | null;
15
- /**
16
- * 移除数据
17
- * @param key 键名
18
- */
19
- remove(key: string): void;
20
- static ɵfac: i0.ɵɵFactoryDeclaration<LocalStorage, never>;
21
- static ɵprov: i0.ɵɵInjectableDeclaration<LocalStorage>;
22
- }
@@ -1,23 +0,0 @@
1
- import * as i0 from "@angular/core";
2
- export declare class SessionStorage {
3
- private readonly storage;
4
- /**
5
- * 保存数据
6
- * @param key 键名
7
- * @param value 数据
8
- */
9
- set<T = any>(key: string, value: T): void;
10
- /**
11
- * 获取数据
12
- * @param key 键名
13
- * @param defaults 默认值
14
- */
15
- get<T = any>(key: string): T | null;
16
- /**
17
- * 移除数据
18
- * @param key 键名
19
- */
20
- remove(key: string): void;
21
- static ɵfac: i0.ɵɵFactoryDeclaration<SessionStorage, never>;
22
- static ɵprov: i0.ɵɵInjectableDeclaration<SessionStorage>;
23
- }