@leafer-ui/external 1.0.0-beta.4 → 1.0.0-beta.5

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 (2) hide show
  1. package/package.json +4 -4
  2. package/src/Export.ts +58 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leafer-ui/external",
3
- "version": "1.0.0-beta.4",
3
+ "version": "1.0.0-beta.5",
4
4
  "description": "@leafer-ui/external",
5
5
  "author": "Chao (Leafer) Wan",
6
6
  "license": "MIT",
@@ -19,10 +19,10 @@
19
19
  "leaferjs"
20
20
  ],
21
21
  "dependencies": {
22
- "@leafer-ui/paint": "1.0.0-beta.4",
23
- "@leafer-ui/effect": "1.0.0-beta.4"
22
+ "@leafer-ui/paint": "1.0.0-beta.5",
23
+ "@leafer-ui/effect": "1.0.0-beta.5"
24
24
  },
25
25
  "devDependencies": {
26
- "@leafer-ui/interface": "1.0.0-beta.4"
26
+ "@leafer-ui/interface": "1.0.0-beta.5"
27
27
  }
28
28
  }
package/src/Export.ts CHANGED
@@ -1,3 +1,60 @@
1
- export const Export = {
1
+ import { ILeaf, IExportFileType, IBlob } from '@leafer/interface'
2
+
3
+ import { IExportModule, IExportOptions, IExportResult } from '@leafer-ui/interface'
4
+
5
+ export const Export: IExportModule = {
6
+
7
+ export(leaf: ILeaf, filename: IExportFileType | string, options?: IExportOptions | number | boolean): Promise<IExportResult> {
8
+
9
+ return new Promise((resolve) => {
10
+ const { leafer } = leaf
11
+ if (leafer) {
12
+
13
+ leafer.waitViewLoaded(async () => {
14
+
15
+ let quality, blob: boolean
16
+ let { canvas } = leafer
17
+ let { unreal } = canvas
18
+
19
+ if (unreal) {
20
+ canvas = canvas.getSameCanvas()
21
+ canvas.backgroundColor = leafer.config.fill
22
+ leafer.__render(canvas, {})
23
+ }
24
+
25
+ switch (typeof options) {
26
+ case 'object':
27
+ if (options.quality) quality = options.quality
28
+ if (options.blob) blob = true
29
+ break
30
+ case 'number':
31
+ quality = options
32
+ break
33
+ case 'boolean':
34
+ blob = options
35
+ }
36
+
37
+ let data: IBlob | string | boolean
38
+
39
+ if (filename.includes('.')) {
40
+ data = await canvas.saveAs(filename, quality)
41
+ } else if (blob) {
42
+ data = await canvas.toBlob(filename, quality)
43
+ } else {
44
+ data = canvas.toDataURL(filename, quality)
45
+ }
46
+
47
+ resolve({ data })
48
+
49
+ if (unreal) canvas.recycle()
50
+
51
+ })
52
+
53
+ } else {
54
+ resolve({ data: false })
55
+ }
56
+
57
+ })
58
+ }
2
59
 
3
60
  }