@meta2d/core 1.0.55 → 1.0.56

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 (302) hide show
  1. package/README.md +13 -0
  2. package/package.build.json +39 -0
  3. package/package.json +38 -38
  4. package/src/canvas/canvas.ts +8639 -0
  5. package/src/canvas/canvasImage.ts +525 -0
  6. package/src/canvas/canvasTemplate.ts +257 -0
  7. package/src/canvas/magnifierCanvas.ts +142 -0
  8. package/src/canvas/offscreen.ts +14 -0
  9. package/src/core.ts +5128 -0
  10. package/src/data.ts +86 -0
  11. package/src/diagrams/arrow.ts +50 -0
  12. package/src/diagrams/circle.ts +19 -0
  13. package/src/diagrams/cloud.ts +34 -0
  14. package/src/diagrams/cube.ts +94 -0
  15. package/src/diagrams/diamond.ts +14 -0
  16. package/src/diagrams/file.ts +19 -0
  17. package/src/diagrams/gif.ts +105 -0
  18. package/src/diagrams/{hexagon.js → hexagon.ts} +19 -14
  19. package/src/diagrams/iframe.ts +365 -0
  20. package/src/diagrams/{index.js → index.ts} +36 -34
  21. package/src/diagrams/line/arrow.ts +175 -0
  22. package/src/diagrams/line/curve.ts +260 -0
  23. package/src/diagrams/line/line.ts +409 -0
  24. package/src/diagrams/line/polyline.ts +676 -0
  25. package/src/diagrams/line/smooth.ts +133 -0
  26. package/src/diagrams/message.ts +17 -0
  27. package/src/diagrams/mindLine.ts +31 -0
  28. package/src/diagrams/mindNode.ts +177 -0
  29. package/src/diagrams/panel.ts +149 -0
  30. package/src/diagrams/pentagon.ts +48 -0
  31. package/src/diagrams/pentagram.ts +63 -0
  32. package/src/diagrams/people.ts +23 -0
  33. package/src/diagrams/rectangle.ts +29 -0
  34. package/src/diagrams/svg/parse.ts +319 -0
  35. package/src/diagrams/svgPath.ts +53 -0
  36. package/src/diagrams/triangle.ts +43 -0
  37. package/src/diagrams/video.ts +202 -0
  38. package/src/dialog/dialog.ts +177 -0
  39. package/src/event/event.ts +142 -0
  40. package/src/map/map.ts +239 -0
  41. package/src/options.ts +205 -0
  42. package/src/pen/arrow.ts +259 -0
  43. package/src/pen/math.ts +253 -0
  44. package/src/pen/model.ts +785 -0
  45. package/src/pen/plugin.ts +57 -0
  46. package/src/pen/render.ts +3725 -0
  47. package/src/pen/text.ts +341 -0
  48. package/src/pen/utils.ts +21 -0
  49. package/src/point/point.ts +232 -0
  50. package/src/rect/rect.ts +507 -0
  51. package/src/rect/triangle.ts +16 -0
  52. package/src/scroll/scroll.ts +277 -0
  53. package/src/store/global.ts +38 -0
  54. package/src/store/store.ts +293 -0
  55. package/src/theme.ts +35 -0
  56. package/src/title/title.ts +115 -0
  57. package/src/tooltip/tooltip.ts +199 -0
  58. package/src/utils/clone.ts +79 -0
  59. package/src/utils/color.ts +126 -0
  60. package/src/utils/error.ts +7 -0
  61. package/src/utils/file.ts +46 -0
  62. package/src/utils/{index.d.ts → index.ts} +1 -0
  63. package/src/utils/math.ts +120 -0
  64. package/src/utils/object.ts +23 -0
  65. package/src/utils/padding.ts +48 -0
  66. package/src/utils/time.ts +25 -0
  67. package/src/utils/url.ts +30 -0
  68. package/src/utils/uuid.ts +15 -0
  69. package/index.js +0 -10
  70. package/index.js.map +0 -1
  71. package/src/canvas/canvas.d.ts +0 -456
  72. package/src/canvas/canvas.js +0 -8187
  73. package/src/canvas/canvas.js.map +0 -1
  74. package/src/canvas/canvasImage.d.ts +0 -28
  75. package/src/canvas/canvasImage.js +0 -503
  76. package/src/canvas/canvasImage.js.map +0 -1
  77. package/src/canvas/canvasTemplate.d.ts +0 -19
  78. package/src/canvas/canvasTemplate.js +0 -229
  79. package/src/canvas/canvasTemplate.js.map +0 -1
  80. package/src/canvas/index.js +0 -3
  81. package/src/canvas/index.js.map +0 -1
  82. package/src/canvas/magnifierCanvas.d.ts +0 -20
  83. package/src/canvas/magnifierCanvas.js +0 -101
  84. package/src/canvas/magnifierCanvas.js.map +0 -1
  85. package/src/canvas/offscreen.d.ts +0 -2
  86. package/src/canvas/offscreen.js +0 -14
  87. package/src/canvas/offscreen.js.map +0 -1
  88. package/src/core.d.ts +0 -479
  89. package/src/core.js +0 -5199
  90. package/src/core.js.map +0 -1
  91. package/src/data.d.ts +0 -34
  92. package/src/data.js +0 -85
  93. package/src/data.js.map +0 -1
  94. package/src/diagrams/arrow.d.ts +0 -4
  95. package/src/diagrams/arrow.js +0 -47
  96. package/src/diagrams/arrow.js.map +0 -1
  97. package/src/diagrams/circle.d.ts +0 -2
  98. package/src/diagrams/circle.js +0 -9
  99. package/src/diagrams/circle.js.map +0 -1
  100. package/src/diagrams/cloud.d.ts +0 -2
  101. package/src/diagrams/cloud.js +0 -12
  102. package/src/diagrams/cloud.js.map +0 -1
  103. package/src/diagrams/cube.d.ts +0 -2
  104. package/src/diagrams/cube.js +0 -70
  105. package/src/diagrams/cube.js.map +0 -1
  106. package/src/diagrams/diamond.d.ts +0 -2
  107. package/src/diagrams/diamond.js +0 -13
  108. package/src/diagrams/diamond.js.map +0 -1
  109. package/src/diagrams/file.d.ts +0 -2
  110. package/src/diagrams/file.js +0 -18
  111. package/src/diagrams/file.js.map +0 -1
  112. package/src/diagrams/gif.d.ts +0 -5
  113. package/src/diagrams/gif.js +0 -90
  114. package/src/diagrams/gif.js.map +0 -1
  115. package/src/diagrams/hexagon.d.ts +0 -2
  116. package/src/diagrams/hexagon.js.map +0 -1
  117. package/src/diagrams/iframe.d.ts +0 -2
  118. package/src/diagrams/iframe.js +0 -356
  119. package/src/diagrams/iframe.js.map +0 -1
  120. package/src/diagrams/index.d.ts +0 -71
  121. package/src/diagrams/index.js.map +0 -1
  122. package/src/diagrams/line/arrow.d.ts +0 -2
  123. package/src/diagrams/line/arrow.js +0 -128
  124. package/src/diagrams/line/arrow.js.map +0 -1
  125. package/src/diagrams/line/curve.d.ts +0 -16
  126. package/src/diagrams/line/curve.js +0 -236
  127. package/src/diagrams/line/curve.js.map +0 -1
  128. package/src/diagrams/line/index.js +0 -6
  129. package/src/diagrams/line/index.js.map +0 -1
  130. package/src/diagrams/line/line.d.ts +0 -42
  131. package/src/diagrams/line/line.js +0 -431
  132. package/src/diagrams/line/line.js.map +0 -1
  133. package/src/diagrams/line/polyline.d.ts +0 -10
  134. package/src/diagrams/line/polyline.js +0 -657
  135. package/src/diagrams/line/polyline.js.map +0 -1
  136. package/src/diagrams/line/smooth.d.ts +0 -3
  137. package/src/diagrams/line/smooth.js +0 -174
  138. package/src/diagrams/line/smooth.js.map +0 -1
  139. package/src/diagrams/message.d.ts +0 -2
  140. package/src/diagrams/message.js +0 -15
  141. package/src/diagrams/message.js.map +0 -1
  142. package/src/diagrams/mindLine.d.ts +0 -3
  143. package/src/diagrams/mindLine.js +0 -31
  144. package/src/diagrams/mindLine.js.map +0 -1
  145. package/src/diagrams/mindNode.d.ts +0 -3
  146. package/src/diagrams/mindNode.js +0 -189
  147. package/src/diagrams/mindNode.js.map +0 -1
  148. package/src/diagrams/panel.d.ts +0 -2
  149. package/src/diagrams/panel.js +0 -131
  150. package/src/diagrams/panel.js.map +0 -1
  151. package/src/diagrams/pentagon.d.ts +0 -3
  152. package/src/diagrams/pentagon.js +0 -46
  153. package/src/diagrams/pentagon.js.map +0 -1
  154. package/src/diagrams/pentagram.d.ts +0 -3
  155. package/src/diagrams/pentagram.js +0 -77
  156. package/src/diagrams/pentagram.js.map +0 -1
  157. package/src/diagrams/people.d.ts +0 -2
  158. package/src/diagrams/people.js +0 -19
  159. package/src/diagrams/people.js.map +0 -1
  160. package/src/diagrams/rectangle.d.ts +0 -3
  161. package/src/diagrams/rectangle.js +0 -26
  162. package/src/diagrams/rectangle.js.map +0 -1
  163. package/src/diagrams/svg/parse.d.ts +0 -15
  164. package/src/diagrams/svg/parse.js +0 -326
  165. package/src/diagrams/svg/parse.js.map +0 -1
  166. package/src/diagrams/svgPath.d.ts +0 -2
  167. package/src/diagrams/svgPath.js +0 -30
  168. package/src/diagrams/svgPath.js.map +0 -1
  169. package/src/diagrams/triangle.d.ts +0 -3
  170. package/src/diagrams/triangle.js +0 -41
  171. package/src/diagrams/triangle.js.map +0 -1
  172. package/src/diagrams/video.d.ts +0 -5
  173. package/src/diagrams/video.js +0 -185
  174. package/src/diagrams/video.js.map +0 -1
  175. package/src/dialog/dialog.d.ts +0 -21
  176. package/src/dialog/dialog.js +0 -98
  177. package/src/dialog/dialog.js.map +0 -1
  178. package/src/dialog/index.js +0 -2
  179. package/src/dialog/index.js.map +0 -1
  180. package/src/event/event.d.ts +0 -102
  181. package/src/event/event.js +0 -22
  182. package/src/event/event.js.map +0 -1
  183. package/src/event/index.js +0 -2
  184. package/src/event/index.js.map +0 -1
  185. package/src/map/index.js +0 -2
  186. package/src/map/index.js.map +0 -1
  187. package/src/map/map.d.ts +0 -21
  188. package/src/map/map.js +0 -210
  189. package/src/map/map.js.map +0 -1
  190. package/src/options.d.ts +0 -130
  191. package/src/options.js +0 -80
  192. package/src/options.js.map +0 -1
  193. package/src/pen/arrow.d.ts +0 -4
  194. package/src/pen/arrow.js +0 -188
  195. package/src/pen/arrow.js.map +0 -1
  196. package/src/pen/index.js +0 -7
  197. package/src/pen/index.js.map +0 -1
  198. package/src/pen/math.d.ts +0 -28
  199. package/src/pen/math.js +0 -304
  200. package/src/pen/math.js.map +0 -1
  201. package/src/pen/model.d.ts +0 -514
  202. package/src/pen/model.js +0 -210
  203. package/src/pen/model.js.map +0 -1
  204. package/src/pen/plugin.d.ts +0 -5
  205. package/src/pen/plugin.js +0 -88
  206. package/src/pen/plugin.js.map +0 -1
  207. package/src/pen/render.d.ts +0 -147
  208. package/src/pen/render.js +0 -3236
  209. package/src/pen/render.js.map +0 -1
  210. package/src/pen/text.d.ts +0 -8
  211. package/src/pen/text.js +0 -375
  212. package/src/pen/text.js.map +0 -1
  213. package/src/pen/utils.d.ts +0 -2
  214. package/src/pen/utils.js +0 -41
  215. package/src/pen/utils.js.map +0 -1
  216. package/src/point/index.js +0 -2
  217. package/src/point/index.js.map +0 -1
  218. package/src/point/point.d.ts +0 -65
  219. package/src/point/point.js +0 -179
  220. package/src/point/point.js.map +0 -1
  221. package/src/rect/index.js +0 -2
  222. package/src/rect/index.js.map +0 -1
  223. package/src/rect/rect.d.ts +0 -52
  224. package/src/rect/rect.js +0 -486
  225. package/src/rect/rect.js.map +0 -1
  226. package/src/rect/triangle.d.ts +0 -2
  227. package/src/rect/triangle.js +0 -10
  228. package/src/rect/triangle.js.map +0 -1
  229. package/src/scroll/index.js +0 -2
  230. package/src/scroll/index.js.map +0 -1
  231. package/src/scroll/scroll.d.ts +0 -35
  232. package/src/scroll/scroll.js +0 -221
  233. package/src/scroll/scroll.js.map +0 -1
  234. package/src/store/global.d.ts +0 -25
  235. package/src/store/global.js +0 -18
  236. package/src/store/global.js.map +0 -1
  237. package/src/store/index.js +0 -3
  238. package/src/store/index.js.map +0 -1
  239. package/src/store/store.d.ts +0 -228
  240. package/src/store/store.js +0 -121
  241. package/src/store/store.js.map +0 -1
  242. package/src/theme.d.ts +0 -13
  243. package/src/theme.js +0 -23
  244. package/src/theme.js.map +0 -1
  245. package/src/title/index.js +0 -2
  246. package/src/title/index.js.map +0 -1
  247. package/src/title/title.d.ts +0 -30
  248. package/src/title/title.js +0 -99
  249. package/src/title/title.js.map +0 -1
  250. package/src/tooltip/index.js +0 -2
  251. package/src/tooltip/index.js.map +0 -1
  252. package/src/tooltip/tooltip.d.ts +0 -40
  253. package/src/tooltip/tooltip.js +0 -167
  254. package/src/tooltip/tooltip.js.map +0 -1
  255. package/src/utils/browser.d.ts +0 -1
  256. package/src/utils/browser.js +0 -4
  257. package/src/utils/browser.js.map +0 -1
  258. package/src/utils/clone.d.ts +0 -8
  259. package/src/utils/clone.js +0 -88
  260. package/src/utils/clone.js.map +0 -1
  261. package/src/utils/color.d.ts +0 -3
  262. package/src/utils/color.js +0 -126
  263. package/src/utils/color.js.map +0 -1
  264. package/src/utils/error.d.ts +0 -2
  265. package/src/utils/error.js +0 -6
  266. package/src/utils/error.js.map +0 -1
  267. package/src/utils/file.d.ts +0 -3
  268. package/src/utils/file.js +0 -92
  269. package/src/utils/file.js.map +0 -1
  270. package/src/utils/index.js +0 -9
  271. package/src/utils/index.js.map +0 -1
  272. package/src/utils/math.d.ts +0 -18
  273. package/src/utils/math.js +0 -152
  274. package/src/utils/math.js.map +0 -1
  275. package/src/utils/object.d.ts +0 -2
  276. package/src/utils/object.js +0 -21
  277. package/src/utils/object.js.map +0 -1
  278. package/src/utils/padding.d.ts +0 -7
  279. package/src/utils/padding.js +0 -47
  280. package/src/utils/padding.js.map +0 -1
  281. package/src/utils/time.d.ts +0 -1
  282. package/src/utils/time.js +0 -17
  283. package/src/utils/time.js.map +0 -1
  284. package/src/utils/url.d.ts +0 -4
  285. package/src/utils/url.js +0 -27
  286. package/src/utils/url.js.map +0 -1
  287. package/src/utils/uuid.d.ts +0 -4
  288. package/src/utils/uuid.js +0 -13
  289. package/src/utils/uuid.js.map +0 -1
  290. /package/{index.d.ts → index.ts} +0 -0
  291. /package/src/canvas/{index.d.ts → index.ts} +0 -0
  292. /package/src/diagrams/line/{index.d.ts → index.ts} +0 -0
  293. /package/src/dialog/{index.d.ts → index.ts} +0 -0
  294. /package/src/event/{index.d.ts → index.ts} +0 -0
  295. /package/src/map/{index.d.ts → index.ts} +0 -0
  296. /package/src/pen/{index.d.ts → index.ts} +0 -0
  297. /package/src/point/{index.d.ts → index.ts} +0 -0
  298. /package/src/rect/{index.d.ts → index.ts} +0 -0
  299. /package/src/scroll/{index.d.ts → index.ts} +0 -0
  300. /package/src/store/{index.d.ts → index.ts} +0 -0
  301. /package/src/title/{index.d.ts → index.ts} +0 -0
  302. /package/src/tooltip/{index.d.ts → index.ts} +0 -0
@@ -0,0 +1,277 @@
1
+ import { Canvas } from '../canvas';
2
+ import { getRect, Rect } from '../rect';
3
+
4
+ export class Scroll {
5
+ h: HTMLElement;
6
+ v: HTMLElement;
7
+ isDownH: number;
8
+ isDownV: number;
9
+ x: number;
10
+ y: number;
11
+ hSize: number;
12
+ vSize: number;
13
+ scrollX: number;
14
+ scrollY: number;
15
+ lastScrollX: number;
16
+ lastScrollY: number;
17
+ rect: Rect;
18
+ isShow: boolean;
19
+ pageMode: boolean; //页面模式
20
+ constructor(public parent: Canvas) {
21
+ this.h = document.createElement('div');
22
+ this.v = document.createElement('div');
23
+
24
+ this.parent.externalElements.appendChild(this.h);
25
+ this.parent.externalElements.appendChild(this.v);
26
+
27
+ this.h.className = 'meta2d-scroll h';
28
+ this.h.onmousedown = this.onMouseDownH;
29
+
30
+ this.v.className = 'meta2d-scroll v';
31
+ this.v.onmousedown = this.onMouseDownV;
32
+
33
+ document.addEventListener('mousemove', this.onMouseMove);
34
+ document.addEventListener('mouseup', this.onMouseUp);
35
+
36
+ let sheet: any;
37
+ for (let i = 0; i < document.styleSheets.length; i++) {
38
+ if (document.styleSheets[i].title === 'le5le/scroll') {
39
+ sheet = document.styleSheets[i];
40
+ }
41
+ }
42
+
43
+ if (!sheet) {
44
+ let style = document.createElement('style');
45
+ style.type = 'text/css';
46
+ style.title = 'le5le.com/scroll';
47
+ document.head.appendChild(style);
48
+
49
+ style = document.createElement('style');
50
+ style.type = 'text/css';
51
+ document.head.appendChild(style);
52
+ sheet = style.sheet;
53
+ sheet.insertRule(
54
+ '.meta2d-scroll{position:absolute;width:8px;height:200px;background:#dddddd;border-radius:10px;z-index:20;cursor:default;}'
55
+ );
56
+ sheet.insertRule(
57
+ '.meta2d-scroll:hover{background:#cccccc;cursor:pointer}'
58
+ );
59
+ sheet.insertRule('.meta2d-scroll.v{right:0;top:calc(50% - 100px);}');
60
+ sheet.insertRule(
61
+ '.meta2d-scroll.h{bottom:2px;left:calc(50% - 100px);width:200px;height:8px;}'
62
+ );
63
+ }
64
+
65
+ this.init();
66
+ }
67
+
68
+ init() {
69
+ this.isShow = true;
70
+ this.resize();
71
+ this.initPos();
72
+ }
73
+
74
+ private onMouseDownH = (e: MouseEvent) => {
75
+ e.preventDefault();
76
+ e.stopPropagation();
77
+
78
+ this.isDownH = e.x;
79
+ this.x = this.parent.store.data.x || 0;
80
+ this.lastScrollX = this.scrollX;
81
+ };
82
+
83
+ private onMouseDownV = (e: MouseEvent) => {
84
+ e.preventDefault();
85
+ e.stopPropagation();
86
+
87
+ this.isDownV = e.y;
88
+ this.y = this.parent.store.data.y || 0;
89
+ this.lastScrollY = this.scrollY;
90
+ };
91
+
92
+ private onMouseMove = (e: MouseEvent) => {
93
+ if (this.isDownH) {
94
+ const x = e.x - this.isDownH;
95
+ this.scrollX = this.lastScrollX + x;
96
+ this.h.style.left = `${this.scrollX}px`;
97
+ this.parent.store.data.x =
98
+ this.x - (x * this.rect.width) / this.parent.parentElement.clientWidth;
99
+ }
100
+
101
+ if (this.isDownV) {
102
+ const y = e.y - this.isDownV;
103
+ if (this.pageMode && this.canMouseMove(y)) {
104
+ return;
105
+ }
106
+ this.scrollY = this.lastScrollY + y;
107
+ this.v.style.top = `${this.scrollY}px`;
108
+ this.parent.store.data.y =
109
+ this.y -
110
+ (y * this.rect.height) / this.parent.parentElement.clientHeight;
111
+ }
112
+
113
+ if (this.isDownH || this.isDownV) {
114
+ this.parent.onMovePens();
115
+ this.parent.canvasTemplate.init();
116
+ this.parent.canvasImage.init();
117
+ this.parent.canvasImageBottom.init();
118
+ this.parent.render();
119
+ }
120
+ };
121
+
122
+ private onMouseUp = (e: MouseEvent) => {
123
+ if (!this.isDownH && !this.isDownV) {
124
+ return;
125
+ }
126
+
127
+ this.isDownH = undefined;
128
+ this.isDownV = undefined;
129
+
130
+ if (this.scrollX < 20) {
131
+ this.scrollX = 20;
132
+ this.h.style.left = `${this.scrollX}px`;
133
+ } else if (
134
+ this.scrollX >
135
+ this.parent.parentElement.clientWidth - this.hSize - 20
136
+ ) {
137
+ this.scrollX = this.parent.parentElement.clientWidth - this.hSize - 20;
138
+ this.h.style.left = `${this.scrollX}px`;
139
+ }
140
+
141
+ if (this.scrollY < 20) {
142
+ this.scrollY = 20;
143
+ this.v.style.top = `${this.scrollY}px`;
144
+ } else if (
145
+ this.scrollY >
146
+ this.parent.parentElement.clientHeight - this.vSize - 20
147
+ ) {
148
+ this.scrollY = this.parent.parentElement.clientHeight - this.vSize - 20;
149
+ this.v.style.top = `${this.scrollY}px`;
150
+ }
151
+
152
+ this.resize();
153
+ };
154
+
155
+ canMouseMove(y: number) {
156
+ const rect = this.parent.parent.getRect();
157
+ if (y < 0 && rect.y + this.parent.store.data.y >= 0) {
158
+ return true;
159
+ }
160
+ if (y > 0 && rect.ey - this.parent.height + this.parent.store.data.y <= 0) {
161
+ return true;
162
+ }
163
+ return false;
164
+ }
165
+
166
+ changeMode() {
167
+ this.pageMode = true;
168
+ this.h.style.display = `none`;
169
+ const rect = this.parent.parent.getRect();
170
+ if (rect.height < this.parent.height) {
171
+ this.v.style.display = `none`;
172
+ }
173
+ }
174
+
175
+ initPos() {
176
+ this.scrollX = (this.parent.parentElement.clientWidth - this.hSize) / 2;
177
+ this.scrollY = (this.parent.parentElement.clientHeight - this.vSize) / 2;
178
+ this.h.style.left = `${this.scrollX}px`;
179
+ this.v.style.top = `${this.scrollY}px`;
180
+ }
181
+
182
+ resize() {
183
+ this.rect = getRect(this.parent.store.data.pens);
184
+ if (this.rect.width < 1400) {
185
+ this.rect.width = 1400;
186
+ }
187
+ if (this.rect.height < 900) {
188
+ this.rect.height = 900;
189
+ }
190
+
191
+ if (this.parent.store.data.x > 0) {
192
+ this.rect.width +=
193
+ this.parent.store.data.x + (this.rect.x > 0 ? 0 : this.rect.x);
194
+ } else {
195
+ this.rect.width -=
196
+ this.parent.store.data.x + (this.rect.x > 0 ? 0 : this.rect.x);
197
+ }
198
+
199
+ if (this.parent.store.data.y > 0) {
200
+ this.rect.height +=
201
+ this.parent.store.data.y + (this.rect.y > 0 ? 0 : this.rect.y);
202
+ } else {
203
+ this.rect.height -=
204
+ this.parent.store.data.y + (this.rect.y > 0 ? 0 : this.rect.y);
205
+ }
206
+
207
+ if (this.rect.width < 1400) {
208
+ this.rect.width = 1400;
209
+ }
210
+ if (this.rect.height < 900) {
211
+ this.rect.height = 900;
212
+ }
213
+
214
+ this.hSize =
215
+ (1000 * this.parent.parentElement.clientWidth) / this.rect.width / 3;
216
+ this.vSize =
217
+ (1000 * this.parent.parentElement.clientHeight) / this.rect.height / 3;
218
+ this.h.style.width = this.hSize + 'px';
219
+ this.v.style.height = this.vSize + 'px';
220
+ }
221
+
222
+ show() {
223
+ this.isShow = true;
224
+ this.h.style.display = `block`;
225
+ this.v.style.display = `block`;
226
+ document.addEventListener('mousemove', this.onMouseMove);
227
+ document.addEventListener('mouseup', this.onMouseUp);
228
+ }
229
+
230
+ hide() {
231
+ this.isShow = false;
232
+ this.h.style.display = `none`;
233
+ this.v.style.display = `none`;
234
+ this.destroy();
235
+ }
236
+
237
+ translate(x: number, y: number) {
238
+ if (x) {
239
+ this.scrollX -=
240
+ (x * this.parent.parentElement.clientWidth) / this.rect.width;
241
+ this.h.style.left = `${this.scrollX}px`;
242
+ }
243
+
244
+ if (y) {
245
+ this.scrollY -=
246
+ (y * this.parent.parentElement.clientHeight) / this.rect.height;
247
+ this.v.style.top = `${this.scrollY}px`;
248
+ }
249
+ }
250
+
251
+ wheel(up?: boolean) {
252
+ let y = 10;
253
+ if (up) {
254
+ y = -10;
255
+ }
256
+
257
+ if (this.pageMode && this.canMouseMove(y)) {
258
+ return;
259
+ }
260
+
261
+ this.scrollY += y;
262
+ this.v.style.top = `${this.scrollY}px`;
263
+ this.parent.store.data.y -=
264
+ (y * this.rect.height) / this.parent.parentElement.clientHeight;
265
+
266
+ this.parent.onMovePens();
267
+ this.parent.canvasTemplate.init();
268
+ this.parent.canvasImage.init();
269
+ this.parent.canvasImageBottom.init();
270
+ this.parent.render();
271
+ }
272
+
273
+ destroy() {
274
+ document.removeEventListener('mousemove', this.onMouseMove);
275
+ document.removeEventListener('mouseup', this.onMouseUp);
276
+ }
277
+ }
@@ -0,0 +1,38 @@
1
+ import pkg from '../../package.json';
2
+ import { Pen } from '../pen';
3
+
4
+ export const globalStore: {
5
+ version: string;
6
+ path2dDraws: {
7
+ [key: string]: (pen: Pen, ctx?: CanvasRenderingContext2D) => Path2D;
8
+ };
9
+ canvasDraws: {
10
+ [key: string]: (ctx: CanvasRenderingContext2D, pen: Pen) => void;
11
+ };
12
+ anchors: { [key: string]: (pen: Pen) => void }; // TODO: 存储的是 副作用 函数,函数内修改 anchors
13
+ htmlElements: { [key: string]: HTMLImageElement }; // 目前只存在图片资源,此处使用 HTMLImageElement
14
+ } = {
15
+ version: pkg.version,
16
+ path2dDraws: {},
17
+ canvasDraws: {},
18
+ anchors: {},
19
+ htmlElements: {},
20
+ };
21
+
22
+ export function register(path2dFns: {
23
+ [key: string]: (pen: Pen, ctx?: CanvasRenderingContext2D) => Path2D;
24
+ }) {
25
+ Object.assign(globalStore.path2dDraws, path2dFns);
26
+ }
27
+
28
+ export function registerCanvasDraw(drawFns: {
29
+ [key: string]: (ctx: CanvasRenderingContext2D, pen: Pen) => void;
30
+ }) {
31
+ Object.assign(globalStore.canvasDraws, drawFns);
32
+ }
33
+
34
+ export function registerAnchors(anchorsFns: {
35
+ [key: string]: (pen: Pen) => void;
36
+ }) {
37
+ Object.assign(globalStore.anchors, anchorsFns);
38
+ }
@@ -0,0 +1,293 @@
1
+ import { default as mitt, Emitter } from 'mitt';
2
+
3
+ import { CanvasLayer, FormItem, LockState, Pen } from '../pen';
4
+ import { defaultOptions, Options } from '../options';
5
+ import { defaultTheme, Theme } from '../theme';
6
+
7
+ import { Point } from '../point';
8
+ import { globalStore } from './global';
9
+ import { Rect } from '../rect';
10
+ import { Event, Trigger } from '../event';
11
+
12
+ export interface Meta2dData {
13
+ pens: Pen[];
14
+ x: number;
15
+ y: number;
16
+ scale: number;
17
+ // 标尺起点
18
+ origin: Point;
19
+ center: Point;
20
+ locked?: LockState;
21
+ websocket?: string;
22
+ mqtt?: string;
23
+ mqttOptions?: {
24
+ clientId?: string;
25
+ username?: string;
26
+ password?: string;
27
+ customClientId?: boolean;
28
+ };
29
+ mqttTopics?: string;
30
+ websocketProtocols?: string | string[];
31
+ background?: string;
32
+ globalAlpha?: number;
33
+ socketCbJs?: string;
34
+ initJs?: string;
35
+ grid?: boolean;
36
+ gridColor?: string;
37
+ gridSize?: number;
38
+ gridRotate?: number;
39
+ rule?: boolean;
40
+ ruleColor?: string;
41
+ fromArrow?: string;
42
+ toArrow?: string;
43
+ lineWidth?: number;
44
+ color?: string; // 画笔默认 color 优先级高于 options.color
45
+ textColor?: string; // 画笔文字颜色
46
+ penBackground?: string; // 画笔默认背景色
47
+ paths?: { [key: string]: string }; // paths 该图纸使用到的 svgPath ,打开后需要保存到 globalStore.paths
48
+ bkImage?: string; // 背景图片
49
+ http?: string; // http 请求 Url
50
+ httpTimeInterval?: number; // http 请求间隔
51
+ httpHeaders?: HeadersInit; //请求头
52
+ version?: string; // 版本号
53
+ id?: string;
54
+ _id?: string;
55
+ https?: HttpOptions[];
56
+ width?: number;
57
+ height?: number;
58
+ networkInterval?: number;
59
+ networks?: Network[];
60
+ iconUrls?: string[];
61
+ mockData?: Function;
62
+ name?: string;
63
+ enableMock?: boolean;
64
+ minScale?: number;
65
+ maxScale?: number;
66
+ template?: string; //模版id
67
+ cancelFirstConnect?: boolean; //http定时轮询首次是否请求
68
+ component?: boolean;
69
+ theme?: string; //主题
70
+ smoothNum?:number;//平滑量 值越大,平滑效果越好
71
+ triggers?:Trigger[]; //全局状态
72
+ dataPoints?: string[]; //数据点
73
+ dataset?:{
74
+ devices?: DataMock[]; //数据模拟
75
+ };
76
+ dataEvents?:Event[]; //数据点事件
77
+ fits?: Fit[];
78
+ disableTranslate?: boolean; //禁止平移
79
+ disableScale?: boolean; //禁止缩放
80
+ }
81
+
82
+ export interface Fit {
83
+ id?:string;
84
+ name?:string;
85
+ x?:number;
86
+ y?:number;
87
+ ex?:number;
88
+ ey?:number;
89
+ width?:number;
90
+ height?:number;
91
+ children?:string[];
92
+ active?:boolean;
93
+ left?:boolean;
94
+ right?:boolean;
95
+ top?:boolean;
96
+ bottom?:boolean;
97
+ leftValue?:number;
98
+ rightValue?:number;
99
+ topValue?:number;
100
+ bottomValue?:number;
101
+ }
102
+
103
+ export interface DataMock {
104
+ id: string;
105
+ label?: string;
106
+ mock?: string;
107
+ type?: string;
108
+ enableMock?: boolean;
109
+ }
110
+
111
+ export interface Network {
112
+ name?: string;
113
+ protocol?: 'mqtt' | 'websocket' | 'http';
114
+ type?: string; //subscribe
115
+ url?: string;
116
+ //websocket
117
+ protocols?: string;
118
+ //mqtt
119
+ topics?: string;
120
+ options?: {
121
+ clientId?: string;
122
+ username?: string;
123
+ password?: string;
124
+ customClientId?: boolean;
125
+ };
126
+ //http
127
+ headers?: any; //请求头
128
+ method?: string;
129
+ body?: any;
130
+ data?: Network
131
+ interval?: number; // http 请求间隔
132
+ times?: number; // 临时 重连次数
133
+ index?: number; // 临时 索引
134
+ }
135
+
136
+ export interface HttpOptions {
137
+ http?: string; // http 请求 Url
138
+ httpTimeInterval?: number; // http 请求间隔
139
+ httpHeaders?: HeadersInit; //请求头
140
+ method?: string;
141
+ body?: BodyInit | null;
142
+ times?: number; // 临时 重连次数
143
+ }
144
+
145
+ export enum EditType {
146
+ Add,
147
+ Update,
148
+ Delete,
149
+ Replace
150
+ }
151
+
152
+ export interface EditAction {
153
+ type?: EditType;
154
+ initPens?: Pen[];
155
+ pens?: Pen[];
156
+ step?: number; // 多次历史记录记为一次, step >= 2
157
+ origin?: Point;
158
+ scale?: number;
159
+ }
160
+
161
+ export interface Meta2dStore {
162
+ id: string;
163
+ data: Meta2dData;
164
+ pens: { [key: string]: Pen };
165
+
166
+ histories?: EditAction[];
167
+ historyIndex?: number;
168
+ path2dMap: WeakMap<Pen, Path2D>;
169
+ animateMap: WeakMap<Pen, Pen>;
170
+ bindDatas: { [key: string]: { id: string; formItem: FormItem }[] };
171
+ bind?: { [key: string]: { id: string; key: string }[] };
172
+ active?: Pen[];
173
+ hover?: Pen;
174
+ lastHover?: Pen;
175
+ hoverContainer?:Pen;
176
+ lastHoverContainer?:Pen;
177
+ activeAnchor?: Point;
178
+ hoverAnchor?: Point;
179
+ pointAt?: Point;
180
+ pointAtIndex?: number;
181
+ animates: Set<Pen>;
182
+ options: Options;
183
+ theme: Theme;
184
+ emitter: Emitter;
185
+ dpiRatio?: number;
186
+ clipboard?: Meta2dClipboard;
187
+ patchFlagsBackground?: boolean; // 是否需要绘制底层图片 是否需要重绘背景,包含网格
188
+ patchFlagsTop?: boolean; // 是否需要重绘标尺
189
+ bkImg?: HTMLImageElement;
190
+ // 测试使用
191
+ fillWorldTextRect?: boolean; // 填充文本区域
192
+ cacheDatas?: {
193
+ data: Meta2dData;
194
+ }[];
195
+ patchFlagsLast?: boolean; // 清除上次图片画布层
196
+ messageEvents?: { [key: string]: { pen: Pen; event: Event }[] };
197
+ templatePens?: { [key: string]: Pen };
198
+ sameTemplate?: boolean; //标记是否是同一模版
199
+ lastScale?: number; //记录上次模版的scale
200
+ pensNetwork?: {
201
+ [key: string]: { url?: string; method?: string; headers?: any; body?: any };
202
+ };
203
+ globalTriggers?:{[key:string]:Trigger[]};
204
+ }
205
+
206
+ export interface Meta2dClipboard {
207
+ meta2d?: boolean;
208
+ pens: Pen[];
209
+ origin: Point;
210
+ scale: number;
211
+ offset?: number;
212
+ page: string;
213
+ initRect?: Rect;
214
+ pos?: Point;
215
+ }
216
+
217
+ export const createStore = () => {
218
+ return {
219
+ data: {
220
+ x: 0,
221
+ y: 0,
222
+ scale: 1,
223
+ pens: [],
224
+ origin: { x: 0, y: 0 },
225
+ center: { x: 0, y: 0 },
226
+ paths: {},
227
+ theme:'light'
228
+ },
229
+ histories: [],
230
+ pens: {},
231
+ path2dMap: new WeakMap(),
232
+ animateMap: new WeakMap(),
233
+ active: [],
234
+ animates: new Set(),
235
+ options: { ...defaultOptions },
236
+ theme:{ ...defaultTheme },
237
+ emitter: mitt(),
238
+ bindDatas: {},
239
+ bind: {},
240
+ pensNetwork: {},
241
+ cacheDatas: [],
242
+ messageEvents: {},
243
+ templatePens: {},
244
+ globalTriggers:{},
245
+ } as Meta2dStore;
246
+ };
247
+
248
+ // Return a data store, if not exists will create a store.
249
+ export const useStore = (id = 'default'): Meta2dStore => {
250
+ if (!globalStore[id]) {
251
+ globalStore[id] = createStore();
252
+ globalStore[id].id = id;
253
+ }
254
+
255
+ return globalStore[id];
256
+ };
257
+
258
+ export const clearStore = (store: Meta2dStore, template?: string) => {
259
+ const isSame = store.data.template === template;
260
+ if (isSame) {
261
+ //模版一样
262
+ for (const pen of store.data.pens) {
263
+ // if (pen.template) {
264
+ if (pen.canvasLayer === CanvasLayer.CanvasTemplate) {
265
+ store.templatePens[pen.id] = pen;
266
+ }
267
+ }
268
+ }
269
+ store.lastScale = store.data.scale;
270
+ store.data = {
271
+ x: 0,
272
+ y: 0,
273
+ scale: 1,
274
+ pens: [],
275
+ origin: { x: 0, y: 0 },
276
+ center: { x: 0, y: 0 },
277
+ paths: {},
278
+ template: isSame ? template : null,
279
+ };
280
+ store.sameTemplate = isSame;
281
+ store.pens = {};
282
+ store.histories = [];
283
+ store.historyIndex = null;
284
+ store.path2dMap = new WeakMap();
285
+ store.animateMap = new WeakMap();
286
+ store.bindDatas = {};
287
+ store.bind = {};
288
+ store.pensNetwork = {};
289
+ store.active = [];
290
+ store.hover = undefined;
291
+ store.lastHover = undefined;
292
+ store.animates.clear();
293
+ };
package/src/theme.ts ADDED
@@ -0,0 +1,35 @@
1
+ export interface Theme {
2
+ [key: string]: {
3
+ color?: string;
4
+ background?: string;
5
+ parentBackground?: string;
6
+ ruleColor?:string;
7
+ ruleOptions?:{
8
+ background?:string,
9
+ textColor?:string
10
+ }
11
+ };
12
+ }
13
+
14
+ export const defaultTheme: Theme = {
15
+ dark:{
16
+ color:'#bdc7db',
17
+ background:'#1e2430',
18
+ parentBackground:'#080b0f',
19
+ ruleColor:'#222E47',
20
+ ruleOptions:{
21
+ background:'#121924',
22
+ textColor:'#6E7B91'
23
+ },
24
+ },
25
+ light:{
26
+ color:'#222222',
27
+ background:'#FFFFFF',
28
+ parentBackground:'#F0F1F2',
29
+ ruleColor:'#C8D0E1',
30
+ ruleOptions:{
31
+ background:'#F7F8FA',
32
+ textColor:'#C8D0E1'
33
+ },
34
+ }
35
+ }