@solar-angular/platform-browser 18.0.7 → 18.1.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.
@@ -6,15 +6,17 @@ export class FileManager {
6
6
  this.document = inject(DOCUMENT);
7
7
  }
8
8
  /**
9
- * Opens a file selection dialog.
10
- * @param options - Options for the file selection.
11
- * @returns A promise that resolves to an array of selected files.
12
- * @see https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
9
+ * Opens a file picker dialog to allow the user to select files.
10
+ *
11
+ * @param options - Configuration options for the file picker.
12
+ * @param options.accept - A string or array of strings specifying the file types accepted by the file picker.
13
+ * @param options.multiple - If `true`, allows multiple file selections.
14
+ * @returns A promise that resolves with an array of selected `File` objects.
13
15
  */
14
16
  pick(options) {
15
17
  const input = this.document.createElement('input');
16
18
  input.type = 'file';
17
- input.accept = options.accept || '';
19
+ input.accept = Array.isArray(options.accept) ? options.accept.join(',') : options.accept || '';
18
20
  input.multiple = !!options.multiple;
19
21
  return new Promise((resolve, reject) => {
20
22
  input.onchange = () => {
@@ -45,4 +47,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
45
47
  providedIn: 'root'
46
48
  }]
47
49
  }] });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvZmlsZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLFdBQVc7SUFIeEI7UUFJbUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQW9DOUM7SUFsQ0M7Ozs7O09BS0c7SUFDSCxJQUFJLENBQUMsT0FBZ0Q7UUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkQsS0FBSyxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7UUFDcEIsS0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztRQUNwQyxLQUFLLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDO1FBRXBDLE9BQU8sSUFBSSxPQUFPLENBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDN0MsS0FBSyxDQUFDLFFBQVEsR0FBRyxHQUFHLEVBQUU7Z0JBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxDQUFDLENBQUM7WUFDRixLQUFLLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQztZQUN2QixLQUFLLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxHQUFXLEVBQUUsUUFBaUI7UUFDM0MsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDbEMsTUFBTSxJQUFJLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsUUFBUSxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFHLENBQUMsQ0FBQTtRQUNwRSxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLENBQUMsSUFBVSxFQUFFLFFBQWdCO1FBQy9CLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN4QyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUMzQixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDakIsQ0FBQzsrR0FwQ1UsV0FBVzttSEFBWCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBET0NVTUVOVCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRmlsZU1hbmFnZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5UKTtcblxuICAvKipcbiAgICogT3BlbnMgYSBmaWxlIHNlbGVjdGlvbiBkaWFsb2cuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGZpbGUgc2VsZWN0aW9uLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byBhbiBhcnJheSBvZiBzZWxlY3RlZCBmaWxlcy5cbiAgICogQHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy96aC1DTi9kb2NzL1dlYi9IVFRQL0Jhc2ljc19vZl9IVFRQL01JTUVfdHlwZXMvQ29tbW9uX3R5cGVzXG4gICAqL1xuICBwaWNrKG9wdGlvbnM6IHsgYWNjZXB0Pzogc3RyaW5nOyBtdWx0aXBsZT86IGJvb2xlYW4gfSkge1xuICAgIGNvbnN0IGlucHV0ID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO1xuICAgIGlucHV0LnR5cGUgPSAnZmlsZSc7XG4gICAgaW5wdXQuYWNjZXB0ID0gb3B0aW9ucy5hY2NlcHQgfHwgJyc7XG4gICAgaW5wdXQubXVsdGlwbGUgPSAhIW9wdGlvbnMubXVsdGlwbGU7XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2U8RmlsZVtdPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpbnB1dC5vbmNoYW5nZSA9ICgpID0+IHtcbiAgICAgICAgcmVzb2x2ZShBcnJheS5mcm9tKGlucHV0LmZpbGVzIHx8IFtdKSk7XG4gICAgICB9O1xuICAgICAgaW5wdXQub25lcnJvciA9IHJlamVjdDtcbiAgICAgIGlucHV0LmNsaWNrKCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZCh1cmw6IHN0cmluZywgZmlsZW5hbWU/OiBzdHJpbmcpIHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7XG4gICAgY29uc3QgYmxvYiA9IGF3YWl0IHJlc3BvbnNlLmJsb2IoKTtcbiAgICB0aGlzLnNhdmUoYmxvYiwgZmlsZW5hbWUgPz8gbmV3IFVSTCh1cmwpLnBhdGhuYW1lLnNwbGl0KCcvJykucG9wKCkhKVxuICAgIHJldHVybiBibG9iO1xuICB9XG5cbiAgc2F2ZShibG9iOiBCbG9iLCBmaWxlbmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYW5jaG9yID0gdGhpcy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgYW5jaG9yLmhyZWYgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO1xuICAgIGFuY2hvci5kb3dubG9hZCA9IGZpbGVuYW1lO1xuICAgIGFuY2hvci5jbGljaygpO1xuICB9XG59XG4iXX0=
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1tYW5hZ2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvcGxhdGZvcm0tYnJvd3Nlci9zcmMvZmlsZS1tYW5hZ2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLbkQsTUFBTSxPQUFPLFdBQVc7SUFIeEI7UUFJbUIsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztLQXNDOUM7SUFwQ0M7Ozs7Ozs7T0FPRztJQUNILElBQUksQ0FBQyxPQUEyRDtRQUM5RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRCxLQUFLLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztRQUNwQixLQUFLLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDL0YsS0FBSyxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUVwQyxPQUFPLElBQUksT0FBTyxDQUFTLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1lBQzdDLEtBQUssQ0FBQyxRQUFRLEdBQUcsR0FBRyxFQUFFO2dCQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekMsQ0FBQyxDQUFDO1lBQ0YsS0FBSyxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7WUFDdkIsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBVyxFQUFFLFFBQWlCO1FBQzNDLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsSUFBSSxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRyxDQUFDLENBQUE7UUFDcEUsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQVUsRUFBRSxRQUFnQjtRQUMvQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRCxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDeEMsTUFBTSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7UUFDM0IsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2pCLENBQUM7K0dBdENVLFdBQVc7bUhBQVgsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEZpbGVNYW5hZ2VyIHtcbiAgcHJpdmF0ZSByZWFkb25seSBkb2N1bWVudCA9IGluamVjdChET0NVTUVOVCk7XG5cbiAgLyoqXG4gICAqIE9wZW5zIGEgZmlsZSBwaWNrZXIgZGlhbG9nIHRvIGFsbG93IHRoZSB1c2VyIHRvIHNlbGVjdCBmaWxlcy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBmaWxlIHBpY2tlci5cbiAgICogQHBhcmFtIG9wdGlvbnMuYWNjZXB0IC0gQSBzdHJpbmcgb3IgYXJyYXkgb2Ygc3RyaW5ncyBzcGVjaWZ5aW5nIHRoZSBmaWxlIHR5cGVzIGFjY2VwdGVkIGJ5IHRoZSBmaWxlIHBpY2tlci5cbiAgICogQHBhcmFtIG9wdGlvbnMubXVsdGlwbGUgLSBJZiBgdHJ1ZWAsIGFsbG93cyBtdWx0aXBsZSBmaWxlIHNlbGVjdGlvbnMuXG4gICAqIEByZXR1cm5zIEEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYW4gYXJyYXkgb2Ygc2VsZWN0ZWQgYEZpbGVgIG9iamVjdHMuXG4gICAqL1xuICBwaWNrKG9wdGlvbnM6IHsgYWNjZXB0Pzogc3RyaW5nIHwgc3RyaW5nW107IG11bHRpcGxlPzogYm9vbGVhbiB9KSB7XG4gICAgY29uc3QgaW5wdXQgPSB0aGlzLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7XG4gICAgaW5wdXQudHlwZSA9ICdmaWxlJztcbiAgICBpbnB1dC5hY2NlcHQgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMuYWNjZXB0KSA/IG9wdGlvbnMuYWNjZXB0LmpvaW4oJywnKSA6IG9wdGlvbnMuYWNjZXB0IHx8ICcnO1xuICAgIGlucHV0Lm11bHRpcGxlID0gISFvcHRpb25zLm11bHRpcGxlO1xuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlPEZpbGVbXT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgaW5wdXQub25jaGFuZ2UgPSAoKSA9PiB7XG4gICAgICAgIHJlc29sdmUoQXJyYXkuZnJvbShpbnB1dC5maWxlcyB8fCBbXSkpO1xuICAgICAgfTtcbiAgICAgIGlucHV0Lm9uZXJyb3IgPSByZWplY3Q7XG4gICAgICBpbnB1dC5jbGljaygpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWQodXJsOiBzdHJpbmcsIGZpbGVuYW1lPzogc3RyaW5nKSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh1cmwpO1xuICAgIGNvbnN0IGJsb2IgPSBhd2FpdCByZXNwb25zZS5ibG9iKCk7XG4gICAgdGhpcy5zYXZlKGJsb2IsIGZpbGVuYW1lID8/IG5ldyBVUkwodXJsKS5wYXRobmFtZS5zcGxpdCgnLycpLnBvcCgpISlcbiAgICByZXR1cm4gYmxvYjtcbiAgfVxuXG4gIHNhdmUoYmxvYjogQmxvYiwgZmlsZW5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGFuY2hvciA9IHRoaXMuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgIGFuY2hvci5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICBhbmNob3IuZG93bmxvYWQgPSBmaWxlbmFtZTtcbiAgICBhbmNob3IuY2xpY2soKTtcbiAgfVxufVxuIl19
@@ -8,15 +8,17 @@ class FileManager {
8
8
  this.document = inject(DOCUMENT);
9
9
  }
10
10
  /**
11
- * Opens a file selection dialog.
12
- * @param options - Options for the file selection.
13
- * @returns A promise that resolves to an array of selected files.
14
- * @see https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
11
+ * Opens a file picker dialog to allow the user to select files.
12
+ *
13
+ * @param options - Configuration options for the file picker.
14
+ * @param options.accept - A string or array of strings specifying the file types accepted by the file picker.
15
+ * @param options.multiple - If `true`, allows multiple file selections.
16
+ * @returns A promise that resolves with an array of selected `File` objects.
15
17
  */
16
18
  pick(options) {
17
19
  const input = this.document.createElement('input');
18
20
  input.type = 'file';
19
- input.accept = options.accept || '';
21
+ input.accept = Array.isArray(options.accept) ? options.accept.join(',') : options.accept || '';
20
22
  input.multiple = !!options.multiple;
21
23
  return new Promise((resolve, reject) => {
22
24
  input.onchange = () => {
@@ -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 selection dialog.\n * @param options - Options for the file selection.\n * @returns A promise that resolves to an array of selected files.\n * @see https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types\n */\n pick(options: { accept?: string; multiple?: boolean }) {\n const input = this.document.createElement('input');\n input.type = 'file';\n input.accept = 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 } from '@angular/core';\nimport { MediaType } from '@solar-kit/core';\nimport { defer, firstValueFrom, map, shareReplay } from 'rxjs';\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 datePipe = new DatePipe('zh-CN');\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 /**\n * 根据当前的单元格找到下一列的地址\n * 采用倒序进位法,这样就不需要递归了\n */\n private 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 */\n private rowOfCell(cell: string) {\n return cell.match(NUMBER_PATTERN)!.join('');\n }\n\n /**\n * 获取单元格的列\n */\n private colOfCell(cell: string) {\n return cell.match(CHAR_PATTERN)!.join('');\n }\n\n /**\n * 单元格的列号\n * 当作26进制计算列的编号\n */\n private 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\n private async parseDomTable(table: HTMLElement, _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 exportDomTableById(tableId: string, fileName: string, _opts?: any) {\n const table = this.document.getElementById(tableId)!;\n const excel = await firstValueFrom(this.excel);\n const wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n const re = await this.exportDomTable(wb, ws, table, null, null, _opts);\n await this.saveAsFile(re.wb, fileName);\n }\n\n /**\n * 导出多个table, 内容放在多个sheet上\n */\n async exportDomTableSheets(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])!;\n const sheetName = sheetNames[index];\n const ws = wb.addWorksheet(sheetName);\n const re = await this.exportDomTable(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 exportDomTableParallel(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)!;\n const re = await this.exportDomTable(wb, ws, table, cursor, null, _opts);\n const lastCol = re.cols[re.cols.length - 1];\n cursor = this.nextColOfCell(lastCol);\n for (let k = 0; k < gap; k++) {\n cursor = this.nextColOfCell(cursor);\n }\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 在一页中垂直导出多个table\n */\n async exportDomTableVertical(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)!;\n const re = await this.exportDomTable(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 exportDomTable(wb: any, ws: any, table: HTMLElement, 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.parseDomTable(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 = this.rowOfCell(cellAlias);\n rowNum = String(parseInt(rowNum, 10) + rowOffset);\n const colNum = this.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(this.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 = this.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 const anchor = document.createElement('a');\n anchor.href = URL.createObjectURL(blob);\n anchor.download = fileName + '.xlsx';\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 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 } from '@angular/core';\nimport { MediaType } from '@solar-kit/core';\nimport { defer, firstValueFrom, map, shareReplay } from 'rxjs';\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 datePipe = new DatePipe('zh-CN');\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 /**\n * 根据当前的单元格找到下一列的地址\n * 采用倒序进位法,这样就不需要递归了\n */\n private 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 */\n private rowOfCell(cell: string) {\n return cell.match(NUMBER_PATTERN)!.join('');\n }\n\n /**\n * 获取单元格的列\n */\n private colOfCell(cell: string) {\n return cell.match(CHAR_PATTERN)!.join('');\n }\n\n /**\n * 单元格的列号\n * 当作26进制计算列的编号\n */\n private 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\n private async parseDomTable(table: HTMLElement, _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 exportDomTableById(tableId: string, fileName: string, _opts?: any) {\n const table = this.document.getElementById(tableId)!;\n const excel = await firstValueFrom(this.excel);\n const wb = new excel.Workbook();\n const ws = wb.addWorksheet(fileName);\n const re = await this.exportDomTable(wb, ws, table, null, null, _opts);\n await this.saveAsFile(re.wb, fileName);\n }\n\n /**\n * 导出多个table, 内容放在多个sheet上\n */\n async exportDomTableSheets(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])!;\n const sheetName = sheetNames[index];\n const ws = wb.addWorksheet(sheetName);\n const re = await this.exportDomTable(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 exportDomTableParallel(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)!;\n const re = await this.exportDomTable(wb, ws, table, cursor, null, _opts);\n const lastCol = re.cols[re.cols.length - 1];\n cursor = this.nextColOfCell(lastCol);\n for (let k = 0; k < gap; k++) {\n cursor = this.nextColOfCell(cursor);\n }\n wb = re.wb;\n }\n\n await this.saveAsFile(wb, fileName);\n }\n\n /**\n * 在一页中垂直导出多个table\n */\n async exportDomTableVertical(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)!;\n const re = await this.exportDomTable(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 exportDomTable(wb: any, ws: any, table: HTMLElement, 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.parseDomTable(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 = this.rowOfCell(cellAlias);\n rowNum = String(parseInt(rowNum, 10) + rowOffset);\n const colNum = this.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(this.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 = this.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 const anchor = document.createElement('a');\n anchor.href = URL.createObjectURL(blob);\n anchor.download = fileName + '.xlsx';\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 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/file-manager.d.ts CHANGED
@@ -2,13 +2,15 @@ import * as i0 from "@angular/core";
2
2
  export declare class FileManager {
3
3
  private readonly document;
4
4
  /**
5
- * Opens a file selection dialog.
6
- * @param options - Options for the file selection.
7
- * @returns A promise that resolves to an array of selected files.
8
- * @see https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
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.
9
11
  */
10
12
  pick(options: {
11
- accept?: string;
13
+ accept?: string | string[];
12
14
  multiple?: boolean;
13
15
  }): Promise<File[]>;
14
16
  download(url: string, filename?: string): Promise<Blob>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solar-angular/platform-browser",
3
- "version": "18.0.7",
3
+ "version": "18.1.1",
4
4
  "sideEffects": false,
5
5
  "publishConfig": {
6
6
  "access": "public"