vislite 1.6.0-alpha.0 → 1.6.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 (65) hide show
  1. package/CHANGELOG +5 -1
  2. package/README.md +284 -284
  3. package/lib/BarLayout/index.es.js +4 -2
  4. package/lib/BarLayout/index.es.min.js +2 -2
  5. package/lib/Buffer/index.es.js +1 -1
  6. package/lib/Buffer/index.es.min.js +1 -1
  7. package/lib/Canvas/index.es.js +5 -3
  8. package/lib/Canvas/index.es.min.js +2 -2
  9. package/lib/Cardinal/index.es.js +1 -1
  10. package/lib/Cardinal/index.es.min.js +1 -1
  11. package/lib/Eoap/index.es.js +1 -1
  12. package/lib/Eoap/index.es.min.js +1 -1
  13. package/lib/Hermite/index.es.js +1 -1
  14. package/lib/Hermite/index.es.min.js +1 -1
  15. package/lib/MapCoordinate/index.es.js +1 -1
  16. package/lib/MapCoordinate/index.es.min.js +1 -1
  17. package/lib/Matrix4/index.es.js +1 -1
  18. package/lib/Matrix4/index.es.min.js +1 -1
  19. package/lib/Mercator/index.es.js +1 -1
  20. package/lib/Mercator/index.es.min.js +1 -1
  21. package/lib/PieLayout/index.es.js +3 -2
  22. package/lib/PieLayout/index.es.min.js +1 -1
  23. package/lib/RawCanvas/index.es.js +1 -1
  24. package/lib/RawCanvas/index.es.min.js +1 -1
  25. package/lib/SVG/index.es.js +1 -1
  26. package/lib/SVG/index.es.min.js +1 -1
  27. package/lib/Shader/index.es.js +1 -1
  28. package/lib/Shader/index.es.min.js +1 -1
  29. package/lib/Texture/index.es.js +1 -1
  30. package/lib/Texture/index.es.min.js +1 -1
  31. package/lib/TreeLayout/index.es.js +2 -1
  32. package/lib/TreeLayout/index.es.min.js +3 -3
  33. package/lib/animation/index.es.js +1 -1
  34. package/lib/animation/index.es.min.js +1 -1
  35. package/lib/assemble/index.es.js +1 -1
  36. package/lib/assemble/index.es.min.js +1 -1
  37. package/lib/getLoopColors/index.es.js +1 -1
  38. package/lib/getLoopColors/index.es.min.js +1 -1
  39. package/lib/getWebGLContext/index.es.js +1 -1
  40. package/lib/getWebGLContext/index.es.min.js +1 -1
  41. package/lib/index.umd.js +11 -5
  42. package/lib/index.umd.min.js +2 -2
  43. package/lib/initOption/index.es.js +1 -1
  44. package/lib/initOption/index.es.min.js +1 -1
  45. package/lib/mergeOption/index.es.js +1 -1
  46. package/lib/mergeOption/index.es.min.js +1 -1
  47. package/lib/move/index.es.js +1 -1
  48. package/lib/move/index.es.min.js +1 -1
  49. package/lib/rotate/index.es.js +1 -1
  50. package/lib/rotate/index.es.min.js +1 -1
  51. package/lib/ruler/index.es.js +1 -1
  52. package/lib/ruler/index.es.min.js +1 -1
  53. package/lib/scale/index.es.js +1 -1
  54. package/lib/scale/index.es.min.js +1 -1
  55. package/lib/throttle/index.es.js +1 -1
  56. package/lib/throttle/index.es.min.js +1 -1
  57. package/package.json +1 -1
  58. package/src/Canvas.ts +89 -89
  59. package/src/SVG.ts +55 -55
  60. package/src/common/tree/toPlainTree.ts +135 -135
  61. package/src/common/webgl/texture.ts +98 -98
  62. package/src/layout/BarLayout.ts +249 -248
  63. package/src/layout/PieLayout.ts +144 -141
  64. package/src/layout/TreeLayout.ts +200 -197
  65. package/types/Canvas.d.ts +3 -1
@@ -1,198 +1,201 @@
1
- import type TreeLayoutType from '../../types/TreeLayout'
2
- import type { TreeResultType } from '../../types/Tree'
3
- import type TreeOptionType from '../../types/TreeOption'
4
-
5
- import Tree from '../common/tree/index'
6
- import { initOption } from '../common/option'
7
- import { animation } from "oipage/web/animation/index"
8
- import rotate from '../rotate'
9
-
10
- class TreeLayout extends Tree implements TreeLayoutType {
11
- readonly name: string = 'TreeLayout'
12
-
13
- private __option = {
14
- offsetX: 0,
15
- offsetY: 0,
16
- duration: 500,
17
- type: "plain",
18
- direction: "LR",
19
- x: 100,
20
- y: 100,
21
- width: 100,
22
- height: 100,
23
- radius: 100
24
- }
25
-
26
- private __rback: (tree: TreeResultType) => void
27
- private __oralTree: any
28
- private __preTree: TreeResultType | null
29
-
30
- private __noOpens = {}
31
-
32
- setOption(option: TreeOptionType) {
33
- initOption(option, this.__option)
34
- return this
35
- }
36
-
37
- use(initTree: any, noOpens = {}) {
38
- const tree = super.use(initTree, noOpens)
39
-
40
- // 校对偏差
41
- if (this.__option.offsetX != 0 || this.__option.offsetY != 0) {
42
- for (const key in tree.node) {
43
- if (!tree.node[key].show) {
44
-
45
- let deep = 0, pid = key
46
- do {
47
- pid = tree.node[pid].pid
48
- deep++
49
- } while (!tree.node[pid].show)
50
-
51
- tree.node[key].left += this.__option.offsetX * deep
52
- tree.node[key].top += this.__option.offsetY * deep
53
- }
54
- }
55
- }
56
-
57
- if (this.__option.type == 'rect') {
58
- if (this.__option.direction == 'LR' || this.__option.direction == "RL") {
59
-
60
- const perW = this.__option.height / tree.size
61
- const perD = this.__option.width / (tree.deep - 1)
62
-
63
- const balanceW = this.__option.y - this.__option.height * 0.5
64
- const flag = this.__option.direction == 'LR' ? 1 : -1
65
-
66
- for (const key in tree.node) {
67
- if (tree.deep == 1) {
68
- tree.node[key].left = this.__option.x + this.__option.width * 0.5 * flag
69
- tree.node[key].top = this.__option.y
70
- } else {
71
- tree.node[key].left = this.__option.x + (tree.node[key].left - 0.5) * perD * flag
72
- tree.node[key].top = tree.node[key].top * perW + balanceW
73
- }
74
- }
75
- } else if (this.__option.direction == 'TB' || this.__option.direction == "BT") {
76
-
77
- const perW = this.__option.width / tree.size
78
- const perD = this.__option.height / (tree.deep - 1)
79
-
80
- const balanceW = this.__option.x - this.__option.width * 0.5
81
- const flag = this.__option.direction == 'TB' ? 1 : -1
82
-
83
-
84
-
85
- for (const key in tree.node) {
86
- tree.node[key].deg = this.__option.direction == 'TB' ? Math.PI * 0.5 : Math.PI * -0.5
87
-
88
- if (tree.deep == 1) {
89
- tree.node[key].left = this.__option.x
90
- tree.node[key].top = this.__option.y + this.__option.height * 0.5 * flag
91
- } else {
92
- const left = tree.node[key].left
93
- tree.node[key].left = tree.node[key].top * perW + balanceW
94
- tree.node[key].top = this.__option.y + (left - 0.5) * perD * flag
95
- }
96
- }
97
-
98
- }
99
-
100
- } else if (this.__option.type == 'circle') {
101
- const cx = this.__option.x, cy = this.__option.y
102
- const deg = Math.PI * 2 / tree.size
103
- const per = this.__option.radius / (tree.deep - 1)
104
-
105
- for (const key in tree.node) {
106
- if (tree.node[key].left == 0.5) {
107
- tree.node[key].left = cx
108
- tree.node[key].top = cy
109
- } else {
110
- const position = rotate(cx, cy, deg * tree.node[key].top, cx + (tree.node[key].left - 0.5) * per, cy)
111
-
112
- tree.node[key].deg = deg * tree.node[key].top
113
- tree.node[key].left = position[0]
114
- tree.node[key].top = position[1]
115
- }
116
- }
117
- }
118
-
119
- return tree
120
- }
121
-
122
- bind(initTree: any, renderBack: (tree: TreeResultType) => void, noOpens = {}) {
123
- this.__rback = renderBack
124
- this.__oralTree = initTree
125
- this.__noOpens = noOpens
126
-
127
- this.__preTree = this.use(this.__oralTree, this.__noOpens)
128
- this.__rback(this.__preTree)
129
-
130
- return this
131
- }
132
-
133
- unbind() {
134
- this.__rback = () => null
135
- this.__oralTree = null
136
- this.__preTree = null
137
- this.__noOpens = {}
138
- return this
139
- }
140
-
141
- doUpdate() {
142
- const newTree = this.use(this.__oralTree, this.__noOpens)
143
-
144
- const cacheTree = JSON.parse(JSON.stringify(newTree))
145
-
146
- animation((deep) => {
147
-
148
- if (this.__preTree) {
149
- for (const key in cacheTree.node) {
150
- if (newTree.node[key].show || this.__preTree.node[key].show) {
151
- cacheTree.node[key].show = true
152
-
153
- cacheTree.node[key].left = this.__preTree.node[key].left + (newTree.node[key].left - this.__preTree.node[key].left) * deep
154
- cacheTree.node[key].top = this.__preTree.node[key].top + (newTree.node[key].top - this.__preTree.node[key].top) * deep
155
- }
156
- }
157
- }
158
- this.__rback(cacheTree)
159
-
160
-
161
- }, this.__option.duration, () => {
162
- this.__preTree = newTree
163
- this.__rback(this.__preTree)
164
- })
165
-
166
- return this
167
- }
168
-
169
- closeNode(id: string) {
170
- if (!this.__preTree) return this
171
- // @ts-ignore
172
- this.__noOpens[id] = true
173
-
174
- this.doUpdate()
175
- return this
176
- }
177
-
178
- openNode(id: string) {
179
- if (!this.__preTree) return this
180
- // @ts-ignore
181
- this.__noOpens[id] = false
182
-
183
- this.doUpdate()
184
- return this
185
- }
186
-
187
- toggleNode(id: string) {
188
- if (!this.__preTree) return this
189
- // @ts-ignore
190
- this.__noOpens[id] = !this.__noOpens[id]
191
-
192
- this.doUpdate()
193
- return this
194
- }
195
-
196
- }
197
-
1
+ import type TreeLayoutType from '../../types/TreeLayout'
2
+ import type { TreeResultType } from '../../types/Tree'
3
+ import type TreeOptionType from '../../types/TreeOption'
4
+
5
+ import Tree from '../common/tree/index'
6
+ import { initOption } from '../common/option'
7
+ import { animation } from "oipage/web/animation/index"
8
+ import rotate from '../rotate'
9
+
10
+ class TreeLayout extends Tree implements TreeLayoutType {
11
+ readonly name: string = 'TreeLayout'
12
+
13
+ private __option = {
14
+ offsetX: 0,
15
+ offsetY: 0,
16
+ duration: 500,
17
+ type: "plain",
18
+ direction: "LR",
19
+ x: 100,
20
+ y: 100,
21
+ width: 100,
22
+ height: 100,
23
+ radius: 100
24
+ }
25
+
26
+ private __rback: (tree: TreeResultType) => void
27
+ private __oralTree: any
28
+ private __preTree: TreeResultType | null
29
+
30
+ private __noOpens = {}
31
+
32
+ setOption(option: TreeOptionType) {
33
+ initOption(option, this.__option)
34
+ return this
35
+ }
36
+
37
+ use(initTree: any, noOpens = {}) {
38
+ const tree = super.use(initTree, noOpens)
39
+
40
+ // 校对偏差
41
+ if (this.__option.offsetX != 0 || this.__option.offsetY != 0) {
42
+ for (const key in tree.node) {
43
+ if (!tree.node[key].show) {
44
+
45
+ let deep = 0, pid = key
46
+ do {
47
+ pid = tree.node[pid].pid
48
+ deep++
49
+ } while (!tree.node[pid].show)
50
+
51
+ tree.node[key].left += this.__option.offsetX * deep
52
+ tree.node[key].top += this.__option.offsetY * deep
53
+ }
54
+ }
55
+ }
56
+
57
+ if (this.__option.type == 'rect') {
58
+ if (this.__option.direction == 'LR' || this.__option.direction == "RL") {
59
+
60
+ const perW = this.__option.height / tree.size
61
+ const perD = this.__option.width / (tree.deep - 1)
62
+
63
+ const balanceW = this.__option.y - this.__option.height * 0.5
64
+ const flag = this.__option.direction == 'LR' ? 1 : -1
65
+
66
+ for (const key in tree.node) {
67
+ if (tree.deep == 1) {
68
+ tree.node[key].left = this.__option.x + this.__option.width * 0.5 * flag
69
+ tree.node[key].top = this.__option.y
70
+ } else {
71
+ tree.node[key].left = this.__option.x + (tree.node[key].left - 0.5) * perD * flag
72
+ tree.node[key].top = tree.node[key].top * perW + balanceW
73
+ }
74
+ }
75
+ } else if (this.__option.direction == 'TB' || this.__option.direction == "BT") {
76
+
77
+ const perW = this.__option.width / tree.size
78
+ const perD = this.__option.height / (tree.deep - 1)
79
+
80
+ const balanceW = this.__option.x - this.__option.width * 0.5
81
+ const flag = this.__option.direction == 'TB' ? 1 : -1
82
+
83
+
84
+
85
+ for (const key in tree.node) {
86
+ tree.node[key].deg = this.__option.direction == 'TB' ? Math.PI * 0.5 : Math.PI * -0.5
87
+
88
+ if (tree.deep == 1) {
89
+ tree.node[key].left = this.__option.x
90
+ tree.node[key].top = this.__option.y + this.__option.height * 0.5 * flag
91
+ } else {
92
+ const left = tree.node[key].left
93
+ tree.node[key].left = tree.node[key].top * perW + balanceW
94
+ tree.node[key].top = this.__option.y + (left - 0.5) * perD * flag
95
+ }
96
+ }
97
+
98
+ }
99
+
100
+ } else if (this.__option.type == 'circle') {
101
+ const cx = this.__option.x, cy = this.__option.y
102
+ const deg = Math.PI * 2 / tree.size
103
+ const per = this.__option.radius / (tree.deep - 1)
104
+
105
+ for (const key in tree.node) {
106
+ if (tree.node[key].left == 0.5) {
107
+ tree.node[key].left = cx
108
+ tree.node[key].top = cy
109
+ } else {
110
+ const position = rotate(cx, cy, deg * tree.node[key].top, cx + (tree.node[key].left - 0.5) * per, cy)
111
+
112
+ tree.node[key].deg = deg * tree.node[key].top
113
+ tree.node[key].left = position[0]
114
+ tree.node[key].top = position[1]
115
+ }
116
+ }
117
+ }
118
+
119
+ return tree
120
+ }
121
+
122
+ bind(initTree: any, renderBack: (tree: TreeResultType) => void, noOpens = {}) {
123
+ this.__rback = renderBack
124
+ this.__oralTree = initTree
125
+ this.__noOpens = noOpens
126
+
127
+ this.__preTree = this.use(this.__oralTree, this.__noOpens)
128
+ this.__rback(this.__preTree)
129
+
130
+ return this
131
+ }
132
+
133
+ unbind() {
134
+ this.__rback = () => null
135
+ this.__oralTree = null
136
+ this.__preTree = null
137
+ this.__noOpens = {}
138
+ return this
139
+ }
140
+
141
+ doUpdate() {
142
+ const newTree = this.use(this.__oralTree, this.__noOpens)
143
+
144
+ const cacheTree = JSON.parse(JSON.stringify(newTree))
145
+
146
+ animation((deep) => {
147
+
148
+ if (this.__preTree) {
149
+ for (const key in cacheTree.node) {
150
+ if (newTree.node[key].show || this.__preTree.node[key].show) {
151
+ cacheTree.node[key].show = true
152
+
153
+ cacheTree.node[key].left = this.__preTree.node[key].left + (newTree.node[key].left - this.__preTree.node[key].left) * deep
154
+ cacheTree.node[key].top = this.__preTree.node[key].top + (newTree.node[key].top - this.__preTree.node[key].top) * deep
155
+ }
156
+ }
157
+ }
158
+ this.__rback(cacheTree)
159
+
160
+
161
+ }, this.__option.duration, () => {
162
+ this.__preTree = newTree
163
+ this.__rback(this.__preTree)
164
+ })
165
+
166
+ return this
167
+ }
168
+
169
+ closeNode(id: string) {
170
+ if (!this.__preTree) return this
171
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
172
+ // @ts-ignore
173
+ this.__noOpens[id] = true
174
+
175
+ this.doUpdate()
176
+ return this
177
+ }
178
+
179
+ openNode(id: string) {
180
+ if (!this.__preTree) return this
181
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
182
+ // @ts-ignore
183
+ this.__noOpens[id] = false
184
+
185
+ this.doUpdate()
186
+ return this
187
+ }
188
+
189
+ toggleNode(id: string) {
190
+ if (!this.__preTree) return this
191
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
192
+ // @ts-ignore
193
+ this.__noOpens[id] = !this.__noOpens[id]
194
+
195
+ this.doUpdate()
196
+ return this
197
+ }
198
+
199
+ }
200
+
198
201
  export default TreeLayout
package/types/Canvas.d.ts CHANGED
@@ -271,8 +271,10 @@ export default interface CanvasType {
271
271
 
272
272
  /**
273
273
  * 把画布变成url
274
+ * @param type 【仅H5端有效】字符串类型,可选,表示要导出的图片格式,默认为 "image/png"(还可以设置为 "image/jpeg"、"image/webp" 等格式)
275
+ * @param encoderOptions 【仅H5端有效】数值类型,可选,用于指定图像的质量,默认0.92,如果设置了该参数,则只对 "image/jpeg" 和 "image/webp" 格式有效,取值范围是 0 到 1 之间,其中 1 表示最高质量,0 表示最低质量。对于 PNG 格式,此参数无效。
274
276
  */
275
- toDataURL(): Promise<string>
277
+ toDataURL(type?: string, encoderOptions?: number): Promise<string>
276
278
 
277
279
  /**
278
280
  * 获取原生画笔