fabric 5.3.0 → 6.0.0-beta3

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 (604) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintignore +3 -0
  5. package/.eslintrc.js +43 -0
  6. package/.eslintrc.json +38 -46
  7. package/.eslintrc_tests +12 -0
  8. package/.gitattributes +2 -0
  9. package/.gitpod.yml +17 -1
  10. package/.prettierignore +19 -0
  11. package/.prettierrc +4 -0
  12. package/CHANGELOG.md +532 -189
  13. package/CONTRIBUTING.md +224 -59
  14. package/README.md +200 -235
  15. package/bower.json +1 -3
  16. package/dist/fabric.d.ts +42 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.js +27582 -0
  19. package/dist/index.js.map +1 -0
  20. package/dist/index.min.js +1 -0
  21. package/dist/index.mjs +27519 -0
  22. package/dist/index.mjs.map +1 -0
  23. package/dist/index.node.cjs +27663 -0
  24. package/dist/index.node.cjs.map +1 -0
  25. package/dist/index.node.d.ts +14 -0
  26. package/dist/index.node.mjs +27606 -0
  27. package/dist/index.node.mjs.map +1 -0
  28. package/dist/src/ClassRegistry.d.ts +13 -0
  29. package/dist/src/Collection.d.ts +136 -0
  30. package/dist/src/CommonMethods.d.ts +32 -0
  31. package/dist/src/EventTypeDefs.d.ts +227 -0
  32. package/dist/src/Intersection.d.ts +112 -0
  33. package/dist/src/Observable.d.ts +60 -0
  34. package/dist/src/Pattern.d.ts +113 -0
  35. package/dist/src/Point.d.ts +232 -0
  36. package/dist/src/Shadow.d.ts +97 -0
  37. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  38. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  39. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  40. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  41. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  42. package/dist/src/cache.d.ts +47 -0
  43. package/dist/src/canvas/Canvas.d.ts +548 -0
  44. package/dist/src/canvas/SelectableCanvas.d.ts +754 -0
  45. package/dist/src/canvas/StaticCanvas.d.ts +778 -0
  46. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  47. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  48. package/dist/src/color/Color.d.ts +174 -0
  49. package/dist/src/color/color_map.d.ts +155 -0
  50. package/dist/src/color/constants.d.ts +22 -0
  51. package/dist/src/color/util.d.ts +12 -0
  52. package/dist/src/config.d.ts +115 -0
  53. package/dist/src/constants.d.ts +14 -0
  54. package/dist/src/controls/Control.d.ts +228 -0
  55. package/dist/src/controls/changeWidth.d.ts +13 -0
  56. package/dist/src/controls/commonControls.d.ts +28 -0
  57. package/dist/src/controls/controlRendering.d.ts +29 -0
  58. package/dist/src/controls/drag.d.ts +12 -0
  59. package/dist/src/controls/index.d.ts +13 -0
  60. package/dist/src/controls/polyControl.d.ts +5 -0
  61. package/dist/src/controls/rotate.d.ts +12 -0
  62. package/dist/src/controls/scale.d.ts +47 -0
  63. package/dist/src/controls/scaleSkew.d.ts +39 -0
  64. package/dist/src/controls/skew.d.ts +33 -0
  65. package/dist/src/controls/util.d.ts +41 -0
  66. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  67. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  68. package/dist/src/env/browser.d.ts +3 -0
  69. package/dist/src/env/index.d.ts +15 -0
  70. package/dist/src/env/node.d.ts +5 -0
  71. package/dist/src/env/types.d.ts +15 -0
  72. package/dist/src/filters/BaseFilter.d.ts +153 -0
  73. package/dist/src/filters/BlendColor.d.ts +80 -0
  74. package/dist/src/filters/BlendImage.d.ts +92 -0
  75. package/dist/src/filters/Blur.d.ts +51 -0
  76. package/dist/src/filters/Boilerplate.d.ts +48 -0
  77. package/dist/src/filters/Brightness.d.ts +47 -0
  78. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  79. package/dist/src/filters/ColorMatrix.d.ts +63 -0
  80. package/dist/src/filters/ColorMatrixFilters.d.ts +545 -0
  81. package/dist/src/filters/Composed.d.ts +45 -0
  82. package/dist/src/filters/Contrast.d.ts +45 -0
  83. package/dist/src/filters/Convolute.d.ts +82 -0
  84. package/dist/src/filters/FilterBackend.d.ts +14 -0
  85. package/dist/src/filters/GLProbes/GLProbe.d.ts +11 -0
  86. package/dist/src/filters/GLProbes/NodeGLProbe.d.ts +11 -0
  87. package/dist/src/filters/GLProbes/WebGLProbe.d.ts +20 -0
  88. package/dist/src/filters/Gamma.d.ts +54 -0
  89. package/dist/src/filters/Grayscale.d.ts +46 -0
  90. package/dist/src/filters/HueRotation.d.ts +24 -0
  91. package/dist/src/filters/Invert.d.ts +55 -0
  92. package/dist/src/filters/Noise.d.ts +54 -0
  93. package/dist/src/filters/Pixelate.d.ts +44 -0
  94. package/dist/src/filters/RemoveColor.d.ts +63 -0
  95. package/dist/src/filters/Resize.d.ts +136 -0
  96. package/dist/src/filters/Saturation.d.ts +48 -0
  97. package/dist/src/filters/Vibrance.d.ts +48 -0
  98. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  99. package/dist/src/filters/filters.d.ts +21 -0
  100. package/dist/src/filters/index.d.ts +5 -0
  101. package/dist/src/filters/shaders/baseFilter.d.ts +4 -0
  102. package/dist/src/filters/shaders/blendColor.d.ts +13 -0
  103. package/dist/src/filters/shaders/blendImage.d.ts +3 -0
  104. package/dist/src/filters/shaders/blur.d.ts +2 -0
  105. package/dist/src/filters/shaders/brightness.d.ts +2 -0
  106. package/dist/src/filters/shaders/colorMatrix.d.ts +2 -0
  107. package/dist/src/filters/shaders/constrast.d.ts +2 -0
  108. package/dist/src/filters/shaders/convolute.d.ts +11 -0
  109. package/dist/src/filters/shaders/gamma.d.ts +2 -0
  110. package/dist/src/filters/shaders/grayscale.d.ts +3 -0
  111. package/dist/src/filters/shaders/invert.d.ts +2 -0
  112. package/dist/src/filters/shaders/noise.d.ts +2 -0
  113. package/dist/src/filters/shaders/pixelate.d.ts +2 -0
  114. package/dist/src/filters/shaders/removeColor.d.ts +2 -0
  115. package/dist/src/filters/shaders/saturation.d.ts +2 -0
  116. package/dist/src/filters/shaders/vibrance.d.ts +2 -0
  117. package/dist/src/filters/typedefs.d.ts +49 -0
  118. package/dist/src/gradient/Gradient.d.ts +149 -0
  119. package/dist/src/gradient/constants.d.ts +15 -0
  120. package/dist/src/gradient/parser/index.d.ts +4 -0
  121. package/dist/src/gradient/parser/misc.d.ts +4 -0
  122. package/dist/src/gradient/parser/parseColorStops.d.ts +3 -0
  123. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  124. package/dist/src/gradient/typedefs.d.ts +93 -0
  125. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  126. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  127. package/dist/src/parkinglot/straighten.d.ts +2 -0
  128. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  129. package/dist/src/parser/attributes.d.ts +6 -0
  130. package/dist/src/parser/constants.d.ts +53 -0
  131. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  132. package/dist/src/parser/elementById.d.ts +6 -0
  133. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  134. package/dist/src/parser/elements_parser.d.ts +3 -0
  135. package/dist/src/parser/getCSSRules.d.ts +7 -0
  136. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  137. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  138. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  139. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  140. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  141. package/dist/src/parser/index.d.ts +10 -0
  142. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  143. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  144. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  145. package/dist/src/parser/normalizeValue.d.ts +2 -0
  146. package/dist/src/parser/parseAttributes.d.ts +9 -0
  147. package/dist/src/parser/parseElements.d.ts +11 -0
  148. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  149. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  150. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  151. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  152. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  153. package/dist/src/parser/parseStyleString.d.ts +2 -0
  154. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  155. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  156. package/dist/src/parser/percent.d.ts +9 -0
  157. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  158. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  159. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  160. package/dist/src/parser/selectorMatches.d.ts +2 -0
  161. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  162. package/dist/src/parser/skewMatrix.d.ts +2 -0
  163. package/dist/src/parser/translateMatrix.d.ts +2 -0
  164. package/dist/src/shapes/ActiveSelection.d.ts +82 -0
  165. package/dist/src/shapes/Circle.d.ts +99 -0
  166. package/dist/src/shapes/Ellipse.d.ts +84 -0
  167. package/dist/src/shapes/Group.d.ts +408 -0
  168. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  169. package/dist/src/shapes/IText/IText.d.ts +335 -0
  170. package/dist/src/shapes/IText/ITextBehavior.d.ts +287 -0
  171. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +83 -0
  172. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +195 -0
  173. package/dist/src/shapes/IText/constants.d.ts +13 -0
  174. package/dist/src/shapes/Image.d.ts +311 -0
  175. package/dist/src/shapes/Line.d.ts +126 -0
  176. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  177. package/dist/src/shapes/Object/FabricObject.d.ts +11 -0
  178. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  179. package/dist/src/shapes/Object/InteractiveObject.d.ts +296 -0
  180. package/dist/src/shapes/Object/Object.d.ts +594 -0
  181. package/dist/src/shapes/Object/ObjectGeometry.d.ts +327 -0
  182. package/dist/src/shapes/Object/ObjectOrigin.d.ts +109 -0
  183. package/dist/src/shapes/Object/StackedObject.d.ts +72 -0
  184. package/dist/src/shapes/Object/defaultValues.d.ts +76 -0
  185. package/dist/src/shapes/Object/types/BaseProps.d.ts +84 -0
  186. package/dist/src/shapes/Object/types/BorderProps.d.ts +37 -0
  187. package/dist/src/shapes/Object/types/ControlProps.d.ts +62 -0
  188. package/dist/src/shapes/Object/types/FabricObjectProps.d.ts +96 -0
  189. package/dist/src/shapes/Object/types/FillStrokeProps.d.ts +80 -0
  190. package/dist/src/shapes/Object/types/LockInteractionProps.d.ts +51 -0
  191. package/dist/src/shapes/Object/types/ObjectProps.d.ts +42 -0
  192. package/dist/src/shapes/Object/types/SerializedObjectProps.d.ts +66 -0
  193. package/dist/src/shapes/Object/types/index.d.ts +6 -0
  194. package/dist/src/shapes/Path.d.ts +130 -0
  195. package/dist/src/shapes/Polygon.d.ts +9 -0
  196. package/dist/src/shapes/Polyline.d.ts +140 -0
  197. package/dist/src/shapes/Rect.d.ts +76 -0
  198. package/dist/src/shapes/Text/StyledText.d.ts +119 -0
  199. package/dist/src/shapes/Text/Text.d.ts +673 -0
  200. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  201. package/dist/src/shapes/Text/constants.d.ts +7 -0
  202. package/dist/src/shapes/Textbox.d.ts +185 -0
  203. package/dist/src/shapes/Triangle.d.ts +25 -0
  204. package/dist/src/typedefs.d.ts +90 -0
  205. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  206. package/dist/src/util/animation/AnimationFrameProvider.d.ts +3 -0
  207. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  208. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  209. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  210. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  211. package/dist/src/util/animation/animate.d.ts +37 -0
  212. package/dist/src/util/animation/easing.d.ts +130 -0
  213. package/dist/src/util/animation/types.d.ts +87 -0
  214. package/dist/src/util/applyMixins.d.ts +8 -0
  215. package/dist/src/util/dom_event.d.ts +5 -0
  216. package/dist/src/util/dom_misc.d.ts +39 -0
  217. package/dist/src/util/dom_request.d.ts +14 -0
  218. package/dist/src/util/dom_style.d.ts +7 -0
  219. package/dist/src/util/fireEvent.d.ts +3 -0
  220. package/dist/src/util/index.d.ts +35 -0
  221. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  222. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  223. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  224. package/dist/src/util/internals/index.d.ts +4 -0
  225. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  226. package/dist/src/util/internals/uid.d.ts +2 -0
  227. package/dist/src/util/lang_string.d.ts +22 -0
  228. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  229. package/dist/src/util/misc/capValue.d.ts +2 -0
  230. package/dist/src/util/misc/cos.d.ts +10 -0
  231. package/dist/src/util/misc/dom.d.ts +28 -0
  232. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  233. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  234. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  235. package/dist/src/util/misc/matrix.d.ts +92 -0
  236. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  237. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  238. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  239. package/dist/src/util/misc/pick.d.ts +9 -0
  240. package/dist/src/util/misc/planeChange.d.ts +84 -0
  241. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  242. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  243. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  244. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  245. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  246. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  247. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  248. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  249. package/dist/src/util/misc/sin.d.ts +10 -0
  250. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  251. package/dist/src/util/misc/textStyles.d.ts +32 -0
  252. package/dist/src/util/misc/toFixed.d.ts +8 -0
  253. package/dist/src/util/misc/vectors.d.ts +57 -0
  254. package/dist/src/util/path/index.d.ts +96 -0
  255. package/dist/src/util/path/regex.d.ts +3 -0
  256. package/dist/src/util/path/typechecks.d.ts +24 -0
  257. package/dist/src/util/path/typedefs.d.ts +220 -0
  258. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  259. package/dist/src/util/types.d.ts +19 -0
  260. package/fabric.ts +51 -0
  261. package/index.node.ts +37 -0
  262. package/index.ts +1 -0
  263. package/package.json +100 -40
  264. package/publish.js +0 -26
  265. package/rollup.config.mjs +91 -0
  266. package/rollup.test.config.js +24 -0
  267. package/scripts/build.mjs +50 -0
  268. package/scripts/buildLock.mjs +115 -0
  269. package/scripts/buildReporter.mjs +15 -0
  270. package/scripts/buildStats.mjs +139 -0
  271. package/scripts/dirname.mjs +14 -0
  272. package/scripts/git.mjs +36 -0
  273. package/scripts/index.mjs +564 -0
  274. package/scripts/sandbox.mjs +149 -0
  275. package/src/ClassRegistry.ts +56 -0
  276. package/src/Collection.ts +346 -0
  277. package/src/CommonMethods.ts +63 -0
  278. package/src/EventTypeDefs.ts +296 -0
  279. package/src/Intersection.ts +302 -0
  280. package/src/Observable.ts +181 -0
  281. package/src/Pattern.ts +227 -0
  282. package/src/Point.ts +388 -0
  283. package/src/Shadow.ts +214 -0
  284. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  285. package/src/brushes/CircleBrush.ts +145 -0
  286. package/src/brushes/PatternBrush.ts +70 -0
  287. package/src/brushes/PencilBrush.ts +300 -0
  288. package/src/brushes/SprayBrush.ts +219 -0
  289. package/src/cache.ts +90 -0
  290. package/src/canvas/Canvas.ts +1607 -0
  291. package/src/canvas/SelectableCanvas.ts +1608 -0
  292. package/src/canvas/StaticCanvas.ts +1734 -0
  293. package/src/canvas/TextEditingManager.ts +48 -0
  294. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  295. package/src/color/Color.ts +404 -0
  296. package/src/color/color_map.ts +154 -0
  297. package/src/color/constants.ts +26 -0
  298. package/src/color/util.ts +32 -0
  299. package/src/config.ts +159 -0
  300. package/src/constants.ts +20 -0
  301. package/src/controls/Control.ts +380 -0
  302. package/src/controls/changeWidth.ts +52 -0
  303. package/src/controls/commonControls.ts +105 -0
  304. package/src/controls/controlRendering.ts +138 -0
  305. package/src/controls/drag.ts +31 -0
  306. package/src/controls/index.ts +22 -0
  307. package/src/controls/polyControl.ts +135 -0
  308. package/src/controls/rotate.ts +87 -0
  309. package/src/controls/scale.ts +277 -0
  310. package/src/controls/scaleSkew.ts +92 -0
  311. package/src/controls/skew.ts +242 -0
  312. package/src/controls/util.ts +154 -0
  313. package/src/controls/wrapWithFireEvent.ts +25 -0
  314. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  315. package/src/env/browser.ts +32 -0
  316. package/src/env/index.ts +24 -0
  317. package/src/env/node.ts +56 -0
  318. package/src/env/types.ts +15 -0
  319. package/src/filters/{base_filter.class.js → BaseFilter.ts} +192 -151
  320. package/src/filters/BlendColor.ts +217 -0
  321. package/src/filters/BlendImage.ts +228 -0
  322. package/src/filters/Blur.ts +179 -0
  323. package/src/filters/Boilerplate.ts +94 -0
  324. package/src/filters/Brightness.ts +83 -0
  325. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  326. package/src/filters/ColorMatrix.ts +145 -0
  327. package/src/filters/ColorMatrixFilters.ts +77 -0
  328. package/src/filters/Composed.ts +76 -0
  329. package/src/filters/Contrast.ts +82 -0
  330. package/src/filters/Convolute.ts +184 -0
  331. package/src/filters/FilterBackend.ts +34 -0
  332. package/src/filters/GLProbes/GLProbe.ts +11 -0
  333. package/src/filters/GLProbes/NodeGLProbe.ts +15 -0
  334. package/src/filters/GLProbes/WebGLProbe.ts +46 -0
  335. package/src/filters/Gamma.ts +110 -0
  336. package/src/filters/Grayscale.ts +102 -0
  337. package/src/filters/HueRotation.ts +62 -0
  338. package/src/filters/Invert.ts +99 -0
  339. package/src/filters/Noise.ts +94 -0
  340. package/src/filters/Pixelate.ts +96 -0
  341. package/src/filters/RemoveColor.ts +135 -0
  342. package/src/filters/Resize.ts +538 -0
  343. package/src/filters/Saturation.ts +87 -0
  344. package/src/filters/Vibrance.ts +88 -0
  345. package/src/filters/WebGLFilterBackend.ts +430 -0
  346. package/src/filters/filters.ts +28 -0
  347. package/src/filters/index.ts +5 -0
  348. package/src/filters/shaders/baseFilter.ts +19 -0
  349. package/src/filters/shaders/blendColor.ts +33 -0
  350. package/src/filters/shaders/blendImage.ts +32 -0
  351. package/src/filters/shaders/blur.ts +24 -0
  352. package/src/filters/shaders/brightness.ts +11 -0
  353. package/src/filters/shaders/colorMatrix.ts +12 -0
  354. package/src/filters/shaders/constrast.ts +11 -0
  355. package/src/filters/shaders/convolute.ts +154 -0
  356. package/src/filters/shaders/gamma.ts +15 -0
  357. package/src/filters/shaders/grayscale.ts +36 -0
  358. package/src/filters/shaders/invert.ts +19 -0
  359. package/src/filters/shaders/noise.ts +16 -0
  360. package/src/filters/shaders/pixelate.ts +19 -0
  361. package/src/filters/shaders/removeColor.ts +13 -0
  362. package/src/filters/shaders/saturation.ts +15 -0
  363. package/src/filters/shaders/vibrance.ts +16 -0
  364. package/src/filters/typedefs.ts +65 -0
  365. package/src/gradient/Gradient.ts +406 -0
  366. package/src/gradient/constants.ts +12 -0
  367. package/src/gradient/parser/index.ts +3 -0
  368. package/src/gradient/parser/misc.ts +13 -0
  369. package/src/gradient/parser/parseColorStops.ts +56 -0
  370. package/src/gradient/parser/parseCoords.ts +73 -0
  371. package/src/gradient/typedefs.ts +104 -0
  372. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  373. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  374. package/src/parkinglot/straighten.ts +58 -0
  375. package/src/parser/applyViewboxTransform.ts +157 -0
  376. package/src/parser/attributes.ts +25 -0
  377. package/src/parser/constants.ts +115 -0
  378. package/src/parser/doesSomeParentMatch.ts +19 -0
  379. package/src/parser/elementById.ts +21 -0
  380. package/src/parser/elementMatchesRule.ts +16 -0
  381. package/src/parser/elements_parser.ts +191 -0
  382. package/src/parser/getCSSRules.ts +62 -0
  383. package/src/parser/getGlobalStylesForElement.ts +19 -0
  384. package/src/parser/getGradientDefs.ts +31 -0
  385. package/src/parser/getMultipleNodes.ts +15 -0
  386. package/src/parser/getSvgRegex.ts +5 -0
  387. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  388. package/src/parser/index.ts +9 -0
  389. package/src/parser/loadSVGFromString.ts +26 -0
  390. package/src/parser/loadSVGFromURL.ts +40 -0
  391. package/src/parser/normalizeAttr.ts +10 -0
  392. package/src/parser/normalizeValue.ts +63 -0
  393. package/src/parser/parseAttributes.ts +90 -0
  394. package/src/parser/parseElements.ts +28 -0
  395. package/src/parser/parseFontDeclaration.ts +44 -0
  396. package/src/parser/parsePointsAttribute.ts +34 -0
  397. package/src/parser/parseSVGDocument.ts +93 -0
  398. package/src/parser/parseStyleAttribute.ts +27 -0
  399. package/src/parser/parseStyleObject.ts +15 -0
  400. package/src/parser/parseStyleString.ts +16 -0
  401. package/src/parser/parseTransformAttribute.ts +155 -0
  402. package/src/parser/parseUseDirectives.ts +78 -0
  403. package/src/parser/percent.ts +27 -0
  404. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  405. package/src/parser/rotateMatrix.ts +21 -0
  406. package/src/parser/scaleMatrix.ts +9 -0
  407. package/src/parser/selectorMatches.ts +25 -0
  408. package/src/parser/setStrokeFillOpacity.ts +40 -0
  409. package/src/parser/skewMatrix.ts +6 -0
  410. package/src/parser/translateMatrix.ts +8 -0
  411. package/src/shapes/ActiveSelection.ts +189 -0
  412. package/src/shapes/Circle.ts +242 -0
  413. package/src/shapes/Ellipse.ts +179 -0
  414. package/src/shapes/Group.ts +1100 -0
  415. package/src/shapes/IText/DraggableTextDelegate.ts +382 -0
  416. package/src/shapes/IText/IText.ts +693 -0
  417. package/src/shapes/IText/ITextBehavior.ts +1064 -0
  418. package/src/shapes/IText/ITextClickBehavior.ts +325 -0
  419. package/src/shapes/IText/ITextKeyBehavior.ts +685 -0
  420. package/src/shapes/IText/constants.ts +47 -0
  421. package/src/shapes/Image.ts +841 -0
  422. package/src/shapes/Line.ts +346 -0
  423. package/src/shapes/Object/AnimatableObject.ts +106 -0
  424. package/src/shapes/Object/FabricObject.ts +29 -0
  425. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  426. package/src/shapes/Object/InteractiveObject.ts +672 -0
  427. package/src/shapes/Object/Object.ts +1561 -0
  428. package/src/shapes/Object/ObjectGeometry.ts +813 -0
  429. package/src/shapes/Object/ObjectOrigin.ts +276 -0
  430. package/src/shapes/Object/StackedObject.ts +206 -0
  431. package/src/shapes/Object/defaultValues.ts +108 -0
  432. package/src/shapes/Object/types/BaseProps.ts +96 -0
  433. package/src/shapes/Object/types/BorderProps.ts +40 -0
  434. package/src/shapes/Object/types/ControlProps.ts +69 -0
  435. package/src/shapes/Object/types/FabricObjectProps.ts +111 -0
  436. package/src/shapes/Object/types/FillStrokeProps.ts +90 -0
  437. package/src/shapes/Object/types/LockInteractionProps.ts +57 -0
  438. package/src/shapes/Object/types/ObjectProps.ts +46 -0
  439. package/src/shapes/Object/types/SerializedObjectProps.ts +73 -0
  440. package/src/shapes/Object/types/index.ts +8 -0
  441. package/src/shapes/Path.ts +416 -0
  442. package/src/shapes/Polygon.ts +20 -0
  443. package/src/shapes/Polyline.ts +359 -0
  444. package/src/shapes/Rect.ts +233 -0
  445. package/src/shapes/Text/StyledText.ts +329 -0
  446. package/src/shapes/Text/Text.ts +1884 -0
  447. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  448. package/src/shapes/Text/constants.ts +91 -0
  449. package/src/shapes/Textbox.ts +477 -0
  450. package/src/shapes/Triangle.ts +60 -0
  451. package/src/typedefs.ts +115 -0
  452. package/src/util/animation/AnimationBase.ts +166 -0
  453. package/src/util/animation/AnimationFrameProvider.ts +9 -0
  454. package/src/util/animation/AnimationRegistry.ts +58 -0
  455. package/src/util/animation/ArrayAnimation.ts +27 -0
  456. package/src/util/animation/ColorAnimation.ts +74 -0
  457. package/src/util/animation/ValueAnimation.ts +29 -0
  458. package/src/util/animation/animate.ts +74 -0
  459. package/src/util/animation/easing.ts +327 -0
  460. package/src/util/animation/types.ts +136 -0
  461. package/src/util/applyMixins.ts +22 -0
  462. package/src/util/dom_event.ts +28 -0
  463. package/src/util/dom_misc.ts +121 -0
  464. package/src/util/dom_request.ts +64 -0
  465. package/src/util/dom_style.ts +20 -0
  466. package/src/util/fireEvent.ts +15 -0
  467. package/src/util/index.ts +102 -0
  468. package/src/util/internals/cloneDeep.ts +2 -0
  469. package/src/util/internals/getRandomInt.ts +8 -0
  470. package/src/util/internals/ifNaN.ts +9 -0
  471. package/src/util/internals/index.ts +3 -0
  472. package/src/util/internals/removeFromArray.ts +14 -0
  473. package/src/util/internals/uid.ts +3 -0
  474. package/src/util/lang_string.ts +79 -0
  475. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  476. package/src/util/misc/capValue.ts +2 -0
  477. package/src/util/misc/cos.ts +24 -0
  478. package/src/util/misc/dom.ts +50 -0
  479. package/src/util/misc/findScaleTo.ts +44 -0
  480. package/src/util/misc/groupSVGElements.ts +15 -0
  481. package/src/util/misc/isTransparent.ts +28 -0
  482. package/src/util/misc/matrix.ts +207 -0
  483. package/src/util/misc/mergeClipPaths.ts +40 -0
  484. package/src/util/misc/objectEnlive.ts +189 -0
  485. package/src/util/misc/objectTransforms.ts +129 -0
  486. package/src/util/misc/pick.ts +29 -0
  487. package/src/util/misc/planeChange.ts +136 -0
  488. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  489. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +226 -0
  490. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  491. package/src/util/misc/projectStroke/index.ts +53 -0
  492. package/src/util/misc/projectStroke/types.ts +24 -0
  493. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  494. package/src/util/misc/resolveOrigin.ts +22 -0
  495. package/src/util/misc/rotatePoint.ts +15 -0
  496. package/src/util/misc/sin.ts +26 -0
  497. package/src/util/misc/svgParsing.ts +181 -0
  498. package/src/util/misc/textStyles.ts +134 -0
  499. package/src/util/misc/toFixed.ts +8 -0
  500. package/src/util/misc/vectors.ts +82 -0
  501. package/src/util/path/index.ts +1038 -0
  502. package/src/util/path/regex.ts +41 -0
  503. package/src/util/path/typechecks.ts +145 -0
  504. package/src/util/path/typedefs.ts +305 -0
  505. package/src/util/transform_matrix_removal.ts +60 -0
  506. package/src/util/types.ts +78 -0
  507. package/tsconfig.json +106 -0
  508. package/HEADER.js +0 -203
  509. package/build.js +0 -287
  510. package/dist/fabric.js +0 -31187
  511. package/dist/fabric.min.js +0 -1
  512. package/old-travis-reference.yml +0 -97
  513. package/src/brushes/circle_brush.class.js +0 -144
  514. package/src/brushes/pattern_brush.class.js +0 -61
  515. package/src/brushes/pencil_brush.class.js +0 -310
  516. package/src/brushes/spray_brush.class.js +0 -219
  517. package/src/canvas.class.js +0 -1312
  518. package/src/color.class.js +0 -636
  519. package/src/control.class.js +0 -339
  520. package/src/controls.actions.js +0 -740
  521. package/src/controls.render.js +0 -99
  522. package/src/elements_parser.js +0 -152
  523. package/src/filters/2d_backend.class.js +0 -65
  524. package/src/filters/blendcolor_filter.class.js +0 -251
  525. package/src/filters/blendimage_filter.class.js +0 -247
  526. package/src/filters/blur_filter.class.js +0 -217
  527. package/src/filters/brightness_filter.class.js +0 -113
  528. package/src/filters/colormatrix_filter.class.js +0 -159
  529. package/src/filters/composed_filter.class.js +0 -72
  530. package/src/filters/contrast_filter.class.js +0 -113
  531. package/src/filters/convolute_filter.class.js +0 -352
  532. package/src/filters/filter_boilerplate.js +0 -111
  533. package/src/filters/filter_generator.js +0 -85
  534. package/src/filters/gamma_filter.class.js +0 -136
  535. package/src/filters/grayscale_filter.class.js +0 -154
  536. package/src/filters/hue_rotation.class.js +0 -107
  537. package/src/filters/invert_filter.class.js +0 -111
  538. package/src/filters/noise_filter.class.js +0 -134
  539. package/src/filters/pixelate_filter.class.js +0 -137
  540. package/src/filters/removecolor_filter.class.js +0 -173
  541. package/src/filters/resize_filter.class.js +0 -490
  542. package/src/filters/saturate_filter.class.js +0 -119
  543. package/src/filters/vibrance_filter.class.js +0 -122
  544. package/src/filters/webgl_backend.class.js +0 -396
  545. package/src/globalFabric.js +0 -4
  546. package/src/gradient.class.js +0 -490
  547. package/src/intersection.class.js +0 -172
  548. package/src/log.js +0 -11
  549. package/src/mixins/animation.mixin.js +0 -231
  550. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  551. package/src/mixins/canvas_events.mixin.js +0 -974
  552. package/src/mixins/canvas_gestures.mixin.js +0 -149
  553. package/src/mixins/canvas_grouping.mixin.js +0 -177
  554. package/src/mixins/canvas_serialization.mixin.js +0 -228
  555. package/src/mixins/collection.mixin.js +0 -170
  556. package/src/mixins/default_controls.js +0 -114
  557. package/src/mixins/itext.svg_export.js +0 -241
  558. package/src/mixins/itext_behavior.mixin.js +0 -940
  559. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  560. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  561. package/src/mixins/object.svg_export.js +0 -258
  562. package/src/mixins/object_geometry.mixin.js +0 -683
  563. package/src/mixins/object_interactivity.mixin.js +0 -314
  564. package/src/mixins/object_origin.mixin.js +0 -255
  565. package/src/mixins/object_stacking.mixin.js +0 -80
  566. package/src/mixins/object_straightening.mixin.js +0 -80
  567. package/src/mixins/observable.mixin.js +0 -141
  568. package/src/mixins/shared_methods.mixin.js +0 -94
  569. package/src/mixins/stateful.mixin.js +0 -107
  570. package/src/mixins/text_style.mixin.js +0 -324
  571. package/src/parser.js +0 -1090
  572. package/src/pattern.class.js +0 -189
  573. package/src/point.class.js +0 -337
  574. package/src/shadow.class.js +0 -195
  575. package/src/shapes/active_selection.class.js +0 -155
  576. package/src/shapes/circle.class.js +0 -210
  577. package/src/shapes/ellipse.class.js +0 -181
  578. package/src/shapes/group.class.js +0 -593
  579. package/src/shapes/image.class.js +0 -764
  580. package/src/shapes/itext.class.js +0 -526
  581. package/src/shapes/line.class.js +0 -324
  582. package/src/shapes/object.class.js +0 -2008
  583. package/src/shapes/path.class.js +0 -384
  584. package/src/shapes/polygon.class.js +0 -81
  585. package/src/shapes/polyline.class.js +0 -268
  586. package/src/shapes/rect.class.js +0 -187
  587. package/src/shapes/text.class.js +0 -1696
  588. package/src/shapes/textbox.class.js +0 -461
  589. package/src/shapes/triangle.class.js +0 -93
  590. package/src/static_canvas.class.js +0 -1881
  591. package/src/util/anim_ease.js +0 -398
  592. package/src/util/animate.js +0 -254
  593. package/src/util/animate_color.js +0 -74
  594. package/src/util/dom_event.js +0 -50
  595. package/src/util/dom_misc.js +0 -300
  596. package/src/util/dom_request.js +0 -54
  597. package/src/util/dom_style.js +0 -70
  598. package/src/util/lang_array.js +0 -94
  599. package/src/util/lang_class.js +0 -115
  600. package/src/util/lang_object.js +0 -75
  601. package/src/util/lang_string.js +0 -110
  602. package/src/util/misc.js +0 -1330
  603. package/src/util/named_accessors.mixin.js +0 -428
  604. package/src/util/path.js +0 -829
@@ -0,0 +1,693 @@
1
+ import { Canvas } from '../../canvas/Canvas';
2
+ import { ITextEvents } from './ITextBehavior';
3
+ import { ITextClickBehavior } from './ITextClickBehavior';
4
+ import {
5
+ ctrlKeysMapDown,
6
+ ctrlKeysMapUp,
7
+ keysMap,
8
+ keysMapRtl,
9
+ } from './constants';
10
+ import { AssertKeys, TFiller } from '../../typedefs';
11
+ import { classRegistry } from '../../ClassRegistry';
12
+ import type { SerializedTextProps, TextProps } from '../Text/Text';
13
+
14
+ type CursorBoundaries = {
15
+ left: number;
16
+ top: number;
17
+ leftOffset: number;
18
+ topOffset: number;
19
+ };
20
+
21
+ export const iTextDefaultValues = {
22
+ selectionStart: 0,
23
+ selectionEnd: 0,
24
+ selectionColor: 'rgba(17,119,255,0.3)',
25
+ isEditing: false,
26
+ editable: true,
27
+ editingBorderColor: 'rgba(102,153,255,0.25)',
28
+ cursorWidth: 2,
29
+ cursorColor: '',
30
+ cursorDelay: 1000,
31
+ cursorDuration: 600,
32
+ caching: true,
33
+ hiddenTextareaContainer: null,
34
+ _selectionDirection: null,
35
+ _reSpace: /\s|\n/,
36
+ inCompositionMode: false,
37
+ keysMap,
38
+ keysMapRtl,
39
+ ctrlKeysMapDown,
40
+ ctrlKeysMapUp,
41
+ };
42
+
43
+ // @TODO this is not complete
44
+ interface UniqueITextProps {
45
+ selectionStart: number;
46
+ selectionEnd: number;
47
+ }
48
+
49
+ export interface SerializedITextProps
50
+ extends SerializedTextProps,
51
+ UniqueITextProps {}
52
+
53
+ export interface ITextProps extends TextProps, UniqueITextProps {}
54
+
55
+ /**
56
+ * @fires changed
57
+ * @fires selection:changed
58
+ * @fires editing:entered
59
+ * @fires editing:exited
60
+ * @fires dragstart
61
+ * @fires drag drag event firing on the drag source
62
+ * @fires dragend
63
+ * @fires copy
64
+ * @fires cut
65
+ * @fires paste
66
+ *
67
+ * #### Supported key combinations
68
+ * ```
69
+ * Move cursor: left, right, up, down
70
+ * Select character: shift + left, shift + right
71
+ * Select text vertically: shift + up, shift + down
72
+ * Move cursor by word: alt + left, alt + right
73
+ * Select words: shift + alt + left, shift + alt + right
74
+ * Move cursor to line start/end: cmd + left, cmd + right or home, end
75
+ * Select till start/end of line: cmd + shift + left, cmd + shift + right or shift + home, shift + end
76
+ * Jump to start/end of text: cmd + up, cmd + down
77
+ * Select till start/end of text: cmd + shift + up, cmd + shift + down or shift + pgUp, shift + pgDown
78
+ * Delete character: backspace
79
+ * Delete word: alt + backspace
80
+ * Delete line: cmd + backspace
81
+ * Forward delete: delete
82
+ * Copy text: ctrl/cmd + c
83
+ * Paste text: ctrl/cmd + v
84
+ * Cut text: ctrl/cmd + x
85
+ * Select entire text: ctrl/cmd + a
86
+ * Quit editing tab or esc
87
+ * ```
88
+ *
89
+ * #### Supported mouse/touch combination
90
+ * ```
91
+ * Position cursor: click/touch
92
+ * Create selection: click/touch & drag
93
+ * Create selection: click & shift + click
94
+ * Select word: double click
95
+ * Select line: triple click
96
+ * ```
97
+ */
98
+ export class IText<
99
+ Props extends ITextProps = ITextProps,
100
+ SProps extends SerializedITextProps = SerializedITextProps,
101
+ EventSpec extends ITextEvents = ITextEvents
102
+ >
103
+ extends ITextClickBehavior<Props, SProps, EventSpec>
104
+ implements UniqueITextProps
105
+ {
106
+ /**
107
+ * Index where text selection starts (or where cursor is when there is no selection)
108
+ * @type Number
109
+ * @default
110
+ */
111
+ declare selectionStart: number;
112
+
113
+ /**
114
+ * Index where text selection ends
115
+ * @type Number
116
+ * @default
117
+ */
118
+ declare selectionEnd: number;
119
+
120
+ declare compositionStart: number;
121
+
122
+ declare compositionEnd: number;
123
+
124
+ /**
125
+ * Color of text selection
126
+ * @type String
127
+ * @default
128
+ */
129
+ declare selectionColor: string;
130
+
131
+ /**
132
+ * Indicates whether text is in editing mode
133
+ * @type Boolean
134
+ * @default
135
+ */
136
+ declare isEditing: boolean;
137
+
138
+ /**
139
+ * Indicates whether a text can be edited
140
+ * @type Boolean
141
+ * @default
142
+ */
143
+ declare editable: boolean;
144
+
145
+ /**
146
+ * Border color of text object while it's in editing mode
147
+ * @type String
148
+ * @default
149
+ */
150
+ declare editingBorderColor: string;
151
+
152
+ /**
153
+ * Width of cursor (in px)
154
+ * @type Number
155
+ * @default
156
+ */
157
+ declare cursorWidth: number;
158
+
159
+ /**
160
+ * Color of text cursor color in editing mode.
161
+ * if not set (default) will take color from the text.
162
+ * if set to a color value that fabric can understand, it will
163
+ * be used instead of the color of the text at the current position.
164
+ * @type String
165
+ * @default
166
+ */
167
+ declare cursorColor: string;
168
+
169
+ /**
170
+ * Delay between cursor blink (in ms)
171
+ * @type Number
172
+ * @default
173
+ */
174
+ declare cursorDelay: number;
175
+
176
+ /**
177
+ * Duration of cursor fade in (in ms)
178
+ * @type Number
179
+ * @default
180
+ */
181
+ declare cursorDuration: number;
182
+
183
+ declare compositionColor: string;
184
+
185
+ /**
186
+ * Indicates whether internal text char widths can be cached
187
+ * @type Boolean
188
+ * @default
189
+ */
190
+ declare caching: boolean;
191
+
192
+ static ownDefaults: Record<string, any> = iTextDefaultValues;
193
+
194
+ static getDefaults() {
195
+ return { ...super.getDefaults(), ...IText.ownDefaults };
196
+ }
197
+
198
+ get type() {
199
+ return 'i-text';
200
+ }
201
+
202
+ /**
203
+
204
+ * Constructor
205
+ * @param {String} text Text string
206
+ * @param {Object} [options] Options object
207
+ */
208
+ constructor(text: string, options: object) {
209
+ super(text, options);
210
+ this.initBehavior();
211
+ }
212
+
213
+ /**
214
+ * While editing handle differently
215
+ * @private
216
+ * @param {string} key
217
+ * @param {*} value
218
+ */
219
+ _set(key: string, value: any) {
220
+ if (this.isEditing && this._savedProps && key in this._savedProps) {
221
+ // @ts-expect-error irritating TS
222
+ this._savedProps[key] = value;
223
+ return this;
224
+ }
225
+ if (key === 'canvas') {
226
+ this.canvas instanceof Canvas &&
227
+ this.canvas.textEditingManager.remove(this);
228
+ value instanceof Canvas && value.textEditingManager.add(this);
229
+ }
230
+ return super._set(key, value);
231
+ }
232
+
233
+ /**
234
+ * Sets selection start (left boundary of a selection)
235
+ * @param {Number} index Index to set selection start to
236
+ */
237
+ setSelectionStart(index: number) {
238
+ index = Math.max(index, 0);
239
+ this._updateAndFire('selectionStart', index);
240
+ }
241
+
242
+ /**
243
+ * Sets selection end (right boundary of a selection)
244
+ * @param {Number} index Index to set selection end to
245
+ */
246
+ setSelectionEnd(index: number) {
247
+ index = Math.min(index, this.text.length);
248
+ this._updateAndFire('selectionEnd', index);
249
+ }
250
+
251
+ /**
252
+ * @private
253
+ * @param {String} property 'selectionStart' or 'selectionEnd'
254
+ * @param {Number} index new position of property
255
+ */
256
+ protected _updateAndFire(
257
+ property: 'selectionStart' | 'selectionEnd',
258
+ index: number
259
+ ) {
260
+ if (this[property] !== index) {
261
+ this._fireSelectionChanged();
262
+ this[property] = index;
263
+ }
264
+ this._updateTextarea();
265
+ }
266
+
267
+ /**
268
+ * Fires the even of selection changed
269
+ * @private
270
+ */
271
+ _fireSelectionChanged() {
272
+ this.fire('selection:changed');
273
+ this.canvas && this.canvas.fire('text:selection:changed', { target: this });
274
+ }
275
+
276
+ /**
277
+ * Initialize text dimensions. Render all text on given context
278
+ * or on a offscreen canvas to get the text width with measureText.
279
+ * Updates this.width and this.height with the proper values.
280
+ * Does not return dimensions.
281
+ * @private
282
+ */
283
+ initDimensions() {
284
+ this.isEditing && this.initDelayedCursor();
285
+ super.initDimensions();
286
+ }
287
+
288
+ /**
289
+ * Gets style of a current selection/cursor (at the start position)
290
+ * if startIndex or endIndex are not provided, selectionStart or selectionEnd will be used.
291
+ * @param {Number} startIndex Start index to get styles at
292
+ * @param {Number} endIndex End index to get styles at, if not specified selectionEnd or startIndex + 1
293
+ * @param {Boolean} [complete] get full style or not
294
+ * @return {Array} styles an array with one, zero or more Style objects
295
+ */
296
+ getSelectionStyles(
297
+ startIndex: number = this.selectionStart || 0,
298
+ endIndex: number = this.selectionEnd,
299
+ complete?: boolean
300
+ ) {
301
+ return super.getSelectionStyles(startIndex, endIndex, complete);
302
+ }
303
+
304
+ /**
305
+ * Sets style of a current selection, if no selection exist, do not set anything.
306
+ * @param {Object} [styles] Styles object
307
+ * @param {Number} [startIndex] Start index to get styles at
308
+ * @param {Number} [endIndex] End index to get styles at, if not specified selectionEnd or startIndex + 1
309
+ */
310
+ setSelectionStyles(
311
+ styles: object,
312
+ startIndex: number = this.selectionStart || 0,
313
+ endIndex: number = this.selectionEnd
314
+ ) {
315
+ return super.setSelectionStyles(styles, startIndex, endIndex);
316
+ }
317
+
318
+ /**
319
+ * Returns 2d representation (lineIndex and charIndex) of cursor (or selection start)
320
+ * @param {Number} [selectionStart] Optional index. When not given, current selectionStart is used.
321
+ * @param {Boolean} [skipWrapping] consider the location for unwrapped lines. useful to manage styles.
322
+ */
323
+ get2DCursorLocation(
324
+ selectionStart = this.selectionStart,
325
+ skipWrapping?: boolean
326
+ ) {
327
+ return super.get2DCursorLocation(selectionStart, skipWrapping);
328
+ }
329
+
330
+ /**
331
+ * @private
332
+ * @param {CanvasRenderingContext2D} ctx Context to render on
333
+ */
334
+ render(ctx: CanvasRenderingContext2D) {
335
+ super.render(ctx);
336
+ // clear the cursorOffsetCache, so we ensure to calculate once per renderCursor
337
+ // the correct position but not at every cursor animation.
338
+ this.cursorOffsetCache = {};
339
+ this.renderCursorOrSelection();
340
+ }
341
+
342
+ /**
343
+ * @override block cursor/selection logic while rendering the exported canvas
344
+ * @todo this workaround should be replaced with a more robust solution
345
+ */
346
+ toCanvasElement(options?: any): HTMLCanvasElement {
347
+ const isEditing = this.isEditing;
348
+ this.isEditing = false;
349
+ const canvas = super.toCanvasElement(options);
350
+ this.isEditing = isEditing;
351
+ return canvas;
352
+ }
353
+
354
+ /**
355
+ * Renders cursor or selection (depending on what exists)
356
+ * it does on the contextTop. If contextTop is not available, do nothing.
357
+ */
358
+ renderCursorOrSelection() {
359
+ if (!this.isEditing) {
360
+ return;
361
+ }
362
+ const ctx = this.clearContextTop(true);
363
+ if (!ctx) {
364
+ return;
365
+ }
366
+ const boundaries = this._getCursorBoundaries();
367
+ if (this.selectionStart === this.selectionEnd) {
368
+ this.renderCursor(ctx, boundaries);
369
+ } else {
370
+ this.renderSelection(ctx, boundaries);
371
+ }
372
+ this.canvas!.contextTopDirty = true;
373
+ ctx.restore();
374
+ }
375
+
376
+ /**
377
+ * Returns cursor boundaries (left, top, leftOffset, topOffset)
378
+ * left/top are left/top of entire text box
379
+ * leftOffset/topOffset are offset from that left/top point of a text box
380
+ * @private
381
+ * @param {number} [index] index from start
382
+ * @param {boolean} [skipCaching]
383
+ */
384
+ _getCursorBoundaries(
385
+ index: number = this.selectionStart,
386
+ skipCaching?: boolean
387
+ ): CursorBoundaries {
388
+ const left = this._getLeftOffset(),
389
+ top = this._getTopOffset(),
390
+ offsets = this._getCursorBoundariesOffsets(index, skipCaching);
391
+ return {
392
+ left: left,
393
+ top: top,
394
+ leftOffset: offsets.left,
395
+ topOffset: offsets.top,
396
+ };
397
+ }
398
+
399
+ /**
400
+ * Caches and returns cursor left/top offset relative to instance's center point
401
+ * @private
402
+ * @param {number} index index from start
403
+ * @param {boolean} [skipCaching]
404
+ */
405
+ _getCursorBoundariesOffsets(
406
+ index: number,
407
+ skipCaching?: boolean
408
+ ): { left: number; top: number } {
409
+ if (skipCaching) {
410
+ return this.__getCursorBoundariesOffsets(index);
411
+ }
412
+ if (this.cursorOffsetCache && 'top' in this.cursorOffsetCache) {
413
+ return this.cursorOffsetCache as { left: number; top: number };
414
+ }
415
+ return (this.cursorOffsetCache = this.__getCursorBoundariesOffsets(index));
416
+ }
417
+
418
+ /**
419
+ * Calculates cursor left/top offset relative to instance's center point
420
+ * @private
421
+ * @param {number} index index from start
422
+ */
423
+ __getCursorBoundariesOffsets(index: number) {
424
+ let topOffset = 0,
425
+ leftOffset = 0;
426
+ const { charIndex, lineIndex } = this.get2DCursorLocation(index);
427
+
428
+ for (let i = 0; i < lineIndex; i++) {
429
+ topOffset += this.getHeightOfLine(i);
430
+ }
431
+ const lineLeftOffset = this._getLineLeftOffset(lineIndex);
432
+ const bound = this.__charBounds[lineIndex][charIndex];
433
+ bound && (leftOffset = bound.left);
434
+ if (
435
+ this.charSpacing !== 0 &&
436
+ charIndex === this._textLines[lineIndex].length
437
+ ) {
438
+ leftOffset -= this._getWidthOfCharSpacing();
439
+ }
440
+ const boundaries = {
441
+ top: topOffset,
442
+ left: lineLeftOffset + (leftOffset > 0 ? leftOffset : 0),
443
+ };
444
+ if (this.direction === 'rtl') {
445
+ if (
446
+ this.textAlign === 'right' ||
447
+ this.textAlign === 'justify' ||
448
+ this.textAlign === 'justify-right'
449
+ ) {
450
+ boundaries.left *= -1;
451
+ } else if (
452
+ this.textAlign === 'left' ||
453
+ this.textAlign === 'justify-left'
454
+ ) {
455
+ boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);
456
+ } else if (
457
+ this.textAlign === 'center' ||
458
+ this.textAlign === 'justify-center'
459
+ ) {
460
+ boundaries.left = lineLeftOffset - (leftOffset > 0 ? leftOffset : 0);
461
+ }
462
+ }
463
+ return boundaries;
464
+ }
465
+
466
+ /**
467
+ * Renders cursor on context Top, outside the animation cycle, on request
468
+ * Used for the drag/drop effect.
469
+ * If contextTop is not available, do nothing.
470
+ */
471
+ renderCursorAt(selectionStart: number) {
472
+ const boundaries = this._getCursorBoundaries(selectionStart, true);
473
+ this._renderCursor(this.canvas!.contextTop, boundaries, selectionStart);
474
+ }
475
+
476
+ /**
477
+ * Renders cursor
478
+ * @param {Object} boundaries
479
+ * @param {CanvasRenderingContext2D} ctx transformed context to draw on
480
+ */
481
+ renderCursor(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {
482
+ this._renderCursor(ctx, boundaries, this.selectionStart);
483
+ }
484
+
485
+ _renderCursor(
486
+ ctx: CanvasRenderingContext2D,
487
+ boundaries: CursorBoundaries,
488
+ selectionStart: number
489
+ ) {
490
+ const cursorLocation = this.get2DCursorLocation(selectionStart),
491
+ lineIndex = cursorLocation.lineIndex,
492
+ charIndex =
493
+ cursorLocation.charIndex > 0 ? cursorLocation.charIndex - 1 : 0,
494
+ charHeight = this.getValueOfPropertyAt(lineIndex, charIndex, 'fontSize'),
495
+ multiplier = this.scaleX * this.canvas!.getZoom(),
496
+ cursorWidth = this.cursorWidth / multiplier,
497
+ dy = this.getValueOfPropertyAt(lineIndex, charIndex, 'deltaY'),
498
+ topOffset =
499
+ boundaries.topOffset +
500
+ ((1 - this._fontSizeFraction) * this.getHeightOfLine(lineIndex)) /
501
+ this.lineHeight -
502
+ charHeight * (1 - this._fontSizeFraction);
503
+
504
+ if (this.inCompositionMode) {
505
+ // TODO: investigate why there isn't a return inside the if,
506
+ // and why can't happen at the top of the function
507
+ this.renderSelection(ctx, boundaries);
508
+ }
509
+ ctx.fillStyle =
510
+ this.cursorColor ||
511
+ this.getValueOfPropertyAt(lineIndex, charIndex, 'fill');
512
+ ctx.globalAlpha = this._currentCursorOpacity;
513
+ ctx.fillRect(
514
+ boundaries.left + boundaries.leftOffset - cursorWidth / 2,
515
+ topOffset + boundaries.top + dy,
516
+ cursorWidth,
517
+ charHeight
518
+ );
519
+ }
520
+
521
+ /**
522
+ * Renders text selection
523
+ * @param {Object} boundaries Object with left/top/leftOffset/topOffset
524
+ * @param {CanvasRenderingContext2D} ctx transformed context to draw on
525
+ */
526
+ renderSelection(ctx: CanvasRenderingContext2D, boundaries: CursorBoundaries) {
527
+ const selection = {
528
+ selectionStart: this.inCompositionMode
529
+ ? this.hiddenTextarea!.selectionStart
530
+ : this.selectionStart,
531
+ selectionEnd: this.inCompositionMode
532
+ ? this.hiddenTextarea!.selectionEnd
533
+ : this.selectionEnd,
534
+ };
535
+ this._renderSelection(ctx, selection, boundaries);
536
+ }
537
+
538
+ /**
539
+ * Renders drag start text selection
540
+ */
541
+ renderDragSourceEffect(this: AssertKeys<this, 'canvas'>) {
542
+ const dragStartSelection =
543
+ this.draggableTextDelegate.getDragStartSelection()!;
544
+ this._renderSelection(
545
+ this.canvas.contextTop,
546
+ dragStartSelection,
547
+ this._getCursorBoundaries(dragStartSelection.selectionStart, true)
548
+ );
549
+ }
550
+
551
+ renderDropTargetEffect(e: DragEvent) {
552
+ const dragSelection = this.getSelectionStartFromPointer(e);
553
+ this.renderCursorAt(dragSelection);
554
+ }
555
+
556
+ /**
557
+ * Renders text selection
558
+ * @private
559
+ * @param {{ selectionStart: number, selectionEnd: number }} selection
560
+ * @param {Object} boundaries Object with left/top/leftOffset/topOffset
561
+ * @param {CanvasRenderingContext2D} ctx transformed context to draw on
562
+ */
563
+ _renderSelection(
564
+ ctx: CanvasRenderingContext2D,
565
+ selection: { selectionStart: number; selectionEnd: number },
566
+ boundaries: CursorBoundaries
567
+ ) {
568
+ const selectionStart = selection.selectionStart,
569
+ selectionEnd = selection.selectionEnd,
570
+ isJustify = this.textAlign.indexOf('justify') !== -1,
571
+ start = this.get2DCursorLocation(selectionStart),
572
+ end = this.get2DCursorLocation(selectionEnd),
573
+ startLine = start.lineIndex,
574
+ endLine = end.lineIndex,
575
+ startChar = start.charIndex < 0 ? 0 : start.charIndex,
576
+ endChar = end.charIndex < 0 ? 0 : end.charIndex;
577
+
578
+ for (let i = startLine; i <= endLine; i++) {
579
+ const lineOffset = this._getLineLeftOffset(i) || 0;
580
+ let lineHeight = this.getHeightOfLine(i),
581
+ realLineHeight = 0,
582
+ boxStart = 0,
583
+ boxEnd = 0;
584
+
585
+ if (i === startLine) {
586
+ boxStart = this.__charBounds[startLine][startChar].left;
587
+ }
588
+ if (i >= startLine && i < endLine) {
589
+ boxEnd =
590
+ isJustify && !this.isEndOfWrapping(i)
591
+ ? this.width
592
+ : this.getLineWidth(i) || 5; // WTF is this 5?
593
+ } else if (i === endLine) {
594
+ if (endChar === 0) {
595
+ boxEnd = this.__charBounds[endLine][endChar].left;
596
+ } else {
597
+ const charSpacing = this._getWidthOfCharSpacing();
598
+ boxEnd =
599
+ this.__charBounds[endLine][endChar - 1].left +
600
+ this.__charBounds[endLine][endChar - 1].width -
601
+ charSpacing;
602
+ }
603
+ }
604
+ realLineHeight = lineHeight;
605
+ if (this.lineHeight < 1 || (i === endLine && this.lineHeight > 1)) {
606
+ lineHeight /= this.lineHeight;
607
+ }
608
+ let drawStart = boundaries.left + lineOffset + boxStart,
609
+ drawHeight = lineHeight,
610
+ extraTop = 0;
611
+ const drawWidth = boxEnd - boxStart;
612
+ if (this.inCompositionMode) {
613
+ ctx.fillStyle = this.compositionColor || 'black';
614
+ drawHeight = 1;
615
+ extraTop = lineHeight;
616
+ } else {
617
+ ctx.fillStyle = this.selectionColor;
618
+ }
619
+ if (this.direction === 'rtl') {
620
+ if (
621
+ this.textAlign === 'right' ||
622
+ this.textAlign === 'justify' ||
623
+ this.textAlign === 'justify-right'
624
+ ) {
625
+ drawStart = this.width - drawStart - drawWidth;
626
+ } else if (
627
+ this.textAlign === 'left' ||
628
+ this.textAlign === 'justify-left'
629
+ ) {
630
+ drawStart = boundaries.left + lineOffset - boxEnd;
631
+ } else if (
632
+ this.textAlign === 'center' ||
633
+ this.textAlign === 'justify-center'
634
+ ) {
635
+ drawStart = boundaries.left + lineOffset - boxEnd;
636
+ }
637
+ }
638
+ ctx.fillRect(
639
+ drawStart,
640
+ boundaries.top + boundaries.topOffset + extraTop,
641
+ drawWidth,
642
+ drawHeight
643
+ );
644
+ boundaries.topOffset += realLineHeight;
645
+ }
646
+ }
647
+
648
+ /**
649
+ * High level function to know the height of the cursor.
650
+ * the currentChar is the one that precedes the cursor
651
+ * Returns fontSize of char at the current cursor
652
+ * Unused from the library, is for the end user
653
+ * @return {Number} Character font size
654
+ */
655
+ getCurrentCharFontSize(): number {
656
+ const cp = this._getCurrentCharIndex();
657
+ return this.getValueOfPropertyAt(cp.l, cp.c, 'fontSize');
658
+ }
659
+
660
+ /**
661
+ * High level function to know the color of the cursor.
662
+ * the currentChar is the one that precedes the cursor
663
+ * Returns color (fill) of char at the current cursor
664
+ * if the text object has a pattern or gradient for filler, it will return that.
665
+ * Unused by the library, is for the end user
666
+ * @return {String | TFiller} Character color (fill)
667
+ */
668
+ getCurrentCharColor(): string | TFiller {
669
+ const cp = this._getCurrentCharIndex();
670
+ return this.getValueOfPropertyAt(cp.l, cp.c, 'fill');
671
+ }
672
+
673
+ /**
674
+ * Returns the cursor position for the getCurrent.. functions
675
+ * @private
676
+ */
677
+ _getCurrentCharIndex() {
678
+ const cursorPosition = this.get2DCursorLocation(this.selectionStart, true),
679
+ charIndex =
680
+ cursorPosition.charIndex > 0 ? cursorPosition.charIndex - 1 : 0;
681
+ return { l: cursorPosition.lineIndex, c: charIndex };
682
+ }
683
+
684
+ dispose() {
685
+ this._exitEditing();
686
+ this.draggableTextDelegate.dispose();
687
+ super.dispose();
688
+ }
689
+ }
690
+
691
+ classRegistry.setClass(IText);
692
+ // legacy
693
+ classRegistry.setClass(IText, 'i-text');