@visactor/vrender-core 0.21.2-vstory.2 → 0.21.2

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 (290) hide show
  1. package/cjs/animate/Ticker/default-ticker.d.ts +0 -2
  2. package/cjs/animate/Ticker/default-ticker.js +1 -7
  3. package/cjs/animate/Ticker/default-ticker.js.map +1 -1
  4. package/cjs/animate/animate.js +1 -1
  5. package/cjs/animate/animate.js.map +1 -1
  6. package/cjs/animate/custom-animate.js +25 -14
  7. package/cjs/animate/custom-animate.js.map +1 -1
  8. package/cjs/animate/easing.d.ts +0 -4
  9. package/cjs/animate/easing.js +1 -24
  10. package/cjs/animate/easing.js.map +1 -1
  11. package/cjs/animate/index.d.ts +0 -1
  12. package/cjs/animate/index.js +1 -1
  13. package/cjs/animate/index.js.map +1 -1
  14. package/cjs/color-string/store.js +2 -1
  15. package/cjs/common/3d-interceptor.js +1 -2
  16. package/cjs/common/bezier-utils.d.ts +0 -3
  17. package/cjs/common/bezier-utils.js +2 -17
  18. package/cjs/common/bezier-utils.js.map +1 -1
  19. package/cjs/common/custom-path2d.d.ts +0 -4
  20. package/cjs/common/custom-path2d.js +11 -43
  21. package/cjs/common/custom-path2d.js.map +1 -1
  22. package/cjs/common/render-area.js +1 -0
  23. package/cjs/common/render-command-list.js +1 -2
  24. package/cjs/common/segment/curve/arc.d.ts +1 -4
  25. package/cjs/common/segment/curve/arc.js +1 -10
  26. package/cjs/common/segment/curve/arc.js.map +1 -1
  27. package/cjs/common/segment/curve/base.d.ts +1 -4
  28. package/cjs/common/segment/curve/base.js.map +1 -1
  29. package/cjs/common/segment/curve/cubic-bezier.d.ts +1 -5
  30. package/cjs/common/segment/curve/cubic-bezier.js +3 -24
  31. package/cjs/common/segment/curve/cubic-bezier.js.map +1 -1
  32. package/cjs/common/segment/curve/curve-context.js +4 -5
  33. package/cjs/common/segment/curve/curve-context.js.map +1 -1
  34. package/cjs/common/segment/curve/ellipse.d.ts +1 -4
  35. package/cjs/common/segment/curve/ellipse.js +0 -9
  36. package/cjs/common/segment/curve/ellipse.js.map +1 -1
  37. package/cjs/common/segment/curve/line.d.ts +1 -4
  38. package/cjs/common/segment/curve/line.js +0 -18
  39. package/cjs/common/segment/curve/line.js.map +1 -1
  40. package/cjs/common/segment/curve/move.d.ts +1 -4
  41. package/cjs/common/segment/curve/move.js +0 -9
  42. package/cjs/common/segment/curve/move.js.map +1 -1
  43. package/cjs/common/segment/curve/path.d.ts +1 -2
  44. package/cjs/common/segment/curve/path.js +2 -5
  45. package/cjs/common/segment/curve/path.js.map +1 -1
  46. package/cjs/common/segment/curve/quadratic-bezier.d.ts +2 -6
  47. package/cjs/common/segment/curve/quadratic-bezier.js +5 -23
  48. package/cjs/common/segment/curve/quadratic-bezier.js.map +1 -1
  49. package/cjs/common/shape/rect.d.ts +1 -1
  50. package/cjs/common/shape/rect.js +23 -28
  51. package/cjs/common/shape/rect.js.map +1 -1
  52. package/cjs/common/store.js +1 -1
  53. package/cjs/graphic/builtin-symbol/rect.d.ts +1 -2
  54. package/cjs/graphic/builtin-symbol/rect.js +0 -28
  55. package/cjs/graphic/builtin-symbol/rect.js.map +1 -1
  56. package/cjs/graphic/builtin-symbol/utils.d.ts +1 -2
  57. package/cjs/graphic/builtin-symbol/utils.js +0 -5
  58. package/cjs/graphic/builtin-symbol/utils.js.map +1 -1
  59. package/cjs/graphic/config.js +5 -14
  60. package/cjs/graphic/config.js.map +1 -1
  61. package/cjs/graphic/graphic.js +1 -15
  62. package/cjs/graphic/graphic.js.map +1 -1
  63. package/cjs/graphic/richtext/wrapper.d.ts +0 -1
  64. package/cjs/graphic/richtext/wrapper.js +1 -1
  65. package/cjs/graphic/richtext/wrapper.js.map +1 -1
  66. package/cjs/graphic/richtext.js +1 -2
  67. package/cjs/graphic/richtext.js.map +1 -1
  68. package/cjs/index.d.ts +0 -1
  69. package/cjs/index.js +1 -1
  70. package/cjs/index.js.map +1 -1
  71. package/cjs/interface/animate.d.ts +39 -5
  72. package/cjs/interface/animate.js.map +1 -1
  73. package/cjs/interface/graphic/group.d.ts +0 -1
  74. package/cjs/interface/graphic/group.js.map +1 -1
  75. package/cjs/interface/graphic/image.d.ts +0 -1
  76. package/cjs/interface/graphic/image.js.map +1 -1
  77. package/cjs/interface/graphic/path.d.ts +0 -1
  78. package/cjs/interface/graphic/path.js.map +1 -1
  79. package/cjs/interface/graphic/rect.d.ts +0 -1
  80. package/cjs/interface/graphic/rect.js.map +1 -1
  81. package/cjs/interface/graphic/symbol.d.ts +0 -2
  82. package/cjs/interface/graphic/symbol.js.map +1 -1
  83. package/cjs/interface/graphic.d.ts +2 -6
  84. package/cjs/interface/graphic.js.map +1 -1
  85. package/cjs/interface/path.d.ts +0 -5
  86. package/cjs/interface/path.js.map +1 -1
  87. package/cjs/interface/picker.d.ts +0 -13
  88. package/cjs/interface/picker.js.map +1 -1
  89. package/cjs/picker/constants.d.ts +0 -2
  90. package/cjs/picker/constants.js +2 -3
  91. package/cjs/picker/constants.js.map +1 -1
  92. package/cjs/picker/pick-interceptor.d.ts +2 -7
  93. package/cjs/picker/pick-interceptor.js +2 -19
  94. package/cjs/picker/pick-interceptor.js.map +1 -1
  95. package/cjs/picker/pick-modules.js +4 -7
  96. package/cjs/picker/pick-modules.js.map +1 -1
  97. package/cjs/picker/picker-service.d.ts +2 -4
  98. package/cjs/picker/picker-service.js +12 -13
  99. package/cjs/picker/picker-service.js.map +1 -1
  100. package/cjs/plugins/builtin-plugin/edit-module.d.ts +5 -6
  101. package/cjs/plugins/builtin-plugin/edit-module.js +28 -84
  102. package/cjs/plugins/builtin-plugin/edit-module.js.map +1 -1
  103. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.d.ts +30 -49
  104. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js +217 -280
  105. package/cjs/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
  106. package/cjs/render/contributions/render/arc3d-render.js.map +1 -1
  107. package/cjs/render/contributions/render/base-render.d.ts +0 -1
  108. package/cjs/render/contributions/render/base-render.js +2 -20
  109. package/cjs/render/contributions/render/base-render.js.map +1 -1
  110. package/cjs/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  111. package/cjs/render/contributions/render/contributions/base-texture-contribution-render.js +2 -29
  112. package/cjs/render/contributions/render/contributions/base-texture-contribution-render.js.map +1 -1
  113. package/cjs/render/contributions/render/contributions/image-contribution-render.js +1 -1
  114. package/cjs/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
  115. package/cjs/render/contributions/render/contributions/rect-contribution-render.js +4 -4
  116. package/cjs/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  117. package/cjs/render/contributions/render/contributions/symbol-contribution-render.d.ts +1 -8
  118. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js +2 -30
  119. package/cjs/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  120. package/cjs/render/contributions/render/contributions/text-contribution-render.js +1 -1
  121. package/cjs/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  122. package/cjs/render/contributions/render/draw-interceptor.js +2 -3
  123. package/cjs/render/contributions/render/draw-interceptor.js.map +1 -1
  124. package/cjs/render/contributions/render/group-render.js +2 -2
  125. package/cjs/render/contributions/render/group-render.js.map +1 -1
  126. package/cjs/render/contributions/render/image-render.js +3 -3
  127. package/cjs/render/contributions/render/image-render.js.map +1 -1
  128. package/cjs/render/contributions/render/path-render.js.map +1 -1
  129. package/cjs/render/contributions/render/polygon-render.js.map +1 -1
  130. package/cjs/render/contributions/render/rect-render.js +2 -2
  131. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  132. package/cjs/render/contributions/render/richtext-render.js +1 -1
  133. package/cjs/render/contributions/render/richtext-render.js.map +1 -1
  134. package/cjs/render/contributions/render/symbol-render.js +12 -15
  135. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  136. package/cjs/render/contributions/render/utils.d.ts +2 -1
  137. package/cjs/render/contributions/render/utils.js +20 -4
  138. package/cjs/render/contributions/render/utils.js.map +1 -1
  139. package/dist/index.es.js +7663 -8316
  140. package/es/animate/Ticker/default-ticker.d.ts +0 -2
  141. package/es/animate/Ticker/default-ticker.js +1 -7
  142. package/es/animate/Ticker/default-ticker.js.map +1 -1
  143. package/es/animate/animate.js +1 -1
  144. package/es/animate/animate.js.map +1 -1
  145. package/es/animate/custom-animate.js +25 -14
  146. package/es/animate/custom-animate.js.map +1 -1
  147. package/es/animate/easing.d.ts +0 -4
  148. package/es/animate/easing.js +1 -24
  149. package/es/animate/easing.js.map +1 -1
  150. package/es/animate/index.d.ts +0 -1
  151. package/es/animate/index.js +0 -2
  152. package/es/animate/index.js.map +1 -1
  153. package/es/color-string/store.js +2 -1
  154. package/es/common/3d-interceptor.js +1 -2
  155. package/es/common/bezier-utils.d.ts +0 -3
  156. package/es/common/bezier-utils.js +0 -14
  157. package/es/common/bezier-utils.js.map +1 -1
  158. package/es/common/custom-path2d.d.ts +0 -4
  159. package/es/common/custom-path2d.js +12 -44
  160. package/es/common/custom-path2d.js.map +1 -1
  161. package/es/common/render-area.js +2 -1
  162. package/es/common/render-command-list.js +1 -2
  163. package/es/common/segment/curve/arc.d.ts +1 -4
  164. package/es/common/segment/curve/arc.js +1 -10
  165. package/es/common/segment/curve/arc.js.map +1 -1
  166. package/es/common/segment/curve/base.d.ts +1 -4
  167. package/es/common/segment/curve/base.js.map +1 -1
  168. package/es/common/segment/curve/cubic-bezier.d.ts +1 -5
  169. package/es/common/segment/curve/cubic-bezier.js +1 -22
  170. package/es/common/segment/curve/cubic-bezier.js.map +1 -1
  171. package/es/common/segment/curve/curve-context.js +3 -6
  172. package/es/common/segment/curve/curve-context.js.map +1 -1
  173. package/es/common/segment/curve/ellipse.d.ts +1 -4
  174. package/es/common/segment/curve/ellipse.js +0 -9
  175. package/es/common/segment/curve/ellipse.js.map +1 -1
  176. package/es/common/segment/curve/line.d.ts +1 -4
  177. package/es/common/segment/curve/line.js +0 -18
  178. package/es/common/segment/curve/line.js.map +1 -1
  179. package/es/common/segment/curve/move.d.ts +1 -4
  180. package/es/common/segment/curve/move.js +0 -9
  181. package/es/common/segment/curve/move.js.map +1 -1
  182. package/es/common/segment/curve/path.d.ts +1 -2
  183. package/es/common/segment/curve/path.js +2 -5
  184. package/es/common/segment/curve/path.js.map +1 -1
  185. package/es/common/segment/curve/quadratic-bezier.d.ts +2 -6
  186. package/es/common/segment/curve/quadratic-bezier.js +5 -28
  187. package/es/common/segment/curve/quadratic-bezier.js.map +1 -1
  188. package/es/common/shape/rect.d.ts +1 -1
  189. package/es/common/shape/rect.js +23 -28
  190. package/es/common/shape/rect.js.map +1 -1
  191. package/es/common/store.js +1 -1
  192. package/es/graphic/builtin-symbol/rect.d.ts +1 -2
  193. package/es/graphic/builtin-symbol/rect.js +0 -28
  194. package/es/graphic/builtin-symbol/rect.js.map +1 -1
  195. package/es/graphic/builtin-symbol/utils.d.ts +1 -2
  196. package/es/graphic/builtin-symbol/utils.js +0 -5
  197. package/es/graphic/builtin-symbol/utils.js.map +1 -1
  198. package/es/graphic/config.js +5 -14
  199. package/es/graphic/config.js.map +1 -1
  200. package/es/graphic/graphic.js +1 -15
  201. package/es/graphic/graphic.js.map +1 -1
  202. package/es/graphic/richtext/wrapper.d.ts +0 -1
  203. package/es/graphic/richtext/wrapper.js +1 -1
  204. package/es/graphic/richtext/wrapper.js.map +1 -1
  205. package/es/graphic/richtext.js +1 -2
  206. package/es/graphic/richtext.js.map +1 -1
  207. package/es/index.d.ts +0 -1
  208. package/es/index.js +0 -2
  209. package/es/index.js.map +1 -1
  210. package/es/interface/animate.d.ts +39 -5
  211. package/es/interface/animate.js.map +1 -1
  212. package/es/interface/graphic/group.d.ts +0 -1
  213. package/es/interface/graphic/group.js.map +1 -1
  214. package/es/interface/graphic/image.d.ts +0 -1
  215. package/es/interface/graphic/image.js.map +1 -1
  216. package/es/interface/graphic/path.d.ts +0 -1
  217. package/es/interface/graphic/path.js.map +1 -1
  218. package/es/interface/graphic/rect.d.ts +0 -1
  219. package/es/interface/graphic/rect.js.map +1 -1
  220. package/es/interface/graphic/symbol.d.ts +0 -2
  221. package/es/interface/graphic/symbol.js.map +1 -1
  222. package/es/interface/graphic.d.ts +2 -6
  223. package/es/interface/graphic.js.map +1 -1
  224. package/es/interface/path.d.ts +0 -5
  225. package/es/interface/path.js.map +1 -1
  226. package/es/interface/picker.d.ts +0 -13
  227. package/es/interface/picker.js.map +1 -1
  228. package/es/picker/constants.d.ts +0 -2
  229. package/es/picker/constants.js +0 -4
  230. package/es/picker/constants.js.map +1 -1
  231. package/es/picker/pick-interceptor.d.ts +2 -7
  232. package/es/picker/pick-interceptor.js +1 -19
  233. package/es/picker/pick-interceptor.js.map +1 -1
  234. package/es/picker/pick-modules.js +3 -5
  235. package/es/picker/pick-modules.js.map +1 -1
  236. package/es/picker/picker-service.d.ts +2 -4
  237. package/es/picker/picker-service.js +13 -13
  238. package/es/picker/picker-service.js.map +1 -1
  239. package/es/plugins/builtin-plugin/edit-module.d.ts +5 -6
  240. package/es/plugins/builtin-plugin/edit-module.js +25 -79
  241. package/es/plugins/builtin-plugin/edit-module.js.map +1 -1
  242. package/es/plugins/builtin-plugin/richtext-edit-plugin.d.ts +30 -49
  243. package/es/plugins/builtin-plugin/richtext-edit-plugin.js +214 -283
  244. package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
  245. package/es/render/contributions/render/arc3d-render.js.map +1 -1
  246. package/es/render/contributions/render/base-render.d.ts +0 -1
  247. package/es/render/contributions/render/base-render.js +2 -21
  248. package/es/render/contributions/render/base-render.js.map +1 -1
  249. package/es/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  250. package/es/render/contributions/render/contributions/base-texture-contribution-render.js +2 -29
  251. package/es/render/contributions/render/contributions/base-texture-contribution-render.js.map +1 -1
  252. package/es/render/contributions/render/contributions/image-contribution-render.js +1 -1
  253. package/es/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
  254. package/es/render/contributions/render/contributions/rect-contribution-render.js +4 -4
  255. package/es/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  256. package/es/render/contributions/render/contributions/symbol-contribution-render.d.ts +1 -8
  257. package/es/render/contributions/render/contributions/symbol-contribution-render.js +0 -26
  258. package/es/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  259. package/es/render/contributions/render/contributions/text-contribution-render.js +1 -1
  260. package/es/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  261. package/es/render/contributions/render/draw-interceptor.js +2 -3
  262. package/es/render/contributions/render/draw-interceptor.js.map +1 -1
  263. package/es/render/contributions/render/group-render.js +2 -2
  264. package/es/render/contributions/render/group-render.js.map +1 -1
  265. package/es/render/contributions/render/image-render.js +3 -3
  266. package/es/render/contributions/render/image-render.js.map +1 -1
  267. package/es/render/contributions/render/path-render.js.map +1 -1
  268. package/es/render/contributions/render/polygon-render.js.map +1 -1
  269. package/es/render/contributions/render/rect-render.js +2 -2
  270. package/es/render/contributions/render/rect-render.js.map +1 -1
  271. package/es/render/contributions/render/richtext-render.js +1 -1
  272. package/es/render/contributions/render/richtext-render.js.map +1 -1
  273. package/es/render/contributions/render/symbol-render.js +13 -16
  274. package/es/render/contributions/render/symbol-render.js.map +1 -1
  275. package/es/render/contributions/render/utils.d.ts +2 -1
  276. package/es/render/contributions/render/utils.js +18 -0
  277. package/es/render/contributions/render/utils.js.map +1 -1
  278. package/package.json +1 -1
  279. package/cjs/animate/easing-func.d.ts +0 -1
  280. package/cjs/animate/easing-func.js +0 -16
  281. package/cjs/animate/easing-func.js.map +0 -1
  282. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +0 -1
  283. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js +0 -3
  284. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +0 -1
  285. package/es/animate/easing-func.d.ts +0 -1
  286. package/es/animate/easing-func.js +0 -10
  287. package/es/animate/easing-func.js.map +0 -1
  288. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +0 -1
  289. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js +0 -3
  290. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +0 -1
@@ -1,42 +1,10 @@
1
- var __rest = this && this.__rest || function(s, e) {
2
- var t = {};
3
- for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
4
- if (null != s && "function" == typeof Object.getOwnPropertySymbols) {
5
- var i = 0;
6
- for (p = Object.getOwnPropertySymbols(s); i < p.length; i++) e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]) && (t[p[i]] = s[p[i]]);
7
- }
8
- return t;
9
- };
10
-
11
- import { application } from "../../application";
12
-
13
- function getMaxConfigIndexIgnoreLinebreak(textConfig) {
14
- let idx = 0;
15
- for (let i = 0; i < textConfig.length; i++) {
16
- "\n" !== textConfig[i].text && idx++;
17
- }
18
- return Math.max(idx - 1, 0);
19
- }
20
-
21
- export function findConfigIndex(textConfig, cursorIndex) {
1
+ export function findCursorIndexIgnoreLinebreak(textConfig, cursorIndex) {
22
2
  let index = 0;
23
- if (cursorIndex < 0) return -1;
24
- let idx = Math.round(cursorIndex);
25
3
  for (index = 0; index < textConfig.length; index++) {
26
- if ("\n" !== textConfig[index].text && idx--, idx < 0) break;
4
+ const c = textConfig[index];
5
+ if (c.text && "\n" === c.text || cursorIndex--, cursorIndex < 0) break;
27
6
  }
28
- return cursorIndex - Math.round(cursorIndex) < 0 && index--, index = Math.max(index, 0),
29
- Math.min(index, textConfig.length - 1);
30
- }
31
-
32
- export function textConfigIgnoreLinebreakIdxToCursorIdx(textConfig, cursorIndex) {
33
- var _a;
34
- let index = 0;
35
- for (let i = 0; i < cursorIndex; i++) {
36
- "\n" !== textConfig[i].text && index++;
37
- }
38
- return "\n" === (null === (_a = textConfig[cursorIndex]) || void 0 === _a ? void 0 : _a.text) ? index -= .1 : index += .1,
39
- index;
7
+ return index;
40
8
  }
41
9
 
42
10
  export class EditModule {
@@ -47,67 +15,45 @@ export class EditModule {
47
15
  type: "Backspace"
48
16
  });
49
17
  }, this.handleCompositionStart = () => {
50
- const {textConfig: textConfig = []} = this.currRt.attribute;
51
- if (this.cursorIndex < 0) {
52
- const config = textConfig[0];
53
- textConfig.unshift(Object.assign(Object.assign({
54
- fill: "black"
55
- }, config), {
56
- text: ""
57
- }));
58
- } else {
59
- const cursorIndex = findConfigIndex(textConfig, this.cursorIndex), lastConfig = textConfig[cursorIndex];
60
- textConfig.splice(cursorIndex + 1, 0, Object.assign(Object.assign({}, lastConfig), {
61
- text: ""
62
- }));
63
- }
64
- this.isComposing = !0;
18
+ const {textConfig: textConfig = []} = this.currRt.attribute, cursorIndex = findCursorIndexIgnoreLinebreak(textConfig, this.cursorIndex), lastConfig = textConfig[cursorIndex];
19
+ textConfig.splice(cursorIndex + 1, 0, Object.assign(Object.assign({}, lastConfig), {
20
+ text: ""
21
+ })), this.isComposing = !0;
65
22
  }, this.handleCompositionEnd = () => {
66
23
  this.isComposing = !1;
67
- const {textConfig: textConfig = []} = this.currRt.attribute, configIdx = findConfigIndex(textConfig, this.cursorIndex + 1), lastConfig = textConfig[configIdx];
68
- textConfig.splice(configIdx, 1);
69
- const text = lastConfig.text, textList = text ? Array.from(text.toString()) : [];
70
- for (let i = 0; i < textList.length; i++) textConfig.splice(i + configIdx, 0, Object.assign(Object.assign({}, lastConfig), {
24
+ const {textConfig: textConfig = []} = this.currRt.attribute, curIdx = findCursorIndexIgnoreLinebreak(textConfig, this.cursorIndex + 1), lastConfig = textConfig[curIdx];
25
+ textConfig.splice(curIdx, 1);
26
+ const text = lastConfig.text, textList = Array.from(text.toString());
27
+ for (let i = 0; i < textList.length; i++) textConfig.splice(i + curIdx, 0, Object.assign(Object.assign({}, lastConfig), {
71
28
  text: textList[i]
72
29
  }));
73
30
  this.currRt.setAttributes({
74
31
  textConfig: textConfig
75
32
  }), this.onChangeCbList.forEach((cb => {
76
- cb(text, this.isComposing, Math.min(this.cursorIndex + textList.length, getMaxConfigIndexIgnoreLinebreak(textConfig) + .1), this.currRt);
33
+ cb(text, this.isComposing, this.cursorIndex + textList.length, this.currRt, "right");
77
34
  }));
78
35
  }, this.handleInput = ev => {
79
- var _a, _b, _c, _d;
80
36
  if (!this.currRt) return;
81
- const _e = this.currRt.attribute, {textConfig: textConfig = []} = _e, rest = __rest(_e, [ "textConfig" ]);
82
- if ("Backspace" === ev.type && !textConfig.length) return;
83
37
  let str = ev.data;
84
- this.isComposing || "Backspace" === ev.type || str || (str = "\n");
38
+ "Backspace" === ev.type || str || (str = "\n");
39
+ const {textConfig: textConfig = []} = this.currRt.attribute;
85
40
  let startIdx = this.selectionStartCursorIdx, endIdx = this.cursorIndex;
86
41
  startIdx > endIdx && ([startIdx, endIdx] = [ endIdx, startIdx ]), this.selectionStartCursorIdx = startIdx,
87
- startIdx = findConfigIndex(textConfig, startIdx), endIdx = findConfigIndex(textConfig, endIdx);
88
- let idxDelta = 0;
89
- "\n" === str && (idxDelta = -.2);
90
- const lastConfigIdx = startIdx + (this.isComposing ? 1 : 0);
91
- let lastConfig = textConfig[lastConfigIdx];
92
- lastConfig || (lastConfig = 0 === textConfig.length ? {
93
- fill: null !== (_a = rest.fill) && void 0 !== _a ? _a : "black",
94
- stroke: null !== (_b = rest.stroke) && void 0 !== _b && _b,
95
- fontSize: null !== (_c = rest.fontSize) && void 0 !== _c ? _c : 12,
96
- fontWeight: null !== (_d = rest.fontWeight) && void 0 !== _d ? _d : "normal"
97
- } : textConfig[lastConfigIdx - 1] || textConfig[lastConfigIdx + 1]);
42
+ this.cursorIndex = startIdx, startIdx = findCursorIndexIgnoreLinebreak(textConfig, startIdx);
43
+ const delta = this.selectionStartCursorIdx - startIdx;
44
+ endIdx = findCursorIndexIgnoreLinebreak(textConfig, endIdx);
45
+ const lastConfig = textConfig[startIdx + (this.isComposing ? 1 : 0)];
98
46
  let currConfig = lastConfig;
99
47
  "Backspace" !== ev.type || this.isComposing ? (startIdx !== endIdx && textConfig.splice(startIdx + 1, endIdx - startIdx),
100
48
  this.isComposing || (currConfig = Object.assign(Object.assign({}, lastConfig), {
101
49
  text: ""
102
- }), startIdx += 1, textConfig.splice(startIdx, 0, currConfig)), currConfig.text = str,
103
- textConfig.length || textConfig.push(currConfig)) : startIdx !== endIdx ? textConfig.splice(startIdx + 1, endIdx - startIdx) : (textConfig.splice(startIdx, 1),
50
+ }), startIdx += 1, textConfig.splice(startIdx, 0, currConfig)), currConfig.text = str) : startIdx !== endIdx ? textConfig.splice(startIdx + 1, endIdx - startIdx) : (textConfig.splice(startIdx, 1),
104
51
  startIdx -= 1), this.currRt.setAttributes({
105
52
  textConfig: textConfig
106
- }), this.cursorIndex = textConfigIgnoreLinebreakIdxToCursorIdx(textConfig, startIdx),
107
- this.cursorIndex += idxDelta, this.isComposing ? this.onInputCbList.forEach((cb => {
108
- cb(str, this.isComposing, this.cursorIndex, this.currRt);
53
+ }), this.isComposing ? this.onInputCbList.forEach((cb => {
54
+ cb(str, this.isComposing, startIdx + delta, this.currRt, "\n" === str ? "left" : "right");
109
55
  })) : this.onChangeCbList.forEach((cb => {
110
- cb(str, this.isComposing, this.cursorIndex, this.currRt);
56
+ cb(str, this.isComposing, startIdx + delta, this.currRt, "\n" === str ? "left" : "right");
111
57
  }));
112
58
  }, this.container = null != container ? container : document.body;
113
59
  const textAreaDom = document.createElement("textarea");
@@ -124,7 +70,7 @@ export class EditModule {
124
70
  applyStyle(textAreaDom) {
125
71
  textAreaDom.setAttribute("style", "width: 100px; height: 30px; left: 0; top: 0; position: absolute; z-index: -1; outline: none; resize: none; border: none; overflow: hidden; color: transparent; user-select: none; caret-color: transparent;background-color: transparent;"),
126
72
  textAreaDom.addEventListener("input", this.handleInput), textAreaDom.addEventListener("compositionstart", this.handleCompositionStart),
127
- textAreaDom.addEventListener("compositionend", this.handleCompositionEnd), application.global.addEventListener("keydown", this.handleKeyDown);
73
+ textAreaDom.addEventListener("compositionend", this.handleCompositionEnd), window.addEventListener("keydown", this.handleKeyDown);
128
74
  }
129
75
  moveTo(x, y, rt, cursorIndex, selectionStartCursorIdx) {
130
76
  this.textAreaDom.style.left = `${x}px`, this.textAreaDom.style.top = `${y}px`, setTimeout((() => {
@@ -134,7 +80,7 @@ export class EditModule {
134
80
  release() {
135
81
  this.textAreaDom.removeEventListener("input", this.handleInput), this.textAreaDom.removeEventListener("compositionstart", this.handleCompositionStart),
136
82
  this.textAreaDom.removeEventListener("compositionend", this.handleCompositionEnd),
137
- application.global.removeEventListener("keydown", this.handleKeyDown);
83
+ window.removeEventListener("keydown", this.handleKeyDown);
138
84
  }
139
85
  }
140
86
  //# sourceMappingURL=edit-module.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/plugins/builtin-plugin/edit-module.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIhD,SAAS,gCAAgC,CAAC,UAAgC;IACxE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QAC1C,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAgC,CAAC;QACvD,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;YACnB,GAAG,EAAE,CAAC;SACP;KACF;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9B,CAAC;AAQD,MAAM,UAAU,eAAe,CAAC,UAAgC,EAAE,WAAmB;IACnF,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,WAAW,GAAG,CAAC,EAAE;QACnB,OAAO,CAAC,CAAC,CAAC;KACX;IACD,IAAI,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;IAClC,KAAK,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAClD,MAAM,CAAC,GAAG,UAAU,CAAC,KAAK,CAAgC,CAAC;QAC3D,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;YACnB,GAAG,EAAE,CAAC;SACP;QACD,IAAI,GAAG,GAAG,CAAC,EAAE;YACX,MAAM;SACP;KACF;IACD,IAAI,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE;QAC7C,KAAK,EAAE,CAAC;KACT;IACD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IAE3B,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,uCAAuC,CAAC,UAAgC,EAAE,WAAmB;;IAC3G,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAgC,CAAC;QACvD,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,EAAE;YACnB,KAAK,EAAE,CAAC;SACT;KACF;IAED,IAAI,CAAA,MAAC,UAAU,CAAC,WAAW,CAAS,0CAAE,IAAI,MAAK,IAAI,EAAE;QACnD,KAAK,IAAI,GAAG,CAAC;KACd;SAAM;QACL,KAAK,IAAI,GAAG,CAAC;KACd;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,OAAO,UAAU;IAYrB,YAAY,SAAuB;QAkCnC,kBAAa,GAAG,CAAC,CAAgB,EAAE,EAAE;YACnC,IAAI,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,CAAC,GAAG,KAAK,WAAW,EAAE;gBAC/C,IAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;aACrD;QACH,CAAC,CAAC;QAEF,2BAAsB,GAAG,GAAG,EAAE;YAC5B,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAClD,IAAI,IAAI,CAAC,WAAW,GAAG,CAAC,EAAE;gBACxB,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;gBAC7B,UAAU,CAAC,OAAO,+BAAG,IAAI,EAAE,OAAO,IAAK,MAAM,KAAE,IAAI,EAAE,EAAE,IAAG,CAAC;aAC5D;iBAAM;gBACL,MAAM,WAAW,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBAClE,MAAM,UAAU,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;gBAC3C,UAAU,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,EAAE,CAAC,kCAAO,UAAU,KAAE,IAAI,EAAE,EAAE,IAAG,CAAC;aACpE;YAED,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC,CAAC;QACF,yBAAoB,GAAG,GAAG,EAAE;YAC1B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YAEzB,MAAM,EAAE,UAAU,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;YAClD,MAAM,SAAS,GAAG,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;YAEpE,MAAM,UAAU,GAAG,UAAU,CAAC,SAAS,CAAC,CAAC;YACzC,UAAU,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;YAChC,MAAM,IAAI,GAAI,UAAkB,CAAC,IAAI,CAAC;YACtC,MAAM,QAAQ,GAAa,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACxC,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,EAAE,CAAC,kCAAO,UAAU,KAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAG,CAAC;aAC3E;YACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;gBAC/B,EAAE,CACA,IAAI,EACJ,IAAI,CAAC,WAAW,EAEhB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,QAAQ,CAAC,MAAM,EAAE,gCAAgC,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,EAChG,IAAI,CAAC,MAAM,CACZ,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC;QAEF,gBAAW,GAAG,CAAC,EAAO,EAAE,EAAE;;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAChB,OAAO;aACR;YAGD,MAAM,KAA+B,IAAI,CAAC,MAAM,CAAC,SAAS,EAApD,EAAE,UAAU,GAAG,EAAE,OAAmC,EAA9B,IAAI,cAA1B,cAA4B,CAAwB,CAAC;YAE3D,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;gBACjD,OAAO;aACR;YAED,IAAI,GAAG,GAAI,EAAU,CAAC,IAAI,CAAC;YAC3B,IAAI,CAAC,IAAI,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,GAAG,EAAE;gBACxD,GAAG,GAAG,IAAI,CAAC;aACZ;YAGD,IAAI,QAAQ,GAAG,IAAI,CAAC,uBAAuB,CAAC;YAC5C,IAAI,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC;YAC9B,IAAI,QAAQ,GAAG,MAAM,EAAE;gBACrB,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aACzC;YAED,IAAI,CAAC,uBAAuB,GAAG,QAAQ,CAAC;YAIxC,QAAQ,GAAG,eAAe,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEjD,MAAM,GAAG,eAAe,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YAG7C,IAAI,QAAQ,GAAG,CAAC,CAAC;YAEjB,IAAI,GAAG,KAAK,IAAI,EAAE;gBAChB,QAAQ,GAAG,CAAC,GAAG,CAAC;aACjB;YAED,MAAM,aAAa,GAAG,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5D,IAAI,UAAU,GAAQ,UAAU,CAAC,aAAa,CAAC,CAAC;YAChD,IAAI,CAAC,UAAU,EAAE;gBACf,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;oBAC3B,UAAU,GAAG;wBACX,IAAI,EAAE,MAAA,IAAI,CAAC,IAAI,mCAAI,OAAO;wBAC1B,MAAM,EAAE,MAAA,IAAI,CAAC,MAAM,mCAAI,KAAK;wBAC5B,QAAQ,EAAE,MAAA,IAAI,CAAC,QAAQ,mCAAI,EAAE;wBAC7B,UAAU,EAAE,MAAA,IAAI,CAAC,UAAU,mCAAI,QAAQ;qBACxC,CAAC;iBACH;qBAAM;oBACL,UAAU,GAAG,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC;iBAC7E;aACF;YACD,IAAI,UAAU,GAAG,UAAU,CAAC;YAC5B,IAAI,EAAE,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBAChD,IAAI,QAAQ,KAAK,MAAM,EAAE;oBACvB,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;iBACpD;qBAAM;oBACL,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;oBAC/B,QAAQ,IAAI,CAAC,CAAC;iBACf;aACF;iBAAM;gBACL,IAAI,QAAQ,KAAK,MAAM,EAAE;oBACvB,UAAU,CAAC,MAAM,CAAC,QAAQ,GAAG,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC,CAAC;iBACpD;gBAED,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBACrB,UAAU,mCAAQ,UAAU,KAAE,IAAI,EAAE,EAAE,GAAE,CAAC;oBACzC,QAAQ,IAAI,CAAC,CAAC;oBACd,UAAU,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,UAAU,CAAC,CAAC;iBAC5C;gBACA,UAAkB,CAAC,IAAI,GAAG,GAAG,CAAC;gBAC/B,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE;oBACtB,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;iBAC7B;aACF;YAED,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;YAC1C,IAAI,CAAC,WAAW,GAAG,uCAAuC,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC;YAEjF,IAAI,CAAC,WAAW,IAAI,QAAQ,CAAC;YAC7B,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;gBACrB,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;oBAC/B,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3D,CAAC,CAAC,CAAC;aACJ;iBAAM;gBACL,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE;oBAC9B,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC3D,CAAC,CAAC,CAAC;aACJ;QACH,CAAC,CAAC;QAvKA,IAAI,CAAC,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,QAAQ,CAAC,IAAI,CAAC;QAE5C,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QACvD,WAAW,CAAC,YAAY,GAAG,KAAK,CAAC;QACjC,WAAW,CAAC,SAAS,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QACnC,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QACzB,IAAI,CAAC,aAAa,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED,OAAO,CAAC,EAAkF;QACxF,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,QAAQ,CAAC,EAAkF;QACzF,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/B,CAAC;IAED,UAAU,CAAC,WAAgC;QACzC,WAAW,CAAC,YAAY,CACtB,OAAO,EACP,2OAA2O,CAC5O,CAAC;QAEF,WAAW,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QACxD,WAAW,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAC9E,WAAW,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC1E,WAAW,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACrE,CAAC;IA0ID,MAAM,CAAC,CAAS,EAAE,CAAS,EAAE,EAAa,EAAE,WAAmB,EAAE,uBAA+B;QAC9F,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;QACvC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,CAAC;QACtC,UAAU,CAAC,GAAG,EAAE;YACd,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,uBAAuB,GAAG,uBAAuB,CAAC;IACzD,CAAC;IAED,OAAO;QACL,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;QAChE,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QACtF,IAAI,CAAC,WAAW,CAAC,mBAAmB,CAAC,gBAAgB,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAClF,WAAW,CAAC,MAAM,CAAC,mBAAmB,CAAC,SAAS,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxE,CAAC;CACF","file":"edit-module.js","sourcesContent":["import { application } from '../../application';\nimport type { IRichText, IRichTextCharacter, IRichTextParagraphCharacter } from '../../interface';\nimport { IRichTextIcon, IRichTextParagraph } from '../../interface';\n\nfunction getMaxConfigIndexIgnoreLinebreak(textConfig: IRichTextCharacter[]) {\n let idx = 0;\n for (let i = 0; i < textConfig.length; i++) {\n const c = textConfig[i] as IRichTextParagraphCharacter;\n if (c.text !== '\\n') {\n idx++;\n }\n }\n return Math.max(idx - 1, 0);\n}\n\n/**\n * 找到cursorIndex所在的textConfig的位置,忽略换行符\n * @param textConfig\n * @param cursorIndex\n * @returns\n */\nexport function findConfigIndex(textConfig: IRichTextCharacter[], cursorIndex: number): number {\n let index = 0;\n // 小于0是在最前面了\n if (cursorIndex < 0) {\n return -1;\n }\n let idx = Math.round(cursorIndex);\n for (index = 0; index < textConfig.length; index++) {\n const c = textConfig[index] as IRichTextParagraphCharacter;\n if (c.text !== '\\n') {\n idx--;\n }\n if (idx < 0) {\n break;\n }\n }\n if (cursorIndex - Math.round(cursorIndex) < 0) {\n index--;\n }\n index = Math.max(index, 0);\n // 避免超过限度,最后一个字符可能是换行符,算一个字符\n return Math.min(index, textConfig.length - 1);\n}\n\nexport function textConfigIgnoreLinebreakIdxToCursorIdx(textConfig: IRichTextCharacter[], cursorIndex: number): number {\n let index = 0;\n for (let i = 0; i < cursorIndex; i++) {\n const c = textConfig[i] as IRichTextParagraphCharacter;\n if (c.text !== '\\n') {\n index++;\n }\n }\n // 正常Cursor是放在右边的,但如果回退到换行符了,那就放在左侧\n if ((textConfig[cursorIndex] as any)?.text === '\\n') {\n index -= 0.1;\n } else {\n index += 0.1;\n }\n return index;\n}\n\nexport class EditModule {\n container: HTMLElement;\n textAreaDom: HTMLTextAreaElement;\n currRt: IRichText;\n isComposing: boolean;\n cursorIndex: number;\n selectionStartCursorIdx: number;\n // 输入的回调(composing的时候每次也会触发)\n onInputCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n // change的回调(composing确认才会触发)\n onChangeCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;\n\n constructor(container?: HTMLElement) {\n this.container = container ?? document.body;\n\n const textAreaDom = document.createElement('textarea');\n textAreaDom.autocomplete = 'off';\n textAreaDom.innerText = '';\n this.applyStyle(textAreaDom);\n this.container.append(textAreaDom);\n this.textAreaDom = textAreaDom;\n this.isComposing = false;\n this.onInputCbList = [];\n this.onChangeCbList = [];\n }\n\n onInput(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onInputCbList.push(cb);\n }\n\n onChange(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void) {\n this.onChangeCbList.push(cb);\n }\n\n applyStyle(textAreaDom: HTMLTextAreaElement) {\n textAreaDom.setAttribute(\n 'style',\n `width: 100px; height: 30px; left: 0; top: 0; position: absolute; z-index: -1; outline: none; resize: none; border: none; overflow: hidden; color: transparent; user-select: none; caret-color: transparent;background-color: transparent;`\n );\n\n textAreaDom.addEventListener('input', this.handleInput);\n textAreaDom.addEventListener('compositionstart', this.handleCompositionStart);\n textAreaDom.addEventListener('compositionend', this.handleCompositionEnd);\n application.global.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n this.handleInput({ data: null, type: 'Backspace' });\n }\n };\n\n handleCompositionStart = () => {\n const { textConfig = [] } = this.currRt.attribute;\n if (this.cursorIndex < 0) {\n const config = textConfig[0];\n textConfig.unshift({ fill: 'black', ...config, text: '' });\n } else {\n const cursorIndex = findConfigIndex(textConfig, this.cursorIndex);\n const lastConfig = textConfig[cursorIndex];\n textConfig.splice(cursorIndex + 1, 0, { ...lastConfig, text: '' });\n }\n\n this.isComposing = true;\n };\n handleCompositionEnd = () => {\n this.isComposing = false;\n // 拆分上一次的内容\n const { textConfig = [] } = this.currRt.attribute;\n const configIdx = findConfigIndex(textConfig, this.cursorIndex + 1);\n\n const lastConfig = textConfig[configIdx];\n textConfig.splice(configIdx, 1);\n const text = (lastConfig as any).text;\n const textList: string[] = text ? Array.from(text.toString()) : [];\n for (let i = 0; i < textList.length; i++) {\n textConfig.splice(i + configIdx, 0, { ...lastConfig, text: textList[i] });\n }\n this.currRt.setAttributes({ textConfig });\n this.onChangeCbList.forEach(cb => {\n cb(\n text,\n this.isComposing,\n // TODO 当换行后刚开始输入会有问题,后续看这里具体Cursor变换逻辑\n Math.min(this.cursorIndex + textList.length, getMaxConfigIndexIgnoreLinebreak(textConfig) + 0.1),\n this.currRt\n );\n });\n };\n\n handleInput = (ev: any) => {\n if (!this.currRt) {\n return;\n }\n\n // 如果是回车,那就不往后+1\n const { textConfig = [], ...rest } = this.currRt.attribute;\n // 删完了,直接返回\n if (ev.type === 'Backspace' && !textConfig.length) {\n return;\n }\n\n let str = (ev as any).data;\n if (!this.isComposing && ev.type !== 'Backspace' && !str) {\n str = '\\n';\n }\n\n // 如果有选中多个文字,那就先删除\n let startIdx = this.selectionStartCursorIdx;\n let endIdx = this.cursorIndex;\n if (startIdx > endIdx) {\n [startIdx, endIdx] = [endIdx, startIdx];\n }\n // 无论是否composition都立刻恢复到没有选中的idx状态\n this.selectionStartCursorIdx = startIdx;\n\n // 转换成基于textConfig的\n // let delta = 0;\n startIdx = findConfigIndex(textConfig, startIdx);\n // delta = this.selectionStartCursorIdx - startIdx;\n endIdx = findConfigIndex(textConfig, endIdx);\n // console.log(startIdx, delta, endIdx);\n\n let idxDelta = 0;\n // 如果是换行,得往回一格\n if (str === '\\n') {\n idxDelta = -0.2;\n }\n\n const lastConfigIdx = startIdx + (this.isComposing ? 1 : 0);\n let lastConfig: any = textConfig[lastConfigIdx];\n if (!lastConfig) {\n if (textConfig.length === 0) {\n lastConfig = {\n fill: rest.fill ?? 'black',\n stroke: rest.stroke ?? false,\n fontSize: rest.fontSize ?? 12,\n fontWeight: rest.fontWeight ?? 'normal'\n };\n } else {\n lastConfig = textConfig[lastConfigIdx - 1] || textConfig[lastConfigIdx + 1];\n }\n }\n let currConfig = lastConfig;\n if (ev.type === 'Backspace' && !this.isComposing) {\n if (startIdx !== endIdx) {\n textConfig.splice(startIdx + 1, endIdx - startIdx);\n } else {\n textConfig.splice(startIdx, 1);\n startIdx -= 1;\n }\n } else {\n if (startIdx !== endIdx) {\n textConfig.splice(startIdx + 1, endIdx - startIdx);\n }\n\n if (!this.isComposing) {\n currConfig = { ...lastConfig, text: '' };\n startIdx += 1;\n textConfig.splice(startIdx, 0, currConfig);\n }\n (currConfig as any).text = str;\n if (!textConfig.length) {\n textConfig.push(currConfig);\n }\n }\n\n this.currRt.setAttributes({ textConfig });\n this.cursorIndex = textConfigIgnoreLinebreakIdxToCursorIdx(textConfig, startIdx);\n\n this.cursorIndex += idxDelta;\n if (!this.isComposing) {\n this.onChangeCbList.forEach(cb => {\n cb(str, this.isComposing, this.cursorIndex, this.currRt);\n });\n } else {\n this.onInputCbList.forEach(cb => {\n cb(str, this.isComposing, this.cursorIndex, this.currRt);\n });\n }\n };\n\n moveTo(x: number, y: number, rt: IRichText, cursorIndex: number, selectionStartCursorIdx: number) {\n this.textAreaDom.style.left = `${x}px`;\n this.textAreaDom.style.top = `${y}px`;\n setTimeout(() => {\n this.textAreaDom.focus();\n this.textAreaDom.setSelectionRange(0, 0);\n });\n this.currRt = rt;\n\n this.cursorIndex = cursorIndex;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n }\n\n release() {\n this.textAreaDom.removeEventListener('input', this.handleInput);\n this.textAreaDom.removeEventListener('compositionstart', this.handleCompositionStart);\n this.textAreaDom.removeEventListener('compositionend', this.handleCompositionEnd);\n application.global.removeEventListener('keydown', this.handleKeyDown);\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/plugins/builtin-plugin/edit-module.ts"],"names":[],"mappings":"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","file":"edit-module.js","sourcesContent":["import type { IRichText, IRichTextCharacter, IRichTextParagraphCharacter } from '../../interface';\nimport { IRichTextIcon, IRichTextParagraph } from '../../interface';\n\nexport function findCursorIndexIgnoreLinebreak(textConfig: IRichTextCharacter[], cursorIndex: number): number {\n let index = 0;\n for (index = 0; index < textConfig.length; index++) {\n const c = textConfig[index] as IRichTextParagraphCharacter;\n if (!(c.text && c.text === '\\n')) {\n cursorIndex--;\n }\n if (cursorIndex < 0) {\n break;\n }\n }\n return index;\n}\n\nexport class EditModule {\n container: HTMLElement;\n textAreaDom: HTMLTextAreaElement;\n currRt: IRichText;\n isComposing: boolean;\n cursorIndex: number;\n selectionStartCursorIdx: number;\n // 输入的回调(composing的时候每次也会触发)\n onInputCbList: Array<\n (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, pos: 'left' | 'right') => void\n >;\n // change的回调(composing确认才会触发)\n onChangeCbList: Array<\n (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, pos: 'left' | 'right') => void\n >;\n\n constructor(container?: HTMLElement) {\n this.container = container ?? document.body;\n\n const textAreaDom = document.createElement('textarea');\n textAreaDom.autocomplete = 'off';\n textAreaDom.innerText = '';\n this.applyStyle(textAreaDom);\n this.container.append(textAreaDom);\n this.textAreaDom = textAreaDom;\n this.isComposing = false;\n this.onInputCbList = [];\n this.onChangeCbList = [];\n }\n\n onInput(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, pos: 'left' | 'right') => void) {\n this.onInputCbList.push(cb);\n }\n\n onChange(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, pos: 'left' | 'right') => void) {\n this.onChangeCbList.push(cb);\n }\n\n applyStyle(textAreaDom: HTMLTextAreaElement) {\n textAreaDom.setAttribute(\n 'style',\n `width: 100px; height: 30px; left: 0; top: 0; position: absolute; z-index: -1; outline: none; resize: none; border: none; overflow: hidden; color: transparent; user-select: none; caret-color: transparent;background-color: transparent;`\n );\n\n textAreaDom.addEventListener('input', this.handleInput);\n textAreaDom.addEventListener('compositionstart', this.handleCompositionStart);\n textAreaDom.addEventListener('compositionend', this.handleCompositionEnd);\n window.addEventListener('keydown', this.handleKeyDown);\n }\n\n handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Delete' || e.key === 'Backspace') {\n this.handleInput({ data: null, type: 'Backspace' });\n }\n };\n\n handleCompositionStart = () => {\n const { textConfig = [] } = this.currRt.attribute;\n const cursorIndex = findCursorIndexIgnoreLinebreak(textConfig, this.cursorIndex);\n const lastConfig = textConfig[cursorIndex];\n textConfig.splice(cursorIndex + 1, 0, { ...lastConfig, text: '' });\n this.isComposing = true;\n };\n handleCompositionEnd = () => {\n this.isComposing = false;\n // 拆分上一次的内容\n const { textConfig = [] } = this.currRt.attribute;\n const curIdx = findCursorIndexIgnoreLinebreak(textConfig, this.cursorIndex + 1);\n\n const lastConfig = textConfig[curIdx];\n textConfig.splice(curIdx, 1);\n const text = (lastConfig as any).text;\n const textList: string[] = Array.from(text.toString());\n for (let i = 0; i < textList.length; i++) {\n textConfig.splice(i + curIdx, 0, { ...lastConfig, text: textList[i] });\n }\n this.currRt.setAttributes({ textConfig });\n this.onChangeCbList.forEach(cb => {\n cb(text, this.isComposing, this.cursorIndex + textList.length, this.currRt, 'right');\n });\n };\n\n handleInput = (ev: any) => {\n if (!this.currRt) {\n return;\n }\n let str = (ev as any).data;\n if (ev.type !== 'Backspace' && !str) {\n str = '\\n';\n }\n // 如果是回车,那就不往后+1\n const { textConfig = [] } = this.currRt.attribute;\n\n // 如果有选中多个文字,那就先删除\n let startIdx = this.selectionStartCursorIdx;\n let endIdx = this.cursorIndex;\n if (startIdx > endIdx) {\n [startIdx, endIdx] = [endIdx, startIdx];\n }\n // 无论是否composition都立刻恢复到没有选中的idx状态\n this.selectionStartCursorIdx = startIdx;\n this.cursorIndex = startIdx;\n\n // 转换成基于textConfig的\n startIdx = findCursorIndexIgnoreLinebreak(textConfig, startIdx);\n const delta = this.selectionStartCursorIdx - startIdx;\n endIdx = findCursorIndexIgnoreLinebreak(textConfig, endIdx);\n\n const lastConfig = textConfig[startIdx + (this.isComposing ? 1 : 0)];\n let currConfig = lastConfig;\n if (ev.type === 'Backspace' && !this.isComposing) {\n if (startIdx !== endIdx) {\n textConfig.splice(startIdx + 1, endIdx - startIdx);\n } else {\n textConfig.splice(startIdx, 1);\n startIdx -= 1;\n }\n } else {\n if (startIdx !== endIdx) {\n textConfig.splice(startIdx + 1, endIdx - startIdx);\n }\n\n if (!this.isComposing) {\n currConfig = { ...lastConfig, text: '' };\n startIdx += 1;\n textConfig.splice(startIdx, 0, currConfig);\n }\n (currConfig as any).text = str;\n }\n\n this.currRt.setAttributes({ textConfig });\n if (!this.isComposing) {\n this.onChangeCbList.forEach(cb => {\n cb(str, this.isComposing, startIdx + delta, this.currRt, str === '\\n' ? 'left' : 'right');\n });\n } else {\n this.onInputCbList.forEach(cb => {\n cb(str, this.isComposing, startIdx + delta, this.currRt, str === '\\n' ? 'left' : 'right');\n });\n }\n };\n\n moveTo(x: number, y: number, rt: IRichText, cursorIndex: number, selectionStartCursorIdx: number) {\n this.textAreaDom.style.left = `${x}px`;\n this.textAreaDom.style.top = `${y}px`;\n setTimeout(() => {\n this.textAreaDom.focus();\n this.textAreaDom.setSelectionRange(0, 0);\n });\n this.currRt = rt;\n\n this.cursorIndex = cursorIndex;\n this.selectionStartCursorIdx = selectionStartCursorIdx;\n }\n\n release() {\n this.textAreaDom.removeEventListener('input', this.handleInput);\n this.textAreaDom.removeEventListener('compositionstart', this.handleCompositionStart);\n this.textAreaDom.removeEventListener('compositionend', this.handleCompositionEnd);\n window.removeEventListener('keydown', this.handleKeyDown);\n }\n}\n"]}
@@ -1,15 +1,15 @@
1
1
  import type { IPointLike } from '@visactor/vutils';
2
- import type { IGroup, ILine, IPlugin, IPluginService, IRichText, IRichTextFrame, IRichTextIcon, IRichTextLine, IRichTextParagraph, ITicker, ITimeline } from '../../interface';
2
+ import type { IGroup, ILine, IPlugin, IPluginService, IRichText, IRichTextFrame, IRichTextIcon, IRichTextLine, IRichTextParagraph } from '../../interface';
3
3
  import { EditModule } from './edit-module';
4
4
  type UpdateType = 'input' | 'change' | 'onfocus' | 'defocus' | 'selection' | 'dispatch';
5
5
  declare class Selection {
6
+ cacheSelectionStartCursorIdx: number;
7
+ cacheCurCursorIdx: number;
6
8
  selectionStartCursorIdx: number;
7
9
  curCursorIdx: number;
8
10
  rt: IRichText;
9
- constructor(selectionStartCursorIdx: number, curCursorIdx: number, rt: IRichText);
10
- isEmpty(): boolean;
11
+ constructor(cacheSelectionStartCursorIdx: number, cacheCurCursorIdx: number, selectionStartCursorIdx: number, curCursorIdx: number, rt: IRichText);
11
12
  hasFormat(key: string): boolean;
12
- _getFormat(key: string, cursorIdx: number): any;
13
13
  getFormat(key: string): any;
14
14
  getAllFormat(key: string): any;
15
15
  }
@@ -22,74 +22,55 @@ export declare class RichTextEditPlugin implements IPlugin {
22
22
  _uid: number;
23
23
  key: string;
24
24
  editing: boolean;
25
- pointerDown: boolean;
26
25
  editLine: ILine;
27
26
  editBg: IGroup;
28
- ticker: ITicker;
29
- timeline: ITimeline;
27
+ pointerDown: boolean;
28
+ lastPoint?: IPointLike;
29
+ editModule: EditModule;
30
30
  currRt: IRichText;
31
31
  curCursorIdx: number;
32
32
  selectionStartCursorIdx: number;
33
- startCursorPos?: IPointLike;
34
- editModule: EditModule;
35
- protected commandCbs: Map<string, Array<(payload: any, p: RichTextEditPlugin) => void>>;
36
- protected updateCbs: Array<(type: UpdateType, p: RichTextEditPlugin) => void>;
37
- protected deltaX: number;
38
- protected deltaY: number;
39
- static splitText(text: string): string[];
40
- static tryUpdateRichtext(richtext: IRichText): void;
41
- static CreateSelection(rt: IRichText): Selection;
33
+ commandCbs: Map<string, Array<(payload: any, p: RichTextEditPlugin) => void>>;
34
+ updateCbs: Array<(type: UpdateType, p: RichTextEditPlugin) => void>;
42
35
  constructor();
36
+ getSelection(): Selection;
43
37
  formatTextCommandCb(payload: string, p: RichTextEditPlugin): void;
44
38
  dispatchCommand(command: string, payload: any): void;
45
39
  registerCommand(command: string, cb: (payload: any, p: RichTextEditPlugin) => void): void;
46
40
  registerUpdateListener(cb: (type: UpdateType, p: RichTextEditPlugin) => void): void;
47
41
  activate(context: IPluginService): void;
48
- handleKeyDown: (e: KeyboardEvent) => void;
49
- handleInput: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void;
50
- handleChange: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void;
51
- deactivate(context: IPluginService): void;
42
+ handleInput: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, orient: 'left' | 'right') => void;
43
+ handleChange: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, orient: 'left' | 'right') => void;
52
44
  handleMove: (e: PointerEvent) => void;
53
- handleEnter: (e: PointerEvent) => void;
54
- handleLeave: (e: PointerEvent) => void;
45
+ showSelection(e: PointerEvent): void;
46
+ hideSelection(): void;
55
47
  handlePointerDown: (e: PointerEvent) => void;
56
48
  handlePointerUp: (e: PointerEvent) => void;
57
- onFocus(e: PointerEvent): void;
58
- protected deFocus(e: PointerEvent): void;
59
- protected addAnimateToLine(line: ILine): void;
60
- tryShowSelection(e: PointerEvent): void;
61
- hideSelection(): void;
62
- protected getLineByPoint(cache: IRichTextFrame, p1: IPointLike): IRichTextLine;
63
- protected getColumnAndIndexByLinePoint(lineInfo: IRichTextLine, p1: IPointLike): {
64
- columnInfo: IRichTextParagraph | IRichTextIcon;
65
- delta: number;
66
- };
67
- protected getColumnIndex(cache: IRichTextFrame, cInfo: IRichTextParagraph | IRichTextIcon): number;
68
- protected isRichtext(e: PointerEvent): boolean;
69
- protected triggerRender(): void;
70
- protected computeGlobalDelta(cache: IRichTextFrame): void;
49
+ handleEnter: (e: PointerEvent) => void;
50
+ handleLeave: (e: PointerEvent) => void;
51
+ isRichtext(e: PointerEvent): boolean;
71
52
  protected getEventPosition(e: PointerEvent): IPointLike;
72
- protected setCursorAndTextArea(x: number, y1: number, y2: number, rt: IRichText): void;
73
- protected computedCursorPosByEvent(e: PointerEvent, cache: IRichTextFrame): {
74
- x: any;
75
- y1: number;
76
- y2: number;
77
- cursorIndex: number;
78
- };
79
- protected computedCursorPosByCursorIdx(cursorIdx: number, rt: IRichText): {
80
- x: number;
81
- y1: number;
82
- y2: any;
83
- } | {
53
+ protected getLineByPoint(cache: IRichTextFrame, p1: IPointLike): IRichTextLine;
54
+ protected getColumnByLinePoint(lineInfo: IRichTextLine, p1: IPointLike): IRichTextParagraph | IRichTextIcon;
55
+ onFocus(e: PointerEvent): void;
56
+ protected getPointByColumnIdx(idx: number, rt: IRichText, orient: 'left' | 'right'): {
84
57
  x: any;
85
58
  y1: number;
86
59
  y2: number;
87
60
  };
61
+ protected getColumnIndex(cache: IRichTextFrame, cInfo: IRichTextParagraph | IRichTextIcon): number;
88
62
  protected getColumnByIndex(cache: IRichTextFrame, index: number): {
89
63
  lineInfo: IRichTextLine;
90
64
  columnInfo: IRichTextParagraph | IRichTextIcon;
91
65
  } | null;
66
+ protected setCursorAndTextArea(x: number, y1: number, y2: number, rt: IRichText): void;
67
+ protected setCursor(x: number, y1: number, y2: number): void;
68
+ applyUpdate(): void;
69
+ deFocus(e: PointerEvent): void;
70
+ splitText(text: string): string[];
71
+ tryUpdateRichtext(richtext: IRichText): void;
72
+ onSelect(): void;
73
+ deactivate(context: IPluginService): void;
92
74
  release(): void;
93
- getSelection(defaultAll?: boolean): Selection;
94
75
  }
95
76
  export {};