@delon/abc 12.2.1 → 12.4.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.
Files changed (91) hide show
  1. package/bundles/abc.umd.js +3 -3
  2. package/bundles/autoFocus.umd.js +4 -4
  3. package/bundles/avatarList.umd.js +4 -4
  4. package/bundles/count-down.umd.js +4 -4
  5. package/bundles/datePicker.umd.js +5 -5
  6. package/bundles/downFile.umd.js +4 -4
  7. package/bundles/edit.umd.js +4 -4
  8. package/bundles/ellipsis.umd.js +4 -4
  9. package/bundles/errorCollect.umd.js +4 -4
  10. package/bundles/exception.umd.js +12 -9
  11. package/bundles/exception.umd.js.map +1 -1
  12. package/bundles/footerToolbar.umd.js +4 -4
  13. package/bundles/fullContent.umd.js +6 -8
  14. package/bundles/fullContent.umd.js.map +1 -1
  15. package/bundles/globalFooter.umd.js +4 -4
  16. package/bundles/grid.umd.js +3 -3
  17. package/bundles/image.umd.js +3 -3
  18. package/bundles/let.umd.js +4 -4
  19. package/bundles/loading.umd.js +6 -8
  20. package/bundles/loading.umd.js.map +1 -1
  21. package/bundles/lodop.umd.js +5 -7
  22. package/bundles/lodop.umd.js.map +1 -1
  23. package/bundles/media.umd.js +5 -7
  24. package/bundles/media.umd.js.map +1 -1
  25. package/bundles/noticeIcon.umd.js +4 -4
  26. package/bundles/onboarding.umd.js +6 -8
  27. package/bundles/onboarding.umd.js.map +1 -1
  28. package/bundles/pageHeader.umd.js +4 -4
  29. package/bundles/pdf.umd.js +4 -4
  30. package/bundles/qr.umd.js +3 -3
  31. package/bundles/quickMenu.umd.js +4 -4
  32. package/bundles/result.umd.js +4 -4
  33. package/bundles/reuseTab.umd.js +15 -26
  34. package/bundles/reuseTab.umd.js.map +1 -1
  35. package/bundles/table.umd.js +251 -147
  36. package/bundles/table.umd.js.map +1 -1
  37. package/bundles/tagSelect.umd.js +4 -4
  38. package/bundles/view.umd.js +4 -4
  39. package/bundles/xlsx.umd.js +30 -37
  40. package/bundles/xlsx.umd.js.map +1 -1
  41. package/bundles/zip.umd.js +5 -7
  42. package/bundles/zip.umd.js.map +1 -1
  43. package/esm2015/exception/exception.component.js +7 -4
  44. package/esm2015/exception/exception.module.js +3 -2
  45. package/esm2015/lodop/lodop.service.js +1 -1
  46. package/esm2015/reuse-tab/reuse-tab-context-menu.component.js +2 -2
  47. package/esm2015/reuse-tab/reuse-tab-context.service.js +4 -13
  48. package/esm2015/reuse-tab/reuse-tab.component.js +7 -7
  49. package/esm2015/st/index.js +2 -0
  50. package/esm2015/st/st-column-source.js +28 -7
  51. package/esm2015/st/st-data-source.js +4 -4
  52. package/esm2015/st/st-export.js +9 -3
  53. package/esm2015/st/st-filter.component.js +149 -0
  54. package/esm2015/st/st-td.component.js +232 -0
  55. package/esm2015/st/st.component.js +28 -118
  56. package/esm2015/st/st.config.js +1 -2
  57. package/esm2015/st/st.interfaces.js +1 -1
  58. package/esm2015/st/st.module.js +9 -3
  59. package/esm2015/st/st.types.js +1 -1
  60. package/esm2015/st/table.js +3 -1
  61. package/esm2015/xlsx/xlsx.service.js +23 -29
  62. package/esm2015/xlsx/xlsx.types.js +1 -1
  63. package/esm2015/zip/zip.service.js +1 -1
  64. package/exception/exception.component.d.ts +3 -2
  65. package/exception/exception.metadata.json +1 -1
  66. package/fesm2015/exception.js +8 -4
  67. package/fesm2015/exception.js.map +1 -1
  68. package/fesm2015/lodop.js.map +1 -1
  69. package/fesm2015/reuseTab.js +10 -19
  70. package/fesm2015/reuseTab.js.map +1 -1
  71. package/fesm2015/table.js +447 -132
  72. package/fesm2015/table.js.map +1 -1
  73. package/fesm2015/xlsx.js +22 -28
  74. package/fesm2015/xlsx.js.map +1 -1
  75. package/fesm2015/zip.js.map +1 -1
  76. package/package.json +4 -4
  77. package/reuse-tab/reuse-tab.component.d.ts +1 -1
  78. package/reuse-tab/reuseTab.metadata.json +1 -1
  79. package/st/index.d.ts +1 -0
  80. package/st/st-filter.component.d.ts +18 -0
  81. package/st/st-td.component.d.ts +27 -0
  82. package/st/st.component.d.ts +8 -23
  83. package/st/st.interfaces.d.ts +57 -3
  84. package/st/st.types.d.ts +6 -0
  85. package/st/style/index.less +28 -12
  86. package/st/table.d.ts +2 -0
  87. package/st/table.metadata.json +1 -1
  88. package/sv/style/index.less +1 -0
  89. package/theme-default.less +3 -0
  90. package/xlsx/xlsx.metadata.json +1 -1
  91. package/xlsx/xlsx.types.d.ts +3 -0
package/fesm2015/xlsx.js CHANGED
@@ -3,7 +3,6 @@ import * as i1 from '@angular/common/http';
3
3
  import { HttpClient } from '@angular/common/http';
4
4
  import * as i0 from '@angular/core';
5
5
  import { Injectable, NgZone, Directive, Input, NgModule } from '@angular/core';
6
- import { saveAs } from 'file-saver';
7
6
  import isUtf8 from 'isutf8';
8
7
  import * as i3 from '@delon/util/config';
9
8
  import { AlainConfigService } from '@delon/util/config';
@@ -27,24 +26,22 @@ class XlsxService {
27
26
  ? Promise.resolve([])
28
27
  : this.lazy.load([this.cog.url].concat(this.cog.modules));
29
28
  }
30
- read(data, options) {
29
+ read(data) {
30
+ const { read, utils: { sheet_to_json } } = XLSX;
31
31
  const ret = {};
32
- if (options.type === 'binary') {
33
- const buf = new Uint8Array(data);
34
- if (!isUtf8(buf)) {
35
- try {
36
- data = cptable.utils.decode(936, buf);
37
- options.type = 'string';
38
- }
39
- catch (_a) {
40
- options.type = 'array';
41
- }
32
+ const buf = new Uint8Array(data);
33
+ let type = 'array';
34
+ if (!isUtf8(buf)) {
35
+ try {
36
+ data = cptable.utils.decode(936, buf);
37
+ type = 'string';
42
38
  }
39
+ catch (_a) { }
43
40
  }
44
- const wb = XLSX.read(data, options);
41
+ const wb = read(data, { type });
45
42
  wb.SheetNames.forEach((name) => {
46
43
  const sheet = wb.Sheets[name];
47
- ret[name] = XLSX.utils.sheet_to_json(sheet, { header: 1 });
44
+ ret[name] = sheet_to_json(sheet, { header: 1 });
48
45
  });
49
46
  return ret;
50
47
  }
@@ -53,22 +50,18 @@ class XlsxService {
53
50
  */
54
51
  import(fileOrUrl) {
55
52
  return new Promise((resolve, reject) => {
53
+ const r = (data) => this.ngZone.run(() => resolve(this.read(data)));
56
54
  this.init()
57
55
  .then(() => {
58
56
  // from url
59
57
  if (typeof fileOrUrl === 'string') {
60
- this.http.request('GET', fileOrUrl, { responseType: 'arraybuffer' }).subscribe((res) => {
61
- this.ngZone.run(() => resolve(this.read(new Uint8Array(res), { type: 'array' })));
62
- }, (err) => {
63
- reject(err);
64
- });
58
+ this.http.request('GET', fileOrUrl, { responseType: 'arraybuffer' }).subscribe((res) => r(new Uint8Array(res)), (err) => reject(err));
65
59
  return;
66
60
  }
67
61
  // from file
68
62
  const reader = new FileReader();
69
- reader.onload = (e) => {
70
- this.ngZone.run(() => resolve(this.read(e.target.result, { type: 'binary' })));
71
- };
63
+ reader.onload = (e) => r(e.target.result);
64
+ reader.onerror = (e) => reject(e);
72
65
  reader.readAsArrayBuffer(fileOrUrl);
73
66
  })
74
67
  .catch(() => reject(`Unable to load xlsx.js`));
@@ -79,11 +72,13 @@ class XlsxService {
79
72
  return new Promise((resolve, reject) => {
80
73
  this.init()
81
74
  .then(() => {
82
- const wb = XLSX.utils.book_new();
75
+ options = Object.assign({ format: 'xlsx' }, options);
76
+ const { writeFile, utils: { book_new, aoa_to_sheet, book_append_sheet } } = XLSX;
77
+ const wb = book_new();
83
78
  if (Array.isArray(options.sheets)) {
84
79
  options.sheets.forEach((value, index) => {
85
- const ws = XLSX.utils.aoa_to_sheet(value.data);
86
- XLSX.utils.book_append_sheet(wb, ws, value.name || `Sheet${index + 1}`);
80
+ const ws = aoa_to_sheet(value.data);
81
+ book_append_sheet(wb, ws, value.name || `Sheet${index + 1}`);
87
82
  });
88
83
  }
89
84
  else {
@@ -92,9 +87,8 @@ class XlsxService {
92
87
  }
93
88
  if (options.callback)
94
89
  options.callback(wb);
95
- const wbout = XLSX.write(wb, Object.assign({ bookType: 'xlsx', bookSST: false, type: 'array' }, options.opts));
96
- const filename = options.filename || 'export.xlsx';
97
- saveAs(new Blob([wbout], { type: 'application/octet-stream' }), filename);
90
+ const filename = options.filename || `export.${options.format}`;
91
+ writeFile(wb, filename, Object.assign({ bookType: options.format, bookSST: false, type: 'array' }, options.opts));
98
92
  resolve({ filename, wb });
99
93
  })
100
94
  .catch(err => reject(err));
@@ -1 +1 @@
1
- {"version":3,"file":"xlsx.js","sources":["../../../../packages/abc/xlsx/xlsx.service.ts","../../../../packages/abc/xlsx/xlsx.directive.ts","../../../../packages/abc/xlsx/xlsx.module.ts","../../../../packages/abc/xlsx/xlsx.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, NgZone } from '@angular/core';\n\nimport { saveAs } from 'file-saver';\nimport isUtf8 from 'isutf8';\n\nimport { AlainConfigService, AlainXlsxConfig } from '@delon/util/config';\nimport { ZoneOutside } from '@delon/util/decorator';\nimport { LazyResult, LazyService } from '@delon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { XlsxExportOptions, XlsxExportResult, XlsxExportSheet } from './xlsx.types';\n\ndeclare var XLSX: NzSafeAny;\ndeclare var cptable: NzSafeAny;\n\n@Injectable({ providedIn: 'root' })\nexport class XlsxService {\n constructor(\n private http: HttpClient,\n private lazy: LazyService,\n configSrv: AlainConfigService,\n private ngZone: NgZone\n ) {\n this.cog = configSrv.merge('xlsx', {\n url: 'https://cdn.bootcdn.net/ajax/libs/xlsx/0.16.8/xlsx.full.min.js',\n modules: [`https://cdn.bootcdn.net/ajax/libs/xlsx/0.16.8/cpexcel.min.js`]\n })!;\n }\n private cog: AlainXlsxConfig;\n\n private init(): Promise<LazyResult[]> {\n return typeof XLSX !== 'undefined'\n ? Promise.resolve([])\n : this.lazy.load([this.cog.url!].concat(this.cog.modules!));\n }\n\n @ZoneOutside()\n private read(data: NzSafeAny, options: { type: 'array' | 'binary' | 'string' }): { [key: string]: NzSafeAny[][] } {\n const ret: NzSafeAny = {};\n if (options.type === 'binary') {\n const buf = new Uint8Array(data);\n if (!isUtf8(buf)) {\n try {\n data = cptable.utils.decode(936, buf);\n options.type = 'string';\n } catch {\n options.type = 'array';\n }\n }\n }\n const wb = XLSX.read(data, options);\n wb.SheetNames.forEach((name: string) => {\n const sheet: NzSafeAny = wb.Sheets[name];\n ret[name] = XLSX.utils.sheet_to_json(sheet, { header: 1 });\n });\n return ret;\n }\n\n /**\n * 导入Excel并输出JSON,支持 `<input type=\"file\">`、URL 形式\n */\n import(fileOrUrl: File | string): Promise<{ [key: string]: NzSafeAny[][] }> {\n return new Promise<{ [key: string]: NzSafeAny[][] }>((resolve, reject) => {\n this.init()\n .then(() => {\n // from url\n if (typeof fileOrUrl === 'string') {\n this.http.request('GET', fileOrUrl, { responseType: 'arraybuffer' }).subscribe(\n (res: ArrayBuffer) => {\n this.ngZone.run(() => resolve(this.read(new Uint8Array(res), { type: 'array' })));\n },\n (err: NzSafeAny) => {\n reject(err);\n }\n );\n return;\n }\n // from file\n const reader: FileReader = new FileReader();\n reader.onload = (e: NzSafeAny) => {\n this.ngZone.run(() => resolve(this.read(e.target.result, { type: 'binary' })));\n };\n reader.readAsArrayBuffer(fileOrUrl);\n })\n .catch(() => reject(`Unable to load xlsx.js`));\n });\n }\n\n @ZoneOutside()\n async export(options: XlsxExportOptions): Promise<XlsxExportResult> {\n return new Promise<XlsxExportResult>((resolve, reject) => {\n this.init()\n .then(() => {\n const wb: NzSafeAny = XLSX.utils.book_new();\n if (Array.isArray(options.sheets)) {\n (options.sheets as XlsxExportSheet[]).forEach((value: XlsxExportSheet, index: number) => {\n const ws: NzSafeAny = XLSX.utils.aoa_to_sheet(value.data);\n XLSX.utils.book_append_sheet(wb, ws, value.name || `Sheet${index + 1}`);\n });\n } else {\n wb.SheetNames = Object.keys(options.sheets);\n wb.Sheets = options.sheets;\n }\n\n if (options.callback) options.callback(wb);\n\n const wbout: ArrayBuffer = XLSX.write(wb, {\n bookType: 'xlsx',\n bookSST: false,\n type: 'array',\n ...options.opts\n });\n const filename = options.filename || 'export.xlsx';\n saveAs(new Blob([wbout], { type: 'application/octet-stream' }), filename);\n\n resolve({ filename, wb });\n })\n .catch(err => reject(err));\n });\n }\n\n /**\n * 数据转符号名\n * - `1` => `A`\n * - `27` => `AA`\n * - `703` => `AAA`\n */\n numberToSchema(val: number): string {\n const startCode = 'A'.charCodeAt(0);\n let res = '';\n\n do {\n --val;\n res = String.fromCharCode(startCode + (val % 26)) + res;\n val = (val / 26) >> 0;\n } while (val > 0);\n\n return res;\n }\n}\n","import { Directive, Input } from '@angular/core';\n\nimport { XlsxService } from './xlsx.service';\nimport { XlsxExportOptions } from './xlsx.types';\n\n@Directive({\n selector: '[xlsx]',\n exportAs: 'xlsx',\n host: {\n '(click)': '_click()'\n }\n})\nexport class XlsxDirective {\n @Input('xlsx') data: XlsxExportOptions;\n\n constructor(private srv: XlsxService) {}\n\n _click(): void {\n this.srv.export(this.data);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { XlsxDirective } from './xlsx.directive';\n\nconst COMPONENTS = [XlsxDirective];\n\n@NgModule({\n imports: [CommonModule],\n declarations: COMPONENTS,\n exports: COMPONENTS\n})\nexport class XlsxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xlsx.js","sources":["../../../../packages/abc/xlsx/xlsx.service.ts","../../../../packages/abc/xlsx/xlsx.directive.ts","../../../../packages/abc/xlsx/xlsx.module.ts","../../../../packages/abc/xlsx/xlsx.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, NgZone } from '@angular/core';\n\nimport isUtf8 from 'isutf8';\n\nimport { AlainConfigService, AlainXlsxConfig } from '@delon/util/config';\nimport { ZoneOutside } from '@delon/util/decorator';\nimport { LazyResult, LazyService } from '@delon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { XlsxExportOptions, XlsxExportResult, XlsxExportSheet } from './xlsx.types';\n\ndeclare var XLSX: NzSafeAny;\ndeclare var cptable: NzSafeAny;\n\n@Injectable({ providedIn: 'root' })\nexport class XlsxService {\n constructor(\n private http: HttpClient,\n private lazy: LazyService,\n configSrv: AlainConfigService,\n private ngZone: NgZone\n ) {\n this.cog = configSrv.merge('xlsx', {\n url: 'https://cdn.bootcdn.net/ajax/libs/xlsx/0.16.8/xlsx.full.min.js',\n modules: [`https://cdn.bootcdn.net/ajax/libs/xlsx/0.16.8/cpexcel.min.js`]\n })!;\n }\n private cog: AlainXlsxConfig;\n\n private init(): Promise<LazyResult[]> {\n return typeof XLSX !== 'undefined'\n ? Promise.resolve([])\n : this.lazy.load([this.cog.url!].concat(this.cog.modules!));\n }\n\n @ZoneOutside()\n private read(data: NzSafeAny): { [key: string]: NzSafeAny[][] } {\n const {\n read,\n utils: { sheet_to_json }\n } = XLSX;\n const ret: NzSafeAny = {};\n const buf = new Uint8Array(data);\n let type = 'array';\n if (!isUtf8(buf)) {\n try {\n data = cptable.utils.decode(936, buf);\n type = 'string';\n } catch {}\n }\n const wb = read(data, { type });\n wb.SheetNames.forEach((name: string) => {\n const sheet: NzSafeAny = wb.Sheets[name];\n ret[name] = sheet_to_json(sheet, { header: 1 });\n });\n return ret;\n }\n\n /**\n * 导入Excel并输出JSON,支持 `<input type=\"file\">`、URL 形式\n */\n import(fileOrUrl: File | string): Promise<{ [key: string]: NzSafeAny[][] }> {\n return new Promise<{ [key: string]: NzSafeAny[][] }>((resolve, reject) => {\n const r = (data: NzSafeAny): void => this.ngZone.run(() => resolve(this.read(data)));\n this.init()\n .then(() => {\n // from url\n if (typeof fileOrUrl === 'string') {\n this.http.request('GET', fileOrUrl, { responseType: 'arraybuffer' }).subscribe(\n (res: ArrayBuffer) => r(new Uint8Array(res)),\n (err: NzSafeAny) => reject(err)\n );\n return;\n }\n // from file\n const reader: FileReader = new FileReader();\n reader.onload = (e: NzSafeAny) => r(e.target.result);\n reader.onerror = (e: NzSafeAny) => reject(e);\n reader.readAsArrayBuffer(fileOrUrl);\n })\n .catch(() => reject(`Unable to load xlsx.js`));\n });\n }\n\n @ZoneOutside()\n async export(options: XlsxExportOptions): Promise<XlsxExportResult> {\n return new Promise<XlsxExportResult>((resolve, reject) => {\n this.init()\n .then(() => {\n options = { format: 'xlsx', ...options };\n const {\n writeFile,\n utils: { book_new, aoa_to_sheet, book_append_sheet }\n } = XLSX;\n const wb: NzSafeAny = book_new();\n if (Array.isArray(options.sheets)) {\n (options.sheets as XlsxExportSheet[]).forEach((value: XlsxExportSheet, index: number) => {\n const ws: NzSafeAny = aoa_to_sheet(value.data);\n book_append_sheet(wb, ws, value.name || `Sheet${index + 1}`);\n });\n } else {\n wb.SheetNames = Object.keys(options.sheets);\n wb.Sheets = options.sheets;\n }\n\n if (options.callback) options.callback(wb);\n\n const filename = options.filename || `export.${options.format}`;\n writeFile(wb, filename, {\n bookType: options.format,\n bookSST: false,\n type: 'array',\n ...options.opts\n });\n\n resolve({ filename, wb });\n })\n .catch(err => reject(err));\n });\n }\n\n /**\n * 数据转符号名\n * - `1` => `A`\n * - `27` => `AA`\n * - `703` => `AAA`\n */\n numberToSchema(val: number): string {\n const startCode = 'A'.charCodeAt(0);\n let res = '';\n\n do {\n --val;\n res = String.fromCharCode(startCode + (val % 26)) + res;\n val = (val / 26) >> 0;\n } while (val > 0);\n\n return res;\n }\n}\n","import { Directive, Input } from '@angular/core';\n\nimport { XlsxService } from './xlsx.service';\nimport { XlsxExportOptions } from './xlsx.types';\n\n@Directive({\n selector: '[xlsx]',\n exportAs: 'xlsx',\n host: {\n '(click)': '_click()'\n }\n})\nexport class XlsxDirective {\n @Input('xlsx') data: XlsxExportOptions;\n\n constructor(private srv: XlsxService) {}\n\n _click(): void {\n this.srv.export(this.data);\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\nimport { XlsxDirective } from './xlsx.directive';\n\nconst COMPONENTS = [XlsxDirective];\n\n@NgModule({\n imports: [CommonModule],\n declarations: COMPONENTS,\n exports: COMPONENTS\n})\nexport class XlsxModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zip.js","sources":["../../../../packages/abc/zip/zip.service.ts","../../../../packages/abc/zip/zip.module.ts","../../../../packages/abc/zip/zip.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, NgZone } from '@angular/core';\n\nimport { saveAs } from 'file-saver';\n\nimport { AlainConfigService, AlainZipConfig } from '@delon/util/config';\nimport { ZoneOutside } from '@delon/util/decorator';\nimport { LazyResult, LazyService } from '@delon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { ZipSaveOptions } from './zip.types';\n\ndeclare var JSZip: NzSafeAny;\n\n@Injectable({ providedIn: 'root' })\nexport class ZipService {\n private cog: AlainZipConfig;\n\n constructor(\n private http: HttpClient,\n private lazy: LazyService,\n configSrv: AlainConfigService,\n private ngZone: NgZone\n ) {\n this.cog = configSrv.merge('zip', {\n url: '//cdn.bootcss.com/jszip/3.3.0/jszip.min.js',\n utils: []\n })!;\n }\n\n private init(): Promise<LazyResult[]> {\n return this.lazy.load([this.cog.url!].concat(this.cog.utils!));\n }\n\n private check(zip: NzSafeAny): void {\n if (!zip) throw new Error('get instance via `ZipService.create()`');\n }\n\n /** 解压 */\n @ZoneOutside()\n read(fileOrUrl: File | string, options?: NzSafeAny): Promise<NzSafeAny> {\n return new Promise<NzSafeAny>((resolve, reject) => {\n const resolveCallback = (data: NzSafeAny) => {\n this.ngZone.run(() => resolve(data));\n };\n this.init().then(() => {\n // from url\n if (typeof fileOrUrl === 'string') {\n this.http.request('GET', fileOrUrl, { responseType: 'arraybuffer' }).subscribe(\n (res: ArrayBuffer) => {\n JSZip.loadAsync(res, options).then((ret: NzSafeAny) => resolveCallback(ret));\n },\n (err: NzSafeAny) => {\n reject(err);\n }\n );\n return;\n }\n // from file\n const reader: FileReader = new FileReader();\n reader.onload = (e: NzSafeAny) => {\n JSZip.loadAsync(e.target.result, options).then((ret: NzSafeAny) => resolveCallback(ret));\n };\n reader.readAsBinaryString(fileOrUrl as File);\n });\n });\n }\n\n /** 创建 Zip 实例,用于创建压缩文件 */\n create(): Promise<NzSafeAny> {\n return new Promise<NzSafeAny>(resolve => {\n this.init().then(() => {\n const zipFile: NzSafeAny = new JSZip();\n resolve(zipFile);\n });\n });\n }\n\n /**\n * 下载URL资源并写入 zip\n *\n * @param zip Zip 实例\n * @param path Zip 路径,例如: `text.txt`、`txt/hi.txt`\n * @param url URL 地址\n */\n pushUrl(zip: NzSafeAny, path: string, url: string): Promise<void> {\n this.check(zip);\n return new Promise<void>((resolve, reject) => {\n this.http.request('GET', url, { responseType: 'arraybuffer' }).subscribe(\n (res: ArrayBuffer) => {\n zip.file(path, res);\n resolve();\n },\n (error: NzSafeAny) => {\n reject({ url, error });\n }\n );\n });\n }\n\n /**\n * 保存Zip并执行打开保存对话框\n *\n * @param zip zip 对象,务必通过 `create()` 构建\n * @param options 额外参数,\n */\n save(zip: NzSafeAny, options?: ZipSaveOptions): Promise<void> {\n this.check(zip);\n const opt = { ...options } as ZipSaveOptions;\n return new Promise<void>((resolve, reject) => {\n zip.generateAsync({ type: 'blob', ...opt.options }, opt.update).then(\n (data: Blob) => {\n if (opt.callback) opt.callback(data);\n saveAs(data, opt.filename || 'download.zip');\n resolve();\n },\n (err: NzSafeAny) => {\n reject(err);\n }\n );\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n imports: [CommonModule]\n})\nexport class ZipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"zip.js","sources":["../../../../packages/abc/zip/zip.service.ts","../../../../packages/abc/zip/zip.module.ts","../../../../packages/abc/zip/zip.ts"],"sourcesContent":["import { HttpClient } from '@angular/common/http';\nimport { Injectable, NgZone } from '@angular/core';\n\nimport { saveAs } from 'file-saver';\n\nimport { AlainConfigService, AlainZipConfig } from '@delon/util/config';\nimport { ZoneOutside } from '@delon/util/decorator';\nimport { LazyResult, LazyService } from '@delon/util/other';\nimport type { NzSafeAny } from 'ng-zorro-antd/core/types';\n\nimport { ZipSaveOptions } from './zip.types';\n\ndeclare var JSZip: NzSafeAny;\n\n@Injectable({ providedIn: 'root' })\nexport class ZipService {\n private cog: AlainZipConfig;\n\n constructor(\n private http: HttpClient,\n private lazy: LazyService,\n configSrv: AlainConfigService,\n private ngZone: NgZone\n ) {\n this.cog = configSrv.merge('zip', {\n url: '//cdn.bootcss.com/jszip/3.3.0/jszip.min.js',\n utils: []\n })!;\n }\n\n private init(): Promise<LazyResult[]> {\n return this.lazy.load([this.cog.url!].concat(this.cog.utils!));\n }\n\n private check(zip: NzSafeAny): void {\n if (!zip) throw new Error('get instance via `ZipService.create()`');\n }\n\n /** 解压 */\n @ZoneOutside()\n read(fileOrUrl: File | string, options?: NzSafeAny): Promise<NzSafeAny> {\n return new Promise<NzSafeAny>((resolve, reject) => {\n const resolveCallback = (data: NzSafeAny): void => {\n this.ngZone.run(() => resolve(data));\n };\n this.init().then(() => {\n // from url\n if (typeof fileOrUrl === 'string') {\n this.http.request('GET', fileOrUrl, { responseType: 'arraybuffer' }).subscribe(\n (res: ArrayBuffer) => {\n JSZip.loadAsync(res, options).then((ret: NzSafeAny) => resolveCallback(ret));\n },\n (err: NzSafeAny) => {\n reject(err);\n }\n );\n return;\n }\n // from file\n const reader: FileReader = new FileReader();\n reader.onload = (e: NzSafeAny) => {\n JSZip.loadAsync(e.target.result, options).then((ret: NzSafeAny) => resolveCallback(ret));\n };\n reader.readAsBinaryString(fileOrUrl as File);\n });\n });\n }\n\n /** 创建 Zip 实例,用于创建压缩文件 */\n create(): Promise<NzSafeAny> {\n return new Promise<NzSafeAny>(resolve => {\n this.init().then(() => {\n const zipFile: NzSafeAny = new JSZip();\n resolve(zipFile);\n });\n });\n }\n\n /**\n * 下载URL资源并写入 zip\n *\n * @param zip Zip 实例\n * @param path Zip 路径,例如: `text.txt`、`txt/hi.txt`\n * @param url URL 地址\n */\n pushUrl(zip: NzSafeAny, path: string, url: string): Promise<void> {\n this.check(zip);\n return new Promise<void>((resolve, reject) => {\n this.http.request('GET', url, { responseType: 'arraybuffer' }).subscribe(\n (res: ArrayBuffer) => {\n zip.file(path, res);\n resolve();\n },\n (error: NzSafeAny) => {\n reject({ url, error });\n }\n );\n });\n }\n\n /**\n * 保存Zip并执行打开保存对话框\n *\n * @param zip zip 对象,务必通过 `create()` 构建\n * @param options 额外参数,\n */\n save(zip: NzSafeAny, options?: ZipSaveOptions): Promise<void> {\n this.check(zip);\n const opt = { ...options } as ZipSaveOptions;\n return new Promise<void>((resolve, reject) => {\n zip.generateAsync({ type: 'blob', ...opt.options }, opt.update).then(\n (data: Blob) => {\n if (opt.callback) opt.callback(data);\n saveAs(data, opt.filename || 'download.zip');\n resolve();\n },\n (err: NzSafeAny) => {\n reject(err);\n }\n );\n });\n }\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n imports: [CommonModule]\n})\nexport class ZipModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@delon/abc",
3
- "version": "12.2.1",
3
+ "version": "12.4.0",
4
4
  "author": "cipchk<cipchk@qq.com>",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -26,9 +26,9 @@
26
26
  "jszip": "^3.7.1",
27
27
  "xlsx": "^0.17.1",
28
28
  "ngx-countdown": "^12.0.1",
29
- "@delon/theme": "^12.2.1",
30
- "@delon/util": "^12.2.1",
31
- "@delon/acl": "^12.2.1",
29
+ "@delon/theme": "^12.4.0",
30
+ "@delon/util": "^12.4.0",
31
+ "@delon/acl": "^12.4.0",
32
32
  "tslib": "^2.2.0"
33
33
  },
34
34
  "main": "bundles/abc.umd.js",
@@ -21,7 +21,7 @@ export declare class ReuseTabComponent implements OnInit, OnChanges, OnDestroy {
21
21
  static ngAcceptInputType_keepingScroll: BooleanInput;
22
22
  static ngAcceptInputType_disabled: BooleanInput;
23
23
  private tabset;
24
- private unsubscribe$;
24
+ private destroy$;
25
25
  private updatePos$;
26
26
  private _keepingScrollContainer;
27
27
  list: ReuseItem[];
@@ -1 +1 @@
1
- {"__symbolic":"module","version":4,"metadata":{"ReuseTabContextMenuComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":20,"character":1},"arguments":[{"selector":"reuse-tab-context-menu","host":{"(document:click)":"closeMenu($event)","(document:contextmenu)":"closeMenu($event)","$quoted$":["(document:click)","(document:contextmenu)"]},"preserveWhitespaces":false,"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":28,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":29,"character":17},"member":"None"},"template":"<ul nz-menu>\n <li nz-menu-item (click)=\"click($event, 'refresh')\" data-type=\"refresh\" [innerHTML]=\"i18n.refresh\"></li>\n <li\n nz-menu-item\n (click)=\"click($event, 'close')\"\n data-type=\"close\"\n [nzDisabled]=\"!item.closable\"\n [innerHTML]=\"i18n.close\"\n ></li>\n <li nz-menu-item (click)=\"click($event, 'closeOther')\" data-type=\"closeOther\" [innerHTML]=\"i18n.closeOther\"></li>\n <li\n nz-menu-item\n (click)=\"click($event, 'closeRight')\"\n data-type=\"closeRight\"\n [nzDisabled]=\"item.last\"\n [innerHTML]=\"i18n.closeRight\"\n ></li>\n <ng-container *ngIf=\"customContextMenu!.length > 0\">\n <li nz-menu-divider></li>\n <li\n *ngFor=\"let i of customContextMenu\"\n nz-menu-item\n [attr.data-type]=\"i.id\"\n [nzDisabled]=\"isDisabled(i)\"\n (click)=\"click($event, 'custom', i)\"\n [innerHTML]=\"i.title\"\n ></li>\n </ng-container>\n</ul>\n"}]}],"members":{"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":33,"character":3}}]}],"item":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"event":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":44,"character":3}}]}],"customContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"close":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":46,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@delon/theme","name":"DelonLocaleService","line":52,"character":31}]}],"notify":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"click":[{"__symbolic":"method"}],"isDisabled":[{"__symbolic":"method"}],"closeMenu":[{"__symbolic":"method"}]}},"ReuseTabContextComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"reuse-tab-context","template":""}]}],"members":{"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"change":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":18,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ReuseTabContextService"}]}],"ngOnDestroy":[{"__symbolic":"method"}]}},"ReuseTabContextDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":5,"character":1},"arguments":[{"selector":"[reuse-tab-context-menu]","exportAs":"reuseTabContextMenu","host":{"(contextmenu)":"_onContextMenu($event)","$quoted$":["(contextmenu)"]}}]}],"members":{"item":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3},"arguments":["reuse-tab-context-menu"]}]}],"customContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ReuseTabContextService"}]}],"_onContextMenu":[{"__symbolic":"method"}]}},"ReuseTabContextService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":13,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/cdk/overlay","name":"Overlay","line":21,"character":31}]}],"remove":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}]}},"ReuseTabComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":43,"character":1},"arguments":[{"selector":"reuse-tab, [reuse-tab]","exportAs":"reuseTab","host":{"[class.reuse-tab]":"true","[class.reuse-tab__line]":"tabType === 'line'","[class.reuse-tab__card]":"tabType === 'card'","[class.reuse-tab__disabled]":"disabled","$quoted$":["[class.reuse-tab]","[class.reuse-tab__line]","[class.reuse-tab__card]","[class.reuse-tab__disabled]"]},"providers":[{"__symbolic":"reference","name":"ReuseTabContextService"}],"preserveWhitespaces":false,"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":55,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":56,"character":17},"member":"None"},"template":"<nz-tabset\n #tabset\n [nzSelectedIndex]=\"pos\"\n [nzAnimated]=\"false\"\n [nzType]=\"tabType\"\n [nzTabBarExtraContent]=\"tabBarExtraContent\"\n [nzTabBarGutter]=\"tabBarGutter\"\n [nzTabBarStyle]=\"tabBarStyle\"\n>\n <nz-tab *ngFor=\"let i of list; let index = index\" [nzTitle]=\"titleTemplate\" (nzClick)=\"_to(index)\">\n <ng-template #titleTemplate>\n <div\n [reuse-tab-context-menu]=\"i\"\n [customContextMenu]=\"customContextMenu\"\n class=\"reuse-tab__name\"\n [attr.title]=\"i.title\"\n >\n <span [class.reuse-tab__name-width]=\"tabMaxWidth\" [style.max-width.px]=\"tabMaxWidth\">\n <ng-container\n *ngIf=\"titleRender; else defaultTitle\"\n [ngTemplateOutlet]=\"titleRender\"\n [ngTemplateOutletContext]=\"{ $implicit: i }\"\n ></ng-container>\n <ng-template #defaultTitle>{{ i.title }}</ng-template>\n </span>\n </div>\n <i *ngIf=\"i.closable\" nz-icon nzType=\"close\" class=\"reuse-tab__op\" (click)=\"_close($event, index, false)\"></i>\n </ng-template>\n </nz-tab>\n</nz-tabset>\n<reuse-tab-context [i18n]=\"i18n\" (change)=\"contextMenuChange($event)\"></reuse-tab-context>\n"}]}],"members":{"tabset":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":66,"character":3},"arguments":["tabset"]}]}],"mode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"debug":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputBoolean","line":78,"character":12}}]}],"max":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputNumber","line":79,"character":12}}]}],"tabMaxWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputNumber","line":80,"character":12}}]}],"excludes":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3}}]}],"allowClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputBoolean","line":82,"character":12}}]}],"keepingScroll":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":83,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputBoolean","line":83,"character":12}}]}],"keepingScrollContainer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3}}]}],"customContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":88,"character":3}}]}],"tabBarExtraContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":89,"character":3}}]}],"tabBarGutter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3}}]}],"tabBarStyle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":91,"character":3}}]}],"tabType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"routeParamMatchMode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputBoolean","line":94,"character":12}}]}],"titleRender":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":95,"character":3}}]}],"change":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":96,"character":3}}]}],"close":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":97,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":106,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":106,"character":17},"arguments":[{"__symbolic":"reference","module":"@delon/theme","name":"ALAIN_I18N_TOKEN","line":106,"character":24}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":107,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":107,"character":12}]}],null],"parameters":[{"__symbolic":"reference","name":"ReuseTabService"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":103,"character":17},{"__symbolic":"reference","module":"@angular/router","name":"Router","line":104,"character":20},{"__symbolic":"reference","module":"@angular/router","name":"ActivatedRoute","line":105,"character":19},{"__symbolic":"reference","module":"@delon/theme","name":"AlainI18NService","line":106,"character":59},{"__symbolic":"reference","module":"ng-zorro-antd/core/types","name":"NzSafeAny","line":107,"character":35},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"Platform","line":108,"character":22}]}],"genTit":[{"__symbolic":"method"}],"genCurItem":[{"__symbolic":"method"}],"genList":[{"__symbolic":"method"}],"updateTitle":[{"__symbolic":"method"}],"refresh":[{"__symbolic":"method"}],"contextMenuChange":[{"__symbolic":"method"}],"_to":[{"__symbolic":"method"}],"_close":[{"__symbolic":"method"}],"activate":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"ReuseTabService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":27,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"index":[{"__symbolic":"method"}],"exists":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}],"remove":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"closeRight":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"move":[{"__symbolic":"method"}],"replace":[{"__symbolic":"method"}],"getTitle":[{"__symbolic":"method"}],"clearTitleCached":[{"__symbolic":"method"}],"getClosable":[{"__symbolic":"method"}],"clearClosableCached":[{"__symbolic":"method"}],"getTruthRoute":[{"__symbolic":"method"}],"getUrl":[{"__symbolic":"method"}],"can":[{"__symbolic":"method"}],"isExclude":[{"__symbolic":"method"}],"refresh":[{"__symbolic":"method"}],"destroy":[{"__symbolic":"method"}],"di":[{"__symbolic":"method"}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":365,"character":32},{"__symbolic":"reference","module":"@delon/theme","name":"MenuService","line":365,"character":63}]}],"init":[{"__symbolic":"method"}],"getMenu":[{"__symbolic":"method"}],"runHook":[{"__symbolic":"method"}],"hasInValidRoute":[{"__symbolic":"method"}],"shouldDetach":[{"__symbolic":"method"}],"store":[{"__symbolic":"method"}],"shouldAttach":[{"__symbolic":"method"}],"retrieve":[{"__symbolic":"method"}],"shouldReuseRoute":[{"__symbolic":"method"}],"getKeepingScroll":[{"__symbolic":"method"}],"initScroll":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ReuseTabStrategy":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ReuseTabService"}]}],"shouldDetach":[{"__symbolic":"method"}],"store":[{"__symbolic":"method"}],"shouldAttach":[{"__symbolic":"method"}],"retrieve":[{"__symbolic":"method"}],"shouldReuseRoute":[{"__symbolic":"method"}]}},"ReuseTabModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":18,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":19,"character":12},{"__symbolic":"reference","module":"@angular/router","name":"RouterModule","line":19,"character":26},{"__symbolic":"reference","module":"@delon/theme","name":"DelonLocaleModule","line":19,"character":40},{"__symbolic":"reference","module":"ng-zorro-antd/menu","name":"NzMenuModule","line":19,"character":59},{"__symbolic":"reference","module":"ng-zorro-antd/tabs","name":"NzTabsModule","line":19,"character":73},{"__symbolic":"reference","module":"ng-zorro-antd/icon","name":"NzIconModule","line":19,"character":87},{"__symbolic":"reference","module":"@angular/cdk/overlay","name":"OverlayModule","line":19,"character":101}],"declarations":[{"__symbolic":"reference","name":"ReuseTabComponent"},{"__symbolic":"reference","name":"ReuseTabContextMenuComponent"},{"__symbolic":"reference","name":"ReuseTabContextComponent"},{"__symbolic":"reference","name":"ReuseTabContextDirective"}],"exports":[{"__symbolic":"reference","name":"ReuseTabComponent"}]}]}],"members":{}},"ReuseTabMatchMode":{"Menu":0,"MenuForce":1,"URL":2},"ReuseTabRouteParamMatchMode":{"__symbolic":"interface"},"ReuseTitle":{"__symbolic":"interface"},"ReuseTabCached":{"__symbolic":"interface"},"ReuseTabNotify":{"__symbolic":"interface"},"ReuseItem":{"__symbolic":"interface"},"ReuseContextEvent":{"__symbolic":"interface"},"CloseType":{"__symbolic":"interface"},"ReuseContextCloseEvent":{"__symbolic":"interface"},"ReuseContextI18n":{"__symbolic":"interface"},"ReuseCustomContextMenu":{"__symbolic":"interface"},"ReuseComponentHandle":{"__symbolic":"interface"},"ReuseComponentRef":{"__symbolic":"interface"},"ReuseHookTypes":{"__symbolic":"interface"},"ReuseHookOnReuseInitType":{"__symbolic":"interface"},"ReuseComponentInstance":{"__symbolic":"interface"},"OnReuseInit":{"__symbolic":"interface"},"OnReuseDestroy":{"__symbolic":"interface"}},"origins":{"ReuseTabContextMenuComponent":"./reuse-tab-context-menu.component","ReuseTabContextComponent":"./reuse-tab-context.component","ReuseTabContextDirective":"./reuse-tab-context.directive","ReuseTabContextService":"./reuse-tab-context.service","ReuseTabComponent":"./reuse-tab.component","ReuseTabService":"./reuse-tab.service","ReuseTabStrategy":"./reuse-tab.strategy","ReuseTabModule":"./reuse-tab.module","ReuseTabMatchMode":"./reuse-tab.interfaces","ReuseTabRouteParamMatchMode":"./reuse-tab.interfaces","ReuseTitle":"./reuse-tab.interfaces","ReuseTabCached":"./reuse-tab.interfaces","ReuseTabNotify":"./reuse-tab.interfaces","ReuseItem":"./reuse-tab.interfaces","ReuseContextEvent":"./reuse-tab.interfaces","CloseType":"./reuse-tab.interfaces","ReuseContextCloseEvent":"./reuse-tab.interfaces","ReuseContextI18n":"./reuse-tab.interfaces","ReuseCustomContextMenu":"./reuse-tab.interfaces","ReuseComponentHandle":"./reuse-tab.interfaces","ReuseComponentRef":"./reuse-tab.interfaces","ReuseHookTypes":"./reuse-tab.interfaces","ReuseHookOnReuseInitType":"./reuse-tab.interfaces","ReuseComponentInstance":"./reuse-tab.interfaces","OnReuseInit":"./lifecycle_hooks","OnReuseDestroy":"./lifecycle_hooks"},"importAs":"@delon/abc/reuse-tab"}
1
+ {"__symbolic":"module","version":4,"metadata":{"ReuseTabContextMenuComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":20,"character":1},"arguments":[{"selector":"reuse-tab-context-menu","host":{"(document:click)":"closeMenu($event)","(document:contextmenu)":"closeMenu($event)","$quoted$":["(document:click)","(document:contextmenu)"]},"preserveWhitespaces":false,"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":28,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":29,"character":17},"member":"None"},"template":"<ul nz-menu>\n <li\n *ngIf=\"item.active\"\n nz-menu-item\n (click)=\"click($event, 'refresh')\"\n data-type=\"refresh\"\n [innerHTML]=\"i18n.refresh\"\n ></li>\n <li\n nz-menu-item\n (click)=\"click($event, 'close')\"\n data-type=\"close\"\n [nzDisabled]=\"!item.closable\"\n [innerHTML]=\"i18n.close\"\n ></li>\n <li nz-menu-item (click)=\"click($event, 'closeOther')\" data-type=\"closeOther\" [innerHTML]=\"i18n.closeOther\"></li>\n <li\n nz-menu-item\n (click)=\"click($event, 'closeRight')\"\n data-type=\"closeRight\"\n [nzDisabled]=\"item.last\"\n [innerHTML]=\"i18n.closeRight\"\n ></li>\n <ng-container *ngIf=\"customContextMenu!.length > 0\">\n <li nz-menu-divider></li>\n <li\n *ngFor=\"let i of customContextMenu\"\n nz-menu-item\n [attr.data-type]=\"i.id\"\n [nzDisabled]=\"isDisabled(i)\"\n (click)=\"click($event, 'custom', i)\"\n [innerHTML]=\"i.title\"\n ></li>\n </ng-container>\n</ul>\n"}]}],"members":{"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":33,"character":3}}]}],"item":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":43,"character":3}}]}],"event":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":44,"character":3}}]}],"customContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":45,"character":3}}]}],"close":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":46,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@delon/theme","name":"DelonLocaleService","line":52,"character":31}]}],"notify":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"click":[{"__symbolic":"method"}],"isDisabled":[{"__symbolic":"method"}],"closeMenu":[{"__symbolic":"method"}]}},"ReuseTabContextComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":6,"character":1},"arguments":[{"selector":"reuse-tab-context","template":""}]}],"members":{"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3}}]}],"change":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":18,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ReuseTabContextService"}]}],"ngOnDestroy":[{"__symbolic":"method"}]}},"ReuseTabContextDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive","line":5,"character":1},"arguments":[{"selector":"[reuse-tab-context-menu]","exportAs":"reuseTabContextMenu","host":{"(contextmenu)":"_onContextMenu($event)","$quoted$":["(contextmenu)"]}}]}],"members":{"item":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":13,"character":3},"arguments":["reuse-tab-context-menu"]}]}],"customContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":14,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ReuseTabContextService"}]}],"_onContextMenu":[{"__symbolic":"method"}]}},"ReuseTabContextService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":13,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/cdk/overlay","name":"Overlay","line":21,"character":31}]}],"remove":[{"__symbolic":"method"}],"open":[{"__symbolic":"method"}]}},"ReuseTabComponent":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Component","line":43,"character":1},"arguments":[{"selector":"reuse-tab, [reuse-tab]","exportAs":"reuseTab","host":{"[class.reuse-tab]":"true","[class.reuse-tab__line]":"tabType === 'line'","[class.reuse-tab__card]":"tabType === 'card'","[class.reuse-tab__disabled]":"disabled","$quoted$":["[class.reuse-tab]","[class.reuse-tab__line]","[class.reuse-tab__card]","[class.reuse-tab__disabled]"]},"providers":[{"__symbolic":"reference","name":"ReuseTabContextService"}],"preserveWhitespaces":false,"changeDetection":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectionStrategy","line":55,"character":19},"member":"OnPush"},"encapsulation":{"__symbolic":"select","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewEncapsulation","line":56,"character":17},"member":"None"},"template":"<nz-tabset\n #tabset\n [nzSelectedIndex]=\"pos\"\n [nzAnimated]=\"false\"\n [nzType]=\"tabType\"\n [nzTabBarExtraContent]=\"tabBarExtraContent\"\n [nzTabBarGutter]=\"tabBarGutter\"\n [nzTabBarStyle]=\"tabBarStyle\"\n>\n <nz-tab *ngFor=\"let i of list; let index = index\" [nzTitle]=\"titleTemplate\" (nzClick)=\"_to(index)\">\n <ng-template #titleTemplate>\n <div\n [reuse-tab-context-menu]=\"i\"\n [customContextMenu]=\"customContextMenu\"\n class=\"reuse-tab__name\"\n [attr.title]=\"i.title\"\n >\n <span [class.reuse-tab__name-width]=\"tabMaxWidth\" [style.max-width.px]=\"tabMaxWidth\">\n <ng-container\n *ngIf=\"titleRender; else defaultTitle\"\n [ngTemplateOutlet]=\"titleRender\"\n [ngTemplateOutletContext]=\"{ $implicit: i }\"\n ></ng-container>\n <ng-template #defaultTitle>{{ i.title }}</ng-template>\n </span>\n </div>\n <i *ngIf=\"i.closable\" nz-icon nzType=\"close\" class=\"reuse-tab__op\" (click)=\"_close($event, index, false)\"></i>\n </ng-template>\n </nz-tab>\n</nz-tabset>\n<reuse-tab-context [i18n]=\"i18n\" (change)=\"contextMenuChange($event)\"></reuse-tab-context>\n"}]}],"members":{"tabset":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"ViewChild","line":66,"character":3},"arguments":["tabset"]}]}],"mode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":76,"character":3}}]}],"i18n":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":77,"character":3}}]}],"debug":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":78,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputBoolean","line":78,"character":12}}]}],"max":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":79,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputNumber","line":79,"character":12}}]}],"tabMaxWidth":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":80,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputNumber","line":80,"character":12}}]}],"excludes":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":81,"character":3}}]}],"allowClose":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":82,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputBoolean","line":82,"character":12}}]}],"keepingScroll":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":83,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputBoolean","line":83,"character":12}}]}],"keepingScrollContainer":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":84,"character":3}}]}],"customContextMenu":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":88,"character":3}}]}],"tabBarExtraContent":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":89,"character":3}}]}],"tabBarGutter":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":90,"character":3}}]}],"tabBarStyle":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":91,"character":3}}]}],"tabType":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":92,"character":3}}]}],"routeParamMatchMode":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":93,"character":3}}]}],"disabled":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":94,"character":3}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@delon/util/decorator","name":"InputBoolean","line":94,"character":12}}]}],"titleRender":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Input","line":95,"character":3}}]}],"change":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":96,"character":3}}]}],"close":[{"__symbolic":"property","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Output","line":97,"character":3}}]}],"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[null,null,null,null,[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Optional","line":106,"character":5}},{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":106,"character":17},"arguments":[{"__symbolic":"reference","module":"@delon/theme","name":"ALAIN_I18N_TOKEN","line":106,"character":24}]}],[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":107,"character":5},"arguments":[{"__symbolic":"reference","module":"@angular/common","name":"DOCUMENT","line":107,"character":12}]}],null],"parameters":[{"__symbolic":"reference","name":"ReuseTabService"},{"__symbolic":"reference","module":"@angular/core","name":"ChangeDetectorRef","line":103,"character":17},{"__symbolic":"reference","module":"@angular/router","name":"Router","line":104,"character":20},{"__symbolic":"reference","module":"@angular/router","name":"ActivatedRoute","line":105,"character":19},{"__symbolic":"reference","module":"@delon/theme","name":"AlainI18NService","line":106,"character":59},{"__symbolic":"reference","module":"ng-zorro-antd/core/types","name":"NzSafeAny","line":107,"character":35},{"__symbolic":"reference","module":"@angular/cdk/platform","name":"Platform","line":108,"character":22}]}],"genTit":[{"__symbolic":"method"}],"genCurItem":[{"__symbolic":"method"}],"genList":[{"__symbolic":"method"}],"updateTitle":[{"__symbolic":"method"}],"refresh":[{"__symbolic":"method"}],"contextMenuChange":[{"__symbolic":"method"}],"_to":[{"__symbolic":"method"}],"_close":[{"__symbolic":"method"}],"activate":[{"__symbolic":"method"}],"ngOnInit":[{"__symbolic":"method"}],"ngOnChanges":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]}},"ReuseTabService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":27,"character":1},"arguments":[{"providedIn":"root"}]}],"members":{"index":[{"__symbolic":"method"}],"exists":[{"__symbolic":"method"}],"get":[{"__symbolic":"method"}],"remove":[{"__symbolic":"method"}],"close":[{"__symbolic":"method"}],"closeRight":[{"__symbolic":"method"}],"clear":[{"__symbolic":"method"}],"move":[{"__symbolic":"method"}],"replace":[{"__symbolic":"method"}],"getTitle":[{"__symbolic":"method"}],"clearTitleCached":[{"__symbolic":"method"}],"getClosable":[{"__symbolic":"method"}],"clearClosableCached":[{"__symbolic":"method"}],"getTruthRoute":[{"__symbolic":"method"}],"getUrl":[{"__symbolic":"method"}],"can":[{"__symbolic":"method"}],"isExclude":[{"__symbolic":"method"}],"refresh":[{"__symbolic":"method"}],"destroy":[{"__symbolic":"method"}],"di":[{"__symbolic":"method"}],"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","module":"@angular/core","name":"Injector","line":365,"character":32},{"__symbolic":"reference","module":"@delon/theme","name":"MenuService","line":365,"character":63}]}],"init":[{"__symbolic":"method"}],"getMenu":[{"__symbolic":"method"}],"runHook":[{"__symbolic":"method"}],"hasInValidRoute":[{"__symbolic":"method"}],"shouldDetach":[{"__symbolic":"method"}],"store":[{"__symbolic":"method"}],"shouldAttach":[{"__symbolic":"method"}],"retrieve":[{"__symbolic":"method"}],"shouldReuseRoute":[{"__symbolic":"method"}],"getKeepingScroll":[{"__symbolic":"method"}],"initScroll":[{"__symbolic":"method"}],"ngOnDestroy":[{"__symbolic":"method"}]},"statics":{"ɵprov":{}}},"ReuseTabStrategy":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"ReuseTabService"}]}],"shouldDetach":[{"__symbolic":"method"}],"store":[{"__symbolic":"method"}],"shouldAttach":[{"__symbolic":"method"}],"retrieve":[{"__symbolic":"method"}],"shouldReuseRoute":[{"__symbolic":"method"}]}},"ReuseTabModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":18,"character":1},"arguments":[{"imports":[{"__symbolic":"reference","module":"@angular/common","name":"CommonModule","line":19,"character":12},{"__symbolic":"reference","module":"@angular/router","name":"RouterModule","line":19,"character":26},{"__symbolic":"reference","module":"@delon/theme","name":"DelonLocaleModule","line":19,"character":40},{"__symbolic":"reference","module":"ng-zorro-antd/menu","name":"NzMenuModule","line":19,"character":59},{"__symbolic":"reference","module":"ng-zorro-antd/tabs","name":"NzTabsModule","line":19,"character":73},{"__symbolic":"reference","module":"ng-zorro-antd/icon","name":"NzIconModule","line":19,"character":87},{"__symbolic":"reference","module":"@angular/cdk/overlay","name":"OverlayModule","line":19,"character":101}],"declarations":[{"__symbolic":"reference","name":"ReuseTabComponent"},{"__symbolic":"reference","name":"ReuseTabContextMenuComponent"},{"__symbolic":"reference","name":"ReuseTabContextComponent"},{"__symbolic":"reference","name":"ReuseTabContextDirective"}],"exports":[{"__symbolic":"reference","name":"ReuseTabComponent"}]}]}],"members":{}},"ReuseTabMatchMode":{"Menu":0,"MenuForce":1,"URL":2},"ReuseTabRouteParamMatchMode":{"__symbolic":"interface"},"ReuseTitle":{"__symbolic":"interface"},"ReuseTabCached":{"__symbolic":"interface"},"ReuseTabNotify":{"__symbolic":"interface"},"ReuseItem":{"__symbolic":"interface"},"ReuseContextEvent":{"__symbolic":"interface"},"CloseType":{"__symbolic":"interface"},"ReuseContextCloseEvent":{"__symbolic":"interface"},"ReuseContextI18n":{"__symbolic":"interface"},"ReuseCustomContextMenu":{"__symbolic":"interface"},"ReuseComponentHandle":{"__symbolic":"interface"},"ReuseComponentRef":{"__symbolic":"interface"},"ReuseHookTypes":{"__symbolic":"interface"},"ReuseHookOnReuseInitType":{"__symbolic":"interface"},"ReuseComponentInstance":{"__symbolic":"interface"},"OnReuseInit":{"__symbolic":"interface"},"OnReuseDestroy":{"__symbolic":"interface"}},"origins":{"ReuseTabContextMenuComponent":"./reuse-tab-context-menu.component","ReuseTabContextComponent":"./reuse-tab-context.component","ReuseTabContextDirective":"./reuse-tab-context.directive","ReuseTabContextService":"./reuse-tab-context.service","ReuseTabComponent":"./reuse-tab.component","ReuseTabService":"./reuse-tab.service","ReuseTabStrategy":"./reuse-tab.strategy","ReuseTabModule":"./reuse-tab.module","ReuseTabMatchMode":"./reuse-tab.interfaces","ReuseTabRouteParamMatchMode":"./reuse-tab.interfaces","ReuseTitle":"./reuse-tab.interfaces","ReuseTabCached":"./reuse-tab.interfaces","ReuseTabNotify":"./reuse-tab.interfaces","ReuseItem":"./reuse-tab.interfaces","ReuseContextEvent":"./reuse-tab.interfaces","CloseType":"./reuse-tab.interfaces","ReuseContextCloseEvent":"./reuse-tab.interfaces","ReuseContextI18n":"./reuse-tab.interfaces","ReuseCustomContextMenu":"./reuse-tab.interfaces","ReuseComponentHandle":"./reuse-tab.interfaces","ReuseComponentRef":"./reuse-tab.interfaces","ReuseHookTypes":"./reuse-tab.interfaces","ReuseHookOnReuseInitType":"./reuse-tab.interfaces","ReuseComponentInstance":"./reuse-tab.interfaces","OnReuseInit":"./lifecycle_hooks","OnReuseDestroy":"./lifecycle_hooks"},"importAs":"@delon/abc/reuse-tab"}
package/st/index.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './public_api';
@@ -0,0 +1,18 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { LocaleData } from '@delon/theme';
3
+ import { STColumnFilter, STColumnFilterMenu, STIcon } from './st.interfaces';
4
+ import { _STColumn } from './st.types';
5
+ export declare class STFilterComponent {
6
+ visible: boolean;
7
+ col: _STColumn;
8
+ locale: LocaleData;
9
+ f: STColumnFilter;
10
+ readonly n: EventEmitter<unknown>;
11
+ readonly handle: EventEmitter<boolean>;
12
+ get icon(): STIcon;
13
+ show($event: MouseEvent): void;
14
+ checkboxChange(): void;
15
+ radioChange(item: STColumnFilterMenu): void;
16
+ confirm(): void;
17
+ reset(): void;
18
+ }
@@ -0,0 +1,27 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { Router } from '@angular/router';
3
+ import { DrawerHelper, ModalHelper } from '@delon/theme';
4
+ import { STComponent } from '.';
5
+ import { STColumnButton, STData } from './st.interfaces';
6
+ import { _STColumn, _STTdNotify } from './st.types';
7
+ export declare class STTdComponent {
8
+ private stComp;
9
+ private router;
10
+ private modalHelper;
11
+ private drawerHelper;
12
+ c: _STColumn;
13
+ cIdx: number;
14
+ data: STData[];
15
+ i: STData;
16
+ index: number;
17
+ readonly n: EventEmitter<_STTdNotify>;
18
+ private get routerState();
19
+ constructor(stComp: STComponent, router: Router, modalHelper: ModalHelper, drawerHelper: DrawerHelper);
20
+ private report;
21
+ _checkbox(value: boolean): void;
22
+ _radio(checked: boolean): void;
23
+ _link(e: Event): boolean;
24
+ _stopPropagation(ev: Event): void;
25
+ _btn(btn: STColumnButton, ev?: Event): void;
26
+ private btnCallback;
27
+ }
@@ -1,8 +1,7 @@
1
1
  import { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';
2
2
  import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnDestroy, SimpleChange, SimpleChanges, TemplateRef, TrackByFunction } from '@angular/core';
3
- import { Router } from '@angular/router';
4
3
  import { Observable } from 'rxjs';
5
- import { AlainI18NService, DelonLocaleService, DrawerHelper, LocaleData, ModalHelper } from '@delon/theme';
4
+ import { AlainI18NService, DelonLocaleService, LocaleData } from '@delon/theme';
6
5
  import { AlainConfigService } from '@delon/util/config';
7
6
  import { BooleanInput, NumberInput } from '@delon/util/decorator';
8
7
  import type { NzSafeAny } from 'ng-zorro-antd/core/types';
@@ -12,15 +11,12 @@ import { NzTableComponent } from 'ng-zorro-antd/table';
12
11
  import { STColumnSource } from './st-column-source';
13
12
  import { STDataSource } from './st-data-source';
14
13
  import { STExport } from './st-export';
15
- import { STChange, STClickRowClassName, STColumn, STColumnButton, STColumnFilterMenu, STColumnSelection, STContextmenuFn, STContextmenuItem, STCustomRequestOptions, STData, STError, STExportOptions, STLoadOptions, STPage, STReq, STRes, STResetColumnsOption, STResizable, STRowClassName, STSingleSort, STStatisticalResults, STWidthMode } from './st.interfaces';
16
- import { _STColumn, _STHeader } from './st.types';
14
+ import { STChange, STClickRowClassName, STColumn, STColumnSelection, STContextmenuFn, STContextmenuItem, STCustomRequestOptions, STData, STError, STExportOptions, STLoadOptions, STPage, STReq, STRes, STResetColumnsOption, STResizable, STRowClassName, STSingleSort, STStatisticalResults, STWidthMode } from './st.interfaces';
15
+ import { _STColumn, _STHeader, _STTdNotify } from './st.types';
17
16
  export declare class STComponent implements AfterViewInit, OnChanges, OnDestroy {
18
17
  private cdr;
19
- private router;
20
18
  private el;
21
19
  private exportSrv;
22
- private modalHelper;
23
- private drawerHelper;
24
20
  private doc;
25
21
  private columnSource;
26
22
  private dataSource;
@@ -33,7 +29,6 @@ export declare class STComponent implements AfterViewInit, OnChanges, OnDestroy
33
29
  static ngAcceptInputType_bordered: BooleanInput;
34
30
  static ngAcceptInputType_expandRowByClick: BooleanInput;
35
31
  static ngAcceptInputType_expandAccordion: BooleanInput;
36
- static ngAcceptInputType_rowClickTime: NumberInput;
37
32
  static ngAcceptInputType_responsive: BooleanInput;
38
33
  static ngAcceptInputType_responsiveHideHeaderFooter: BooleanInput;
39
34
  static ngAcceptInputType_virtualScroll: BooleanInput;
@@ -44,7 +39,6 @@ export declare class STComponent implements AfterViewInit, OnChanges, OnDestroy
44
39
  private data$;
45
40
  private totalTpl;
46
41
  private cog;
47
- private rowClickCount;
48
42
  private _req;
49
43
  private _res;
50
44
  private _page;
@@ -109,7 +103,6 @@ export declare class STComponent implements AfterViewInit, OnChanges, OnDestroy
109
103
  column: STColumn;
110
104
  }>;
111
105
  noResult?: string | TemplateRef<void> | null;
112
- rowClickTime: number;
113
106
  responsive: boolean;
114
107
  responsiveHideHeaderFooter: boolean;
115
108
  readonly error: EventEmitter<STError>;
@@ -128,8 +121,7 @@ export declare class STComponent implements AfterViewInit, OnChanges, OnDestroy
128
121
  * Get the data of the current page
129
122
  */
130
123
  get list(): STData[];
131
- private get routerState();
132
- constructor(i18nSrv: AlainI18NService, cdr: ChangeDetectorRef, router: Router, el: ElementRef, exportSrv: STExport, modalHelper: ModalHelper, drawerHelper: DrawerHelper, doc: NzSafeAny, columnSource: STColumnSource, dataSource: STDataSource, delonI18n: DelonLocaleService, configSrv: AlainConfigService, cms: NzContextMenuService);
124
+ constructor(i18nSrv: AlainI18NService, cdr: ChangeDetectorRef, el: ElementRef, exportSrv: STExport, doc: NzSafeAny, columnSource: STColumnSource, dataSource: STDataSource, delonI18n: DelonLocaleService, configSrv: AlainConfigService, cms: NzContextMenuService);
133
125
  private setCog;
134
126
  cd(): this;
135
127
  renderTotal(total: string, range: string[]): string;
@@ -174,9 +166,8 @@ export declare class STComponent implements AfterViewInit, OnChanges, OnDestroy
174
166
  reset(extraParams?: NzSafeAny, options?: STLoadOptions): this;
175
167
  private _toTop;
176
168
  _change(type: 'pi' | 'ps', options?: STLoadOptions): void;
177
- _click(e: Event, item: STData, col: STColumn): boolean;
178
169
  private closeOtherExpand;
179
- _rowClick(e: Event, item: STData, index: number): void;
170
+ _rowClick(e: Event, item: STData, index: number, dbl: boolean): void;
180
171
  private _clickRowClassName;
181
172
  _expandChange(item: STData, expand: boolean): void;
182
173
  _stopPropagation(ev: Event): void;
@@ -207,24 +198,18 @@ export declare class STComponent implements AfterViewInit, OnChanges, OnDestroy
207
198
  }): this;
208
199
  sort(col: _STColumn, idx: number, value: NzSafeAny): void;
209
200
  clearSort(): this;
210
- private handleFilter;
211
- _filterConfirm(col: _STColumn): void;
212
- _filterRadio(col: _STColumn, item: STColumnFilterMenu, checked: boolean): void;
213
- _filterClear(col: _STColumn): void;
201
+ _handleFilter(col: _STColumn, confirm: boolean): void;
202
+ handleFilterNotify(value?: unknown): void;
214
203
  clearFilter(): this;
215
- _filterClick($event: MouseEvent): void;
216
204
  /** 清除所有 `checkbox` */
217
205
  clearCheck(): this;
218
206
  private _refCheck;
219
207
  _checkAll(checked?: boolean): this;
220
- _checkSelection(i: STData, value: boolean): this;
221
208
  _rowSelection(row: STColumnSelection): this;
222
209
  _checkNotify(): this;
223
210
  /** 清除所有 `radio` */
224
211
  clearRadio(): this;
225
- _refRadio(checked: boolean, item: STData): this;
226
- _btnClick(record: STData, btn: STColumnButton, ev?: Event): void;
227
- private btnCallback;
212
+ _handleTd(ev: _STTdNotify): void;
228
213
  /**
229
214
  * 导出当前页,确保已经注册 `XlsxModule`
230
215
  *