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,327 @@
1
+ /**
2
+ * Easing functions
3
+ * @see {@link http://gizma.com/easing/ Easing Equations by Robert Penner}
4
+ */
5
+
6
+ import { twoMathPi, halfPI } from '../../constants';
7
+ import { TEasingFunction } from './types';
8
+
9
+ const normalize = (a: number, c: number, p: number, s: number) => {
10
+ if (a < Math.abs(c)) {
11
+ a = c;
12
+ s = p / 4;
13
+ } else {
14
+ //handle the 0/0 case:
15
+ if (c === 0 && a === 0) {
16
+ s = (p / twoMathPi) * Math.asin(1);
17
+ } else {
18
+ s = (p / twoMathPi) * Math.asin(c / a);
19
+ }
20
+ }
21
+ return { a, c, p, s };
22
+ };
23
+
24
+ const elastic = (
25
+ a: number,
26
+ s: number,
27
+ p: number,
28
+ t: number,
29
+ d: number
30
+ ): number =>
31
+ a * Math.pow(2, 10 * (t -= 1)) * Math.sin(((t * d - s) * twoMathPi) / p);
32
+
33
+ /**
34
+ * Default sinusoidal easing
35
+ */
36
+ export const defaultEasing: TEasingFunction = (t, b, c, d) =>
37
+ -c * Math.cos((t / d) * halfPI) + c + b;
38
+
39
+ /**
40
+ * Cubic easing in
41
+ */
42
+ export const easeInCubic: TEasingFunction = (t, b, c, d) =>
43
+ c * (t / d) ** 3 + b;
44
+
45
+ /**
46
+ * Cubic easing out
47
+ */
48
+ export const easeOutCubic: TEasingFunction = (t, b, c, d) =>
49
+ c * ((t / d - 1) ** 3 + 1) + b;
50
+
51
+ /**
52
+ * Cubic easing in and out
53
+ */
54
+ export const easeInOutCubic: TEasingFunction = (t, b, c, d) => {
55
+ t /= d / 2;
56
+ if (t < 1) {
57
+ return (c / 2) * t ** 3 + b;
58
+ }
59
+ return (c / 2) * ((t - 2) ** 3 + 2) + b;
60
+ };
61
+
62
+ /**
63
+ * Quartic easing in
64
+ */
65
+ export const easeInQuart: TEasingFunction = (t, b, c, d) =>
66
+ c * (t /= d) * t ** 3 + b;
67
+
68
+ /**
69
+ * Quartic easing out
70
+ */
71
+ export const easeOutQuart: TEasingFunction = (t, b, c, d) =>
72
+ -c * ((t = t / d - 1) * t ** 3 - 1) + b;
73
+
74
+ /**
75
+ * Quartic easing in and out
76
+ */
77
+ export const easeInOutQuart: TEasingFunction = (t, b, c, d) => {
78
+ t /= d / 2;
79
+ if (t < 1) {
80
+ return (c / 2) * t ** 4 + b;
81
+ }
82
+ return (-c / 2) * ((t -= 2) * t ** 3 - 2) + b;
83
+ };
84
+
85
+ /**
86
+ * Quintic easing in
87
+ */
88
+ export const easeInQuint: TEasingFunction = (t, b, c, d) =>
89
+ c * (t / d) ** 5 + b;
90
+
91
+ /**
92
+ * Quintic easing out
93
+ */
94
+ export const easeOutQuint: TEasingFunction = (t, b, c, d) =>
95
+ c * ((t / d - 1) ** 5 + 1) + b;
96
+
97
+ /**
98
+ * Quintic easing in and out
99
+ */
100
+ export const easeInOutQuint: TEasingFunction = (t, b, c, d) => {
101
+ t /= d / 2;
102
+ if (t < 1) {
103
+ return (c / 2) * t ** 5 + b;
104
+ }
105
+ return (c / 2) * ((t - 2) ** 5 + 2) + b;
106
+ };
107
+
108
+ /**
109
+ * Sinusoidal easing in
110
+ */
111
+ export const easeInSine: TEasingFunction = (t, b, c, d) =>
112
+ -c * Math.cos((t / d) * halfPI) + c + b;
113
+
114
+ /**
115
+ * Sinusoidal easing out
116
+ */
117
+ export const easeOutSine: TEasingFunction = (t, b, c, d) =>
118
+ c * Math.sin((t / d) * halfPI) + b;
119
+
120
+ /**
121
+ * Sinusoidal easing in and out
122
+ */
123
+ export const easeInOutSine: TEasingFunction = (t, b, c, d) =>
124
+ (-c / 2) * (Math.cos((Math.PI * t) / d) - 1) + b;
125
+
126
+ /**
127
+ * Exponential easing in
128
+ */
129
+ export const easeInExpo: TEasingFunction = (t, b, c, d) =>
130
+ t === 0 ? b : c * 2 ** (10 * (t / d - 1)) + b;
131
+
132
+ /**
133
+ * Exponential easing out
134
+ */
135
+ export const easeOutExpo: TEasingFunction = (t, b, c, d) =>
136
+ t === d ? b + c : c * -(2 ** ((-10 * t) / d) + 1) + b;
137
+
138
+ /**
139
+ * Exponential easing in and out
140
+ */
141
+ export const easeInOutExpo: TEasingFunction = (t, b, c, d) => {
142
+ if (t === 0) {
143
+ return b;
144
+ }
145
+ if (t === d) {
146
+ return b + c;
147
+ }
148
+ t /= d / 2;
149
+ if (t < 1) {
150
+ return (c / 2) * 2 ** (10 * (t - 1)) + b;
151
+ }
152
+ return (c / 2) * -(2 ** (-10 * --t) + 2) + b;
153
+ };
154
+
155
+ /**
156
+ * Circular easing in
157
+ */
158
+ export const easeInCirc: TEasingFunction = (t, b, c, d) =>
159
+ -c * (Math.sqrt(1 - (t /= d) * t) - 1) + b;
160
+
161
+ /**
162
+ * Circular easing out
163
+ */
164
+ export const easeOutCirc: TEasingFunction = (t, b, c, d) =>
165
+ c * Math.sqrt(1 - (t = t / d - 1) * t) + b;
166
+
167
+ /**
168
+ * Circular easing in and out
169
+ */
170
+ export const easeInOutCirc: TEasingFunction = (t, b, c, d) => {
171
+ t /= d / 2;
172
+ if (t < 1) {
173
+ return (-c / 2) * (Math.sqrt(1 - t ** 2) - 1) + b;
174
+ }
175
+ return (c / 2) * (Math.sqrt(1 - (t -= 2) * t) + 1) + b;
176
+ };
177
+
178
+ /**
179
+ * Elastic easing in
180
+ */
181
+ export const easeInElastic: TEasingFunction = (t, b, c, d) => {
182
+ const s = 1.70158,
183
+ a = c;
184
+ let p = 0;
185
+ if (t === 0) {
186
+ return b;
187
+ }
188
+ t /= d;
189
+ if (t === 1) {
190
+ return b + c;
191
+ }
192
+ if (!p) {
193
+ p = d * 0.3;
194
+ }
195
+ const { a: normA, s: normS, p: normP } = normalize(a, c, p, s);
196
+ return -elastic(normA, normS, normP, t, d) + b;
197
+ };
198
+
199
+ /**
200
+ * Elastic easing out
201
+ */
202
+ export const easeOutElastic: TEasingFunction = (t, b, c, d) => {
203
+ const s = 1.70158,
204
+ a = c;
205
+ let p = 0;
206
+ if (t === 0) {
207
+ return b;
208
+ }
209
+ t /= d;
210
+ if (t === 1) {
211
+ return b + c;
212
+ }
213
+ if (!p) {
214
+ p = d * 0.3;
215
+ }
216
+ const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);
217
+ return (
218
+ normA * 2 ** (-10 * t) * Math.sin(((t * d - normS) * twoMathPi) / normP) +
219
+ normC +
220
+ b
221
+ );
222
+ };
223
+
224
+ /**
225
+ * Elastic easing in and out
226
+ */
227
+ export const easeInOutElastic: TEasingFunction = (t, b, c, d) => {
228
+ const s = 1.70158,
229
+ a = c;
230
+ let p = 0;
231
+ if (t === 0) {
232
+ return b;
233
+ }
234
+ t /= d / 2;
235
+ if (t === 2) {
236
+ return b + c;
237
+ }
238
+ if (!p) {
239
+ p = d * (0.3 * 1.5);
240
+ }
241
+ const { a: normA, s: normS, p: normP, c: normC } = normalize(a, c, p, s);
242
+ if (t < 1) {
243
+ return -0.5 * elastic(normA, normS, normP, t, d) + b;
244
+ }
245
+ return (
246
+ normA *
247
+ Math.pow(2, -10 * (t -= 1)) *
248
+ Math.sin(((t * d - normS) * twoMathPi) / normP) *
249
+ 0.5 +
250
+ normC +
251
+ b
252
+ );
253
+ };
254
+
255
+ /**
256
+ * Backwards easing in
257
+ */
258
+ export const easeInBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>
259
+ c * (t /= d) * t * ((s + 1) * t - s) + b;
260
+
261
+ /**
262
+ * Backwards easing out
263
+ */
264
+ export const easeOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) =>
265
+ c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;
266
+
267
+ /**
268
+ * Backwards easing in and out
269
+ */
270
+ export const easeInOutBack: TEasingFunction = (t, b, c, d, s = 1.70158) => {
271
+ t /= d / 2;
272
+ if (t < 1) {
273
+ return (c / 2) * (t * t * (((s *= 1.525) + 1) * t - s)) + b;
274
+ }
275
+ return (c / 2) * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2) + b;
276
+ };
277
+
278
+ /**
279
+ * Bouncing easing out
280
+ */
281
+ export const easeOutBounce: TEasingFunction = (t, b, c, d) => {
282
+ if ((t /= d) < 1 / 2.75) {
283
+ return c * (7.5625 * t * t) + b;
284
+ } else if (t < 2 / 2.75) {
285
+ return c * (7.5625 * (t -= 1.5 / 2.75) * t + 0.75) + b;
286
+ } else if (t < 2.5 / 2.75) {
287
+ return c * (7.5625 * (t -= 2.25 / 2.75) * t + 0.9375) + b;
288
+ } else {
289
+ return c * (7.5625 * (t -= 2.625 / 2.75) * t + 0.984375) + b;
290
+ }
291
+ };
292
+
293
+ /**
294
+ * Bouncing easing in
295
+ */
296
+ export const easeInBounce: TEasingFunction = (t, b, c, d) =>
297
+ c - easeOutBounce(d - t, 0, c, d) + b;
298
+
299
+ /**
300
+ * Bouncing easing in and out
301
+ */
302
+ export const easeInOutBounce: TEasingFunction = (t, b, c, d) =>
303
+ t < d / 2
304
+ ? easeInBounce(t * 2, 0, c, d) * 0.5 + b
305
+ : easeOutBounce(t * 2 - d, 0, c, d) * 0.5 + c * 0.5 + b;
306
+
307
+ /**
308
+ * Quadratic easing in
309
+ */
310
+ export const easeInQuad: TEasingFunction = (t, b, c, d) => c * (t /= d) * t + b;
311
+
312
+ /**
313
+ * Quadratic easing out
314
+ */
315
+ export const easeOutQuad: TEasingFunction = (t, b, c, d) =>
316
+ -c * (t /= d) * (t - 2) + b;
317
+
318
+ /**
319
+ * Quadratic easing in and out
320
+ */
321
+ export const easeInOutQuad: TEasingFunction = (t, b, c, d) => {
322
+ t /= d / 2;
323
+ if (t < 1) {
324
+ return (c / 2) * t ** 2 + b;
325
+ }
326
+ return (-c / 2) * (--t * (t - 2) - 1) + b;
327
+ };
@@ -0,0 +1,136 @@
1
+ import { TColorArg } from '../../color/Color';
2
+
3
+ export type AnimationState = 'pending' | 'running' | 'completed' | 'aborted';
4
+
5
+ /**
6
+ * Callback called every frame
7
+ * @param {number | number[]} value current value of the animation.
8
+ * @param {number} valueProgress ∈ [0, 1], the current animation progress reflected on value, normalized.
9
+ * 0 is the starting value and 1 is the ending value.
10
+ * @param {number} durationProgress ∈ [0, 1], the current animation duration normalized to 1.
11
+ */
12
+ export type TOnAnimationChangeCallback<T, R = void> = (
13
+ value: T,
14
+ valueProgress: number,
15
+ durationProgress: number
16
+ ) => R;
17
+
18
+ /**
19
+ * Called on each step to determine if animation should abort
20
+ * @returns truthy if animation should abort
21
+ */
22
+ export type TAbortCallback<T> = TOnAnimationChangeCallback<T, boolean>;
23
+
24
+ /**
25
+ * An easing function used to calculate the current value
26
+ * @see {@link AnimationBase['calculate']}
27
+ *
28
+ * @param timeElapsed ms elapsed since start
29
+ * @param startValue
30
+ * @param byValue
31
+ * @param duration in ms
32
+ * @returns next value
33
+ */
34
+ export type TEasingFunction<T = unknown> = T extends number[]
35
+ ? (
36
+ timeElapsed: number,
37
+ startValue: number,
38
+ byValue: number,
39
+ duration: number,
40
+ index: number
41
+ ) => number
42
+ : (
43
+ timeElapsed: number,
44
+ startValue: number,
45
+ byValue: number,
46
+ duration: number
47
+ ) => number;
48
+
49
+ export type TAnimationBaseOptions<T> = {
50
+ /**
51
+ * Duration of the animation in ms
52
+ * @default 500
53
+ */
54
+ duration: number;
55
+
56
+ /**
57
+ * Delay to start the animation in ms
58
+ * @default 0
59
+ */
60
+ delay: number;
61
+
62
+ /**
63
+ * Easing function
64
+ * @default {defaultEasing}
65
+ */
66
+ easing: TEasingFunction<T>;
67
+
68
+ /**
69
+ * The object this animation is being performed on
70
+ */
71
+ target: unknown;
72
+ };
73
+
74
+ export type TAnimationCallbacks<T> = {
75
+ /**
76
+ * Called when the animation starts
77
+ */
78
+ onStart: VoidFunction;
79
+
80
+ /**
81
+ * Called at each frame of the animation
82
+ */
83
+ onChange: TOnAnimationChangeCallback<T>;
84
+
85
+ /**
86
+ * Called after the last frame of the animation
87
+ */
88
+ onComplete: TOnAnimationChangeCallback<T>;
89
+
90
+ /**
91
+ * Function called at each frame.
92
+ * If it returns true, abort
93
+ */
94
+ abort: TAbortCallback<T>;
95
+ };
96
+
97
+ export type TBaseAnimationOptions<T, TCallback = T, TEasing = T> = Partial<
98
+ TAnimationBaseOptions<TEasing> & TAnimationCallbacks<TCallback>
99
+ > & {
100
+ startValue: T;
101
+ byValue: T;
102
+ };
103
+
104
+ export type TAnimationOptions<T, TCallback = T, TEasing = T> = Partial<
105
+ TAnimationBaseOptions<TEasing> &
106
+ TAnimationCallbacks<TCallback> & {
107
+ /**
108
+ * Starting value(s)
109
+ * @default 0
110
+ */
111
+ startValue: T;
112
+
113
+ /**
114
+ * Ending value(s)
115
+ * @default 100
116
+ */
117
+ endValue: T;
118
+ }
119
+ >;
120
+
121
+ export type ValueAnimationOptions = TAnimationOptions<number>;
122
+
123
+ export type ArrayAnimationOptions = TAnimationOptions<number[]>;
124
+
125
+ export type ColorAnimationOptions = TAnimationOptions<
126
+ TColorArg,
127
+ string,
128
+ number[]
129
+ >;
130
+
131
+ export type AnimationOptions<T extends number | number[] | TColorArg> =
132
+ T extends TColorArg
133
+ ? ColorAnimationOptions
134
+ : T extends number[]
135
+ ? ArrayAnimationOptions
136
+ : ValueAnimationOptions;
@@ -0,0 +1,22 @@
1
+ import { Constructor } from '../typedefs';
2
+
3
+ /***
4
+ * https://www.typescriptlang.org/docs/handbook/mixins.html#alternative-pattern
5
+ */
6
+ export function applyMixins<T extends Constructor, S extends Constructor>(
7
+ derivedCtor: T,
8
+ constructors: S[]
9
+ ) {
10
+ constructors.forEach((baseCtor) => {
11
+ Object.getOwnPropertyNames(baseCtor.prototype).forEach((name) => {
12
+ name !== 'constructor' &&
13
+ Object.defineProperty(
14
+ derivedCtor.prototype,
15
+ name,
16
+ Object.getOwnPropertyDescriptor(baseCtor.prototype, name) ||
17
+ Object.create(null)
18
+ );
19
+ });
20
+ });
21
+ return derivedCtor as T & { prototype: InstanceType<T & S> };
22
+ }
@@ -0,0 +1,28 @@
1
+ //@ts-nocheck
2
+ import { Point } from '../Point';
3
+ import { getScrollLeftTop } from './dom_misc';
4
+
5
+ const touchEvents = ['touchstart', 'touchmove', 'touchend'];
6
+
7
+ function getTouchInfo(event) {
8
+ const touchProp = event.changedTouches;
9
+ if (touchProp && touchProp[0]) {
10
+ return touchProp[0];
11
+ }
12
+ return event;
13
+ }
14
+
15
+ export const getPointer = (event) => {
16
+ const element = event.target,
17
+ scroll = getScrollLeftTop(element),
18
+ _evt = getTouchInfo(event);
19
+ return new Point(_evt.clientX + scroll.left, _evt.clientY + scroll.top);
20
+ };
21
+
22
+ export const isTouchEvent = (event) =>
23
+ touchEvents.indexOf(event.type) > -1 || event.pointerType === 'touch';
24
+
25
+ export const stopEvent = (e: Event) => {
26
+ e.preventDefault();
27
+ e.stopPropagation();
28
+ };
@@ -0,0 +1,121 @@
1
+ import { getDocument } from '../env';
2
+
3
+ /**
4
+ * Wraps element with another element
5
+ * @param {HTMLElement} element Element to wrap
6
+ * @param {HTMLElement|String} wrapper Element to wrap with
7
+ * @param {Object} [attributes] Attributes to set on a wrapper
8
+ * @return {HTMLElement} wrapper
9
+ */
10
+ export function wrapElement(element: HTMLElement, wrapper: HTMLDivElement) {
11
+ if (element.parentNode) {
12
+ element.parentNode.replaceChild(wrapper, element);
13
+ }
14
+ wrapper.appendChild(element);
15
+ return wrapper;
16
+ }
17
+
18
+ /**
19
+ * Returns element scroll offsets
20
+ * @param {HTMLElement} element Element to operate on
21
+ * @return {Object} Object with left/top values
22
+ */
23
+ export function getScrollLeftTop(element: HTMLElement) {
24
+ let left = 0,
25
+ top = 0;
26
+
27
+ const docElement = getDocument().documentElement,
28
+ body = getDocument().body || {
29
+ scrollLeft: 0,
30
+ scrollTop: 0,
31
+ };
32
+ // While loop checks (and then sets element to) .parentNode OR .host
33
+ // to account for ShadowDOM. We still want to traverse up out of ShadowDOM,
34
+ // but the .parentNode of a root ShadowDOM node will always be null, instead
35
+ // it should be accessed through .host. See http://stackoverflow.com/a/24765528/4383938
36
+ // @ts-ignore
37
+ while (element && (element.parentNode || element.host)) {
38
+ // Set element to element parent, or 'host' in case of ShadowDOM
39
+ // @ts-ignore
40
+ element = element.parentNode || element.host;
41
+ // @ts-expect-error because element is typed as HTMLElement but it can go up to document
42
+ if (element === getDocument()) {
43
+ left = body.scrollLeft || docElement.scrollLeft || 0;
44
+ top = body.scrollTop || docElement.scrollTop || 0;
45
+ } else {
46
+ left += element.scrollLeft || 0;
47
+ top += element.scrollTop || 0;
48
+ }
49
+
50
+ if (element.nodeType === 1 && element.style.position === 'fixed') {
51
+ break;
52
+ }
53
+ }
54
+
55
+ return { left, top };
56
+ }
57
+
58
+ /**
59
+ * Returns offset for a given element
60
+ * @param {HTMLElement} element Element to get offset for
61
+ * @return {Object} Object with "left" and "top" properties
62
+ */
63
+ export function getElementOffset(element: HTMLElement) {
64
+ let box = { left: 0, top: 0 };
65
+ const doc = element && element.ownerDocument,
66
+ offset = { left: 0, top: 0 },
67
+ offsetAttributes = {
68
+ borderLeftWidth: 'left',
69
+ borderTopWidth: 'top',
70
+ paddingLeft: 'left',
71
+ paddingTop: 'top',
72
+ } as const;
73
+
74
+ if (!doc) {
75
+ return offset;
76
+ }
77
+ const elemStyle = getDocument().defaultView!.getComputedStyle(element, null);
78
+ for (const attr in offsetAttributes) {
79
+ // @ts-expect-error TS learn to iterate!
80
+ offset[offsetAttributes[attr]] += parseInt(elemStyle[attr], 10) || 0;
81
+ }
82
+
83
+ const docElem = doc.documentElement;
84
+ if (typeof element.getBoundingClientRect !== 'undefined') {
85
+ box = element.getBoundingClientRect();
86
+ }
87
+
88
+ const scrollLeftTop = getScrollLeftTop(element);
89
+
90
+ return {
91
+ left:
92
+ box.left + scrollLeftTop.left - (docElem.clientLeft || 0) + offset.left,
93
+ top: box.top + scrollLeftTop.top - (docElem.clientTop || 0) + offset.top,
94
+ };
95
+ }
96
+
97
+ /**
98
+ * Makes element unselectable
99
+ * @param {HTMLElement} element Element to make unselectable
100
+ * @return {HTMLElement} Element that was passed in
101
+ */
102
+ export function makeElementUnselectable(element: HTMLElement) {
103
+ if (typeof element.onselectstart !== 'undefined') {
104
+ element.onselectstart = () => false;
105
+ }
106
+ element.style.userSelect = 'none';
107
+ return element;
108
+ }
109
+
110
+ /**
111
+ * Makes element selectable
112
+ * @param {HTMLElement} element Element to make selectable
113
+ * @return {HTMLElement} Element that was passed in
114
+ */
115
+ export function makeElementSelectable(element: HTMLElement) {
116
+ if (typeof element.onselectstart !== 'undefined') {
117
+ element.onselectstart = null;
118
+ }
119
+ element.style.userSelect = '';
120
+ return element;
121
+ }
@@ -0,0 +1,64 @@
1
+ // @ts-nocheck
2
+ import { getWindow } from '../env';
3
+ import { noop } from '../constants';
4
+
5
+ /**
6
+ * Cross-browser abstraction for sending XMLHttpRequest
7
+ * @deprecated this has to go away, we can use a modern browser method to do the same.
8
+ * @param {String} url URL to send XMLHttpRequest to
9
+ * @param {Object} [options] Options object
10
+ * @param {String} [options.method="GET"]
11
+ * @param {Record<string, string>} [options.parameters] parameters to append to url in GET or in body
12
+ * @param {String} [options.body] body to send with POST or PUT request
13
+ * @param {AbortSignal} [options.signal] handle aborting, see https://developer.mozilla.org/en-US/docs/Web/API/AbortController/signal
14
+ * @param {Function} options.onComplete Callback to invoke when request is completed
15
+ * @return {XMLHttpRequest} request
16
+ */
17
+ export function request(url, options = {}) {
18
+ const method = options.method ? options.method.toUpperCase() : 'GET',
19
+ onComplete = options.onComplete || noop,
20
+ xhr = new (getWindow().XMLHttpRequest)(),
21
+ body = options.body || options.parameters,
22
+ signal = options.signal,
23
+ abort = function () {
24
+ xhr.abort();
25
+ },
26
+ removeListener = function () {
27
+ signal && signal.removeEventListener('abort', abort);
28
+ xhr.onerror = xhr.ontimeout = noop;
29
+ };
30
+
31
+ if (signal && signal.aborted) {
32
+ throw new Error('`options.signal` is in `aborted` state');
33
+ } else if (signal) {
34
+ signal.addEventListener('abort', abort, { once: true });
35
+ }
36
+
37
+ /** @ignore */
38
+ xhr.onreadystatechange = function () {
39
+ if (xhr.readyState === 4) {
40
+ removeListener();
41
+ onComplete(xhr);
42
+ xhr.onreadystatechange = noop;
43
+ }
44
+ };
45
+
46
+ xhr.onerror = xhr.ontimeout = removeListener;
47
+
48
+ if (method === 'GET' && options.parameters) {
49
+ const { origin, pathname, searchParams } = new URL(url);
50
+ url = `${origin}${pathname}?${new URLSearchParams([
51
+ ...Array.from(searchParams.entries()),
52
+ ...Object.entries(options.parameters),
53
+ ])}`;
54
+ }
55
+
56
+ xhr.open(method, url, true);
57
+
58
+ if (method === 'POST' || method === 'PUT') {
59
+ xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
60
+ }
61
+
62
+ xhr.send(method === 'GET' ? null : body);
63
+ return xhr;
64
+ }