fabric 5.3.0 → 6.0.0-beta1

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 (533) hide show
  1. package/.babelrc +11 -0
  2. package/.babelrcAlt +19 -0
  3. package/.browserslistrc +5 -0
  4. package/.eslintrc.js +43 -0
  5. package/.eslintrc.json +38 -46
  6. package/.eslintrc_tests +12 -0
  7. package/.gitattributes +2 -0
  8. package/.prettierignore +16 -0
  9. package/.prettierrc +4 -0
  10. package/CHANGELOG.md +491 -189
  11. package/CONTRIBUTING.md +226 -58
  12. package/README.md +188 -239
  13. package/bower.json +1 -3
  14. package/dist/fabric.d.ts +1021 -0
  15. package/dist/index.cjs +28027 -0
  16. package/dist/index.cjs.map +1 -0
  17. package/dist/index.d.ts +2 -0
  18. package/dist/index.min.js +1 -0
  19. package/dist/index.mjs +27964 -0
  20. package/dist/index.mjs.map +1 -0
  21. package/dist/index.node.cjs +28092 -0
  22. package/dist/index.node.cjs.map +1 -0
  23. package/dist/index.node.d.ts +15 -0
  24. package/dist/index.node.mjs +28035 -0
  25. package/dist/index.node.mjs.map +1 -0
  26. package/dist/src/Collection.d.ts +126 -0
  27. package/dist/src/CommonMethods.d.ts +32 -0
  28. package/dist/src/EventTypeDefs.d.ts +226 -0
  29. package/dist/src/Intersection.d.ts +100 -0
  30. package/dist/src/Observable.d.ts +54 -0
  31. package/dist/src/Pattern.d.ts +104 -0
  32. package/dist/src/Point.d.ts +232 -0
  33. package/dist/src/Shadow.d.ts +87 -0
  34. package/dist/src/brushes/BaseBrush.d.ts +105 -0
  35. package/dist/src/brushes/CircleBrush.d.ts +49 -0
  36. package/dist/src/brushes/PatternBrush.d.ts +23 -0
  37. package/dist/src/brushes/PencilBrush.d.ts +92 -0
  38. package/dist/src/brushes/SprayBrush.d.ts +79 -0
  39. package/dist/src/cache.d.ts +46 -0
  40. package/dist/src/canvas/Canvas.d.ts +567 -0
  41. package/dist/src/canvas/SelectableCanvas.d.ts +723 -0
  42. package/dist/src/canvas/StaticCanvas.d.ts +751 -0
  43. package/dist/src/canvas/TextEditingManager.d.ts +17 -0
  44. package/dist/src/canvas/canvas_gestures.mixin.d.ts +2 -0
  45. package/dist/src/color/Color.d.ts +174 -0
  46. package/dist/src/color/color_map.d.ts +155 -0
  47. package/dist/src/color/constants.d.ts +22 -0
  48. package/dist/src/color/util.d.ts +12 -0
  49. package/dist/src/config.d.ts +115 -0
  50. package/dist/src/constants.d.ts +14 -0
  51. package/dist/src/controls/Control.d.ts +228 -0
  52. package/dist/src/controls/changeWidth.d.ts +13 -0
  53. package/dist/src/controls/controls.render.d.ts +29 -0
  54. package/dist/src/controls/default_controls.d.ts +50 -0
  55. package/dist/src/controls/drag.d.ts +12 -0
  56. package/dist/src/controls/polyControl.d.ts +5 -0
  57. package/dist/src/controls/rotate.d.ts +12 -0
  58. package/dist/src/controls/scale.d.ts +47 -0
  59. package/dist/src/controls/scaleSkew.d.ts +39 -0
  60. package/dist/src/controls/skew.d.ts +33 -0
  61. package/dist/src/controls/util.d.ts +41 -0
  62. package/dist/src/controls/wrapWithFireEvent.d.ts +8 -0
  63. package/dist/src/controls/wrapWithFixedAnchor.d.ts +9 -0
  64. package/dist/src/env/browser.d.ts +3 -0
  65. package/dist/src/env/index.d.ts +7 -0
  66. package/dist/src/env/node.d.ts +3 -0
  67. package/dist/src/env/types.d.ts +15 -0
  68. package/dist/src/filters/BaseFilter.d.ts +156 -0
  69. package/dist/src/filters/BlendColor.d.ts +80 -0
  70. package/dist/src/filters/BlendImage.d.ts +90 -0
  71. package/dist/src/filters/Blur.d.ts +50 -0
  72. package/dist/src/filters/Boilerplate.d.ts +46 -0
  73. package/dist/src/filters/Brightness.d.ts +46 -0
  74. package/dist/src/filters/Canvas2dFilterBackend.d.ts +27 -0
  75. package/dist/src/filters/ColorMatrix.d.ts +62 -0
  76. package/dist/src/filters/ColorMatrixFilters.d.ts +1169 -0
  77. package/dist/src/filters/Composed.d.ts +47 -0
  78. package/dist/src/filters/Contrast.d.ts +44 -0
  79. package/dist/src/filters/Convolute.d.ts +82 -0
  80. package/dist/src/filters/FilterBackend.d.ts +14 -0
  81. package/dist/src/filters/Gamma.d.ts +53 -0
  82. package/dist/src/filters/Grayscale.d.ts +45 -0
  83. package/dist/src/filters/HueRotation.d.ts +24 -0
  84. package/dist/src/filters/Invert.d.ts +54 -0
  85. package/dist/src/filters/Noise.d.ts +53 -0
  86. package/dist/src/filters/Pixelate.d.ts +43 -0
  87. package/dist/src/filters/RemoveColor.d.ts +62 -0
  88. package/dist/src/filters/Resize.d.ts +134 -0
  89. package/dist/src/filters/Saturation.d.ts +47 -0
  90. package/dist/src/filters/Vibrance.d.ts +47 -0
  91. package/dist/src/filters/WebGLFilterBackend.d.ts +126 -0
  92. package/dist/src/filters/WebGLProbe.d.ts +28 -0
  93. package/dist/src/filters/typedefs.d.ts +49 -0
  94. package/dist/src/gradient/Gradient.d.ts +149 -0
  95. package/dist/src/gradient/constants.d.ts +15 -0
  96. package/dist/src/gradient/parser/index.d.ts +4 -0
  97. package/dist/src/gradient/parser/misc.d.ts +4 -0
  98. package/dist/src/gradient/parser/parseColorStops.d.ts +6 -0
  99. package/dist/src/gradient/parser/parseCoords.d.ts +17 -0
  100. package/dist/src/gradient/typedefs.d.ts +93 -0
  101. package/dist/src/mixins/eraser_brush.mixin.d.ts +2 -0
  102. package/dist/src/mixins/stateful.mixin.d.ts +18 -0
  103. package/dist/src/parkinglot/canvas_animation.mixin.d.ts +2 -0
  104. package/dist/src/parkinglot/straighten.d.ts +2 -0
  105. package/dist/src/parser/applyViewboxTransform.d.ts +5 -0
  106. package/dist/src/parser/attributes.d.ts +6 -0
  107. package/dist/src/parser/constants.d.ts +54 -0
  108. package/dist/src/parser/doesSomeParentMatch.d.ts +2 -0
  109. package/dist/src/parser/elementById.d.ts +6 -0
  110. package/dist/src/parser/elementMatchesRule.d.ts +5 -0
  111. package/dist/src/parser/elements_parser.d.ts +3 -0
  112. package/dist/src/parser/getCSSRules.d.ts +7 -0
  113. package/dist/src/parser/getGlobalStylesForElement.d.ts +5 -0
  114. package/dist/src/parser/getGradientDefs.d.ts +7 -0
  115. package/dist/src/parser/getMultipleNodes.d.ts +2 -0
  116. package/dist/src/parser/getSvgRegex.d.ts +2 -0
  117. package/dist/src/parser/hasAncestorWithNodeName.d.ts +2 -0
  118. package/dist/src/parser/loadSVGFromString.d.ts +12 -0
  119. package/dist/src/parser/loadSVGFromURL.d.ts +13 -0
  120. package/dist/src/parser/normalizeAttr.d.ts +2 -0
  121. package/dist/src/parser/normalizeValue.d.ts +2 -0
  122. package/dist/src/parser/parseAttributes.d.ts +9 -0
  123. package/dist/src/parser/parseElements.d.ts +11 -0
  124. package/dist/src/parser/parseFontDeclaration.d.ts +10 -0
  125. package/dist/src/parser/parsePointsAttribute.d.ts +12 -0
  126. package/dist/src/parser/parseSVGDocument.d.ts +15 -0
  127. package/dist/src/parser/parseStyleAttribute.d.ts +9 -0
  128. package/dist/src/parser/parseStyleObject.d.ts +2 -0
  129. package/dist/src/parser/parseStyleString.d.ts +2 -0
  130. package/dist/src/parser/parseTransformAttribute.d.ts +10 -0
  131. package/dist/src/parser/parseUseDirectives.d.ts +2 -0
  132. package/dist/src/parser/percent.d.ts +9 -0
  133. package/dist/src/parser/recursivelyParseGradientsXlink.d.ts +2 -0
  134. package/dist/src/parser/rotateMatrix.d.ts +2 -0
  135. package/dist/src/parser/scaleMatrix.d.ts +2 -0
  136. package/dist/src/parser/selectorMatches.d.ts +2 -0
  137. package/dist/src/parser/setStrokeFillOpacity.d.ts +6 -0
  138. package/dist/src/parser/skewMatrix.d.ts +2 -0
  139. package/dist/src/parser/translateMatrix.d.ts +2 -0
  140. package/dist/src/shapes/ActiveSelection.d.ts +66 -0
  141. package/dist/src/shapes/Circle.d.ts +80 -0
  142. package/dist/src/shapes/Ellipse.d.ts +74 -0
  143. package/dist/src/shapes/Group.d.ts +381 -0
  144. package/dist/src/shapes/IText/DraggableTextDelegate.d.ts +78 -0
  145. package/dist/src/shapes/IText/IText.d.ts +322 -0
  146. package/dist/src/shapes/IText/ITextBehavior.d.ts +285 -0
  147. package/dist/src/shapes/IText/ITextClickBehavior.d.ts +81 -0
  148. package/dist/src/shapes/IText/ITextKeyBehavior.d.ts +193 -0
  149. package/dist/src/shapes/IText/constants.d.ts +13 -0
  150. package/dist/src/shapes/Image.d.ts +283 -0
  151. package/dist/src/shapes/Line.d.ts +117 -0
  152. package/dist/src/shapes/Object/AnimatableObject.d.ts +33 -0
  153. package/dist/src/shapes/Object/FabricObject.d.ts +9 -0
  154. package/dist/src/shapes/Object/FabricObjectSVGExportMixin.d.ts +74 -0
  155. package/dist/src/shapes/Object/InteractiveObject.d.ts +282 -0
  156. package/dist/src/shapes/Object/Object.d.ts +906 -0
  157. package/dist/src/shapes/Object/ObjectGeometry.d.ts +343 -0
  158. package/dist/src/shapes/Object/ObjectOrigin.d.ts +178 -0
  159. package/dist/src/shapes/Object/StackedObject.d.ts +62 -0
  160. package/dist/src/shapes/Object/defaultValues.d.ts +77 -0
  161. package/dist/src/shapes/Path.d.ts +123 -0
  162. package/dist/src/shapes/Polygon.d.ts +7 -0
  163. package/dist/src/shapes/Polyline.d.ts +130 -0
  164. package/dist/src/shapes/Rect.d.ts +62 -0
  165. package/dist/src/shapes/Text/StyledText.d.ts +118 -0
  166. package/dist/src/shapes/Text/Text.d.ts +656 -0
  167. package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +32 -0
  168. package/dist/src/shapes/Textbox.d.ts +170 -0
  169. package/dist/src/shapes/Triangle.d.ts +17 -0
  170. package/dist/src/typedefs.d.ts +93 -0
  171. package/dist/src/util/animation/AnimationBase.d.ts +54 -0
  172. package/dist/src/util/animation/AnimationFrameProvider.d.ts +8 -0
  173. package/dist/src/util/animation/AnimationRegistry.d.ts +29 -0
  174. package/dist/src/util/animation/ArrayAnimation.d.ts +10 -0
  175. package/dist/src/util/animation/ColorAnimation.d.ts +11 -0
  176. package/dist/src/util/animation/ValueAnimation.d.ts +10 -0
  177. package/dist/src/util/animation/animate.d.ts +37 -0
  178. package/dist/src/util/animation/easing.d.ts +130 -0
  179. package/dist/src/util/animation/types.d.ts +87 -0
  180. package/dist/src/util/applyMixins.d.ts +8 -0
  181. package/dist/src/util/class_registry.d.ts +14 -0
  182. package/dist/src/util/dom_event.d.ts +5 -0
  183. package/dist/src/util/dom_misc.d.ts +40 -0
  184. package/dist/src/util/dom_request.d.ts +14 -0
  185. package/dist/src/util/dom_style.d.ts +7 -0
  186. package/dist/src/util/fireEvent.d.ts +3 -0
  187. package/dist/src/util/internals/cloneDeep.d.ts +2 -0
  188. package/dist/src/util/internals/getRandomInt.d.ts +8 -0
  189. package/dist/src/util/internals/ifNaN.d.ts +8 -0
  190. package/dist/src/util/internals/index.d.ts +4 -0
  191. package/dist/src/util/internals/removeFromArray.d.ts +9 -0
  192. package/dist/src/util/internals/uid.d.ts +2 -0
  193. package/dist/src/util/lang_class.d.ts +12 -0
  194. package/dist/src/util/lang_string.d.ts +22 -0
  195. package/dist/src/util/misc/boundingBoxFromPoints.d.ts +9 -0
  196. package/dist/src/util/misc/capValue.d.ts +2 -0
  197. package/dist/src/util/misc/cos.d.ts +10 -0
  198. package/dist/src/util/misc/dom.d.ts +28 -0
  199. package/dist/src/util/misc/findScaleTo.d.ts +29 -0
  200. package/dist/src/util/misc/groupSVGElements.d.ts +9 -0
  201. package/dist/src/util/misc/isTransparent.d.ts +11 -0
  202. package/dist/src/util/misc/matrix.d.ts +92 -0
  203. package/dist/src/util/misc/mergeClipPaths.d.ts +23 -0
  204. package/dist/src/util/misc/objectEnlive.d.ts +56 -0
  205. package/dist/src/util/misc/objectTransforms.d.ts +68 -0
  206. package/dist/src/util/misc/pick.d.ts +8 -0
  207. package/dist/src/util/misc/planeChange.d.ts +84 -0
  208. package/dist/src/util/misc/projectStroke/StrokeLineCapProjections.d.ts +51 -0
  209. package/dist/src/util/misc/projectStroke/StrokeLineJoinProjections.d.ts +81 -0
  210. package/dist/src/util/misc/projectStroke/StrokeProjectionsBase.d.ts +25 -0
  211. package/dist/src/util/misc/projectStroke/index.d.ts +11 -0
  212. package/dist/src/util/misc/projectStroke/types.d.ts +23 -0
  213. package/dist/src/util/misc/radiansDegreesConversion.d.ts +14 -0
  214. package/dist/src/util/misc/resolveOrigin.d.ts +9 -0
  215. package/dist/src/util/misc/rotatePoint.d.ts +12 -0
  216. package/dist/src/util/misc/sin.d.ts +10 -0
  217. package/dist/src/util/misc/svgParsing.d.ts +53 -0
  218. package/dist/src/util/misc/textStyles.d.ts +32 -0
  219. package/dist/src/util/misc/toFixed.d.ts +8 -0
  220. package/dist/src/util/misc/vectors.d.ts +57 -0
  221. package/dist/src/util/path.d.ts +108 -0
  222. package/dist/src/util/transform_matrix_removal.d.ts +14 -0
  223. package/dist/src/util/types.d.ts +19 -0
  224. package/fabric.ts +427 -0
  225. package/index.node.ts +43 -0
  226. package/index.ts +1 -0
  227. package/package.json +90 -39
  228. package/publish.js +0 -26
  229. package/rollup.config.mjs +79 -0
  230. package/rollup.test.config.js +24 -0
  231. package/scripts/build.mjs +50 -0
  232. package/scripts/buildLock.mjs +115 -0
  233. package/scripts/buildReporter.mjs +15 -0
  234. package/scripts/buildStats.mjs +139 -0
  235. package/scripts/dirname.mjs +14 -0
  236. package/scripts/index.mjs +679 -0
  237. package/scripts/transform_files.mjs +504 -0
  238. package/src/Collection.ts +311 -0
  239. package/src/CommonMethods.ts +63 -0
  240. package/src/EventTypeDefs.ts +294 -0
  241. package/src/Intersection.ts +273 -0
  242. package/src/Observable.ts +175 -0
  243. package/src/Pattern.ts +211 -0
  244. package/src/Point.ts +388 -0
  245. package/src/Shadow.ts +215 -0
  246. package/src/brushes/{base_brush.class.js → BaseBrush.ts} +65 -42
  247. package/src/brushes/CircleBrush.ts +145 -0
  248. package/src/brushes/PatternBrush.ts +70 -0
  249. package/src/brushes/PencilBrush.ts +300 -0
  250. package/src/brushes/SprayBrush.ts +219 -0
  251. package/src/cache.ts +89 -0
  252. package/src/canvas/Canvas.ts +1672 -0
  253. package/src/canvas/SelectableCanvas.ts +1636 -0
  254. package/src/canvas/StaticCanvas.ts +1709 -0
  255. package/src/canvas/TextEditingManager.ts +48 -0
  256. package/src/canvas/canvas_gestures.mixin.ts +207 -0
  257. package/src/color/Color.ts +404 -0
  258. package/src/color/color_map.ts +154 -0
  259. package/src/color/constants.ts +26 -0
  260. package/src/color/util.ts +32 -0
  261. package/src/config.ts +159 -0
  262. package/src/constants.ts +19 -0
  263. package/src/controls/Control.ts +377 -0
  264. package/src/controls/changeWidth.ts +52 -0
  265. package/src/controls/controls.render.ts +138 -0
  266. package/src/controls/default_controls.ts +132 -0
  267. package/src/controls/drag.ts +31 -0
  268. package/src/controls/polyControl.ts +135 -0
  269. package/src/controls/rotate.ts +87 -0
  270. package/src/controls/scale.ts +277 -0
  271. package/src/controls/scaleSkew.ts +92 -0
  272. package/src/controls/skew.ts +242 -0
  273. package/src/controls/util.ts +154 -0
  274. package/src/controls/wrapWithFireEvent.ts +25 -0
  275. package/src/controls/wrapWithFixedAnchor.ts +20 -0
  276. package/src/env/browser.ts +28 -0
  277. package/src/env/index.ts +19 -0
  278. package/src/env/node.ts +52 -0
  279. package/src/env/types.ts +15 -0
  280. package/src/filters/{base_filter.class.js → BaseFilter.ts} +201 -149
  281. package/src/filters/BlendColor.ts +258 -0
  282. package/src/filters/BlendImage.ts +254 -0
  283. package/src/filters/Blur.ts +202 -0
  284. package/src/filters/Boilerplate.ts +91 -0
  285. package/src/filters/Brightness.ts +93 -0
  286. package/src/filters/Canvas2dFilterBackend.ts +65 -0
  287. package/src/filters/ColorMatrix.ts +156 -0
  288. package/src/filters/ColorMatrixFilters.ts +106 -0
  289. package/src/filters/Composed.ts +85 -0
  290. package/src/filters/Contrast.ts +94 -0
  291. package/src/filters/Convolute.ts +341 -0
  292. package/src/filters/FilterBackend.ts +32 -0
  293. package/src/filters/Gamma.ts +127 -0
  294. package/src/filters/Grayscale.ts +137 -0
  295. package/src/filters/HueRotation.ts +66 -0
  296. package/src/filters/Invert.ts +117 -0
  297. package/src/filters/Noise.ts +109 -0
  298. package/src/filters/Pixelate.ts +114 -0
  299. package/src/filters/RemoveColor.ts +148 -0
  300. package/src/filters/Resize.ts +540 -0
  301. package/src/filters/Saturation.ts +100 -0
  302. package/src/filters/Vibrance.ts +103 -0
  303. package/src/filters/WebGLFilterBackend.ts +430 -0
  304. package/src/filters/WebGLProbe.ts +62 -0
  305. package/src/filters/typedefs.ts +65 -0
  306. package/src/gradient/Gradient.ts +401 -0
  307. package/src/gradient/constants.ts +12 -0
  308. package/src/gradient/parser/index.ts +3 -0
  309. package/src/gradient/parser/misc.ts +13 -0
  310. package/src/gradient/parser/parseColorStops.ts +55 -0
  311. package/src/gradient/parser/parseCoords.ts +73 -0
  312. package/src/gradient/typedefs.ts +104 -0
  313. package/src/mixins/{eraser_brush.mixin.js → eraser_brush.mixin.ts} +350 -239
  314. package/src/mixins/stateful.mixin.ts +104 -0
  315. package/src/parkinglot/canvas_animation.mixin.ts +121 -0
  316. package/src/parkinglot/straighten.ts +58 -0
  317. package/src/parser/applyViewboxTransform.ts +162 -0
  318. package/src/parser/attributes.ts +25 -0
  319. package/src/parser/constants.ts +118 -0
  320. package/src/parser/doesSomeParentMatch.ts +19 -0
  321. package/src/parser/elementById.ts +23 -0
  322. package/src/parser/elementMatchesRule.ts +19 -0
  323. package/src/parser/elements_parser.ts +191 -0
  324. package/src/parser/getCSSRules.ts +62 -0
  325. package/src/parser/getGlobalStylesForElement.ts +19 -0
  326. package/src/parser/getGradientDefs.ts +32 -0
  327. package/src/parser/getMultipleNodes.ts +15 -0
  328. package/src/parser/getSvgRegex.ts +5 -0
  329. package/src/parser/hasAncestorWithNodeName.ts +14 -0
  330. package/src/parser/loadSVGFromString.ts +26 -0
  331. package/src/parser/loadSVGFromURL.ts +40 -0
  332. package/src/parser/normalizeAttr.ts +10 -0
  333. package/src/parser/normalizeValue.ts +63 -0
  334. package/src/parser/parseAttributes.ts +90 -0
  335. package/src/parser/parseElements.ts +28 -0
  336. package/src/parser/parseFontDeclaration.ts +44 -0
  337. package/src/parser/parsePointsAttribute.ts +36 -0
  338. package/src/parser/parseSVGDocument.ts +106 -0
  339. package/src/parser/parseStyleAttribute.ts +27 -0
  340. package/src/parser/parseStyleObject.ts +15 -0
  341. package/src/parser/parseStyleString.ts +16 -0
  342. package/src/parser/parseTransformAttribute.ts +155 -0
  343. package/src/parser/parseUseDirectives.ts +79 -0
  344. package/src/parser/percent.ts +27 -0
  345. package/src/parser/recursivelyParseGradientsXlink.ts +42 -0
  346. package/src/parser/rotateMatrix.ts +21 -0
  347. package/src/parser/scaleMatrix.ts +9 -0
  348. package/src/parser/selectorMatches.ts +25 -0
  349. package/src/parser/setStrokeFillOpacity.ts +40 -0
  350. package/src/parser/skewMatrix.ts +6 -0
  351. package/src/parser/translateMatrix.ts +8 -0
  352. package/src/shapes/ActiveSelection.ts +157 -0
  353. package/src/shapes/Circle.ts +205 -0
  354. package/src/shapes/Ellipse.ts +154 -0
  355. package/src/shapes/Group.ts +1053 -0
  356. package/src/shapes/IText/DraggableTextDelegate.ts +394 -0
  357. package/src/shapes/IText/IText.ts +666 -0
  358. package/src/shapes/IText/ITextBehavior.ts +1055 -0
  359. package/src/shapes/IText/ITextClickBehavior.ts +321 -0
  360. package/src/shapes/IText/ITextKeyBehavior.ts +683 -0
  361. package/src/shapes/IText/constants.ts +47 -0
  362. package/src/shapes/Image.ts +789 -0
  363. package/src/shapes/Line.ts +329 -0
  364. package/src/shapes/Object/AnimatableObject.ts +106 -0
  365. package/src/shapes/Object/FabricObject.ts +19 -0
  366. package/src/shapes/Object/FabricObjectSVGExportMixin.ts +277 -0
  367. package/src/shapes/Object/InteractiveObject.ts +645 -0
  368. package/src/shapes/Object/Object.ts +1896 -0
  369. package/src/shapes/Object/ObjectGeometry.ts +830 -0
  370. package/src/shapes/Object/ObjectOrigin.ts +354 -0
  371. package/src/shapes/Object/StackedObject.ts +191 -0
  372. package/src/shapes/Object/defaultValues.ts +112 -0
  373. package/src/shapes/Path.ts +395 -0
  374. package/src/shapes/Polygon.ts +19 -0
  375. package/src/shapes/Polyline.ts +333 -0
  376. package/src/shapes/Rect.ts +199 -0
  377. package/src/shapes/Text/StyledText.ts +319 -0
  378. package/src/shapes/Text/Text.ts +1948 -0
  379. package/src/shapes/Text/TextSVGExportMixin.ts +288 -0
  380. package/src/shapes/Textbox.ts +471 -0
  381. package/src/shapes/Triangle.ts +45 -0
  382. package/src/typedefs.ts +119 -0
  383. package/src/util/animation/AnimationBase.ts +166 -0
  384. package/src/util/animation/AnimationFrameProvider.ts +28 -0
  385. package/src/util/animation/AnimationRegistry.ts +58 -0
  386. package/src/util/animation/ArrayAnimation.ts +27 -0
  387. package/src/util/animation/ColorAnimation.ts +74 -0
  388. package/src/util/animation/ValueAnimation.ts +29 -0
  389. package/src/util/animation/animate.ts +74 -0
  390. package/src/util/animation/easing.ts +327 -0
  391. package/src/util/animation/types.ts +136 -0
  392. package/src/util/applyMixins.ts +22 -0
  393. package/src/util/class_registry.ts +54 -0
  394. package/src/util/dom_event.ts +28 -0
  395. package/src/util/dom_misc.ts +138 -0
  396. package/src/util/dom_request.ts +64 -0
  397. package/src/util/dom_style.ts +20 -0
  398. package/src/util/fireEvent.ts +15 -0
  399. package/src/util/internals/cloneDeep.ts +2 -0
  400. package/src/util/internals/getRandomInt.ts +8 -0
  401. package/src/util/internals/ifNaN.ts +9 -0
  402. package/src/util/internals/index.ts +3 -0
  403. package/src/util/internals/removeFromArray.ts +14 -0
  404. package/src/util/internals/uid.ts +3 -0
  405. package/src/util/lang_class.ts +90 -0
  406. package/src/util/lang_string.ts +79 -0
  407. package/src/util/misc/boundingBoxFromPoints.ts +37 -0
  408. package/src/util/misc/capValue.ts +2 -0
  409. package/src/util/misc/cos.ts +24 -0
  410. package/src/util/misc/dom.ts +50 -0
  411. package/src/util/misc/findScaleTo.ts +44 -0
  412. package/src/util/misc/groupSVGElements.ts +15 -0
  413. package/src/util/misc/isTransparent.ts +51 -0
  414. package/src/util/misc/matrix.ts +207 -0
  415. package/src/util/misc/mergeClipPaths.ts +40 -0
  416. package/src/util/misc/objectEnlive.ts +189 -0
  417. package/src/util/misc/objectTransforms.ts +129 -0
  418. package/src/util/misc/pick.ts +17 -0
  419. package/src/util/misc/planeChange.ts +136 -0
  420. package/src/util/misc/projectStroke/StrokeLineCapProjections.ts +112 -0
  421. package/src/util/misc/projectStroke/StrokeLineJoinProjections.ts +231 -0
  422. package/src/util/misc/projectStroke/StrokeProjectionsBase.ts +75 -0
  423. package/src/util/misc/projectStroke/index.ts +53 -0
  424. package/src/util/misc/projectStroke/types.ts +24 -0
  425. package/src/util/misc/radiansDegreesConversion.ts +18 -0
  426. package/src/util/misc/resolveOrigin.ts +22 -0
  427. package/src/util/misc/rotatePoint.ts +15 -0
  428. package/src/util/misc/sin.ts +26 -0
  429. package/src/util/misc/svgParsing.ts +181 -0
  430. package/src/util/misc/textStyles.ts +133 -0
  431. package/src/util/misc/toFixed.ts +8 -0
  432. package/src/util/misc/vectors.ts +82 -0
  433. package/src/util/path.ts +941 -0
  434. package/src/util/transform_matrix_removal.ts +60 -0
  435. package/src/util/types.ts +78 -0
  436. package/tsconfig.json +106 -0
  437. package/HEADER.js +0 -203
  438. package/build.js +0 -287
  439. package/dist/fabric.js +0 -31187
  440. package/dist/fabric.min.js +0 -1
  441. package/old-travis-reference.yml +0 -97
  442. package/src/brushes/circle_brush.class.js +0 -144
  443. package/src/brushes/pattern_brush.class.js +0 -61
  444. package/src/brushes/pencil_brush.class.js +0 -310
  445. package/src/brushes/spray_brush.class.js +0 -219
  446. package/src/canvas.class.js +0 -1312
  447. package/src/color.class.js +0 -636
  448. package/src/control.class.js +0 -339
  449. package/src/controls.actions.js +0 -740
  450. package/src/controls.render.js +0 -99
  451. package/src/elements_parser.js +0 -152
  452. package/src/filters/2d_backend.class.js +0 -65
  453. package/src/filters/blendcolor_filter.class.js +0 -251
  454. package/src/filters/blendimage_filter.class.js +0 -247
  455. package/src/filters/blur_filter.class.js +0 -217
  456. package/src/filters/brightness_filter.class.js +0 -113
  457. package/src/filters/colormatrix_filter.class.js +0 -159
  458. package/src/filters/composed_filter.class.js +0 -72
  459. package/src/filters/contrast_filter.class.js +0 -113
  460. package/src/filters/convolute_filter.class.js +0 -352
  461. package/src/filters/filter_boilerplate.js +0 -111
  462. package/src/filters/filter_generator.js +0 -85
  463. package/src/filters/gamma_filter.class.js +0 -136
  464. package/src/filters/grayscale_filter.class.js +0 -154
  465. package/src/filters/hue_rotation.class.js +0 -107
  466. package/src/filters/invert_filter.class.js +0 -111
  467. package/src/filters/noise_filter.class.js +0 -134
  468. package/src/filters/pixelate_filter.class.js +0 -137
  469. package/src/filters/removecolor_filter.class.js +0 -173
  470. package/src/filters/resize_filter.class.js +0 -490
  471. package/src/filters/saturate_filter.class.js +0 -119
  472. package/src/filters/vibrance_filter.class.js +0 -122
  473. package/src/filters/webgl_backend.class.js +0 -396
  474. package/src/globalFabric.js +0 -4
  475. package/src/gradient.class.js +0 -490
  476. package/src/intersection.class.js +0 -172
  477. package/src/log.js +0 -11
  478. package/src/mixins/animation.mixin.js +0 -231
  479. package/src/mixins/canvas_dataurl_exporter.mixin.js +0 -97
  480. package/src/mixins/canvas_events.mixin.js +0 -974
  481. package/src/mixins/canvas_gestures.mixin.js +0 -149
  482. package/src/mixins/canvas_grouping.mixin.js +0 -177
  483. package/src/mixins/canvas_serialization.mixin.js +0 -228
  484. package/src/mixins/collection.mixin.js +0 -170
  485. package/src/mixins/default_controls.js +0 -114
  486. package/src/mixins/itext.svg_export.js +0 -241
  487. package/src/mixins/itext_behavior.mixin.js +0 -940
  488. package/src/mixins/itext_click_behavior.mixin.js +0 -278
  489. package/src/mixins/itext_key_behavior.mixin.js +0 -694
  490. package/src/mixins/object.svg_export.js +0 -258
  491. package/src/mixins/object_geometry.mixin.js +0 -683
  492. package/src/mixins/object_interactivity.mixin.js +0 -314
  493. package/src/mixins/object_origin.mixin.js +0 -255
  494. package/src/mixins/object_stacking.mixin.js +0 -80
  495. package/src/mixins/object_straightening.mixin.js +0 -80
  496. package/src/mixins/observable.mixin.js +0 -141
  497. package/src/mixins/shared_methods.mixin.js +0 -94
  498. package/src/mixins/stateful.mixin.js +0 -107
  499. package/src/mixins/text_style.mixin.js +0 -324
  500. package/src/parser.js +0 -1090
  501. package/src/pattern.class.js +0 -189
  502. package/src/point.class.js +0 -337
  503. package/src/shadow.class.js +0 -195
  504. package/src/shapes/active_selection.class.js +0 -155
  505. package/src/shapes/circle.class.js +0 -210
  506. package/src/shapes/ellipse.class.js +0 -181
  507. package/src/shapes/group.class.js +0 -593
  508. package/src/shapes/image.class.js +0 -764
  509. package/src/shapes/itext.class.js +0 -526
  510. package/src/shapes/line.class.js +0 -324
  511. package/src/shapes/object.class.js +0 -2008
  512. package/src/shapes/path.class.js +0 -384
  513. package/src/shapes/polygon.class.js +0 -81
  514. package/src/shapes/polyline.class.js +0 -268
  515. package/src/shapes/rect.class.js +0 -187
  516. package/src/shapes/text.class.js +0 -1696
  517. package/src/shapes/textbox.class.js +0 -461
  518. package/src/shapes/triangle.class.js +0 -93
  519. package/src/static_canvas.class.js +0 -1881
  520. package/src/util/anim_ease.js +0 -398
  521. package/src/util/animate.js +0 -254
  522. package/src/util/animate_color.js +0 -74
  523. package/src/util/dom_event.js +0 -50
  524. package/src/util/dom_misc.js +0 -300
  525. package/src/util/dom_request.js +0 -54
  526. package/src/util/dom_style.js +0 -70
  527. package/src/util/lang_array.js +0 -94
  528. package/src/util/lang_class.js +0 -115
  529. package/src/util/lang_object.js +0 -75
  530. package/src/util/lang_string.js +0 -110
  531. package/src/util/misc.js +0 -1330
  532. package/src/util/named_accessors.mixin.js +0 -428
  533. package/src/util/path.js +0 -829
@@ -0,0 +1,26 @@
1
+ import type { TRadian } from '../../typedefs';
2
+ import { halfPI } from '../../constants';
3
+
4
+ /**
5
+ * Calculate the cos of an angle, avoiding returning floats for known results
6
+ * This function is here just to avoid getting 0.999999999999999 when dealing
7
+ * with numbers that are really 1 or 0.
8
+ * @param {TRadian} angle the angle
9
+ * @return {Number} the sin value for angle.
10
+ */
11
+ export const sin = (angle: TRadian): number => {
12
+ if (angle === 0) {
13
+ return 0;
14
+ }
15
+ const angleSlice = angle / halfPI;
16
+ const value = Math.sign(angle);
17
+ switch (angleSlice) {
18
+ case 1:
19
+ return value;
20
+ case 2:
21
+ return 0;
22
+ case 3:
23
+ return -value;
24
+ }
25
+ return Math.sin(angle);
26
+ };
@@ -0,0 +1,181 @@
1
+ import { Color } from '../../color/Color';
2
+ import { config } from '../../config';
3
+ import { DEFAULT_SVG_FONT_SIZE } from '../../constants';
4
+ import {
5
+ SupportedSVGUnit,
6
+ SVGElementName,
7
+ TBBox,
8
+ TMat2D,
9
+ } from '../../typedefs';
10
+ import { toFixed } from './toFixed';
11
+ /**
12
+ * Returns array of attributes for given svg that fabric parses
13
+ * @param {SVGElementName} type Type of svg element (eg. 'circle')
14
+ * @return {Array} string names of supported attributes
15
+ */
16
+ export const getSvgAttributes = (type: SVGElementName) => {
17
+ const commonAttributes = ['instantiated_by_use', 'style', 'id', 'class'];
18
+ switch (type) {
19
+ case SVGElementName.linearGradient:
20
+ return commonAttributes.concat([
21
+ 'x1',
22
+ 'y1',
23
+ 'x2',
24
+ 'y2',
25
+ 'gradientUnits',
26
+ 'gradientTransform',
27
+ ]);
28
+ case 'radialGradient':
29
+ return commonAttributes.concat([
30
+ 'gradientUnits',
31
+ 'gradientTransform',
32
+ 'cx',
33
+ 'cy',
34
+ 'r',
35
+ 'fx',
36
+ 'fy',
37
+ 'fr',
38
+ ]);
39
+ case 'stop':
40
+ return commonAttributes.concat(['offset', 'stop-color', 'stop-opacity']);
41
+ }
42
+ return commonAttributes;
43
+ };
44
+
45
+ /**
46
+ * Converts from attribute value to pixel value if applicable.
47
+ * Returns converted pixels or original value not converted.
48
+ * @param {string} value number to operate on
49
+ * @param {number} fontSize
50
+ * @return {number}
51
+ */
52
+ export const parseUnit = (value: string, fontSize: number) => {
53
+ const unit = /\D{0,2}$/.exec(value),
54
+ number = parseFloat(value);
55
+ if (!fontSize) {
56
+ fontSize = DEFAULT_SVG_FONT_SIZE;
57
+ }
58
+ const dpi = config.DPI;
59
+ switch (unit?.[0]) {
60
+ case SupportedSVGUnit.mm:
61
+ return (number * dpi) / 25.4;
62
+
63
+ case SupportedSVGUnit.cm:
64
+ return (number * dpi) / 2.54;
65
+
66
+ case SupportedSVGUnit.in:
67
+ return number * dpi;
68
+
69
+ case SupportedSVGUnit.pt:
70
+ return (number * dpi) / 72; // or * 4 / 3
71
+
72
+ case SupportedSVGUnit.pc:
73
+ return ((number * dpi) / 72) * 12; // or * 16
74
+
75
+ case SupportedSVGUnit.em:
76
+ return number * fontSize;
77
+
78
+ default:
79
+ return number;
80
+ }
81
+ };
82
+
83
+ export const enum MeetOrSlice {
84
+ meet = 'meet',
85
+ slice = 'slice',
86
+ }
87
+
88
+ export const enum MinMidMax {
89
+ min = 'Min',
90
+ mid = 'Mid',
91
+ max = 'Max',
92
+ none = 'none',
93
+ }
94
+
95
+ export type TPreserveArParsed = {
96
+ meetOrSlice: MeetOrSlice;
97
+ alignX: MinMidMax;
98
+ alignY: MinMidMax;
99
+ };
100
+
101
+ // align can be either none or undefined or a combination of mid/max
102
+ const parseAlign = (align: string): MinMidMax[] => {
103
+ //divide align in alignX and alignY
104
+ if (align && align !== MinMidMax.none) {
105
+ return [align.slice(1, 4) as MinMidMax, align.slice(5, 8) as MinMidMax];
106
+ } else if (align === MinMidMax.none) {
107
+ return [align, align];
108
+ }
109
+ return [MinMidMax.mid, MinMidMax.mid];
110
+ };
111
+
112
+ /**
113
+ * Parse preserveAspectRatio attribute from element
114
+ * https://developer.mozilla.org/en-US/docs/Web/SVG/Attribute/preserveAspectRatio
115
+ * @param {string} attribute to be parsed
116
+ * @return {Object} an object containing align and meetOrSlice attribute
117
+ */
118
+ export const parsePreserveAspectRatioAttribute = (
119
+ attribute: string
120
+ ): TPreserveArParsed => {
121
+ const [firstPart, secondPart] = attribute.trim().split(' ') as [
122
+ MinMidMax,
123
+ MeetOrSlice | undefined
124
+ ];
125
+ const [alignX, alignY] = parseAlign(firstPart);
126
+ return {
127
+ meetOrSlice: secondPart || MeetOrSlice.meet,
128
+ alignX,
129
+ alignY,
130
+ };
131
+ };
132
+
133
+ /**
134
+ * given an array of 6 number returns something like `"matrix(...numbers)"`
135
+ * @param {TMat2D} transform an array with 6 numbers
136
+ * @return {String} transform matrix for svg
137
+ */
138
+ export const matrixToSVG = (transform: TMat2D) =>
139
+ 'matrix(' +
140
+ transform
141
+ .map((value) => toFixed(value, config.NUM_FRACTION_DIGITS))
142
+ .join(' ') +
143
+ ')';
144
+
145
+ /**
146
+ * Adobe Illustrator (at least CS5) is unable to render rgba()-based fill values
147
+ * we work around it by "moving" alpha channel into opacity attribute and setting fill's alpha to 1
148
+ * @param prop
149
+ * @param value
150
+ * @returns
151
+ */
152
+ export const colorPropToSVG = (prop: string, value?: any) => {
153
+ if (!value) {
154
+ return `${prop}: none; `;
155
+ } else if (value.toLive) {
156
+ return `${prop}: url(#SVGID_${value.id}); `;
157
+ } else {
158
+ const color = new Color(value),
159
+ opacity = color.getAlpha();
160
+
161
+ let str = `${prop}: ${color.toRgb()}; `;
162
+
163
+ if (opacity !== 1) {
164
+ //change the color in rgb + opacity
165
+ str += `${prop}-opacity: ${opacity.toString()}; `;
166
+ }
167
+ return str;
168
+ }
169
+ };
170
+
171
+ export const createSVGRect = (
172
+ color: string,
173
+ { left, top, width, height }: TBBox,
174
+ precision = config.NUM_FRACTION_DIGITS
175
+ ) => {
176
+ const svgColor = colorPropToSVG('fill', color);
177
+ const [x, y, w, h] = [left, top, width, height].map((value) =>
178
+ toFixed(value, precision)
179
+ );
180
+ return `<rect ${svgColor} x="${x}" y="${y}" width="${w}" height="${h}"></rect>`;
181
+ };
@@ -0,0 +1,133 @@
1
+ import type {
2
+ TextStyle,
3
+ TextStyleDeclaration,
4
+ } from '../../shapes/Text/StyledText';
5
+ import { cloneDeep } from '../internals/cloneDeep';
6
+
7
+ export type TextStyleArray = {
8
+ start: number;
9
+ end: number;
10
+ style: TextStyleDeclaration;
11
+ }[];
12
+
13
+ /**
14
+ * @param {Object} prevStyle first style to compare
15
+ * @param {Object} thisStyle second style to compare
16
+ * @param {boolean} forTextSpans whether to check overline, underline, and line-through properties
17
+ * @return {boolean} true if the style changed
18
+ */
19
+ export const hasStyleChanged = (
20
+ prevStyle: TextStyleDeclaration,
21
+ thisStyle: TextStyleDeclaration,
22
+ forTextSpans = false
23
+ ) =>
24
+ prevStyle.fill !== thisStyle.fill ||
25
+ prevStyle.stroke !== thisStyle.stroke ||
26
+ prevStyle.strokeWidth !== thisStyle.strokeWidth ||
27
+ prevStyle.fontSize !== thisStyle.fontSize ||
28
+ prevStyle.fontFamily !== thisStyle.fontFamily ||
29
+ prevStyle.fontWeight !== thisStyle.fontWeight ||
30
+ prevStyle.fontStyle !== thisStyle.fontStyle ||
31
+ prevStyle.textBackgroundColor !== thisStyle.textBackgroundColor ||
32
+ prevStyle.deltaY !== thisStyle.deltaY ||
33
+ (forTextSpans &&
34
+ (prevStyle.overline !== thisStyle.overline ||
35
+ prevStyle.underline !== thisStyle.underline ||
36
+ prevStyle.linethrough !== thisStyle.linethrough));
37
+
38
+ /**
39
+ * Returns the array form of a text object's inline styles property with styles grouped in ranges
40
+ * rather than per character. This format is less verbose, and is better suited for storage
41
+ * so it is used in serialization (not during runtime).
42
+ * @param {object} styles per character styles for a text object
43
+ * @param {String} text the text string that the styles are applied to
44
+ * @return {{start: number, end: number, style: object}[]}
45
+ */
46
+ export const stylesToArray = (
47
+ styles: TextStyle,
48
+ text: string
49
+ ): TextStyleArray => {
50
+ const textLines = text.split('\n'),
51
+ stylesArray = [];
52
+ let charIndex = -1,
53
+ prevStyle = {};
54
+ // clone style structure to prevent mutation
55
+ styles = cloneDeep(styles);
56
+
57
+ //loop through each textLine
58
+ for (let i = 0; i < textLines.length; i++) {
59
+ if (!styles[i]) {
60
+ //no styles exist for this line, so add the line's length to the charIndex total
61
+ charIndex += textLines[i].length;
62
+ continue;
63
+ }
64
+ //loop through each character of the current line
65
+ for (let c = 0; c < textLines[i].length; c++) {
66
+ charIndex++;
67
+ const thisStyle = styles[i][c];
68
+ //check if style exists for this character
69
+ if (thisStyle && Object.keys(thisStyle).length > 0) {
70
+ if (hasStyleChanged(prevStyle, thisStyle, true)) {
71
+ stylesArray.push({
72
+ start: charIndex,
73
+ end: charIndex + 1,
74
+ style: thisStyle,
75
+ });
76
+ } else {
77
+ //if style is the same as previous character, increase end index
78
+ stylesArray[stylesArray.length - 1].end++;
79
+ }
80
+ }
81
+ prevStyle = thisStyle || {};
82
+ }
83
+ }
84
+ return stylesArray;
85
+ };
86
+
87
+ /**
88
+ * Returns the object form of the styles property with styles that are assigned per
89
+ * character rather than grouped by range. This format is more verbose, and is
90
+ * only used during runtime (not for serialization/storage)
91
+ * @param {Array} styles the serialized form of a text object's styles
92
+ * @param {String} text the text string that the styles are applied to
93
+ * @return {Object}
94
+ */
95
+ export const stylesFromArray = (
96
+ styles: TextStyleArray | TextStyle,
97
+ text: string
98
+ ): TextStyle => {
99
+ if (!Array.isArray(styles)) {
100
+ // clone to prevent mutation
101
+ return cloneDeep(styles);
102
+ }
103
+ const textLines = text.split('\n'),
104
+ stylesObject = {} as Record<
105
+ string | number,
106
+ Record<string | number, Record<string, string>>
107
+ >;
108
+ let charIndex = -1,
109
+ styleIndex = 0;
110
+ //loop through each textLine
111
+ for (let i = 0; i < textLines.length; i++) {
112
+ //loop through each character of the current line
113
+ for (let c = 0; c < textLines[i].length; c++) {
114
+ charIndex++;
115
+ //check if there's a style collection that includes the current character
116
+ if (
117
+ styles[styleIndex] &&
118
+ styles[styleIndex].start <= charIndex &&
119
+ charIndex < styles[styleIndex].end
120
+ ) {
121
+ //create object for line index if it doesn't exist
122
+ stylesObject[i] = stylesObject[i] || {};
123
+ //assign a style at this character's index
124
+ stylesObject[i][c] = { ...styles[styleIndex].style };
125
+ //if character is at the end of the current style collection, move to the next
126
+ if (charIndex === styles[styleIndex].end - 1) {
127
+ styleIndex++;
128
+ }
129
+ }
130
+ }
131
+ }
132
+ return stylesObject;
133
+ };
@@ -0,0 +1,8 @@
1
+ /**
2
+ * A wrapper around Number#toFixed, which contrary to native method returns number, not string.
3
+ * @param {number|string} number number to operate on
4
+ * @param {number} fractionDigits number of fraction digits to "leave"
5
+ * @return {number}
6
+ */
7
+ export const toFixed = (number: number | string, fractionDigits: number) =>
8
+ parseFloat(Number(number).toFixed(fractionDigits));
@@ -0,0 +1,82 @@
1
+ import { IPoint, Point } from '../../Point';
2
+ import { TRadian } from '../../typedefs';
3
+
4
+ const unitVectorX = new Point(1, 0);
5
+
6
+ /**
7
+ * Rotates `vector` with `radians`
8
+ * @param {Point} vector The vector to rotate (x and y)
9
+ * @param {Number} radians The radians of the angle for the rotation
10
+ * @return {Point} The new rotated point
11
+ */
12
+ export const rotateVector = (vector: Point, radians: TRadian) =>
13
+ vector.rotate(radians);
14
+
15
+ /**
16
+ * Creates a vector from points represented as a point
17
+ *
18
+ * @param {Point} from
19
+ * @param {Point} to
20
+ * @returns {Point} vector
21
+ */
22
+ export const createVector = (from: IPoint, to: IPoint): Point =>
23
+ new Point(to).subtract(from);
24
+
25
+ /**
26
+ * return the magnitude of a vector
27
+ * @return {number}
28
+ */
29
+ export const magnitude = (point: Point) => point.distanceFrom(new Point());
30
+
31
+ /**
32
+ * Calculates the angle between 2 vectors
33
+ * @param {Point} a
34
+ * @param {Point} b
35
+ * @returns the angle in radians from `a` to `b`
36
+ */
37
+ export const calcAngleBetweenVectors = (a: Point, b: Point): TRadian => {
38
+ const dot = a.x * b.x + a.y * b.y,
39
+ det = a.x * b.y - a.y * b.x;
40
+ return Math.atan2(det, dot) as TRadian;
41
+ };
42
+
43
+ /**
44
+ * Calculates the angle between the x axis and the vector
45
+ * @param {Point} v
46
+ * @returns the angle in radians of `v`
47
+ */
48
+ export const calcVectorRotation = (v: Point) =>
49
+ calcAngleBetweenVectors(unitVectorX, v);
50
+
51
+ /**
52
+ * @param {Point} v
53
+ * @returns {Point} vector representing the unit vector pointing to the direction of `v`
54
+ */
55
+ export const getUnitVector = (v: Point): Point => v.scalarDivide(magnitude(v));
56
+
57
+ /**
58
+ * @param {Point} A
59
+ * @param {Point} B
60
+ * @param {Point} C
61
+ * @returns {{ vector: Point, angle: TRadian}} vector representing the bisector of A and A's angle
62
+ */
63
+ export const getBisector = (A: Point, B: Point, C: Point) => {
64
+ const AB = createVector(A, B),
65
+ AC = createVector(A, C),
66
+ alpha = calcAngleBetweenVectors(AB, AC);
67
+ return {
68
+ vector: getUnitVector(rotateVector(AB, alpha / 2)),
69
+ angle: alpha,
70
+ };
71
+ };
72
+
73
+ /**
74
+ * @param {Point} v
75
+ * @param {Boolean} [counterClockwise] the direction of the orthogonal vector, defaults to `true`
76
+ * @returns {Point} the unit orthogonal vector
77
+ */
78
+ export const getOrthonormalVector = (
79
+ v: Point,
80
+ counterClockwise = true
81
+ ): Point =>
82
+ getUnitVector(new Point(-v.y, v.x).scalarMultiply(counterClockwise ? 1 : -1));