@visactor/vrender-core 0.21.2-vstory.3 → 0.21.3-alpha.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 (286) 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/group-render.js +2 -2
  123. package/cjs/render/contributions/render/group-render.js.map +1 -1
  124. package/cjs/render/contributions/render/image-render.js +3 -3
  125. package/cjs/render/contributions/render/image-render.js.map +1 -1
  126. package/cjs/render/contributions/render/path-render.js.map +1 -1
  127. package/cjs/render/contributions/render/polygon-render.js.map +1 -1
  128. package/cjs/render/contributions/render/rect-render.js +2 -2
  129. package/cjs/render/contributions/render/rect-render.js.map +1 -1
  130. package/cjs/render/contributions/render/richtext-render.js +1 -1
  131. package/cjs/render/contributions/render/richtext-render.js.map +1 -1
  132. package/cjs/render/contributions/render/symbol-render.js +12 -15
  133. package/cjs/render/contributions/render/symbol-render.js.map +1 -1
  134. package/cjs/render/contributions/render/utils.d.ts +2 -1
  135. package/cjs/render/contributions/render/utils.js +20 -4
  136. package/cjs/render/contributions/render/utils.js.map +1 -1
  137. package/dist/index.es.js +7664 -8315
  138. package/es/animate/Ticker/default-ticker.d.ts +0 -2
  139. package/es/animate/Ticker/default-ticker.js +1 -7
  140. package/es/animate/Ticker/default-ticker.js.map +1 -1
  141. package/es/animate/animate.js +1 -1
  142. package/es/animate/animate.js.map +1 -1
  143. package/es/animate/custom-animate.js +25 -14
  144. package/es/animate/custom-animate.js.map +1 -1
  145. package/es/animate/easing.d.ts +0 -4
  146. package/es/animate/easing.js +1 -24
  147. package/es/animate/easing.js.map +1 -1
  148. package/es/animate/index.d.ts +0 -1
  149. package/es/animate/index.js +0 -2
  150. package/es/animate/index.js.map +1 -1
  151. package/es/color-string/store.js +2 -1
  152. package/es/common/3d-interceptor.js +1 -2
  153. package/es/common/bezier-utils.d.ts +0 -3
  154. package/es/common/bezier-utils.js +0 -14
  155. package/es/common/bezier-utils.js.map +1 -1
  156. package/es/common/custom-path2d.d.ts +0 -4
  157. package/es/common/custom-path2d.js +12 -44
  158. package/es/common/custom-path2d.js.map +1 -1
  159. package/es/common/render-area.js +2 -1
  160. package/es/common/render-command-list.js +1 -2
  161. package/es/common/segment/curve/arc.d.ts +1 -4
  162. package/es/common/segment/curve/arc.js +1 -10
  163. package/es/common/segment/curve/arc.js.map +1 -1
  164. package/es/common/segment/curve/base.d.ts +1 -4
  165. package/es/common/segment/curve/base.js.map +1 -1
  166. package/es/common/segment/curve/cubic-bezier.d.ts +1 -5
  167. package/es/common/segment/curve/cubic-bezier.js +1 -22
  168. package/es/common/segment/curve/cubic-bezier.js.map +1 -1
  169. package/es/common/segment/curve/curve-context.js +3 -6
  170. package/es/common/segment/curve/curve-context.js.map +1 -1
  171. package/es/common/segment/curve/ellipse.d.ts +1 -4
  172. package/es/common/segment/curve/ellipse.js +0 -9
  173. package/es/common/segment/curve/ellipse.js.map +1 -1
  174. package/es/common/segment/curve/line.d.ts +1 -4
  175. package/es/common/segment/curve/line.js +0 -18
  176. package/es/common/segment/curve/line.js.map +1 -1
  177. package/es/common/segment/curve/move.d.ts +1 -4
  178. package/es/common/segment/curve/move.js +0 -9
  179. package/es/common/segment/curve/move.js.map +1 -1
  180. package/es/common/segment/curve/path.d.ts +1 -2
  181. package/es/common/segment/curve/path.js +2 -5
  182. package/es/common/segment/curve/path.js.map +1 -1
  183. package/es/common/segment/curve/quadratic-bezier.d.ts +2 -6
  184. package/es/common/segment/curve/quadratic-bezier.js +5 -28
  185. package/es/common/segment/curve/quadratic-bezier.js.map +1 -1
  186. package/es/common/shape/rect.d.ts +1 -1
  187. package/es/common/shape/rect.js +23 -28
  188. package/es/common/shape/rect.js.map +1 -1
  189. package/es/common/store.js +1 -1
  190. package/es/graphic/builtin-symbol/rect.d.ts +1 -2
  191. package/es/graphic/builtin-symbol/rect.js +0 -28
  192. package/es/graphic/builtin-symbol/rect.js.map +1 -1
  193. package/es/graphic/builtin-symbol/utils.d.ts +1 -2
  194. package/es/graphic/builtin-symbol/utils.js +0 -5
  195. package/es/graphic/builtin-symbol/utils.js.map +1 -1
  196. package/es/graphic/config.js +5 -14
  197. package/es/graphic/config.js.map +1 -1
  198. package/es/graphic/graphic.js +1 -15
  199. package/es/graphic/graphic.js.map +1 -1
  200. package/es/graphic/richtext/wrapper.d.ts +0 -1
  201. package/es/graphic/richtext/wrapper.js +1 -1
  202. package/es/graphic/richtext/wrapper.js.map +1 -1
  203. package/es/graphic/richtext.js +1 -2
  204. package/es/graphic/richtext.js.map +1 -1
  205. package/es/index.d.ts +0 -1
  206. package/es/index.js +0 -2
  207. package/es/index.js.map +1 -1
  208. package/es/interface/animate.d.ts +39 -5
  209. package/es/interface/animate.js.map +1 -1
  210. package/es/interface/graphic/group.d.ts +0 -1
  211. package/es/interface/graphic/group.js.map +1 -1
  212. package/es/interface/graphic/image.d.ts +0 -1
  213. package/es/interface/graphic/image.js.map +1 -1
  214. package/es/interface/graphic/path.d.ts +0 -1
  215. package/es/interface/graphic/path.js.map +1 -1
  216. package/es/interface/graphic/rect.d.ts +0 -1
  217. package/es/interface/graphic/rect.js.map +1 -1
  218. package/es/interface/graphic/symbol.d.ts +0 -2
  219. package/es/interface/graphic/symbol.js.map +1 -1
  220. package/es/interface/graphic.d.ts +2 -6
  221. package/es/interface/graphic.js.map +1 -1
  222. package/es/interface/path.d.ts +0 -5
  223. package/es/interface/path.js.map +1 -1
  224. package/es/interface/picker.d.ts +0 -13
  225. package/es/interface/picker.js.map +1 -1
  226. package/es/picker/constants.d.ts +0 -2
  227. package/es/picker/constants.js +0 -4
  228. package/es/picker/constants.js.map +1 -1
  229. package/es/picker/pick-interceptor.d.ts +2 -7
  230. package/es/picker/pick-interceptor.js +1 -19
  231. package/es/picker/pick-interceptor.js.map +1 -1
  232. package/es/picker/pick-modules.js +3 -5
  233. package/es/picker/pick-modules.js.map +1 -1
  234. package/es/picker/picker-service.d.ts +2 -4
  235. package/es/picker/picker-service.js +13 -13
  236. package/es/picker/picker-service.js.map +1 -1
  237. package/es/plugins/builtin-plugin/edit-module.d.ts +5 -6
  238. package/es/plugins/builtin-plugin/edit-module.js +25 -79
  239. package/es/plugins/builtin-plugin/edit-module.js.map +1 -1
  240. package/es/plugins/builtin-plugin/richtext-edit-plugin.d.ts +30 -49
  241. package/es/plugins/builtin-plugin/richtext-edit-plugin.js +214 -283
  242. package/es/plugins/builtin-plugin/richtext-edit-plugin.js.map +1 -1
  243. package/es/render/contributions/render/arc3d-render.js.map +1 -1
  244. package/es/render/contributions/render/base-render.d.ts +0 -1
  245. package/es/render/contributions/render/base-render.js +2 -21
  246. package/es/render/contributions/render/base-render.js.map +1 -1
  247. package/es/render/contributions/render/contributions/base-contribution-render.js.map +1 -1
  248. package/es/render/contributions/render/contributions/base-texture-contribution-render.js +2 -29
  249. package/es/render/contributions/render/contributions/base-texture-contribution-render.js.map +1 -1
  250. package/es/render/contributions/render/contributions/image-contribution-render.js +1 -1
  251. package/es/render/contributions/render/contributions/image-contribution-render.js.map +1 -1
  252. package/es/render/contributions/render/contributions/rect-contribution-render.js +4 -4
  253. package/es/render/contributions/render/contributions/rect-contribution-render.js.map +1 -1
  254. package/es/render/contributions/render/contributions/symbol-contribution-render.d.ts +1 -8
  255. package/es/render/contributions/render/contributions/symbol-contribution-render.js +0 -26
  256. package/es/render/contributions/render/contributions/symbol-contribution-render.js.map +1 -1
  257. package/es/render/contributions/render/contributions/text-contribution-render.js +1 -1
  258. package/es/render/contributions/render/contributions/text-contribution-render.js.map +1 -1
  259. package/es/render/contributions/render/group-render.js +2 -2
  260. package/es/render/contributions/render/group-render.js.map +1 -1
  261. package/es/render/contributions/render/image-render.js +3 -3
  262. package/es/render/contributions/render/image-render.js.map +1 -1
  263. package/es/render/contributions/render/path-render.js.map +1 -1
  264. package/es/render/contributions/render/polygon-render.js.map +1 -1
  265. package/es/render/contributions/render/rect-render.js +2 -2
  266. package/es/render/contributions/render/rect-render.js.map +1 -1
  267. package/es/render/contributions/render/richtext-render.js +1 -1
  268. package/es/render/contributions/render/richtext-render.js.map +1 -1
  269. package/es/render/contributions/render/symbol-render.js +13 -16
  270. package/es/render/contributions/render/symbol-render.js.map +1 -1
  271. package/es/render/contributions/render/utils.d.ts +2 -1
  272. package/es/render/contributions/render/utils.js +18 -0
  273. package/es/render/contributions/render/utils.js.map +1 -1
  274. package/package.json +1 -1
  275. package/cjs/animate/easing-func.d.ts +0 -1
  276. package/cjs/animate/easing-func.js +0 -16
  277. package/cjs/animate/easing-func.js.map +0 -1
  278. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +0 -1
  279. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js +0 -3
  280. package/cjs/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +0 -1
  281. package/es/animate/easing-func.d.ts +0 -1
  282. package/es/animate/easing-func.js +0 -10
  283. package/es/animate/easing-func.js.map +0 -1
  284. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.d.ts +0 -1
  285. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js +0 -3
  286. package/es/plugins/builtin-plugin/richtext-edit-plugin-old.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interface/path.ts"],"names":[],"mappings":";;;AAIa,QAAA,aAAa,GAAG;IAC3B,KAAK;IACL,OAAO;IACP,eAAe;IACf,WAAW;IACX,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,kBAAkB;IAClB,MAAM;CACP,CAAC","file":"path.js","sourcesContent":["import type { IAABBBounds, IPoint, IPointLike } from '@visactor/vutils';\nimport type { Releaseable, IDirection } from './common';\nimport type { CurveTypeEnum } from '../common/enums';\n\nexport const strCommandMap = [\n 'arc',\n 'arcTo',\n 'bezierCurveTo',\n 'closePath',\n 'ellipse',\n 'lineTo',\n 'moveTo',\n 'quadraticCurveTo',\n 'rect'\n];\n\nexport type CommandType = [\n number,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?\n];\n\nexport type CommandStrType = [\n string,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?\n];\n\nexport interface ICurve<T> {\n type: number;\n defined: boolean;\n originP1?: IPointLike;\n originP2?: IPointLike;\n readonly p0: T;\n readonly p1?: T;\n readonly p2?: T;\n readonly p3?: T;\n getPointAt: (t: number) => IPointLike;\n getAngleAt: (t: number) => number;\n getLength: (direction?: IDirection) => number;\n draw: (path: IPath2D, x: number, y: number, sx: number, sy: number, percent: number) => void;\n getYAt: (x: number) => number;\n includeX: (x: number) => boolean;\n}\n\nexport interface ICubicBezierCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.CubicBezierCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n readonly p2: IPoint;\n readonly p3: IPoint;\n}\n\nexport interface IQuadraticBezierCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.QuadraticBezierCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n readonly p2: IPoint;\n}\n\nexport interface IArcCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.ArcCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n radius: number;\n}\n\nexport interface ILineCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.LineCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n}\n\nexport interface IEllipseCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.EllipseCurve;\n // p0: IPoint;\n radiusX: number;\n radiusY: number;\n rotation: number;\n startAngle: number;\n endAngle: number;\n anticlockwise?: boolean;\n}\n\nexport interface IMoveCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.MoveCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n}\n\nexport interface ICurvePath<T> {\n curves: ICurve<T>[];\n bounds?: IAABBBounds;\n getPointAt: (t: number) => IPointLike;\n getCurveLengths: () => number[];\n getLength: (direction?: IDirection) => number;\n getBounds?: () => IAABBBounds;\n}\n\nexport interface IPath2D {\n moveTo: (x: number, y: number, z?: number) => void;\n lineTo: (x: number, y: number, z?: number) => void;\n quadraticCurveTo: (aCPx: number, aCPy: number, aX: number, aY: number, z?: number) => void;\n bezierCurveTo: (\n aCP1x: number,\n aCP1y: number,\n aCP2x: number,\n aCP2y: number,\n aX: number,\n aY: number,\n z?: number\n ) => void;\n arcTo: (aX1: number, aY1: number, aX2: number, aY2: number, aRadius: number, z?: number) => void;\n ellipse: (\n aX: number,\n aY: number,\n xRadius: number,\n yRadius: number,\n aRotation: number,\n aStartAngle: number,\n aEndAngle: number,\n aClockwise: boolean\n ) => void;\n rect: (x: number, y: number, w: number, h: number, z?: number) => void;\n arc: (\n x: number,\n y: number,\n radius: number,\n startAngle: number,\n endAngle: number,\n counterclockwise?: boolean,\n z?: number\n ) => void;\n closePath: () => void;\n}\n\n// 用户可以直接操作path2D\nexport interface ICustomPath2D extends ICurvePath<IPoint>, IPath2D, Releaseable {\n commandList: CommandType[];\n\n toString: () => string;\n transform: (x: number, y: number, sx: number, sy: number) => void;\n fromString: (pathStr: string, x?: number, y?: number, sX?: number, sY?: number) => ICustomPath2D;\n fromCustomPath2D: (path: ICustomPath2D, x?: number, y?: number, sX?: number, sY?: number) => ICustomPath2D;\n addCurve: (curve: ICurve<IPoint>) => void;\n getYAt: (x: number) => number;\n clear: () => void;\n drawWithClipRange: (ctx: IPath2D, size: number, x: number, y: number, clipRange: number) => void;\n}\n"]}
1
+ {"version":3,"sources":["../src/interface/path.ts"],"names":[],"mappings":";;;AAIa,QAAA,aAAa,GAAG;IAC3B,KAAK;IACL,OAAO;IACP,eAAe;IACf,WAAW;IACX,SAAS;IACT,QAAQ;IACR,QAAQ;IACR,kBAAkB;IAClB,MAAM;CACP,CAAC","file":"path.js","sourcesContent":["import type { IAABBBounds, IPoint, IPointLike } from '@visactor/vutils';\nimport type { Releaseable, IDirection } from './common';\nimport type { CurveTypeEnum } from '../common/enums';\n\nexport const strCommandMap = [\n 'arc',\n 'arcTo',\n 'bezierCurveTo',\n 'closePath',\n 'ellipse',\n 'lineTo',\n 'moveTo',\n 'quadraticCurveTo',\n 'rect'\n];\n\nexport type CommandType = [\n number,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?\n];\n\nexport type CommandStrType = [\n string,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?,\n (number | boolean)?\n];\n\nexport interface ICurve<T> {\n type: number;\n defined: boolean;\n originP1?: IPointLike;\n originP2?: IPointLike;\n readonly p0: T;\n readonly p1?: T;\n readonly p2?: T;\n readonly p3?: T;\n getPointAt: (t: number) => IPointLike;\n getAngleAt: (t: number) => number;\n getLength: (direction?: IDirection) => number;\n}\n\nexport interface ICubicBezierCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.CubicBezierCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n readonly p2: IPoint;\n readonly p3: IPoint;\n}\n\nexport interface IQuadraticBezierCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.QuadraticBezierCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n readonly p2: IPoint;\n}\n\nexport interface IArcCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.ArcCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n radius: number;\n}\n\nexport interface ILineCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.LineCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n}\n\nexport interface IEllipseCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.EllipseCurve;\n // p0: IPoint;\n radiusX: number;\n radiusY: number;\n rotation: number;\n startAngle: number;\n endAngle: number;\n anticlockwise?: boolean;\n}\n\nexport interface IMoveCurve extends ICurve<IPoint> {\n type: CurveTypeEnum.MoveCurve;\n // p0: IPoint;\n readonly p1: IPoint;\n}\n\nexport interface ICurvePath<T> {\n curves: ICurve<T>[];\n bounds?: IAABBBounds;\n getPointAt: (t: number) => IPointLike;\n getCurveLengths: () => number[];\n getLength: (direction?: IDirection) => number;\n getBounds?: () => IAABBBounds;\n}\n\nexport interface IPath2D {\n moveTo: (x: number, y: number, z?: number) => void;\n lineTo: (x: number, y: number, z?: number) => void;\n quadraticCurveTo: (aCPx: number, aCPy: number, aX: number, aY: number, z?: number) => void;\n bezierCurveTo: (\n aCP1x: number,\n aCP1y: number,\n aCP2x: number,\n aCP2y: number,\n aX: number,\n aY: number,\n z?: number\n ) => void;\n arcTo: (aX1: number, aY1: number, aX2: number, aY2: number, aRadius: number, z?: number) => void;\n ellipse: (\n aX: number,\n aY: number,\n xRadius: number,\n yRadius: number,\n aRotation: number,\n aStartAngle: number,\n aEndAngle: number,\n aClockwise: boolean\n ) => void;\n rect: (x: number, y: number, w: number, h: number, z?: number) => void;\n arc: (\n x: number,\n y: number,\n radius: number,\n startAngle: number,\n endAngle: number,\n counterclockwise?: boolean,\n z?: number\n ) => void;\n closePath: () => void;\n}\n\n// 用户可以直接操作path2D\nexport interface ICustomPath2D extends ICurvePath<IPoint>, IPath2D, Releaseable {\n commandList: CommandType[];\n\n toString: () => string;\n transform: (x: number, y: number, sx: number, sy: number) => void;\n fromString: (pathStr: string, x?: number, y?: number, sX?: number, sY?: number) => ICustomPath2D;\n fromCustomPath2D: (path: ICustomPath2D, x?: number, y?: number, sX?: number, sY?: number) => ICustomPath2D;\n addCurve: (curve: ICurve<IPoint>) => void;\n clear: () => void;\n}\n"]}
@@ -57,19 +57,6 @@ export interface IPickItemInterceptorContribution {
57
57
  parentMatrix: IMatrix;
58
58
  }) => PickResult | null;
59
59
  }
60
- export interface IPickServiceInterceptorContribution {
61
- order: number;
62
- beforePickItem?: (result: PickResult, pickerService: IPickerService, point: IPointLike, drawContext: {
63
- in3dInterceptor?: boolean;
64
- }, params?: {
65
- parentMatrix: IMatrix;
66
- }) => PickResult | null;
67
- afterPickItem?: (result: PickResult, pickerService: IPickerService, point: IPointLike, drawContext: {
68
- in3dInterceptor?: boolean;
69
- }, params?: {
70
- parentMatrix: IMatrix;
71
- }) => PickResult | null;
72
- }
73
60
  export interface IBoundsPicker {
74
61
  type: string;
75
62
  numberType?: number;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/interface/picker.ts"],"names":[],"mappings":"","file":"picker.js","sourcesContent":["import type { IBounds, IMatrix, IPoint, IPointLike } from '@visactor/vutils';\nimport type { IGraphic } from './graphic';\nimport type { IContext2d } from './context';\nimport type { EnvType, IGlobal } from './global';\nimport type { IGroup } from './graphic/group';\nimport type { IDrawContribution } from './render';\n\ntype ISubPickEventParams =\n | boolean\n | {\n graphic?: any;\n group?: any;\n params: ISubPickEventParams;\n };\n\nexport type IPickEventParams =\n | {\n shadowTarget?: IGraphic;\n }\n | ISubPickEventParams;\n\nexport type PickResult = {\n graphic?: IGraphic | null;\n group?: IGroup | null;\n params?:\n | {\n shadowTarget?: IGraphic;\n }\n | ISubPickEventParams;\n};\n\nexport interface IGraphicPicker {\n type: string;\n numberType: number;\n\n contains: (graphic: IGraphic, point: IPointLike, params?: IPickParams) => boolean | any;\n}\n\nexport interface IPickParams {\n group?: boolean;\n graphic?: boolean;\n bounds?: IBounds;\n pickContext?: IContext2d;\n pickerService?: IPickerService;\n // 内部设置\n in3dInterceptor?: boolean;\n hack_pieFace?: string;\n}\n\nexport interface IPickerService {\n type: string;\n\n pickContext?: IContext2d;\n pickerMap: Map<number, IGraphicPicker>;\n configure: (global: IGlobal, env: EnvType) => void;\n pick: (group: IGraphic[], point: IPoint, params?: IPickParams) => PickResult;\n pickGroup: (group: IGroup, point: IPointLike, parentMatrix: IMatrix, params: IPickParams) => PickResult;\n pickItem: (\n graphic: IGraphic,\n point: IPointLike,\n parentMatrix: IMatrix | null,\n params?: IPickParams\n ) => PickResult | null;\n containsPoint: (graphic: IGraphic, point: IPointLike, params?: IPickParams) => boolean;\n drawContribution?: IDrawContribution;\n}\n\nexport interface IPickItemInterceptorContribution {\n order: number;\n // null代表没匹配到,boolean代表是否pick中\n beforePickItem?: (\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n drawContext: {\n in3dInterceptor?: boolean;\n },\n params?: {\n parentMatrix: IMatrix;\n }\n ) => PickResult | null;\n\n afterPickItem?: (\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n drawContext: {\n in3dInterceptor?: boolean;\n },\n params?: {\n parentMatrix: IMatrix;\n }\n ) => PickResult | null;\n // afterPickItem?: (\n // graphic: IGraphic,\n // pickerService: IPickerService,\n // ) => boolean;\n}\nexport interface IPickServiceInterceptorContribution {\n order: number;\n // null代表没匹配到,boolean代表是否pick中\n beforePickItem?: (\n result: PickResult,\n pickerService: IPickerService,\n point: IPointLike,\n drawContext: {\n in3dInterceptor?: boolean;\n },\n params?: {\n parentMatrix: IMatrix;\n }\n ) => PickResult | null;\n\n afterPickItem?: (\n result: PickResult,\n pickerService: IPickerService,\n point: IPointLike,\n drawContext: {\n in3dInterceptor?: boolean;\n },\n params?: {\n parentMatrix: IMatrix;\n }\n ) => PickResult | null;\n // afterPickItem?: (\n // graphic: IGraphic,\n // pickerService: IPickerService,\n // ) => boolean;\n}\n\nexport interface IBoundsPicker {\n type: string;\n numberType?: number;\n\n contains: (graphic: IGraphic, point: IPointLike, params?: IPickParams) => boolean;\n}\n"]}
1
+ {"version":3,"sources":["../src/interface/picker.ts"],"names":[],"mappings":"","file":"picker.js","sourcesContent":["import type { IBounds, IMatrix, IPoint, IPointLike } from '@visactor/vutils';\nimport type { IGraphic } from './graphic';\nimport type { IContext2d } from './context';\nimport type { EnvType, IGlobal } from './global';\nimport type { IGroup } from './graphic/group';\nimport type { IDrawContribution } from './render';\n\ntype ISubPickEventParams =\n | boolean\n | {\n graphic?: any;\n group?: any;\n params: ISubPickEventParams;\n };\n\nexport type IPickEventParams =\n | {\n shadowTarget?: IGraphic;\n }\n | ISubPickEventParams;\n\nexport type PickResult = {\n graphic?: IGraphic | null;\n group?: IGroup | null;\n params?:\n | {\n shadowTarget?: IGraphic;\n }\n | ISubPickEventParams;\n};\n\nexport interface IGraphicPicker {\n type: string;\n numberType: number;\n\n contains: (graphic: IGraphic, point: IPointLike, params?: IPickParams) => boolean | any;\n}\n\nexport interface IPickParams {\n group?: boolean;\n graphic?: boolean;\n bounds?: IBounds;\n pickContext?: IContext2d;\n pickerService?: IPickerService;\n // 内部设置\n in3dInterceptor?: boolean;\n hack_pieFace?: string;\n}\n\nexport interface IPickerService {\n type: string;\n\n pickContext?: IContext2d;\n pickerMap: Map<number, IGraphicPicker>;\n configure: (global: IGlobal, env: EnvType) => void;\n pick: (group: IGraphic[], point: IPoint, params?: IPickParams) => PickResult;\n pickGroup: (group: IGroup, point: IPointLike, parentMatrix: IMatrix, params: IPickParams) => PickResult;\n pickItem: (\n graphic: IGraphic,\n point: IPointLike,\n parentMatrix: IMatrix | null,\n params?: IPickParams\n ) => PickResult | null;\n containsPoint: (graphic: IGraphic, point: IPointLike, params?: IPickParams) => boolean;\n drawContribution?: IDrawContribution;\n}\n\nexport interface IPickItemInterceptorContribution {\n order: number;\n // null代表没匹配到,boolean代表是否pick中\n beforePickItem?: (\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n drawContext: {\n in3dInterceptor?: boolean;\n },\n params?: {\n parentMatrix: IMatrix;\n }\n ) => PickResult | null;\n\n afterPickItem?: (\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n drawContext: {\n in3dInterceptor?: boolean;\n },\n params?: {\n parentMatrix: IMatrix;\n }\n ) => PickResult | null;\n // afterPickItem?: (\n // graphic: IGraphic,\n // pickerService: IPickerService,\n // ) => boolean;\n}\n\nexport interface IBoundsPicker {\n type: string;\n numberType?: number;\n\n contains: (graphic: IGraphic, point: IPointLike, params?: IPickParams) => boolean;\n}\n"]}
@@ -2,5 +2,3 @@ export declare const GraphicPicker: unique symbol;
2
2
  export declare const PickerService: unique symbol;
3
3
  export declare const BoundsPicker: unique symbol;
4
4
  export declare const GlobalPickerService: unique symbol;
5
- export declare const PickItemInterceptor: unique symbol;
6
- export declare const PickServiceInterceptor: unique symbol;
@@ -2,8 +2,7 @@
2
2
 
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: !0
5
- }), exports.PickServiceInterceptor = exports.PickItemInterceptor = exports.GlobalPickerService = exports.BoundsPicker = exports.PickerService = exports.GraphicPicker = void 0,
5
+ }), exports.GlobalPickerService = exports.BoundsPicker = exports.PickerService = exports.GraphicPicker = void 0,
6
6
  exports.GraphicPicker = Symbol.for("GraphicPicker"), exports.PickerService = Symbol.for("PickerService"),
7
- exports.BoundsPicker = Symbol.for("BoundsPicker"), exports.GlobalPickerService = Symbol.for("GlobalPickerService"),
8
- exports.PickItemInterceptor = Symbol.for("PickItemInterceptor"), exports.PickServiceInterceptor = Symbol.for("PickServiceInterceptor");
7
+ exports.BoundsPicker = Symbol.for("BoundsPicker"), exports.GlobalPickerService = Symbol.for("GlobalPickerService");
9
8
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/picker/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC5C,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAE5C,QAAA,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC1C,QAAA,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAGxD,QAAA,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAExD,QAAA,sBAAsB,GAAG,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC","file":"constants.js","sourcesContent":["export const GraphicPicker = Symbol.for('GraphicPicker');\nexport const PickerService = Symbol.for('PickerService');\n\nexport const BoundsPicker = Symbol.for('BoundsPicker');\nexport const GlobalPickerService = Symbol.for('GlobalPickerService');\n\n// 拦截器\nexport const PickItemInterceptor = Symbol.for('PickItemInterceptor');\n// pickService的拦截器\nexport const PickServiceInterceptor = Symbol.for('PickServiceInterceptor');\n"]}
1
+ {"version":3,"sources":["../src/picker/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAC5C,QAAA,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;AAE5C,QAAA,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC1C,QAAA,mBAAmB,GAAG,MAAM,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC","file":"constants.js","sourcesContent":["export const GraphicPicker = Symbol.for('GraphicPicker');\nexport const PickerService = Symbol.for('PickerService');\n\nexport const BoundsPicker = Symbol.for('BoundsPicker');\nexport const GlobalPickerService = Symbol.for('GlobalPickerService');\n"]}
@@ -1,11 +1,6 @@
1
1
  import type { IMatrix, IPointLike } from '@visactor/vutils';
2
- import type { IContext2d, IGraphic, IPickItemInterceptorContribution, IPickParams, IPickServiceInterceptorContribution, IPickerService, PickResult } from '../interface';
3
- export declare class ShadowPickServiceInterceptorContribution implements IPickServiceInterceptorContribution {
4
- order: number;
5
- afterPickItem(result: PickResult, pickerService: IPickerService, point: IPointLike, pickParams: IPickParams, params?: {
6
- parentMatrix: IMatrix;
7
- }): null | PickResult;
8
- }
2
+ import type { IContext2d, IGraphic, IPickItemInterceptorContribution, IPickParams, IPickerService, PickResult } from '../interface';
3
+ export declare const PickItemInterceptor: unique symbol;
9
4
  export declare class ShadowRootPickItemInterceptorContribution implements IPickItemInterceptorContribution {
10
5
  order: number;
11
6
  afterPickItem(graphic: IGraphic, pickerService: IPickerService, point: IPointLike, pickParams: IPickParams, params?: {
@@ -8,28 +8,11 @@ var __decorate = this && this.__decorate || function(decorators, target, key, de
8
8
 
9
9
  Object.defineProperty(exports, "__esModule", {
10
10
  value: !0
11
- }), exports.Canvas3DPickItemInterceptor = exports.InteractivePickItemInterceptorContribution = exports.ShadowRootPickItemInterceptorContribution = exports.ShadowPickServiceInterceptorContribution = void 0;
11
+ }), exports.Canvas3DPickItemInterceptor = exports.InteractivePickItemInterceptorContribution = exports.ShadowRootPickItemInterceptorContribution = exports.PickItemInterceptor = void 0;
12
12
 
13
13
  const vutils_1 = require("@visactor/vutils"), inversify_lite_1 = require("../common/inversify-lite"), matrix_allocate_1 = require("../allocator/matrix-allocate"), _3d_interceptor_1 = require("../common/3d-interceptor"), graphic_1 = require("../graphic");
14
14
 
15
- let ShadowPickServiceInterceptorContribution = class {
16
- constructor() {
17
- this.order = 1;
18
- }
19
- afterPickItem(result, pickerService, point, pickParams, params) {
20
- if (result.graphic) {
21
- let g = result.graphic;
22
- for (;g.parent; ) g = g.parent;
23
- g.shadowHost && (result.params = {
24
- shadowTarget: result.graphic
25
- }, result.graphic = g.shadowHost);
26
- }
27
- return result;
28
- }
29
- };
30
-
31
- ShadowPickServiceInterceptorContribution = __decorate([ (0, inversify_lite_1.injectable)() ], ShadowPickServiceInterceptorContribution),
32
- exports.ShadowPickServiceInterceptorContribution = ShadowPickServiceInterceptorContribution;
15
+ exports.PickItemInterceptor = Symbol.for("PickItemInterceptor");
33
16
 
34
17
  let ShadowRootPickItemInterceptorContribution = class {
35
18
  constructor() {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/picker/pick-interceptor.ts"],"names":[],"mappings":"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","file":"pick-interceptor.js","sourcesContent":["import type { IMatrix, IPointLike } from '@visactor/vutils';\nimport { Point } from '@visactor/vutils';\nimport { injectable } from '../common/inversify-lite';\nimport type {\n IContext2d,\n IGraphic,\n IGroup,\n IPickItemInterceptorContribution,\n IPickParams,\n IPickServiceInterceptorContribution,\n IPickerService,\n PickResult\n} from '../interface';\nimport { matrixAllocate } from '../allocator/matrix-allocate';\nimport { draw3dItem } from '../common/3d-interceptor';\nimport { getTheme } from '../graphic';\n\n@injectable()\nexport class ShadowPickServiceInterceptorContribution implements IPickServiceInterceptorContribution {\n order: number = 1;\n afterPickItem(\n result: PickResult,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n if (result.graphic) {\n let g = result.graphic;\n while (g.parent) {\n g = g.parent;\n }\n if (g.shadowHost) {\n result.params = {\n shadowTarget: result.graphic\n };\n result.graphic = g.shadowHost;\n }\n }\n return result;\n }\n}\n\n/**\n * 影子节点拦截器,用于渲染影子节点\n */\n@injectable()\nexport class ShadowRootPickItemInterceptorContribution implements IPickItemInterceptorContribution {\n order: number = 1;\n afterPickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n if (graphic.attribute.shadowRootIdx > 0 || !graphic.attribute.shadowRootIdx) {\n return this._pickItem(graphic, pickerService, point, pickParams, params);\n }\n return null;\n }\n\n beforePickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n if (graphic.attribute.shadowRootIdx < 0) {\n return this._pickItem(graphic, pickerService, point, pickParams, params);\n }\n return null;\n }\n\n protected _pickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): PickResult | null {\n if (!graphic.shadowRoot) {\n return null;\n }\n const { parentMatrix } = params || {};\n if (!parentMatrix) {\n return null;\n }\n\n const context = pickerService.pickContext;\n context.highPerformanceSave();\n\n const theme = (getTheme(graphic) as any)?.[graphic.type];\n const { shadowPickMode = theme?.shadowPickMode } = graphic.attribute;\n const g = graphic.shadowRoot;\n const currentGroupMatrix = matrixAllocate.allocateByObj(parentMatrix);\n const newPoint = new Point(\n currentGroupMatrix.a * point.x + currentGroupMatrix.c * point.y + currentGroupMatrix.e,\n currentGroupMatrix.b * point.x + currentGroupMatrix.d * point.y + currentGroupMatrix.f\n );\n // const transMatrix = graphic.transMatrix;\n // currentGroupMatrix.multiply(\n // transMatrix.a,\n // transMatrix.b,\n // transMatrix.c,\n // transMatrix.d,\n // transMatrix.e,\n // transMatrix.f\n // );\n\n // currentGroupMatrix.transformPoint(newPoint, newPoint);\n const result = pickerService.pickGroup(g, newPoint, currentGroupMatrix, pickParams);\n\n context.highPerformanceRestore();\n\n // 影子节点pick到group也算pick到graphic\n if (!result.graphic && result.group && shadowPickMode === 'full') {\n result.graphic = result.group;\n }\n\n return result;\n }\n}\n\n@injectable()\nexport class InteractivePickItemInterceptorContribution implements IPickItemInterceptorContribution {\n order: number = 1;\n\n beforePickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n const originGraphic = graphic.baseGraphic;\n if (originGraphic && originGraphic.parent) {\n const newPoint = new Point(point.x, point.y);\n const context = pickerService.pickContext;\n context.highPerformanceSave();\n const parentMatrix = originGraphic.parent.globalTransMatrix;\n parentMatrix.transformPoint(newPoint, newPoint);\n\n const result = originGraphic.isContainer\n ? pickerService.pickGroup(originGraphic, newPoint.clone(), parentMatrix, pickParams)\n : pickerService.pickItem(originGraphic, newPoint.clone(), parentMatrix, pickParams);\n context.highPerformanceRestore();\n return result;\n }\n return null;\n }\n}\n\n/**\n * 3d拦截器,用于渲染3d视角\n */\n@injectable()\nexport class Canvas3DPickItemInterceptor implements IPickItemInterceptorContribution {\n // canvas?: ICanvas;\n order: number = 1;\n\n beforePickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ) {\n if (!graphic.in3dMode || pickParams.in3dInterceptor) {\n return null;\n }\n\n const context = pickerService.pickContext;\n const stage = graphic.stage;\n if (!(context && stage)) {\n return null;\n }\n pickParams.in3dInterceptor = true;\n\n // 使用3d模式渲染\n context.save();\n this.initCanvasCtx(context);\n context.camera = stage.camera;\n\n // 设置context的transform到上一个节点\n if (graphic.isContainer) {\n const result = draw3dItem(\n context,\n graphic,\n () => {\n return pickerService.pickGroup(graphic as IGroup, point, params.parentMatrix, pickParams);\n },\n pickParams\n );\n\n context.camera = null;\n\n pickParams.in3dInterceptor = false;\n context.restore();\n return result;\n }\n context.restore();\n return null;\n }\n\n initCanvasCtx(context: IContext2d) {\n context.setTransformForCurrent();\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/picker/pick-interceptor.ts"],"names":[],"mappings":"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","file":"pick-interceptor.js","sourcesContent":["import type { IMatrix, IPointLike } from '@visactor/vutils';\nimport { Point } from '@visactor/vutils';\nimport { injectable } from '../common/inversify-lite';\nimport type {\n IContext2d,\n IGraphic,\n IGroup,\n IPickItemInterceptorContribution,\n IPickParams,\n IPickerService,\n PickResult\n} from '../interface';\nimport { matrixAllocate } from '../allocator/matrix-allocate';\nimport { draw3dItem } from '../common/3d-interceptor';\nimport { getTheme } from '../graphic';\n\n// 拦截器\nexport const PickItemInterceptor = Symbol.for('PickItemInterceptor');\n\n/**\n * 影子节点拦截器,用于渲染影子节点\n */\n@injectable()\nexport class ShadowRootPickItemInterceptorContribution implements IPickItemInterceptorContribution {\n order: number = 1;\n afterPickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n if (graphic.attribute.shadowRootIdx > 0 || !graphic.attribute.shadowRootIdx) {\n return this._pickItem(graphic, pickerService, point, pickParams, params);\n }\n return null;\n }\n\n beforePickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n if (graphic.attribute.shadowRootIdx < 0) {\n return this._pickItem(graphic, pickerService, point, pickParams, params);\n }\n return null;\n }\n\n protected _pickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): PickResult | null {\n if (!graphic.shadowRoot) {\n return null;\n }\n const { parentMatrix } = params || {};\n if (!parentMatrix) {\n return null;\n }\n\n const context = pickerService.pickContext;\n context.highPerformanceSave();\n\n const theme = (getTheme(graphic) as any)?.[graphic.type];\n const { shadowPickMode = theme?.shadowPickMode } = graphic.attribute;\n const g = graphic.shadowRoot;\n const currentGroupMatrix = matrixAllocate.allocateByObj(parentMatrix);\n const newPoint = new Point(\n currentGroupMatrix.a * point.x + currentGroupMatrix.c * point.y + currentGroupMatrix.e,\n currentGroupMatrix.b * point.x + currentGroupMatrix.d * point.y + currentGroupMatrix.f\n );\n // const transMatrix = graphic.transMatrix;\n // currentGroupMatrix.multiply(\n // transMatrix.a,\n // transMatrix.b,\n // transMatrix.c,\n // transMatrix.d,\n // transMatrix.e,\n // transMatrix.f\n // );\n\n // currentGroupMatrix.transformPoint(newPoint, newPoint);\n const result = pickerService.pickGroup(g, newPoint, currentGroupMatrix, pickParams);\n\n context.highPerformanceRestore();\n\n // 影子节点pick到group也算pick到graphic\n if (!result.graphic && result.group && shadowPickMode === 'full') {\n result.graphic = result.group;\n }\n\n return result;\n }\n}\n\n@injectable()\nexport class InteractivePickItemInterceptorContribution implements IPickItemInterceptorContribution {\n order: number = 1;\n\n beforePickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ): null | PickResult {\n const originGraphic = graphic.baseGraphic;\n if (originGraphic && originGraphic.parent) {\n const newPoint = new Point(point.x, point.y);\n const context = pickerService.pickContext;\n context.highPerformanceSave();\n const parentMatrix = originGraphic.parent.globalTransMatrix;\n parentMatrix.transformPoint(newPoint, newPoint);\n\n const result = originGraphic.isContainer\n ? pickerService.pickGroup(originGraphic, newPoint.clone(), parentMatrix, pickParams)\n : pickerService.pickItem(originGraphic, newPoint.clone(), parentMatrix, pickParams);\n context.highPerformanceRestore();\n return result;\n }\n return null;\n }\n}\n\n/**\n * 3d拦截器,用于渲染3d视角\n */\n@injectable()\nexport class Canvas3DPickItemInterceptor implements IPickItemInterceptorContribution {\n // canvas?: ICanvas;\n order: number = 1;\n\n beforePickItem(\n graphic: IGraphic,\n pickerService: IPickerService,\n point: IPointLike,\n pickParams: IPickParams,\n params?: {\n parentMatrix: IMatrix;\n }\n ) {\n if (!graphic.in3dMode || pickParams.in3dInterceptor) {\n return null;\n }\n\n const context = pickerService.pickContext;\n const stage = graphic.stage;\n if (!(context && stage)) {\n return null;\n }\n pickParams.in3dInterceptor = true;\n\n // 使用3d模式渲染\n context.save();\n this.initCanvasCtx(context);\n context.camera = stage.camera;\n\n // 设置context的transform到上一个节点\n if (graphic.isContainer) {\n const result = draw3dItem(\n context,\n graphic,\n () => {\n return pickerService.pickGroup(graphic as IGroup, point, params.parentMatrix, pickParams);\n },\n pickParams\n );\n\n context.camera = null;\n\n pickParams.in3dInterceptor = false;\n context.restore();\n return result;\n }\n context.restore();\n return null;\n }\n\n initCanvasCtx(context: IContext2d) {\n context.setTransformForCurrent();\n }\n}\n"]}
@@ -9,14 +9,11 @@ const inversify_lite_1 = require("../common/inversify-lite"), constants_1 = requ
9
9
  exports.default = new inversify_lite_1.ContainerModule(((bind, unbind, isBound) => {
10
10
  isBound(constants_1.PickerService) || (bind(constants_1.GlobalPickerService).toSelf(),
11
11
  bind(constants_1.PickerService).toService(constants_1.GlobalPickerService)), bind(pick_interceptor_1.Canvas3DPickItemInterceptor).toSelf().inSingletonScope(),
12
- bind(constants_1.PickItemInterceptor).toService(pick_interceptor_1.Canvas3DPickItemInterceptor),
12
+ bind(pick_interceptor_1.PickItemInterceptor).toService(pick_interceptor_1.Canvas3DPickItemInterceptor),
13
13
  bind(pick_interceptor_1.ShadowRootPickItemInterceptorContribution).toSelf().inSingletonScope(),
14
- bind(constants_1.PickItemInterceptor).toService(pick_interceptor_1.ShadowRootPickItemInterceptorContribution),
14
+ bind(pick_interceptor_1.PickItemInterceptor).toService(pick_interceptor_1.ShadowRootPickItemInterceptorContribution),
15
15
  bind(pick_interceptor_1.InteractivePickItemInterceptorContribution).toSelf().inSingletonScope(),
16
- bind(constants_1.PickItemInterceptor).toService(pick_interceptor_1.InteractivePickItemInterceptorContribution),
17
- (0, contribution_provider_1.bindContributionProvider)(bind, constants_1.PickItemInterceptor),
18
- bind(pick_interceptor_1.ShadowPickServiceInterceptorContribution).toSelf().inSingletonScope(),
19
- bind(constants_1.PickServiceInterceptor).toService(pick_interceptor_1.ShadowPickServiceInterceptorContribution),
20
- (0, contribution_provider_1.bindContributionProvider)(bind, constants_1.PickServiceInterceptor);
16
+ bind(pick_interceptor_1.PickItemInterceptor).toService(pick_interceptor_1.InteractivePickItemInterceptorContribution),
17
+ (0, contribution_provider_1.bindContributionProvider)(bind, pick_interceptor_1.PickItemInterceptor);
21
18
  }));
22
19
  //# sourceMappingURL=pick-modules.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/picker/pick-modules.ts"],"names":[],"mappings":";;AAAA,6DAA2D;AAC3D,2CAA8G;AAI9G,yDAK4B;AAC5B,2EAA2E;AAE3E,kBAAe,IAAI,gCAAe,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAC3D,IAAI,CAAC,OAAO,CAAC,yBAAa,CAAC,EAAE;QAC3B,IAAI,CAAC,+BAAmB,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,yBAAa,CAAC,CAAC,SAAS,CAAC,+BAAmB,CAAC,CAAC;KACpD;IAOD,IAAI,CAAC,8CAA2B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC9D,IAAI,CAAC,+BAAmB,CAAC,CAAC,SAAS,CAAC,8CAA2B,CAAC,CAAC;IAGjE,IAAI,CAAC,4DAAyC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC5E,IAAI,CAAC,+BAAmB,CAAC,CAAC,SAAS,CAAC,4DAAyC,CAAC,CAAC;IAG/E,IAAI,CAAC,6DAA0C,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC7E,IAAI,CAAC,+BAAmB,CAAC,CAAC,SAAS,CAAC,6DAA0C,CAAC,CAAC;IAChF,IAAA,gDAAwB,EAAC,IAAI,EAAE,+BAAmB,CAAC,CAAC;IAEpD,IAAI,CAAC,2DAAwC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC3E,IAAI,CAAC,kCAAsB,CAAC,CAAC,SAAS,CAAC,2DAAwC,CAAC,CAAC;IAEjF,IAAA,gDAAwB,EAAC,IAAI,EAAE,kCAAsB,CAAC,CAAC;AACzD,CAAC,CAAC,CAAC","file":"pick-modules.js","sourcesContent":["import { ContainerModule } from '../common/inversify-lite';\nimport { PickerService, GlobalPickerService, PickItemInterceptor, PickServiceInterceptor } from './constants';\nimport { DefaultGlobalPickerService } from './global-picker-service';\n// import { DefaultCanvasPickerService } from './canvas-picker-service';\n// import { DefaultMathPickerService } from './math-picker-service';\nimport {\n Canvas3DPickItemInterceptor,\n InteractivePickItemInterceptorContribution,\n ShadowPickServiceInterceptorContribution,\n ShadowRootPickItemInterceptorContribution\n} from './pick-interceptor';\nimport { bindContributionProvider } from '../common/contribution-provider';\n\nexport default new ContainerModule((bind, unbind, isBound) => {\n if (!isBound(PickerService)) {\n bind(GlobalPickerService).toSelf();\n bind(PickerService).toService(GlobalPickerService);\n }\n // bind(PickerService).toService(GlobalPickerService);\n\n // bind(DefaultGlobalPickerService).toSelf().inSingletonScope();\n // bind(GlobalPickerService).toService(DefaultGlobalPickerService);\n\n // interceptor\n bind(Canvas3DPickItemInterceptor).toSelf().inSingletonScope();\n bind(PickItemInterceptor).toService(Canvas3DPickItemInterceptor);\n\n // shadow root\n bind(ShadowRootPickItemInterceptorContribution).toSelf().inSingletonScope();\n bind(PickItemInterceptor).toService(ShadowRootPickItemInterceptorContribution);\n\n // interactive\n bind(InteractivePickItemInterceptorContribution).toSelf().inSingletonScope();\n bind(PickItemInterceptor).toService(InteractivePickItemInterceptorContribution);\n bindContributionProvider(bind, PickItemInterceptor);\n\n bind(ShadowPickServiceInterceptorContribution).toSelf().inSingletonScope();\n bind(PickServiceInterceptor).toService(ShadowPickServiceInterceptorContribution);\n\n bindContributionProvider(bind, PickServiceInterceptor);\n});\n"]}
1
+ {"version":3,"sources":["../src/picker/pick-modules.ts"],"names":[],"mappings":";;AAAA,6DAA2D;AAC3D,2CAAiE;AAIjE,yDAK4B;AAC5B,2EAA2E;AAE3E,kBAAe,IAAI,gCAAe,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE;IAC3D,IAAI,CAAC,OAAO,CAAC,yBAAa,CAAC,EAAE;QAC3B,IAAI,CAAC,+BAAmB,CAAC,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,CAAC,yBAAa,CAAC,CAAC,SAAS,CAAC,+BAAmB,CAAC,CAAC;KACpD;IAOD,IAAI,CAAC,8CAA2B,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC9D,IAAI,CAAC,sCAAmB,CAAC,CAAC,SAAS,CAAC,8CAA2B,CAAC,CAAC;IAGjE,IAAI,CAAC,4DAAyC,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC5E,IAAI,CAAC,sCAAmB,CAAC,CAAC,SAAS,CAAC,4DAAyC,CAAC,CAAC;IAG/E,IAAI,CAAC,6DAA0C,CAAC,CAAC,MAAM,EAAE,CAAC,gBAAgB,EAAE,CAAC;IAC7E,IAAI,CAAC,sCAAmB,CAAC,CAAC,SAAS,CAAC,6DAA0C,CAAC,CAAC;IAChF,IAAA,gDAAwB,EAAC,IAAI,EAAE,sCAAmB,CAAC,CAAC;AACtD,CAAC,CAAC,CAAC","file":"pick-modules.js","sourcesContent":["import { ContainerModule } from '../common/inversify-lite';\nimport { PickerService, GlobalPickerService } from './constants';\nimport { DefaultGlobalPickerService } from './global-picker-service';\n// import { DefaultCanvasPickerService } from './canvas-picker-service';\n// import { DefaultMathPickerService } from './math-picker-service';\nimport {\n Canvas3DPickItemInterceptor,\n InteractivePickItemInterceptorContribution,\n PickItemInterceptor,\n ShadowRootPickItemInterceptorContribution\n} from './pick-interceptor';\nimport { bindContributionProvider } from '../common/contribution-provider';\n\nexport default new ContainerModule((bind, unbind, isBound) => {\n if (!isBound(PickerService)) {\n bind(GlobalPickerService).toSelf();\n bind(PickerService).toService(GlobalPickerService);\n }\n // bind(PickerService).toService(GlobalPickerService);\n\n // bind(DefaultGlobalPickerService).toSelf().inSingletonScope();\n // bind(GlobalPickerService).toService(DefaultGlobalPickerService);\n\n // interceptor\n bind(Canvas3DPickItemInterceptor).toSelf().inSingletonScope();\n bind(PickItemInterceptor).toService(Canvas3DPickItemInterceptor);\n\n // shadow root\n bind(ShadowRootPickItemInterceptorContribution).toSelf().inSingletonScope();\n bind(PickItemInterceptor).toService(ShadowRootPickItemInterceptorContribution);\n\n // interactive\n bind(InteractivePickItemInterceptorContribution).toSelf().inSingletonScope();\n bind(PickItemInterceptor).toService(InteractivePickItemInterceptorContribution);\n bindContributionProvider(bind, PickItemInterceptor);\n});\n"]}
@@ -1,15 +1,13 @@
1
1
  import type { IMatrix, IPoint, IPointLike } from '@visactor/vutils';
2
- import type { IContext2d, IGraphic, IGroup, EnvType, IGlobal, IPickerService, IGraphicPicker, IPickParams, PickResult, IPickItemInterceptorContribution, IContributionProvider, IPickServiceInterceptorContribution } from '../interface';
2
+ import type { IContext2d, IGraphic, IGroup, EnvType, IGlobal, IPickerService, IGraphicPicker, IPickParams, PickResult, IPickItemInterceptorContribution, IContributionProvider } from '../interface';
3
3
  export declare abstract class DefaultPickService implements IPickerService {
4
4
  protected readonly pickItemInterceptorContributions: IContributionProvider<IPickItemInterceptorContribution>;
5
- protected readonly pickServiceInterceptorContributions: IContributionProvider<IPickServiceInterceptorContribution>;
6
5
  type: string;
7
6
  pickerMap: Map<number, IGraphicPicker>;
8
7
  pickContext?: IContext2d;
9
8
  InterceptorContributions: IPickItemInterceptorContribution[];
10
- pickerServiceInterceptorContributions: IPickServiceInterceptorContribution[];
11
9
  global: IGlobal;
12
- constructor(pickItemInterceptorContributions: IContributionProvider<IPickItemInterceptorContribution>, pickServiceInterceptorContributions: IContributionProvider<IPickServiceInterceptorContribution>);
10
+ constructor(pickItemInterceptorContributions: IContributionProvider<IPickItemInterceptorContribution>);
13
11
  protected _init(): void;
14
12
  abstract configure(global: IGlobal, env: EnvType): void;
15
13
  pick(graphics: IGraphic[], point: IPoint, params: IPickParams): PickResult;
@@ -16,16 +16,15 @@ Object.defineProperty(exports, "__esModule", {
16
16
  value: !0
17
17
  }), exports.DefaultPickService = void 0;
18
18
 
19
- const vutils_1 = require("@visactor/vutils"), inversify_lite_1 = require("../common/inversify-lite"), sort_1 = require("../common/sort"), contribution_provider_1 = require("../common/contribution-provider"), theme_1 = require("../graphic/theme"), config_1 = require("../graphic/config"), matrix_1 = require("../common/matrix"), matrix_allocate_1 = require("../allocator/matrix-allocate"), application_1 = require("../application"), constants_1 = require("./constants");
19
+ const vutils_1 = require("@visactor/vutils"), inversify_lite_1 = require("../common/inversify-lite"), sort_1 = require("../common/sort"), contribution_provider_1 = require("../common/contribution-provider"), theme_1 = require("../graphic/theme"), config_1 = require("../graphic/config"), matrix_1 = require("../common/matrix"), matrix_allocate_1 = require("../allocator/matrix-allocate"), pick_interceptor_1 = require("./pick-interceptor"), application_1 = require("../application");
20
20
 
21
21
  let DefaultPickService = class {
22
- constructor(pickItemInterceptorContributions, pickServiceInterceptorContributions) {
23
- this.pickItemInterceptorContributions = pickItemInterceptorContributions, this.pickServiceInterceptorContributions = pickServiceInterceptorContributions,
24
- this.type = "default", this.global = application_1.application.global;
22
+ constructor(pickItemInterceptorContributions) {
23
+ this.pickItemInterceptorContributions = pickItemInterceptorContributions, this.type = "default",
24
+ this.global = application_1.application.global;
25
25
  }
26
26
  _init() {
27
- this.InterceptorContributions = this.pickItemInterceptorContributions.getContributions().sort(((a, b) => a.order - b.order)),
28
- this.pickerServiceInterceptorContributions = this.pickServiceInterceptorContributions.getContributions().sort(((a, b) => a.order - b.order));
27
+ this.InterceptorContributions = this.pickItemInterceptorContributions.getContributions().sort(((a, b) => a.order - b.order));
29
28
  }
30
29
  pick(graphics, point, params) {
31
30
  let result = {
@@ -42,11 +41,12 @@ let DefaultPickService = class {
42
41
  for (let i = graphics.length - 1; i >= 0 && (result = graphics[i].isContainer ? this.pickGroup(graphics[i], point, parentMatrix, params) : this.pickItem(graphics[i], point, parentMatrix, params),
43
42
  !result.graphic); i--) group || (group = result.group);
44
43
  if (result.graphic || (result.group = group), this.pickContext && (this.pickContext.inuse = !1),
45
- this.pickerServiceInterceptorContributions.length) for (let i = 0; i < this.pickerServiceInterceptorContributions.length; i++) {
46
- const drawContribution = this.pickerServiceInterceptorContributions[i];
47
- drawContribution.afterPickItem && (result = drawContribution.afterPickItem(result, this, point, params, {
48
- parentMatrix: parentMatrix
49
- }));
44
+ result.graphic) {
45
+ let g = result.graphic;
46
+ for (;g.parent; ) g = g.parent;
47
+ g.shadowHost && (result.params = {
48
+ shadowTarget: result.graphic
49
+ }, result.graphic = g.shadowHost);
50
50
  }
51
51
  return result;
52
52
  }
@@ -117,7 +117,6 @@ let DefaultPickService = class {
117
117
 
118
118
  DefaultPickService = __decorate([ (0, inversify_lite_1.injectable)(), __param(0, (0,
119
119
  inversify_lite_1.inject)(contribution_provider_1.ContributionProvider)), __param(0, (0,
120
- inversify_lite_1.named)(constants_1.PickItemInterceptor)), __param(1, (0, inversify_lite_1.inject)(contribution_provider_1.ContributionProvider)), __param(1, (0,
121
- inversify_lite_1.named)(constants_1.PickServiceInterceptor)), __metadata("design:paramtypes", [ Object, Object ]) ], DefaultPickService),
120
+ inversify_lite_1.named)(pick_interceptor_1.PickItemInterceptor)), __metadata("design:paramtypes", [ Object ]) ], DefaultPickService),
122
121
  exports.DefaultPickService = DefaultPickService;
123
122
  //# sourceMappingURL=picker-service.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/picker/picker-service.ts"],"names":[],"mappings":"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","file":"picker-service.js","sourcesContent":["import type { IMatrix, IPoint, IPointLike } from '@visactor/vutils';\nimport { AABBBounds, Matrix, Point } from '@visactor/vutils';\nimport { inject, injectable, named } from '../common/inversify-lite';\nimport { foreach } from '../common/sort';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../common/contribution-provider';\nimport type {\n IContext2d,\n IGraphic,\n IGroup,\n EnvType,\n IGlobal,\n IPickerService,\n IGraphicPicker,\n IPickParams,\n PickResult,\n IPickItemInterceptorContribution,\n IContributionProvider,\n IPickServiceInterceptorContribution\n} from '../interface';\nimport { getTheme } from '../graphic/theme';\nimport { DefaultAttribute } from '../graphic/config';\nimport { mat3Tomat4, multiplyMat4Mat4 } from '../common/matrix';\nimport { mat4Allocate, matrixAllocate } from '../allocator/matrix-allocate';\nimport { application } from '../application';\nimport { PickItemInterceptor, PickServiceInterceptor } from './constants';\n\n@injectable()\nexport abstract class DefaultPickService implements IPickerService {\n type: string = 'default';\n declare pickerMap: Map<number, IGraphicPicker>;\n declare pickContext?: IContext2d;\n declare InterceptorContributions: IPickItemInterceptorContribution[];\n declare pickerServiceInterceptorContributions: IPickServiceInterceptorContribution[];\n declare global: IGlobal;\n\n constructor(\n // 拦截器\n // @ts-ignore\n @inject(ContributionProvider)\n @named(PickItemInterceptor)\n protected readonly pickItemInterceptorContributions: IContributionProvider<IPickItemInterceptorContribution>,\n // @ts-ignore\n @inject(ContributionProvider)\n @named(PickServiceInterceptor)\n protected readonly pickServiceInterceptorContributions: IContributionProvider<IPickServiceInterceptorContribution>\n ) {\n this.global = application.global;\n }\n\n protected _init() {\n this.InterceptorContributions = this.pickItemInterceptorContributions\n .getContributions()\n .sort((a, b) => a.order - b.order);\n this.pickerServiceInterceptorContributions = this.pickServiceInterceptorContributions\n .getContributions()\n .sort((a, b) => a.order - b.order);\n }\n\n abstract configure(global: IGlobal, env: EnvType): void;\n\n // todo: params支持\n // todo: 性能优化\n pick(graphics: IGraphic[], point: IPoint, params: IPickParams): PickResult {\n let result: PickResult = {\n graphic: null,\n group: null\n };\n // point变换\n params.pickerService = this;\n\n const w = params.bounds.width();\n const h = params.bounds.height();\n if (!new AABBBounds().setValue(0, 0, w, h).containsPoint(point)) {\n return result;\n }\n if (this.pickContext) {\n this.pickContext.inuse = true;\n }\n params.pickContext = this.pickContext;\n this.pickContext && this.pickContext.clearMatrix(true, 1);\n\n const parentMatrix = new Matrix(1, 0, 0, 1, 0, 0);\n let group: IGroup;\n for (let i = graphics.length - 1; i >= 0; i--) {\n if (graphics[i].isContainer) {\n result = this.pickGroup(graphics[i] as IGroup, point, parentMatrix, params);\n } else {\n result = this.pickItem(graphics[i], point, parentMatrix, params);\n }\n if (result.graphic) {\n break;\n }\n if (!group) {\n group = result.group;\n }\n }\n if (!result.graphic) {\n result.group = group;\n }\n if (this.pickContext) {\n this.pickContext.inuse = false;\n }\n\n if (this.pickerServiceInterceptorContributions.length) {\n for (let i = 0; i < this.pickerServiceInterceptorContributions.length; i++) {\n const drawContribution = this.pickerServiceInterceptorContributions[i];\n if (drawContribution.afterPickItem) {\n result = drawContribution.afterPickItem(result, this, point, params, { parentMatrix });\n }\n }\n }\n // // 判断是否有shadow-dom\n // if (result.graphic) {\n // let g = result.graphic;\n // while (g.parent) {\n // g = g.parent;\n // }\n // if (g.shadowHost) {\n // result.params = {\n // shadowTarget: result.graphic\n // };\n // result.graphic = g.shadowHost;\n // }\n // }\n\n return result;\n }\n\n containsPoint(graphic: IGraphic, point: IPointLike, params: IPickParams): boolean {\n return !!this.pickItem(graphic, point, null, params ?? { pickContext: this.pickContext, pickerService: this })\n ?.graphic;\n }\n\n // TODO: 支持3d模式的拾取和自定义path的拾取\n pickGroup(group: IGroup, point: IPointLike, parentMatrix: IMatrix, params: IPickParams): PickResult {\n let result: PickResult = {\n group: null,\n graphic: null\n };\n if (group.attribute.visibleAll === false) {\n return result;\n }\n const context = params.pickContext;\n const lastMatrix = context.modelMatrix;\n // 如果是3d,那么需要生成modelMatrix\n if (context.camera) {\n const m = group.transMatrix;\n const matrix = mat4Allocate.allocate();\n mat3Tomat4(matrix, m);\n if (lastMatrix) {\n if (matrix) {\n const m = mat4Allocate.allocate();\n context.modelMatrix = multiplyMat4Mat4(m, lastMatrix, matrix);\n mat4Allocate.free(matrix);\n }\n } else {\n // 转化context的matrix为lastMatrix\n mat3Tomat4(matrix, group.globalTransMatrix);\n context.modelMatrix = matrix;\n }\n }\n // 添加拦截器\n if (this.InterceptorContributions.length) {\n for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (drawContribution.beforePickItem) {\n const result = drawContribution.beforePickItem(group, this, point, params, { parentMatrix });\n if (result) {\n if (context.modelMatrix !== lastMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastMatrix;\n return result;\n }\n }\n }\n }\n // 转换坐标空间\n const transMatrix = group.transMatrix;\n const currentGroupMatrix = matrixAllocate.allocateByObj(parentMatrix);\n const newPoint: IPoint = new Point(point.x, point.y);\n currentGroupMatrix.transformPoint(newPoint, newPoint);\n // todo: 支持带有path的group的选中\n const insideGroup = group.AABBBounds.containsPoint(newPoint);\n // 如果group没有被选中,直接跳过(如果是3d模式,那么继续)\n if (!insideGroup && !group.stage.camera) {\n return result;\n }\n // pickGroup,Group目前只支持拦截模式(用于shadow节点)\n const pickedItem = this.pickItem(group, newPoint.clone(), parentMatrix, params);\n if (pickedItem && pickedItem.graphic) {\n result.graphic = pickedItem.graphic;\n result.params = pickedItem.params;\n }\n const groupPicked = group.attribute.pickable !== false && insideGroup;\n\n currentGroupMatrix.multiply(\n transMatrix.a,\n transMatrix.b,\n transMatrix.c,\n transMatrix.d,\n transMatrix.e,\n transMatrix.f\n );\n if (group.attribute.childrenPickable !== false && !(pickedItem && pickedItem.graphic)) {\n foreach(\n group,\n DefaultAttribute.zIndex,\n (graphic: IGraphic) => {\n if (graphic.isContainer) {\n // 偏移scrollX和scrollY\n const newPoint: IPoint = new Point(point.x, point.y);\n const theme = getTheme(group).group;\n const { scrollX = theme.scrollX, scrollY = theme.scrollY } = group.attribute;\n newPoint.x -= scrollX;\n newPoint.y -= scrollY;\n result = this.pickGroup(graphic as IGroup, newPoint, currentGroupMatrix, params);\n } else {\n const newPoint: IPoint = new Point(point.x, point.y);\n currentGroupMatrix.transformPoint(newPoint, newPoint);\n // 偏移scrollX和scrollY\n const theme = getTheme(group).group;\n const { scrollX = theme.scrollX, scrollY = theme.scrollY } = group.attribute;\n newPoint.x -= scrollX;\n newPoint.y -= scrollY;\n const pickedItem = this.pickItem(graphic, newPoint, parentMatrix, params);\n if (pickedItem && pickedItem.graphic) {\n result.graphic = pickedItem.graphic;\n result.params = pickedItem.params;\n }\n }\n return !!result.graphic || !!result.group;\n },\n true,\n !!context.camera\n );\n }\n if (context.modelMatrix !== lastMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastMatrix;\n\n if (!result.graphic && !result.group && groupPicked && !group.stage.camera) {\n result.group = group;\n }\n matrixAllocate.free(currentGroupMatrix);\n return result;\n }\n\n // todo: switch统一改为数字map\n abstract pickItem(\n graphic: IGraphic,\n point: IPointLike,\n parentMatrix: IMatrix | null,\n params: IPickParams\n ): PickResult | null;\n\n protected selectPicker(graphic: IGraphic): IGraphicPicker | null {\n const picker = this.pickerMap.get(graphic.numberType);\n if (!picker) {\n return null;\n }\n return picker;\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/picker/picker-service.ts"],"names":[],"mappings":"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","file":"picker-service.js","sourcesContent":["import type { IMatrix, IPoint, IPointLike } from '@visactor/vutils';\nimport { AABBBounds, Matrix, Point } from '@visactor/vutils';\nimport { inject, injectable, named } from '../common/inversify-lite';\nimport { foreach } from '../common/sort';\n// eslint-disable-next-line @typescript-eslint/consistent-type-imports\nimport { ContributionProvider } from '../common/contribution-provider';\nimport type {\n IContext2d,\n IGraphic,\n IGroup,\n EnvType,\n IGlobal,\n IPickerService,\n IGraphicPicker,\n IPickParams,\n PickResult,\n IPickItemInterceptorContribution,\n IContributionProvider\n} from '../interface';\nimport { getTheme } from '../graphic/theme';\nimport { DefaultAttribute } from '../graphic/config';\nimport { mat3Tomat4, multiplyMat4Mat4 } from '../common/matrix';\nimport { mat4Allocate, matrixAllocate } from '../allocator/matrix-allocate';\nimport { PickItemInterceptor } from './pick-interceptor';\nimport { application } from '../application';\n\n@injectable()\nexport abstract class DefaultPickService implements IPickerService {\n type: string = 'default';\n declare pickerMap: Map<number, IGraphicPicker>;\n declare pickContext?: IContext2d;\n declare InterceptorContributions: IPickItemInterceptorContribution[];\n declare global: IGlobal;\n\n constructor(\n // 拦截器\n // @ts-ignore\n @inject(ContributionProvider)\n @named(PickItemInterceptor)\n protected readonly pickItemInterceptorContributions: IContributionProvider<IPickItemInterceptorContribution>\n ) {\n this.global = application.global;\n }\n\n protected _init() {\n this.InterceptorContributions = this.pickItemInterceptorContributions\n .getContributions()\n .sort((a, b) => a.order - b.order);\n }\n\n abstract configure(global: IGlobal, env: EnvType): void;\n\n // todo: params支持\n // todo: 性能优化\n pick(graphics: IGraphic[], point: IPoint, params: IPickParams): PickResult {\n let result: PickResult = {\n graphic: null,\n group: null\n };\n // point变换\n params.pickerService = this;\n\n const w = params.bounds.width();\n const h = params.bounds.height();\n if (!new AABBBounds().setValue(0, 0, w, h).containsPoint(point)) {\n return result;\n }\n if (this.pickContext) {\n this.pickContext.inuse = true;\n }\n params.pickContext = this.pickContext;\n this.pickContext && this.pickContext.clearMatrix(true, 1);\n\n const parentMatrix = new Matrix(1, 0, 0, 1, 0, 0);\n let group: IGroup;\n for (let i = graphics.length - 1; i >= 0; i--) {\n if (graphics[i].isContainer) {\n result = this.pickGroup(graphics[i] as IGroup, point, parentMatrix, params);\n } else {\n result = this.pickItem(graphics[i], point, parentMatrix, params);\n }\n if (result.graphic) {\n break;\n }\n if (!group) {\n group = result.group;\n }\n }\n if (!result.graphic) {\n result.group = group;\n }\n if (this.pickContext) {\n this.pickContext.inuse = false;\n }\n\n // 判断是否有shadow-dom\n if (result.graphic) {\n let g = result.graphic;\n while (g.parent) {\n g = g.parent;\n }\n if (g.shadowHost) {\n result.params = {\n shadowTarget: result.graphic\n };\n result.graphic = g.shadowHost;\n }\n }\n return result;\n }\n\n containsPoint(graphic: IGraphic, point: IPointLike, params: IPickParams): boolean {\n return !!this.pickItem(graphic, point, null, params ?? { pickContext: this.pickContext, pickerService: this })\n ?.graphic;\n }\n\n // TODO: 支持3d模式的拾取和自定义path的拾取\n pickGroup(group: IGroup, point: IPointLike, parentMatrix: IMatrix, params: IPickParams): PickResult {\n let result: PickResult = {\n group: null,\n graphic: null\n };\n if (group.attribute.visibleAll === false) {\n return result;\n }\n const context = params.pickContext;\n const lastMatrix = context.modelMatrix;\n // 如果是3d,那么需要生成modelMatrix\n if (context.camera) {\n const m = group.transMatrix;\n const matrix = mat4Allocate.allocate();\n mat3Tomat4(matrix, m);\n if (lastMatrix) {\n if (matrix) {\n const m = mat4Allocate.allocate();\n context.modelMatrix = multiplyMat4Mat4(m, lastMatrix, matrix);\n mat4Allocate.free(matrix);\n }\n } else {\n // 转化context的matrix为lastMatrix\n mat3Tomat4(matrix, group.globalTransMatrix);\n context.modelMatrix = matrix;\n }\n }\n // 添加拦截器\n if (this.InterceptorContributions.length) {\n for (let i = 0; i < this.InterceptorContributions.length; i++) {\n const drawContribution = this.InterceptorContributions[i];\n if (drawContribution.beforePickItem) {\n const result = drawContribution.beforePickItem(group, this, point, params, { parentMatrix });\n if (result) {\n if (context.modelMatrix !== lastMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastMatrix;\n return result;\n }\n }\n }\n }\n // 转换坐标空间\n const transMatrix = group.transMatrix;\n const currentGroupMatrix = matrixAllocate.allocateByObj(parentMatrix);\n const newPoint: IPoint = new Point(point.x, point.y);\n currentGroupMatrix.transformPoint(newPoint, newPoint);\n // todo: 支持带有path的group的选中\n const insideGroup = group.AABBBounds.containsPoint(newPoint);\n // 如果group没有被选中,直接跳过(如果是3d模式,那么继续)\n if (!insideGroup && !group.stage.camera) {\n return result;\n }\n // pickGroup,Group目前只支持拦截模式(用于shadow节点)\n const pickedItem = this.pickItem(group, newPoint.clone(), parentMatrix, params);\n if (pickedItem && pickedItem.graphic) {\n result.graphic = pickedItem.graphic;\n result.params = pickedItem.params;\n }\n const groupPicked = group.attribute.pickable !== false && insideGroup;\n\n currentGroupMatrix.multiply(\n transMatrix.a,\n transMatrix.b,\n transMatrix.c,\n transMatrix.d,\n transMatrix.e,\n transMatrix.f\n );\n if (group.attribute.childrenPickable !== false && !(pickedItem && pickedItem.graphic)) {\n foreach(\n group,\n DefaultAttribute.zIndex,\n (graphic: IGraphic) => {\n if (graphic.isContainer) {\n // 偏移scrollX和scrollY\n const newPoint: IPoint = new Point(point.x, point.y);\n const theme = getTheme(group).group;\n const { scrollX = theme.scrollX, scrollY = theme.scrollY } = group.attribute;\n newPoint.x -= scrollX;\n newPoint.y -= scrollY;\n result = this.pickGroup(graphic as IGroup, newPoint, currentGroupMatrix, params);\n } else {\n const newPoint: IPoint = new Point(point.x, point.y);\n currentGroupMatrix.transformPoint(newPoint, newPoint);\n // 偏移scrollX和scrollY\n const theme = getTheme(group).group;\n const { scrollX = theme.scrollX, scrollY = theme.scrollY } = group.attribute;\n newPoint.x -= scrollX;\n newPoint.y -= scrollY;\n const pickedItem = this.pickItem(graphic, newPoint, parentMatrix, params);\n if (pickedItem && pickedItem.graphic) {\n result.graphic = pickedItem.graphic;\n result.params = pickedItem.params;\n }\n }\n return !!result.graphic || !!result.group;\n },\n true,\n !!context.camera\n );\n }\n if (context.modelMatrix !== lastMatrix) {\n mat4Allocate.free(context.modelMatrix);\n }\n context.modelMatrix = lastMatrix;\n\n if (!result.graphic && !result.group && groupPicked && !group.stage.camera) {\n result.group = group;\n }\n matrixAllocate.free(currentGroupMatrix);\n return result;\n }\n\n // todo: switch统一改为数字map\n abstract pickItem(\n graphic: IGraphic,\n point: IPointLike,\n parentMatrix: IMatrix | null,\n params: IPickParams\n ): PickResult | null;\n\n protected selectPicker(graphic: IGraphic): IGraphicPicker | null {\n const picker = this.pickerMap.get(graphic.numberType);\n if (!picker) {\n return null;\n }\n return picker;\n }\n}\n"]}
@@ -1,6 +1,5 @@
1
1
  import type { IRichText, IRichTextCharacter } from '../../interface';
2
- export declare function findConfigIndex(textConfig: IRichTextCharacter[], cursorIndex: number): number;
3
- export declare function textConfigIgnoreLinebreakIdxToCursorIdx(textConfig: IRichTextCharacter[], cursorIndex: number): number;
2
+ export declare function findCursorIndexIgnoreLinebreak(textConfig: IRichTextCharacter[], cursorIndex: number): number;
4
3
  export declare class EditModule {
5
4
  container: HTMLElement;
6
5
  textAreaDom: HTMLTextAreaElement;
@@ -8,11 +7,11 @@ export declare class EditModule {
8
7
  isComposing: boolean;
9
8
  cursorIndex: number;
10
9
  selectionStartCursorIdx: number;
11
- onInputCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;
12
- onChangeCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void>;
10
+ onInputCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, pos: 'left' | 'right') => void>;
11
+ onChangeCbList: Array<(text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, pos: 'left' | 'right') => void>;
13
12
  constructor(container?: HTMLElement);
14
- onInput(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void): void;
15
- onChange(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText) => void): void;
13
+ onInput(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, pos: 'left' | 'right') => void): void;
14
+ onChange(cb: (text: string, isComposing: boolean, cursorIdx: number, rt: IRichText, pos: 'left' | 'right') => void): void;
16
15
  applyStyle(textAreaDom: HTMLTextAreaElement): void;
17
16
  handleKeyDown: (e: KeyboardEvent) => void;
18
17
  handleCompositionStart: () => void;
@@ -1,51 +1,17 @@
1
1
  "use strict";
2
2
 
3
- var __rest = this && this.__rest || function(s, e) {
4
- var t = {};
5
- for (var p in s) Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0 && (t[p] = s[p]);
6
- if (null != s && "function" == typeof Object.getOwnPropertySymbols) {
7
- var i = 0;
8
- 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]]);
9
- }
10
- return t;
11
- };
12
-
13
- Object.defineProperty(exports, "__esModule", {
14
- value: !0
15
- }), exports.EditModule = exports.textConfigIgnoreLinebreakIdxToCursorIdx = exports.findConfigIndex = void 0;
16
-
17
- const application_1 = require("../../application");
18
-
19
- function getMaxConfigIndexIgnoreLinebreak(textConfig) {
20
- let idx = 0;
21
- for (let i = 0; i < textConfig.length; i++) {
22
- "\n" !== textConfig[i].text && idx++;
23
- }
24
- return Math.max(idx - 1, 0);
25
- }
26
-
27
- function findConfigIndex(textConfig, cursorIndex) {
3
+ function findCursorIndexIgnoreLinebreak(textConfig, cursorIndex) {
28
4
  let index = 0;
29
- if (cursorIndex < 0) return -1;
30
- let idx = Math.round(cursorIndex);
31
5
  for (index = 0; index < textConfig.length; index++) {
32
- if ("\n" !== textConfig[index].text && idx--, idx < 0) break;
6
+ const c = textConfig[index];
7
+ if (c.text && "\n" === c.text || cursorIndex--, cursorIndex < 0) break;
33
8
  }
34
- return cursorIndex - Math.round(cursorIndex) < 0 && index--, index = Math.max(index, 0),
35
- Math.min(index, textConfig.length - 1);
9
+ return index;
36
10
  }
37
11
 
38
- function textConfigIgnoreLinebreakIdxToCursorIdx(textConfig, cursorIndex) {
39
- var _a;
40
- let index = 0;
41
- for (let i = 0; i < cursorIndex; i++) {
42
- "\n" !== textConfig[i].text && index++;
43
- }
44
- return "\n" === (null === (_a = textConfig[cursorIndex]) || void 0 === _a ? void 0 : _a.text) ? index -= .1 : index += .1,
45
- index;
46
- }
47
-
48
- exports.findConfigIndex = findConfigIndex, exports.textConfigIgnoreLinebreakIdxToCursorIdx = textConfigIgnoreLinebreakIdxToCursorIdx;
12
+ Object.defineProperty(exports, "__esModule", {
13
+ value: !0
14
+ }), exports.EditModule = exports.findCursorIndexIgnoreLinebreak = void 0, exports.findCursorIndexIgnoreLinebreak = findCursorIndexIgnoreLinebreak;
49
15
 
50
16
  class EditModule {
51
17
  constructor(container) {
@@ -55,67 +21,45 @@ class EditModule {
55
21
  type: "Backspace"
56
22
  });
57
23
  }, this.handleCompositionStart = () => {
58
- const {textConfig: textConfig = []} = this.currRt.attribute;
59
- if (this.cursorIndex < 0) {
60
- const config = textConfig[0];
61
- textConfig.unshift(Object.assign(Object.assign({
62
- fill: "black"
63
- }, config), {
64
- text: ""
65
- }));
66
- } else {
67
- const cursorIndex = findConfigIndex(textConfig, this.cursorIndex), lastConfig = textConfig[cursorIndex];
68
- textConfig.splice(cursorIndex + 1, 0, Object.assign(Object.assign({}, lastConfig), {
69
- text: ""
70
- }));
71
- }
72
- this.isComposing = !0;
24
+ const {textConfig: textConfig = []} = this.currRt.attribute, cursorIndex = findCursorIndexIgnoreLinebreak(textConfig, this.cursorIndex), lastConfig = textConfig[cursorIndex];
25
+ textConfig.splice(cursorIndex + 1, 0, Object.assign(Object.assign({}, lastConfig), {
26
+ text: ""
27
+ })), this.isComposing = !0;
73
28
  }, this.handleCompositionEnd = () => {
74
29
  this.isComposing = !1;
75
- const {textConfig: textConfig = []} = this.currRt.attribute, configIdx = findConfigIndex(textConfig, this.cursorIndex + 1), lastConfig = textConfig[configIdx];
76
- textConfig.splice(configIdx, 1);
77
- const text = lastConfig.text, textList = text ? Array.from(text.toString()) : [];
78
- for (let i = 0; i < textList.length; i++) textConfig.splice(i + configIdx, 0, Object.assign(Object.assign({}, lastConfig), {
30
+ const {textConfig: textConfig = []} = this.currRt.attribute, curIdx = findCursorIndexIgnoreLinebreak(textConfig, this.cursorIndex + 1), lastConfig = textConfig[curIdx];
31
+ textConfig.splice(curIdx, 1);
32
+ const text = lastConfig.text, textList = Array.from(text.toString());
33
+ for (let i = 0; i < textList.length; i++) textConfig.splice(i + curIdx, 0, Object.assign(Object.assign({}, lastConfig), {
79
34
  text: textList[i]
80
35
  }));
81
36
  this.currRt.setAttributes({
82
37
  textConfig: textConfig
83
38
  }), this.onChangeCbList.forEach((cb => {
84
- cb(text, this.isComposing, Math.min(this.cursorIndex + textList.length, getMaxConfigIndexIgnoreLinebreak(textConfig) + .1), this.currRt);
39
+ cb(text, this.isComposing, this.cursorIndex + textList.length, this.currRt, "right");
85
40
  }));
86
41
  }, this.handleInput = ev => {
87
- var _a, _b, _c, _d;
88
42
  if (!this.currRt) return;
89
- const _e = this.currRt.attribute, {textConfig: textConfig = []} = _e, rest = __rest(_e, [ "textConfig" ]);
90
- if ("Backspace" === ev.type && !textConfig.length) return;
91
43
  let str = ev.data;
92
- this.isComposing || "Backspace" === ev.type || str || (str = "\n");
44
+ "Backspace" === ev.type || str || (str = "\n");
45
+ const {textConfig: textConfig = []} = this.currRt.attribute;
93
46
  let startIdx = this.selectionStartCursorIdx, endIdx = this.cursorIndex;
94
47
  startIdx > endIdx && ([startIdx, endIdx] = [ endIdx, startIdx ]), this.selectionStartCursorIdx = startIdx,
95
- startIdx = findConfigIndex(textConfig, startIdx), endIdx = findConfigIndex(textConfig, endIdx);
96
- let idxDelta = 0;
97
- "\n" === str && (idxDelta = -.2);
98
- const lastConfigIdx = startIdx + (this.isComposing ? 1 : 0);
99
- let lastConfig = textConfig[lastConfigIdx];
100
- lastConfig || (lastConfig = 0 === textConfig.length ? {
101
- fill: null !== (_a = rest.fill) && void 0 !== _a ? _a : "black",
102
- stroke: null !== (_b = rest.stroke) && void 0 !== _b && _b,
103
- fontSize: null !== (_c = rest.fontSize) && void 0 !== _c ? _c : 12,
104
- fontWeight: null !== (_d = rest.fontWeight) && void 0 !== _d ? _d : "normal"
105
- } : textConfig[lastConfigIdx - 1] || textConfig[lastConfigIdx + 1]);
48
+ this.cursorIndex = startIdx, startIdx = findCursorIndexIgnoreLinebreak(textConfig, startIdx);
49
+ const delta = this.selectionStartCursorIdx - startIdx;
50
+ endIdx = findCursorIndexIgnoreLinebreak(textConfig, endIdx);
51
+ const lastConfig = textConfig[startIdx + (this.isComposing ? 1 : 0)];
106
52
  let currConfig = lastConfig;
107
53
  "Backspace" !== ev.type || this.isComposing ? (startIdx !== endIdx && textConfig.splice(startIdx + 1, endIdx - startIdx),
108
54
  this.isComposing || (currConfig = Object.assign(Object.assign({}, lastConfig), {
109
55
  text: ""
110
- }), startIdx += 1, textConfig.splice(startIdx, 0, currConfig)), currConfig.text = str,
111
- textConfig.length || textConfig.push(currConfig)) : startIdx !== endIdx ? textConfig.splice(startIdx + 1, endIdx - startIdx) : (textConfig.splice(startIdx, 1),
56
+ }), startIdx += 1, textConfig.splice(startIdx, 0, currConfig)), currConfig.text = str) : startIdx !== endIdx ? textConfig.splice(startIdx + 1, endIdx - startIdx) : (textConfig.splice(startIdx, 1),
112
57
  startIdx -= 1), this.currRt.setAttributes({
113
58
  textConfig: textConfig
114
- }), this.cursorIndex = textConfigIgnoreLinebreakIdxToCursorIdx(textConfig, startIdx),
115
- this.cursorIndex += idxDelta, this.isComposing ? this.onInputCbList.forEach((cb => {
116
- cb(str, this.isComposing, this.cursorIndex, this.currRt);
59
+ }), this.isComposing ? this.onInputCbList.forEach((cb => {
60
+ cb(str, this.isComposing, startIdx + delta, this.currRt, "\n" === str ? "left" : "right");
117
61
  })) : this.onChangeCbList.forEach((cb => {
118
- cb(str, this.isComposing, this.cursorIndex, this.currRt);
62
+ cb(str, this.isComposing, startIdx + delta, this.currRt, "\n" === str ? "left" : "right");
119
63
  }));
120
64
  }, this.container = null != container ? container : document.body;
121
65
  const textAreaDom = document.createElement("textarea");
@@ -132,7 +76,7 @@ class EditModule {
132
76
  applyStyle(textAreaDom) {
133
77
  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;"),
134
78
  textAreaDom.addEventListener("input", this.handleInput), textAreaDom.addEventListener("compositionstart", this.handleCompositionStart),
135
- textAreaDom.addEventListener("compositionend", this.handleCompositionEnd), application_1.application.global.addEventListener("keydown", this.handleKeyDown);
79
+ textAreaDom.addEventListener("compositionend", this.handleCompositionEnd), window.addEventListener("keydown", this.handleKeyDown);
136
80
  }
137
81
  moveTo(x, y, rt, cursorIndex, selectionStartCursorIdx) {
138
82
  this.textAreaDom.style.left = `${x}px`, this.textAreaDom.style.top = `${y}px`, setTimeout((() => {
@@ -142,7 +86,7 @@ class EditModule {
142
86
  release() {
143
87
  this.textAreaDom.removeEventListener("input", this.handleInput), this.textAreaDom.removeEventListener("compositionstart", this.handleCompositionStart),
144
88
  this.textAreaDom.removeEventListener("compositionend", this.handleCompositionEnd),
145
- application_1.application.global.removeEventListener("keydown", this.handleKeyDown);
89
+ window.removeEventListener("keydown", this.handleKeyDown);
146
90
  }
147
91
  }
148
92