@solar-angular/platform-browser 18.2.0 → 18.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,6 +7,9 @@ import * as i0 from "@angular/core";
7
7
  const EXCEL_COL_ALIAS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
8
8
  const NUMBER_PATTERN = /[0-9]/g;
9
9
  const CHAR_PATTERN = /[a-zA-Z]/g;
10
+ /**
11
+ * @deprecated 使用 `@composize/excel` 替代
12
+ */
10
13
  export class SpreadsheetService {
11
14
  constructor() {
12
15
  this.document = inject(DOCUMENT);
@@ -278,4 +281,4 @@ function colNumberOfCell(cell) {
278
281
  });
279
282
  return col;
280
283
  }
281
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByZWFkc2hlZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLWJyb3dzZXIvc3JjL3NwcmVhZHNoZWV0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUtuRCxNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQztBQUNyRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDaEMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBS2pDLE1BQU0sT0FBTyxrQkFBa0I7SUFIL0I7UUFJbUIsYUFBUSxHQUFhLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxtQkFBYyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUN4QyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUNsQyxhQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFNUQsc0JBQXNCO1FBQ0wsVUFBSyxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUFDLDREQUE0RCxDQUFDLEVBQUUsc0RBQXNEO1lBQ3BKLElBQUksQ0FBQyxjQUFjLENBQUMs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LENBQUM7QUFFRDs7O0dBR0c7QUFDSCxTQUFTLGVBQWUsQ0FBQyxJQUFZO0lBQ25DLElBQUksR0FBRyxHQUFHLENBQUMsQ0FBQztJQUNaLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ25ELElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ1gsS0FBSztZQUNMLEdBQUcsSUFBSSxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN4QyxDQUFDO2FBQU0sQ0FBQztZQUNOLE9BQU87WUFDUCxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDbkQsQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0gsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGF0ZVBpcGUsIERPQ1VNRU5UIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgTE9DQUxFX0lEIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNZWRpYVR5cGUgfSBmcm9tICdAc29sYXIta2l0L2NvcmUnO1xuaW1wb3J0IHsgZGVmZXIsIGZpcnN0VmFsdWVGcm9tLCBtYXAsIHNoYXJlUmVwbGF5IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBGaWxlTWFuYWdlciB9IGZyb20gJy4vZmlsZS1tYW5hZ2VyJztcbmltcG9ydCB7IFJlc291cmNlTG9hZGVyIH0gZnJvbSAnLi9yZXNvdXJjZS1sb2FkZXInO1xuLy8g5LiN6buY6K6k6ZuG5oiQZXhjZWxqc+S6hu+8jOmcgOimgeeahOaXtuWAmeazqOWFpVhsc3hTZXJ2aWNl5Yqo5oCB5Yqg6L2977yM5Zug5Li65LiN5piv5q+P5Liq5Zyw5pa56YO96ZyA6KaB5a+85Ye6ZXhjZWxcbi8vIGltcG9ydCB7VGFibGVQYXJzZXIsIFdvcmtib29rfSBmcm9tICdhaWV5ZXMtZXhjZWxqcy1vJztcbmRlY2xhcmUgbGV0IEV4Y2VsSlM6IGFueTsgICAvLyBmcm9tIGV4Y2VsanNcblxuY29uc3QgRVhDRUxfQ09MX0FMSUFTID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJztcbmNvbnN0IE5VTUJFUl9QQVRURVJOID0gL1swLTldL2c7XG5jb25zdCBDSEFSX1BBVFRFUk4gPSAvW2EtekEtWl0vZztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3ByZWFkc2hlZXRTZXJ2aWNlIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudDogRG9jdW1lbnQgPSBpbmplY3QoRE9DVU1FTlQpO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlTG9hZGVyID0gaW5qZWN0KFJlc291cmNlTG9hZGVyKTtcbiAgcHJpdmF0ZSByZWFkb25seSBmaWxlTWFuYWdlciA9IGluamVjdChGaWxlTWFuYWdlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGF0ZVBpcGUgPSBuZXcgRGF0ZVBpcGUoaW5qZWN0KExPQ0FMRV9JRCkpO1xuXG4gIC8vIEV4Y2VsSlMg5a+56LGh77yM55So5pe25byC5q2l6Ieq5Yqo5Yqg6L29XG4gIHByaXZhdGUgcmVhZG9ubHkgZXhjZWwgPSBkZWZlcigoKSA9PiBQcm9taXNlLmFsbChbXG4gICAgdGhpcy5yZXNvdXJjZUxvYWRlci5sb2FkU2NyaXB0KCdodHRwczovL2ltZy5vbW9mcmVzaC5jb20vanMvYWlleWVzLWV4Y2VsanMtb18xXzhfMTAubWluLmpzJyksIC8vIOS/ruaUuei/h+eahCBodHRwczovL3d3dy5ucG1qcy5jb20vcGFja2FnZS9haWV5ZXMtZXhjZWxqcy1vXG4gICAgdGhpcy5yZXNvdXJjZUxvYWRlci5sb2FkU3R5bGVzaGVldCgnaHR0cHM6Ly9pbWcub21vZnJlc2guY29tL2Nzcy9leGNlbGpzLm1pbi5jc3MnKSwgLy8gYWlleWVzLWV4Y2VsanMtbyDkuK3lrprkuYnnmoRcbiAgXSkpLnBpcGUoXG4gICAgbWFwKCgpID0+IEV4Y2VsSlMpLFxuICAgIHNoYXJlUmVwbGF5KDEpXG4gICk7XG5cbiAgcHJpdmF0ZSBhc3luYyBwYXJzZUVsZW1lbnQodGFibGU6IEhUTUxUYWJsZUVsZW1lbnQsIF9vcHRzPzogYW55KSB7XG4gICAgY29uc3QgZXhjZWwgPSBhd2FpdCBmaXJzdFZhbHVlRnJvbSh0aGlzLmV4Y2VsKTtcbiAgICByZXR1cm4gZXhjZWwuVGFibGVQYXJzZXIudXRpbHMucGFyc2VEb21UYWJsZSh0YWJsZSwgX29wdHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWPquWvvOWHuuS4gOS4qnRhYmxlLCDlhoXlrrnmlL7lnKjnrKzkuIDkuKpzaGVldOS4ilxuICAgKi9cbiAgYXN5bmMgZXhwb3J0VGFibGUoaWRPckVsZW1lbnQ6IHN0cmluZyB8IEhUTUxUYWJsZUVsZW1lbnQsIGZpbGVOYW1lOiBzdHJpbmcsIF9vcHRzPzogYW55KSB7XG4gICAgY29uc3QgdGFibGUgPSB0eXBlb2YgaWRPckVsZW1lbnQgPT09ICdzdHJpbmcnID8gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZE9yRWxlbWVudCkhIGFzIEhUTUxUYWJsZUVsZW1lbnQgOiBpZE9yRWxlbWVudDtcbiAgICBjb25zdCBleGNlbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZXhjZWwpO1xuICAgIGNvbnN0IHdiID0gbmV3IGV4Y2VsLldvcmtib29rKCk7XG4gICAgY29uc3Qgd3MgPSB3Yi5hZGRXb3Jrc2hlZXQoZmlsZU5hbWUpO1xuICAgIGNvbnN0IHJlID0gYXdhaXQgdGhpcy5leHBvcnQod2IsIHdzLCB0YWJsZSwgbnVsbCwgbnVsbCwgX29wdHMpO1xuICAgIGF3YWl0IHRoaXMuc2F2ZUFzRmlsZShyZS53YiwgZmlsZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWvvOWHuuWkmuS4qnRhYmxlLCDlhoXlrrnmlL7lnKjlpJrkuKpzaGVldOS4ilxuICAgKi9cbiAgYXN5bmMgZXhwb3J0VGFibGVTaGVldHModGFibGVJZHM6IHN0cmluZ1tdLCBzaGVldE5hbWVzOiBzdHJpbmdbXSwgZmlsZU5hbWU6IHN0cmluZywgX29wdHM/OiBhbnkpIHtcbiAgICBjb25zdCBleGNlbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZXhjZWwpO1xuICAgIGxldCB3YiA9IG5ldyBleGNlbC5Xb3JrYm9vaygpO1xuXG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlSWRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlSWRzW2luZGV4XSkgYXMgSFRNTFRhYmxlRWxlbWVudDtcbiAgICAgIGNvbnN0IHNoZWV0TmFtZSA9IHNoZWV0TmFtZXNbaW5kZXhdO1xuICAgICAgY29uc3Qgd3MgPSB3Yi5hZGRXb3Jrc2hlZXQoc2hlZXROYW1lKTtcbiAgICAgIGNvbnN0IHJlID0gYXdhaXQgdGhpcy5leHBvcnQod2IsIHdzLCB0YWJsZSwgbnVsbCwgbnVsbCwgX29wdHMpO1xuICAgICAgd2IgPSByZS53YjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVBc0ZpbGUod2IsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlnKjkuIDpobXkuK3lr7zlh7rlpJrkuKp0YWJsZSwg5q+P5LiqdGFibGXpu5jorqTpl7TpmpQx5YiXXG4gICAqL1xuICBhc3luYyBleHBvcnRUYWJsZVBhcmFsbGVsKHRhYmxlSWRzOiBzdHJpbmdbXSwgZmlsZU5hbWU6IHN0cmluZywgZ2FwID0gMSwgX29wdHM/OiBhbnkpIHtcbiAgICBjb25zdCBleGNlbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZXhjZWwpO1xuXG4gICAgbGV0IHdiID0gbmV3IGV4Y2VsLldvcmtib29rKCk7XG4gICAgY29uc3Qgd3MgPSB3Yi5hZGRXb3Jrc2hlZXQoZmlsZU5hbWUpO1xuICAgIGxldCBjdXJzb3IgPSAnQSc7ICAgIC8vIOS7juesrOS4gOWIl+W8gOWni+WvvOWHuu+8jOW5tuWIl+WHoOS4qnRhYmxlXG5cbiAgICBmb3IgKGNvbnN0IHRhYmxlSWQgb2YgdGFibGVJZHMpIHtcbiAgICAgIGNvbnN0IHRhYmxlID0gdGhpcy5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0YWJsZUlkKSBhcyBIVE1MVGFibGVFbGVtZW50O1xuICAgICAgY29uc3QgcmUgPSBhd2FpdCB0aGlzLmV4cG9ydCh3Yiwgd3MsIHRhYmxlLCBjdXJzb3IsIG51bGwsIF9vcHRzKTtcbiAgICAgIGNvbnN0IGxhc3RDb2wgPSByZS5jb2xzW3JlLmNvbHMubGVuZ3RoIC0gMV07XG4gICAgICBjdXJzb3IgPSBuZXh0Q29sT2ZDZWxsKGxhc3RDb2wpO1xuICAgICAgZm9yIChsZXQgayA9IDA7IGsgPCBnYXA7IGsrKykge1xuICAgICAgICBjdXJzb3IgPSBuZXh0Q29sT2ZDZWxsKGN1cnNvcik7XG4gICAgICB9XG4gICAgICB3YiA9IHJlLndiO1xuICAgIH1cblxuICAgIGF3YWl0IHRoaXMuc2F2ZUFzRmlsZSh3YiwgZmlsZU5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIOWcqOS4gOmhteS4reWeguebtOWvvOWHuuWkmuS4qnRhYmxlXG4gICAqL1xuICBhc3luYyBleHBvcnRUYWJsZVZlcnRpY2FsKHRhYmxlSWRzOiBzdHJpbmdbXSwgZmlsZU5hbWU6IHN0cmluZywgZ2FwID0gMCwgX29wdHM/OiBhbnkpIHtcbiAgICBsZXQgcm93T2Zmc2V0ID0gMDtcbiAgICBjb25zdCBleGNlbCA9IGF3YWl0IGZpcnN0VmFsdWVGcm9tKHRoaXMuZXhjZWwpO1xuICAgIGxldCB3YiA9IG5ldyBleGNlbC5Xb3JrYm9vaygpO1xuICAgIGNvbnN0IHdzID0gd2IuYWRkV29ya3NoZWV0KGZpbGVOYW1lKTtcblxuICAgIGZvciAoY29uc3QgdGFibGVJZCBvZiB0YWJsZUlkcykge1xuICAgICAgY29uc3QgdGFibGUgPSB0aGlzLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHRhYmxlSWQpIGFzIEhUTUxUYWJsZUVsZW1lbnQ7XG4gICAgICBjb25zdCByZSA9IGF3YWl0IHRoaXMuZXhwb3J0KHdiLCB3cywgdGFibGUsIG51bGwsIHJvd09mZnNldCwgX29wdHMpO1xuICAgICAgcm93T2Zmc2V0ICs9IHJlLnJvd3MubGVuZ3RoICsgZ2FwO1xuICAgICAgd2IgPSByZS53YjtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVBc0ZpbGUod2IsIGZpbGVOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiDlr7zlh7pkb20gdGFibGVcbiAgICogY29sQ3Vyc29yOiDmoIforrDotbflp4vliJdcbiAgICogcm93T2Zmc2V0OiDlgY/np7vnmoTooYzmlbBcbiAgICogQHJldHVybiDov5Tlm57mnIDlkI7kuIDliJfnmoTliJflkI1cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXhwb3J0KHdiOiBhbnksIHdzOiBhbnksIHRhYmxlOiBIVE1MVGFibGVFbGVtZW50LCBjb2xDdXJzb3I/OiBzdHJpbmcgfCBudWxsLCByb3dPZmZzZXQ/OiBudW1iZXIgfCBudWxsLCBfb3B0cz86IGFueSkge1xuICAgIGlmICghX29wdHMpIHtcbiAgICAgIF9vcHRzID0geyBjZWxsRGF0ZXM6IHRydWUsIGRhdGVORjogJ3l5eXkvTS9kJyB9OyAgICAvLyDpu5jorqTnmoTml6XmnJ/moLzlvI9cbiAgICB9IGVsc2Uge1xuICAgICAgX29wdHMuY2VsbERhdGVzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBjb25zdCByZWYgPSBhd2FpdCB0aGlzLnBhcnNlRWxlbWVudCh0YWJsZSwgX29wdHMpO1xuICAgIGxldCBjb2xPZmZzZXQgPSAwOyAgICAvLyBjb2xDdXJzb3LlgY/np7vph4/vvIzpu5jorqTkuLowXG4gICAgaWYgKGNvbEN1cnNvcikge1xuICAgICAgY29uc3QgYyA9IHdzLmdldENvbHVtbihjb2xDdXJzb3IpO1xuICAgICAgY29sT2Zmc2V0ID0gYy5udW1iZXIgLSAxO1xuICAgIH1cbiAgICByb3dPZmZzZXQgPSByb3dPZmZzZXQgfHwgMDsgICAvLyByb3dPZmZzZXTpu5jorqTkuLowXG4gICAgY29uc3QgY2VsbE1hcDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuICAgIE9iamVjdC5rZXlzKHJlZikuc29ydCgpLmZvckVhY2goY2VsbEFsaWFzID0+IHtcbiAgICAgIGlmICghY2VsbEFsaWFzLnN0YXJ0c1dpdGgoJyEnKSkge1xuICAgICAgICBsZXQgcm93TnVtID0gcm93T2ZDZWxsKGNlbGxBbGlhcyk7XG4gICAgICAgIHJvd051bSA9IFN0cmluZyhwYXJzZUludChyb3dOdW0sIDEwKSArIHJvd09mZnNldCk7XG4gICAgICAgIGNvbnN0IGNvbE51bSA9IGNvbE51bWJlck9mQ2VsbChjZWxsQWxpYXMpO1xuICAgICAgICBjb25zdCBjb2wgPSB3cy5nZXRDb2x1bW4oY29sT2Zmc2V0ICsgY29sTnVtKTsgLy8g5qC55o2u5YGP56e76YeP5om+5Ye65omA5Zyo55qE5YiXXG4gICAgICAgIGNvbnN0IGZpbmFsQ2VsbCA9IGNvbC5sZXR0ZXIgKyByb3dOdW07XG4gICAgICAgIGNlbGxNYXBbZmluYWxDZWxsXSA9IHJlZltjZWxsQWxpYXNdO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGNvbFNldCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICAgIE9iamVjdC5rZXlzKGNlbGxNYXApLmZvckVhY2goayA9PiB7XG4gICAgICBjb2xTZXQuYWRkKGNvbE9mQ2VsbChrKSk7XG4gICAgfSk7XG4gICAgbGV0IGNvbHMgPSBBcnJheS5mcm9tKGNvbFNldCk7XG4gICAgLy8g5Zug5Li6ZXhjZWznmoTliJfpg73mmK/ov57nu63nmoTvvIzlpoLmnpzlr7zlh7p0YWJsZeWtmOWcqOi3qOWIl+eahOivnei/memHjOmdouWPr+iDveWNtOWwkeafkOS4gOWIl++8jOaJgOS7pemcgOimgeihpeWFhee8uuWwkeeahOWIl+WQjeS/neivgei/meS4gOauteaYr+i/nue7reeahFxuICAgIGxldCBjdXJzb3IgPSBjb2xzWzBdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVmWychY29scyddLmxlbmd0aCAtIDE7IGkrKykge1xuICAgICAgY29uc3QgbmV4dCA9IG5leHRDb2xPZkNlbGwoY3Vyc29yKTtcbiAgICAgIGNvbFNldC5hZGQobmV4dCk7XG4gICAgICBjdXJzb3IgPSBuZXh0O1xuICAgIH1cbiAgICBjb2xzID0gQXJyYXkuZnJvbShjb2xTZXQpLnNvcnQoKGE6IHN0cmluZywgYjogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAoYS5sZW5ndGggPT09IGIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBhLmxvY2FsZUNvbXBhcmUoYik7XG4gICAgICB9IGVsc2UgaWYgKGEubGVuZ3RoID4gYi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgICB9IGVsc2UgaWYgKGIubGVuZ3RoID4gYS5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIC0xO1xuICAgIH0pO1xuICAgIC8vIOi1i+WAvFxuICAgIE9iamVjdC5rZXlzKGNlbGxNYXApLmZvckVhY2goYWxpYXMgPT4ge1xuICAgICAgY29uc3QgY2VsbCA9IHdzLmdldENlbGwoYWxpYXMpO1xuICAgICAgY29uc3QgY2VsbENvbmZpZyA9IGNlbGxNYXBbYWxpYXNdO1xuICAgICAgaWYgKGNlbGxDb25maWcudCA9PT0gJ2QnKSB7ICAgLy8g5pel5pyf5qC85byP6ZyA5qC85byP5YyW5ZCO5pi+56S677yM5o2i6KiA5LmL6L2s5Li65LqG5a2X56ym5LiyXG4gICAgICAgIGNlbGwudmFsdWUgPSB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShjZWxsQ29uZmlnLnYsIGNlbGxDb25maWcueik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjZWxsLnZhbHVlID0gY2VsbENvbmZpZy52O1xuICAgICAgfVxuICAgICAgLy8g6buY6K6k5bCx5pyJ6L655qGG55qEXG4gICAgICBpZiAoY2VsbENvbmZpZy5zdHlsZS5ib3JkZXJlZCkgeyAgICAvLyDooajnpLrpnIDopoHliqDovrnmoYZcbiAgICAgICAgY2VsbC5zdHlsZS5ib3JkZXIgPSB7XG4gICAgICAgICAgdG9wOiB7IHN0eWxlOiAndGhpbicgfSxcbiAgICAgICAgICBsZWZ0OiB7IHN0eWxlOiAndGhpbicgfSxcbiAgICAgICAgICBib3R0b206IHsgc3R5bGU6ICd0aGluJyB9LFxuICAgICAgICAgIHJpZ2h0OiB7IHN0eWxlOiAndGhpbicgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgLy8g6buY6K6k5YaF5a655Z6C55u05bGF5Lit77yM5bem5Y+z5bGF5Lit5LiN5LiA5a6aXG4gICAgICBjZWxsLnN0eWxlLmFsaWdubWVudCA9IHtcbiAgICAgICAgaG9yaXpvbnRhbDogY2VsbENvbmZpZy5zdHlsZS5hbGlnbixcbiAgICAgICAgdmVydGljYWw6ICdtaWRkbGUnLFxuICAgICAgICB3cmFwVGV4dDogdHJ1ZVxuICAgICAgfTtcbiAgICAgIC8vIOWtl+S9k+m7mOiupOS4uuWui+S9k1xuICAgICAgY2VsbC5zdHlsZS5mb250ID0ge1xuICAgICAgICBib2xkOiBjZWxsQ29uZmlnLnN0eWxlLmJvbGQsXG4gICAgICAgIG5hbWU6ICflrovkvZMnLFxuICAgICAgICBzaXplOiBjZWxsQ29uZmlnLnN0eWxlLnBvdW5kIC8vIOWtl+WPt1xuICAgICAgfTtcbiAgICAgIC8vIOiDjOaZr+iJsi/liY3mma/oibJcbiAgICAgIGlmIChjZWxsQ29uZmlnLnN0eWxlLmJhY2tncm91bmQpIHtcbiAgICAgICAgY2VsbC5maWxsID0ge1xuICAgICAgICAgIHR5cGU6ICdwYXR0ZXJuJyxcbiAgICAgICAgICBwYXR0ZXJuOiAnc29saWQnLFxuICAgICAgICAgIGZnQ29sb3I6IHsgYXJnYjogY2VsbENvbmZpZy5zdHlsZS5iYWNrZ3JvdW5kIH0sICAgIC8vIOWunumZheS4imZnQ29sb3LmmK/nkIbop6PkuIrnmoTog4zmma/oibLvvIzogIzkuI3mmK/liY3mma/oibLvvIzkuI3nn6XpgZNleGNlbOaAjuS5iOWumuS5ieeahFxuICAgICAgICAgIC8vIGJnQ29sb3I6IHthcmdiOiAnZmZkOGU2ZGUnfVxuICAgICAgICB9IGFzIGFueTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICAvLyDorr7nva7mr4/ooYznmoTpq5jluqZcbiAgICAocmVmWychcm93cyddIGFzIGFueVtdKS5mb3JFYWNoKChyb3dDb25maWcsIHJvd0luZGV4KSA9PiB7XG4gICAgICBjb25zdCByb3cgPSB3cy5nZXRSb3cocm93SW5kZXggKyByb3dPZmZzZXQgKyAxKTtcbiAgICAgIHJvdy5oZWlnaHQgPSByb3dDb25maWcuaGVpZ2h0O1xuICAgIH0pO1xuICAgIC8vIOiuvue9ruWIl+WuvVxuICAgIChyZWZbJyFjb2xzJ10gYXMgYW55W10pLmZvckVhY2goKGNvbENvbmZpZywgY29sSW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IGNvbEFsaWFzID0gY29sc1tjb2xJbmRleF07XG4gICAgICBjb25zdCBjb2wgPSB3cy5nZXRDb2x1bW4oY29sQWxpYXMpO1xuICAgICAgaWYgKGNvbENvbmZpZy53aWR0aCkge1xuICAgICAgICBjb2wud2lkdGggPSBjb2xDb25maWcud2lkdGg7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8g5ZCI5bm25Y2V5YWD5qC8LCDnlLHkuo7kuI3kuIDlrprmnInvvIzmiYDku6XopoHliKTmlq3kuIDkuItcbiAgICAocmVmWychbWVyZ2VzJ10gYXMgYW55W10gfCBudWxsKT8uZm9yRWFjaChtZXJnZVBhcmFtID0+IHtcbiAgICAgIGNvbnN0IHMgPSBtZXJnZVBhcmFtWydzJ107XG4gICAgICBjb25zdCBlID0gbWVyZ2VQYXJhbVsnZSddO1xuICAgICAgY29uc3Qgc3RhcnRDZWxsID0gd3MuZ2V0Q2VsbChyb3dPZmZzZXQgKyBzLnIgKyAxLCBjb2xPZmZzZXQgKyBzLmMgKyAxKTtcbiAgICAgIGNvbnN0IGVuZENlbGwgPSB3cy5nZXRDZWxsKHJvd09mZnNldCArIGUuciArIDEsIGNvbE9mZnNldCArIGUuYyArIDEpO1xuICAgICAgd3MubWVyZ2VDZWxscyhbc3RhcnRDZWxsLmFkZHJlc3MsIGVuZENlbGwuYWRkcmVzc10pO1xuICAgIH0pO1xuICAgIHJldHVybiB7IHdiLCBjb2xzLCByb3dzOiByZWZbJyFyb3dzJ10gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiDkv53lrZhXb3JrYm9va+WIsOejgeebmOS4ilxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBzYXZlQXNGaWxlKHdiOiBhbnksIGZpbGVOYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBleGNlbERhdGEgPSBhd2FpdCB3Yi54bHN4LndyaXRlQnVmZmVyKCk7XG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtleGNlbERhdGFdLCB7IHR5cGU6IE1lZGlhVHlwZS5YbHN4IH0pO1xuICAgIHRoaXMuZmlsZU1hbmFnZXIuc2F2ZShibG9iLCBmaWxlTmFtZSArICcueGxzeCcpXG4gIH1cbn1cblxuLyoqXG4gKiDmoLnmja7lvZPliY3nmoTljZXlhYPmoLzmib7liLDkuIvkuIDliJfnmoTlnLDlnYBcbiAqIOmHh+eUqOWAkuW6j+i/m+S9jeazle+8jOi/meagt+WwseS4jemcgOimgemAkuW9kuS6hlxuICovXG5mdW5jdGlvbiBuZXh0Q29sT2ZDZWxsKGNlbGw6IHN0cmluZykge1xuICAvLyDlhYjmiorlrZfmr43lkozmlbDlrZfliIblvIDvvIzlrZfmr43mmK/liJfvvIzmlbDlrZfmmK/ooYzvvIzlgJLluo/mjpLliJdcbiAgY29uc3QgYXJncyA9IGNlbGwubWF0Y2goQ0hBUl9QQVRURVJOKSEucmV2ZXJzZSgpO1xuICBsZXQgbmVlZEFwcGVuZCA9IGZhbHNlO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBhcmcgPSBhcmdzW2ldO1xuICAgIGlmIChhcmcgIT09ICdaJykge1xuICAgICAgY29uc3QgaWR4ID0gRVhDRUxfQ09MX0FMSUFTLmluZGV4T2YoYXJnKTtcbiAgICAgIGFyZ3NbaV0gPSBFWENFTF9DT0xfQUxJQVNbaWR4ICsgMV07XG4gICAgICBicmVhaztcbiAgICB9IGVsc2Uge1xuICAgICAgYXJnc1tpXSA9ICdBJztcbiAgICAgIGlmIChpID09PSBhcmdzLmxlbmd0aCAtIDEpIHsgICAgLy8g6K+05piO5piv5pyA5ZCO5LiA5Liq5LqG77yM6ZyA6KaB6KGlQVxuICAgICAgICBuZWVkQXBwZW5kID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKG5lZWRBcHBlbmQpIHtcbiAgICBhcmdzLnB1c2goJ0EnKTtcbiAgfVxuICByZXR1cm4gYXJncy5yZXZlcnNlKCkuam9pbignJyk7ICAgIC8vIOacgOe7iOeahOe7k+aenO+8jOWPjei9rOWGjeWQiOW5tlxufVxuXG4vKipcbiAqIOiOt+WPluWNleWFg+agvOeahOihjFxuICovXG5mdW5jdGlvbiByb3dPZkNlbGwoY2VsbDogc3RyaW5nKSB7XG4gIHJldHVybiBjZWxsLm1hdGNoKE5VTUJFUl9QQVRURVJOKSEuam9pbignJyk7XG59XG5cbi8qKlxuICog6I635Y+W5Y2V5YWD5qC855qE5YiXXG4gKi9cbmZ1bmN0aW9uIGNvbE9mQ2VsbChjZWxsOiBzdHJpbmcpIHtcbiAgcmV0dXJuIGNlbGwubWF0Y2goQ0hBUl9QQVRURVJOKSEuam9pbignJyk7XG59XG5cbi8qKlxuICog5Y2V5YWD5qC855qE5YiX5Y+3XG4gKiDlvZPkvZwyNui/m+WItuiuoeeul+WIl+eahOe8luWPt1xuICovXG5mdW5jdGlvbiBjb2xOdW1iZXJPZkNlbGwoY2VsbDogc3RyaW5nKSB7XG4gIGxldCBjb2wgPSAwO1xuICBjZWxsLm1hdGNoKENIQVJfUEFUVEVSTikhLnJldmVyc2UoKS5mb3JFYWNoKChjLCBpKSA9PiB7XG4gICAgaWYgKGkgPT0gMCkge1xuICAgICAgLy8g5Liq5L2NXG4gICAgICBjb2wgKz0gRVhDRUxfQ09MX0FMSUFTLmluZGV4T2YoYykgKyAxO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDljYHkvY3ku6XkuIpcbiAgICAgIGNvbCArPSAoRVhDRUxfQ09MX0FMSUFTLmluZGV4T2YoYykgKyAxKSAqIGkgKiAyNjtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY29sO1xufVxuIl19
284
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByZWFkc2hlZXQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BhY2thZ2VzL3BsYXRmb3JtLWJyb3dzZXIvc3JjL3NwcmVhZHNoZWV0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNyRCxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUQsT0FBTyxFQUFFLEtBQUssRUFBRSxjQUFjLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLG1CQUFtQixDQUFDOztBQUtuRCxNQUFNLGVBQWUsR0FBRyw0QkFBNEIsQ0FBQztBQUNyRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUM7QUFDaEMsTUFBTSxZQUFZLEdBQUcsV0FBVyxDQUFDO0FBRWpDOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFrQjtJQUgvQjtRQUltQixhQUFRLEdBQWEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3RDLG1CQUFjLEdBQUcsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3hDLGdCQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUU1RCxzQkFBc0I7UUFDTCxVQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7WUFDL0MsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLENBQUMsNERBQTRELENBQUMsRUFBRSxzREFBc0Q7WUFDcEosSUFBSSxDQUFD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LENBQUM7QUFDNUMsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsZUFBZSxDQUFDLElBQVk7SUFDbkMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0lBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkQsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDWCxLQUFLO1lBQ0wsR0FBRyxJQUFJLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ04sT0FBTztZQUNQLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuRCxDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFDSCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSwgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlLCBMT0NBTEVfSUQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lZGlhVHlwZSB9IGZyb20gJ0Bzb2xhci1raXQvY29yZSc7XG5pbXBvcnQgeyBkZWZlciwgZmlyc3RWYWx1ZUZyb20sIG1hcCwgc2hhcmVSZXBsYXkgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZpbGVNYW5hZ2VyIH0gZnJvbSAnLi9maWxlLW1hbmFnZXInO1xuaW1wb3J0IHsgUmVzb3VyY2VMb2FkZXIgfSBmcm9tICcuL3Jlc291cmNlLWxvYWRlcic7XG4vLyDkuI3pu5jorqTpm4bmiJBleGNlbGpz5LqG77yM6ZyA6KaB55qE5pe25YCZ5rOo5YWlWGxzeFNlcnZpY2XliqjmgIHliqDovb3vvIzlm6DkuLrkuI3mmK/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==
@@ -291,6 +291,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
291
291
  const EXCEL_COL_ALIAS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
292
292
  const NUMBER_PATTERN = /[0-9]/g;
293
293
  const CHAR_PATTERN = /[a-zA-Z]/g;
294
+ /**
295
+ * @deprecated 使用 `@composize/excel` 替代
296
+ */
294
297
  class SpreadsheetService {
295
298
  constructor() {
296
299
  this.document = inject(DOCUMENT);
@@ -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@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":["../../../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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solar-angular/platform-browser",
3
- "version": "18.2.0",
3
+ "version": "18.3.0",
4
4
  "sideEffects": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -1,4 +1,7 @@
1
1
  import * as i0 from "@angular/core";
2
+ /**
3
+ * @deprecated 使用 `@composize/excel` 替代
4
+ */
2
5
  export declare class SpreadsheetService {
3
6
  private readonly document;
4
7
  private readonly resourceLoader;