@lumen5/lottie-web 5.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (300) hide show
  1. package/.babelrc.json +3 -0
  2. package/.eslintrc.json +46 -0
  3. package/.gitattributes +1 -0
  4. package/.github/FUNDING.yml +1 -0
  5. package/.github/ISSUE_TEMPLATE.md +22 -0
  6. package/.github/workflows/publish.yml +26 -0
  7. package/.github/workflows/testAnimations.yml +29 -0
  8. package/.github/workflows/updateScreenshots.yml +34 -0
  9. package/CHANGELOG.md +601 -0
  10. package/History.md +1230 -0
  11. package/LICENSE.md +21 -0
  12. package/README.md +351 -0
  13. package/bower.json +31 -0
  14. package/build/old_parser/bodymovin_parser.jsx +3023 -0
  15. package/build/old_parser/helperProject.aep +0 -0
  16. package/build/player/cjs/lottie.min.js +18229 -0
  17. package/build/player/cjs/lottie_canvas.min.js +16465 -0
  18. package/build/player/cjs/lottie_html.min.js +16312 -0
  19. package/build/player/cjs/lottie_light.min.js +11584 -0
  20. package/build/player/cjs/lottie_light_canvas.min.js +13518 -0
  21. package/build/player/cjs/lottie_light_html.min.js +12843 -0
  22. package/build/player/cjs/lottie_svg.min.js +15053 -0
  23. package/build/player/esm/lottie.min.js +18225 -0
  24. package/build/player/esm/lottie_canvas.min.js +16461 -0
  25. package/build/player/esm/lottie_html.min.js +16308 -0
  26. package/build/player/esm/lottie_light.min.js +11580 -0
  27. package/build/player/esm/lottie_light_canvas.min.js +13514 -0
  28. package/build/player/esm/lottie_light_html.min.js +12839 -0
  29. package/build/player/esm/lottie_svg.min.js +15049 -0
  30. package/build/player/lottie.d.ts +5 -0
  31. package/build/player/lottie.js +17151 -0
  32. package/build/player/lottie.min.js +1 -0
  33. package/build/player/lottie_canvas.js +15506 -0
  34. package/build/player/lottie_canvas.min.js +1 -0
  35. package/build/player/lottie_canvas_worker.js +18196 -0
  36. package/build/player/lottie_canvas_worker.min.js +15 -0
  37. package/build/player/lottie_html.d.ts +5 -0
  38. package/build/player/lottie_html.js +15354 -0
  39. package/build/player/lottie_html.min.js +1 -0
  40. package/build/player/lottie_light.d.ts +5 -0
  41. package/build/player/lottie_light.js +10854 -0
  42. package/build/player/lottie_light.min.js +1 -0
  43. package/build/player/lottie_light_canvas.d.ts +5 -0
  44. package/build/player/lottie_light_canvas.js +12666 -0
  45. package/build/player/lottie_light_canvas.min.js +1 -0
  46. package/build/player/lottie_light_html.d.ts +5 -0
  47. package/build/player/lottie_light_html.js +12029 -0
  48. package/build/player/lottie_light_html.min.js +1 -0
  49. package/build/player/lottie_svg.d.ts +5 -0
  50. package/build/player/lottie_svg.js +14179 -0
  51. package/build/player/lottie_svg.min.js +1 -0
  52. package/build/player/lottie_worker.js +18196 -0
  53. package/build/player/lottie_worker.min.js +15 -0
  54. package/docs/json/animation.json +101 -0
  55. package/docs/json/effects/angle.json +40 -0
  56. package/docs/json/effects/checkBox.json +40 -0
  57. package/docs/json/effects/color.json +40 -0
  58. package/docs/json/effects/customValue.json +4 -0
  59. package/docs/json/effects/dropDown.json +40 -0
  60. package/docs/json/effects/fill.json +55 -0
  61. package/docs/json/effects/group.json +41 -0
  62. package/docs/json/effects/index.json +51 -0
  63. package/docs/json/effects/layer.json +33 -0
  64. package/docs/json/effects/noValue.json +1 -0
  65. package/docs/json/effects/point.json +43 -0
  66. package/docs/json/effects/proLevels.json +130 -0
  67. package/docs/json/effects/slider.json +40 -0
  68. package/docs/json/effects/stroke.json +64 -0
  69. package/docs/json/effects/tint.json +43 -0
  70. package/docs/json/effects/tritone.json +46 -0
  71. package/docs/json/helpers/blendMode.json +71 -0
  72. package/docs/json/helpers/boolean.json +14 -0
  73. package/docs/json/helpers/composite.json +15 -0
  74. package/docs/json/helpers/lineCap.json +19 -0
  75. package/docs/json/helpers/lineJoin.json +19 -0
  76. package/docs/json/helpers/mask.json +80 -0
  77. package/docs/json/helpers/textBased.json +23 -0
  78. package/docs/json/helpers/textGrouping.json +23 -0
  79. package/docs/json/helpers/textShape.json +31 -0
  80. package/docs/json/helpers/transform.json +146 -0
  81. package/docs/json/layers/image.json +113 -0
  82. package/docs/json/layers/null.json +87 -0
  83. package/docs/json/layers/preComp.json +118 -0
  84. package/docs/json/layers/shape.json +157 -0
  85. package/docs/json/layers/solid.json +120 -0
  86. package/docs/json/layers/text.json +523 -0
  87. package/docs/json/properties/doubleKeyframe.json +50 -0
  88. package/docs/json/properties/multiDimensional.json +21 -0
  89. package/docs/json/properties/multiDimensionalKeyframed.json +35 -0
  90. package/docs/json/properties/offsetKeyframe.json +53 -0
  91. package/docs/json/properties/shape.json +27 -0
  92. package/docs/json/properties/shapeKeyframed.json +35 -0
  93. package/docs/json/properties/shapeProp.json +50 -0
  94. package/docs/json/properties/shapePropKeyframe.json +54 -0
  95. package/docs/json/properties/value.json +21 -0
  96. package/docs/json/properties/valueKeyframe.json +33 -0
  97. package/docs/json/properties/valueKeyframed.json +25 -0
  98. package/docs/json/shapes/ellipse.json +54 -0
  99. package/docs/json/shapes/fill.json +48 -0
  100. package/docs/json/shapes/gFill.json +107 -0
  101. package/docs/json/shapes/gStroke.json +137 -0
  102. package/docs/json/shapes/group.json +89 -0
  103. package/docs/json/shapes/merge.json +27 -0
  104. package/docs/json/shapes/rect.json +66 -0
  105. package/docs/json/shapes/repeater.json +63 -0
  106. package/docs/json/shapes/round.json +35 -0
  107. package/docs/json/shapes/shape.json +40 -0
  108. package/docs/json/shapes/star.json +133 -0
  109. package/docs/json/shapes/stroke.json +78 -0
  110. package/docs/json/shapes/transform.json +102 -0
  111. package/docs/json/shapes/trim.json +61 -0
  112. package/docs/json/sources/chars.json +61 -0
  113. package/docs/json/sources/image.json +31 -0
  114. package/docs/json/sources/precomp.json +39 -0
  115. package/index.d.ts +197 -0
  116. package/package.json +54 -0
  117. package/player/index.html +115 -0
  118. package/player/js/3rd_party/BezierEaser.js +158 -0
  119. package/player/js/3rd_party/howler.js +5 -0
  120. package/player/js/3rd_party/seedrandom.js +237 -0
  121. package/player/js/3rd_party/transformation-matrix.js +449 -0
  122. package/player/js/EffectsManager.js +83 -0
  123. package/player/js/animation/AnimationItem.js +809 -0
  124. package/player/js/animation/AnimationItemWorkerOverride.js +157 -0
  125. package/player/js/animation/AnimationManager.js +248 -0
  126. package/player/js/animation/AnimationManagerWorkerOverride.js +201 -0
  127. package/player/js/effects/EffectsManagerPlaceholder.js +5 -0
  128. package/player/js/effects/SliderEffect.js +37 -0
  129. package/player/js/effects/TransformEffect.js +44 -0
  130. package/player/js/elements/AudioElement.js +102 -0
  131. package/player/js/elements/BaseElement.js +78 -0
  132. package/player/js/elements/BaseTextElement.js +4 -0
  133. package/player/js/elements/CompElement.js +107 -0
  134. package/player/js/elements/FootageElement.js +47 -0
  135. package/player/js/elements/ImageElement.js +42 -0
  136. package/player/js/elements/NullElement.js +39 -0
  137. package/player/js/elements/ShapeElement.js +76 -0
  138. package/player/js/elements/SolidElement.js +23 -0
  139. package/player/js/elements/TextElement.js +94 -0
  140. package/player/js/elements/canvasElements/CVBaseElement.js +167 -0
  141. package/player/js/elements/canvasElements/CVCompBaseElement.js +11 -0
  142. package/player/js/elements/canvasElements/CVCompElement.js +57 -0
  143. package/player/js/elements/canvasElements/CVContextData.js +239 -0
  144. package/player/js/elements/canvasElements/CVEffects.js +57 -0
  145. package/player/js/elements/canvasElements/CVImageElement.js +58 -0
  146. package/player/js/elements/canvasElements/CVMaskElement.js +72 -0
  147. package/player/js/elements/canvasElements/CVShapeElement.js +521 -0
  148. package/player/js/elements/canvasElements/CVSolidElement.js +30 -0
  149. package/player/js/elements/canvasElements/CVTextElement.js +244 -0
  150. package/player/js/elements/canvasElements/effects/CVGaussianBlurEffect.js +29 -0
  151. package/player/js/elements/canvasElements/effects/CVTransformEffect.js +9 -0
  152. package/player/js/elements/helpers/FrameElement.js +54 -0
  153. package/player/js/elements/helpers/HierarchyElement.js +52 -0
  154. package/player/js/elements/helpers/RenderableDOMElement.js +72 -0
  155. package/player/js/elements/helpers/RenderableElement.js +87 -0
  156. package/player/js/elements/helpers/TransformElement.js +140 -0
  157. package/player/js/elements/helpers/shapes/CVShapeData.js +33 -0
  158. package/player/js/elements/helpers/shapes/ProcessedElement.js +6 -0
  159. package/player/js/elements/helpers/shapes/SVGElementsRenderer.js +239 -0
  160. package/player/js/elements/helpers/shapes/SVGFillStyleData.js +18 -0
  161. package/player/js/elements/helpers/shapes/SVGGradientFillStyleData.js +100 -0
  162. package/player/js/elements/helpers/shapes/SVGGradientStrokeStyleData.js +20 -0
  163. package/player/js/elements/helpers/shapes/SVGNoStyleData.js +15 -0
  164. package/player/js/elements/helpers/shapes/SVGShapeData.js +28 -0
  165. package/player/js/elements/helpers/shapes/SVGStrokeStyleData.js +21 -0
  166. package/player/js/elements/helpers/shapes/SVGStyleData.js +19 -0
  167. package/player/js/elements/helpers/shapes/SVGTransformData.js +11 -0
  168. package/player/js/elements/helpers/shapes/ShapeElement.js +5 -0
  169. package/player/js/elements/helpers/shapes/ShapeGroupData.js +9 -0
  170. package/player/js/elements/helpers/shapes/ShapeTransformManager.js +61 -0
  171. package/player/js/elements/htmlElements/HBaseElement.js +88 -0
  172. package/player/js/elements/htmlElements/HCameraElement.js +170 -0
  173. package/player/js/elements/htmlElements/HCompElement.js +61 -0
  174. package/player/js/elements/htmlElements/HEffects.js +3 -0
  175. package/player/js/elements/htmlElements/HImageElement.js +42 -0
  176. package/player/js/elements/htmlElements/HShapeElement.js +261 -0
  177. package/player/js/elements/htmlElements/HSolidElement.js +36 -0
  178. package/player/js/elements/htmlElements/HTextElement.js +290 -0
  179. package/player/js/elements/svgElements/SVGBaseElement.js +181 -0
  180. package/player/js/elements/svgElements/SVGCompElement.js +28 -0
  181. package/player/js/elements/svgElements/SVGEffects.js +70 -0
  182. package/player/js/elements/svgElements/SVGEffectsPlaceholder.js +3 -0
  183. package/player/js/elements/svgElements/SVGShapeElement.js +366 -0
  184. package/player/js/elements/svgElements/SVGTextElement.js +322 -0
  185. package/player/js/elements/svgElements/effects/SVGComposableEffect.js +22 -0
  186. package/player/js/elements/svgElements/effects/SVGDropShadowEffect.js +83 -0
  187. package/player/js/elements/svgElements/effects/SVGFillFilter.js +22 -0
  188. package/player/js/elements/svgElements/effects/SVGGaussianBlurEffect.js +44 -0
  189. package/player/js/elements/svgElements/effects/SVGMatte3Effect.js +101 -0
  190. package/player/js/elements/svgElements/effects/SVGProLevelsFilter.js +108 -0
  191. package/player/js/elements/svgElements/effects/SVGStrokeEffect.js +119 -0
  192. package/player/js/elements/svgElements/effects/SVGTintEffect.js +47 -0
  193. package/player/js/elements/svgElements/effects/SVGTransformEffect.js +10 -0
  194. package/player/js/elements/svgElements/effects/SVGTritoneFilter.js +43 -0
  195. package/player/js/main.js +21 -0
  196. package/player/js/mask.js +239 -0
  197. package/player/js/module.js +153 -0
  198. package/player/js/modules/canvas.js +22 -0
  199. package/player/js/modules/canvas_light.js +25 -0
  200. package/player/js/modules/full.js +70 -0
  201. package/player/js/modules/full_worker.js +0 -0
  202. package/player/js/modules/html.js +37 -0
  203. package/player/js/modules/html_light.js +25 -0
  204. package/player/js/modules/main.js +162 -0
  205. package/player/js/modules/svg.js +37 -0
  206. package/player/js/modules/svg_light.js +25 -0
  207. package/player/js/renderers/BaseRenderer.js +187 -0
  208. package/player/js/renderers/CanvasRenderer.js +67 -0
  209. package/player/js/renderers/CanvasRendererBase.js +318 -0
  210. package/player/js/renderers/CanvasRendererWorkerOverride.js +54 -0
  211. package/player/js/renderers/HybridRenderer.js +47 -0
  212. package/player/js/renderers/HybridRendererBase.js +344 -0
  213. package/player/js/renderers/SVGRenderer.js +82 -0
  214. package/player/js/renderers/SVGRendererBase.js +255 -0
  215. package/player/js/renderers/renderersManager.js +29 -0
  216. package/player/js/utils/BaseEvent.js +42 -0
  217. package/player/js/utils/DataManager.js +676 -0
  218. package/player/js/utils/DataManagerWorkerOverrides.js +13 -0
  219. package/player/js/utils/FontManager.js +443 -0
  220. package/player/js/utils/FontManagerWorkerOverride.js +16 -0
  221. package/player/js/utils/PolynomialBezier.js +253 -0
  222. package/player/js/utils/PropertyFactory.js +489 -0
  223. package/player/js/utils/SlotManager.js +17 -0
  224. package/player/js/utils/TransformProperty.js +251 -0
  225. package/player/js/utils/animationFramePolyFill.js +25 -0
  226. package/player/js/utils/asset_loader.js +53 -0
  227. package/player/js/utils/asset_loader_worker_override.js +3 -0
  228. package/player/js/utils/audio/AudioController.js +85 -0
  229. package/player/js/utils/audio/AudioElement.js +6 -0
  230. package/player/js/utils/bez.js +251 -0
  231. package/player/js/utils/common.js +280 -0
  232. package/player/js/utils/expressions/CompInterface.js +28 -0
  233. package/player/js/utils/expressions/EffectInterface.js +111 -0
  234. package/player/js/utils/expressions/ExpressionManager.js +752 -0
  235. package/player/js/utils/expressions/ExpressionPropertyDecorator.js +463 -0
  236. package/player/js/utils/expressions/ExpressionTextPropertyDecorator.js +40 -0
  237. package/player/js/utils/expressions/ExpressionValue.js +61 -0
  238. package/player/js/utils/expressions/ExpressionValueFactory.js +102 -0
  239. package/player/js/utils/expressions/Expressions.js +48 -0
  240. package/player/js/utils/expressions/FootageInterface.js +60 -0
  241. package/player/js/utils/expressions/InterfacesProvider.js +21 -0
  242. package/player/js/utils/expressions/LayerInterface.js +179 -0
  243. package/player/js/utils/expressions/MaskInterface.js +50 -0
  244. package/player/js/utils/expressions/ProjectInterface.js +31 -0
  245. package/player/js/utils/expressions/PropertyGroupFactory.js +13 -0
  246. package/player/js/utils/expressions/PropertyInterface.js +19 -0
  247. package/player/js/utils/expressions/ShapeInterface.js +543 -0
  248. package/player/js/utils/expressions/TextInterface.js +35 -0
  249. package/player/js/utils/expressions/TextSelectorPropertyDecorator.js +44 -0
  250. package/player/js/utils/expressions/TransformInterface.js +126 -0
  251. package/player/js/utils/expressions/expressionHelpers.js +86 -0
  252. package/player/js/utils/expressions/shapes/ShapePathInterface.js +47 -0
  253. package/player/js/utils/featureSupport.js +16 -0
  254. package/player/js/utils/filters.js +32 -0
  255. package/player/js/utils/functionExtensions.js +27 -0
  256. package/player/js/utils/getFontProperties.js +42 -0
  257. package/player/js/utils/helpers/arrays.js +43 -0
  258. package/player/js/utils/helpers/assetManager.js +96 -0
  259. package/player/js/utils/helpers/blendModes.js +26 -0
  260. package/player/js/utils/helpers/bufferManager.js +61 -0
  261. package/player/js/utils/helpers/dynamicProperties.js +29 -0
  262. package/player/js/utils/helpers/effectTypes.js +3 -0
  263. package/player/js/utils/helpers/html_elements.js +6 -0
  264. package/player/js/utils/helpers/propTypes.js +3 -0
  265. package/player/js/utils/helpers/shapeEnums.js +16 -0
  266. package/player/js/utils/helpers/svg_elements.js +8 -0
  267. package/player/js/utils/imagePreloader.js +213 -0
  268. package/player/js/utils/imagePreloaderWorkerOverride.js +3 -0
  269. package/player/js/utils/markers/markerParser.js +47 -0
  270. package/player/js/utils/pooling/bezier_length_pool.js +20 -0
  271. package/player/js/utils/pooling/point_pool.js +13 -0
  272. package/player/js/utils/pooling/pool_factory.js +44 -0
  273. package/player/js/utils/pooling/pooling.js +15 -0
  274. package/player/js/utils/pooling/segments_length_pool.js +24 -0
  275. package/player/js/utils/pooling/shapeCollection_pool.js +48 -0
  276. package/player/js/utils/pooling/shape_pool.js +44 -0
  277. package/player/js/utils/shapes/DashProperty.js +63 -0
  278. package/player/js/utils/shapes/GradientProperty.js +93 -0
  279. package/player/js/utils/shapes/MouseModifier.js +222 -0
  280. package/player/js/utils/shapes/OffsetPathModifier.js +306 -0
  281. package/player/js/utils/shapes/PuckerAndBloatModifier.js +80 -0
  282. package/player/js/utils/shapes/RepeaterModifier.js +232 -0
  283. package/player/js/utils/shapes/RoundCornersModifier.js +122 -0
  284. package/player/js/utils/shapes/ShapeCollection.js +29 -0
  285. package/player/js/utils/shapes/ShapeModifiers.js +71 -0
  286. package/player/js/utils/shapes/ShapePath.js +100 -0
  287. package/player/js/utils/shapes/ShapeProperty.js +546 -0
  288. package/player/js/utils/shapes/TrimModifier.js +359 -0
  289. package/player/js/utils/shapes/ZigZagModifier.js +174 -0
  290. package/player/js/utils/shapes/shapePathBuilder.js +20 -0
  291. package/player/js/utils/text/LetterProps.js +60 -0
  292. package/player/js/utils/text/TextAnimatorDataProperty.js +34 -0
  293. package/player/js/utils/text/TextAnimatorProperty.js +610 -0
  294. package/player/js/utils/text/TextProperty.js +461 -0
  295. package/player/js/utils/text/TextSelectorProperty.js +179 -0
  296. package/player/js/worker_wrapper.js +1029 -0
  297. package/rollup.config.js +215 -0
  298. package/tasks/build.js +773 -0
  299. package/tasks/build_worker.js +164 -0
  300. package/tasks/watch.js +34 -0
@@ -0,0 +1,251 @@
1
+ import {
2
+ degToRads,
3
+ } from './common';
4
+ import {
5
+ extendPrototype,
6
+ } from './functionExtensions';
7
+ import DynamicPropertyContainer from './helpers/dynamicProperties';
8
+ import Matrix from '../3rd_party/transformation-matrix';
9
+ import PropertyFactory from './PropertyFactory';
10
+
11
+ const TransformPropertyFactory = (function () {
12
+ var defaultVector = [0, 0];
13
+
14
+ function applyToMatrix(mat) {
15
+ var _mdf = this._mdf;
16
+ this.iterateDynamicProperties();
17
+ this._mdf = this._mdf || _mdf;
18
+ if (this.a) {
19
+ mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);
20
+ }
21
+ if (this.s) {
22
+ mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);
23
+ }
24
+ if (this.sk) {
25
+ mat.skewFromAxis(-this.sk.v, this.sa.v);
26
+ }
27
+ if (this.r) {
28
+ mat.rotate(-this.r.v);
29
+ } else {
30
+ mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])
31
+ .rotateY(this.or.v[1])
32
+ .rotateX(this.or.v[0]);
33
+ }
34
+ if (this.data.p.s) {
35
+ if (this.data.p.z) {
36
+ mat.translate(this.px.v, this.py.v, -this.pz.v);
37
+ } else {
38
+ mat.translate(this.px.v, this.py.v, 0);
39
+ }
40
+ } else {
41
+ mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);
42
+ }
43
+ }
44
+ function processKeys(forceRender) {
45
+ if (this.elem.globalData.frameId === this.frameId) {
46
+ return;
47
+ }
48
+ if (this._isDirty) {
49
+ this.precalculateMatrix();
50
+ this._isDirty = false;
51
+ }
52
+
53
+ this.iterateDynamicProperties();
54
+
55
+ if (this._mdf || forceRender) {
56
+ var frameRate;
57
+ this.v.cloneFromProps(this.pre.props);
58
+ if (this.appliedTransformations < 1) {
59
+ this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);
60
+ }
61
+ if (this.appliedTransformations < 2) {
62
+ this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);
63
+ }
64
+ if (this.sk && this.appliedTransformations < 3) {
65
+ this.v.skewFromAxis(-this.sk.v, this.sa.v);
66
+ }
67
+ if (this.r && this.appliedTransformations < 4) {
68
+ this.v.rotate(-this.r.v);
69
+ } else if (!this.r && this.appliedTransformations < 4) {
70
+ this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])
71
+ .rotateY(this.or.v[1])
72
+ .rotateX(this.or.v[0]);
73
+ }
74
+ if (this.autoOriented) {
75
+ var v1;
76
+ var v2;
77
+ frameRate = this.elem.globalData.frameRate;
78
+ if (this.p && this.p.keyframes && this.p.getValueAtTime) {
79
+ if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {
80
+ v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);
81
+ v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);
82
+ } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {
83
+ v1 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t / frameRate), 0);
84
+ v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);
85
+ } else {
86
+ v1 = this.p.pv;
87
+ v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate, this.p.offsetTime);
88
+ }
89
+ } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {
90
+ v1 = [];
91
+ v2 = [];
92
+ var px = this.px;
93
+ var py = this.py;
94
+ if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {
95
+ v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);
96
+ v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);
97
+ v2[0] = px.getValueAtTime((px.keyframes[0].t) / frameRate, 0);
98
+ v2[1] = py.getValueAtTime((py.keyframes[0].t) / frameRate, 0);
99
+ } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {
100
+ v1[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t / frameRate), 0);
101
+ v1[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t / frameRate), 0);
102
+ v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);
103
+ v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);
104
+ } else {
105
+ v1 = [px.pv, py.pv];
106
+ v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);
107
+ v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);
108
+ }
109
+ } else {
110
+ v2 = defaultVector;
111
+ v1 = v2;
112
+ }
113
+ this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));
114
+ }
115
+ if (this.data.p && this.data.p.s) {
116
+ if (this.data.p.z) {
117
+ this.v.translate(this.px.v, this.py.v, -this.pz.v);
118
+ } else {
119
+ this.v.translate(this.px.v, this.py.v, 0);
120
+ }
121
+ } else {
122
+ this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);
123
+ }
124
+ }
125
+ this.frameId = this.elem.globalData.frameId;
126
+ }
127
+
128
+ function precalculateMatrix() {
129
+ this.appliedTransformations = 0;
130
+ this.pre.reset();
131
+
132
+ if (!this.a.effectsSequence.length) {
133
+ this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);
134
+ this.appliedTransformations = 1;
135
+ } else {
136
+ return;
137
+ }
138
+ if (!this.s.effectsSequence.length) {
139
+ this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);
140
+ this.appliedTransformations = 2;
141
+ } else {
142
+ return;
143
+ }
144
+ if (this.sk) {
145
+ if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {
146
+ this.pre.skewFromAxis(-this.sk.v, this.sa.v);
147
+ this.appliedTransformations = 3;
148
+ } else {
149
+ return;
150
+ }
151
+ }
152
+ if (this.r) {
153
+ if (!this.r.effectsSequence.length) {
154
+ this.pre.rotate(-this.r.v);
155
+ this.appliedTransformations = 4;
156
+ }
157
+ } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {
158
+ this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2])
159
+ .rotateY(this.or.v[1])
160
+ .rotateX(this.or.v[0]);
161
+ this.appliedTransformations = 4;
162
+ }
163
+ }
164
+
165
+ function autoOrient() {
166
+ //
167
+ // var prevP = this.getValueAtTime();
168
+ }
169
+
170
+ function addDynamicProperty(prop) {
171
+ this._addDynamicProperty(prop);
172
+ this.elem.addDynamicProperty(prop);
173
+ this._isDirty = true;
174
+ }
175
+
176
+ function TransformProperty(elem, data, container) {
177
+ this.elem = elem;
178
+ this.frameId = -1;
179
+ this.propType = 'transform';
180
+ this.data = data;
181
+ this.v = new Matrix();
182
+ // Precalculated matrix with non animated properties
183
+ this.pre = new Matrix();
184
+ this.appliedTransformations = 0;
185
+ this.initDynamicPropertyContainer(container || elem);
186
+ if (data.p && data.p.s) {
187
+ this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);
188
+ this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);
189
+ if (data.p.z) {
190
+ this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);
191
+ }
192
+ } else {
193
+ this.p = PropertyFactory.getProp(elem, data.p || { k: [0, 0, 0] }, 1, 0, this);
194
+ }
195
+ if (data.rx) {
196
+ this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);
197
+ this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);
198
+ this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);
199
+ if (data.or.k[0].ti) {
200
+ var i;
201
+ var len = data.or.k.length;
202
+ for (i = 0; i < len; i += 1) {
203
+ data.or.k[i].to = null;
204
+ data.or.k[i].ti = null;
205
+ }
206
+ }
207
+ this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);
208
+ // sh Indicates it needs to be capped between -180 and 180
209
+ this.or.sh = true;
210
+ } else {
211
+ this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this);
212
+ }
213
+ if (data.sk) {
214
+ this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);
215
+ this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);
216
+ }
217
+ this.a = PropertyFactory.getProp(elem, data.a || { k: [0, 0, 0] }, 1, 0, this);
218
+ this.s = PropertyFactory.getProp(elem, data.s || { k: [100, 100, 100] }, 1, 0.01, this);
219
+ // Opacity is not part of the transform properties, that's why it won't use this.dynamicProperties. That way transforms won't get updated if opacity changes.
220
+ if (data.o) {
221
+ this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);
222
+ } else {
223
+ this.o = { _mdf: false, v: 1 };
224
+ }
225
+ this._isDirty = true;
226
+ if (!this.dynamicProperties.length) {
227
+ this.getValue(true);
228
+ }
229
+ }
230
+
231
+ TransformProperty.prototype = {
232
+ applyToMatrix: applyToMatrix,
233
+ getValue: processKeys,
234
+ precalculateMatrix: precalculateMatrix,
235
+ autoOrient: autoOrient,
236
+ };
237
+
238
+ extendPrototype([DynamicPropertyContainer], TransformProperty);
239
+ TransformProperty.prototype.addDynamicProperty = addDynamicProperty;
240
+ TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;
241
+
242
+ function getTransformProperty(elem, data, container) {
243
+ return new TransformProperty(elem, data, container);
244
+ }
245
+
246
+ return {
247
+ getTransformProperty: getTransformProperty,
248
+ };
249
+ }());
250
+
251
+ export default TransformPropertyFactory;
@@ -0,0 +1,25 @@
1
+ (function () {
2
+ var lastTime = 0;
3
+ var vendors = ['ms', 'moz', 'webkit', 'o'];
4
+ for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { // eslint-disable-line no-plusplus
5
+ window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'];
6
+ window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'];
7
+ }
8
+ if (!window.requestAnimationFrame) {
9
+ window.requestAnimationFrame = function (callback) {
10
+ var currTime = new Date().getTime();
11
+ var timeToCall = Math.max(0, 16 - (currTime - lastTime));
12
+ var id = setTimeout(function () {
13
+ callback(currTime + timeToCall);
14
+ },
15
+ timeToCall);
16
+ lastTime = currTime + timeToCall;
17
+ return id;
18
+ };
19
+ }
20
+ if (!window.cancelAnimationFrame) {
21
+ window.cancelAnimationFrame = function (id) {
22
+ clearTimeout(id);
23
+ };
24
+ }
25
+ }());
@@ -0,0 +1,53 @@
1
+ const assetLoader = (function () {
2
+ function formatResponse(xhr) {
3
+ // using typeof doubles the time of execution of this method,
4
+ // so if available, it's better to use the header to validate the type
5
+ var contentTypeHeader = xhr.getResponseHeader('content-type');
6
+ if (contentTypeHeader && xhr.responseType === 'json' && contentTypeHeader.indexOf('json') !== -1) {
7
+ return xhr.response;
8
+ }
9
+ if (xhr.response && typeof xhr.response === 'object') {
10
+ return xhr.response;
11
+ } if (xhr.response && typeof xhr.response === 'string') {
12
+ return JSON.parse(xhr.response);
13
+ } if (xhr.responseText) {
14
+ return JSON.parse(xhr.responseText);
15
+ }
16
+ return null;
17
+ }
18
+
19
+ function loadAsset(path, callback, errorCallback) {
20
+ var response;
21
+ var xhr = new XMLHttpRequest();
22
+ // set responseType after calling open or IE will break.
23
+ try {
24
+ // This crashes on Android WebView prior to KitKat
25
+ xhr.responseType = 'json';
26
+ } catch (err) {} // eslint-disable-line no-empty
27
+ xhr.onreadystatechange = function () {
28
+ if (xhr.readyState === 4) {
29
+ if (xhr.status === 200) {
30
+ response = formatResponse(xhr);
31
+ callback(response);
32
+ } else {
33
+ try {
34
+ response = formatResponse(xhr);
35
+ callback(response);
36
+ } catch (err) {
37
+ if (errorCallback) {
38
+ errorCallback(err);
39
+ }
40
+ }
41
+ }
42
+ }
43
+ };
44
+ // Hack to workaround banner validation
45
+ xhr.open(['G', 'E', 'T'].join(''), path, true);
46
+ xhr.send();
47
+ }
48
+ return {
49
+ load: loadAsset,
50
+ };
51
+ }());
52
+
53
+ export default assetLoader;
@@ -0,0 +1,3 @@
1
+ const assetLoader = null;
2
+
3
+ export default assetLoader;
@@ -0,0 +1,85 @@
1
+ // import Howl from '../../3rd_party/howler';
2
+
3
+ const audioControllerFactory = (function () {
4
+ function AudioController(audioFactory) {
5
+ this.audios = [];
6
+ this.audioFactory = audioFactory;
7
+ this._volume = 1;
8
+ this._isMuted = false;
9
+ }
10
+
11
+ AudioController.prototype = {
12
+ addAudio: function (audio) {
13
+ this.audios.push(audio);
14
+ },
15
+ pause: function () {
16
+ var i;
17
+ var len = this.audios.length;
18
+ for (i = 0; i < len; i += 1) {
19
+ this.audios[i].pause();
20
+ }
21
+ },
22
+ resume: function () {
23
+ var i;
24
+ var len = this.audios.length;
25
+ for (i = 0; i < len; i += 1) {
26
+ this.audios[i].resume();
27
+ }
28
+ },
29
+ setRate: function (rateValue) {
30
+ var i;
31
+ var len = this.audios.length;
32
+ for (i = 0; i < len; i += 1) {
33
+ this.audios[i].setRate(rateValue);
34
+ }
35
+ },
36
+ createAudio: function (assetPath) {
37
+ if (this.audioFactory) {
38
+ return this.audioFactory(assetPath);
39
+ } if (window.Howl) {
40
+ return new window.Howl({
41
+ src: [assetPath],
42
+ });
43
+ }
44
+ return {
45
+ isPlaying: false,
46
+ play: function () { this.isPlaying = true; },
47
+ seek: function () { this.isPlaying = false; },
48
+ playing: function () {},
49
+ rate: function () {},
50
+ setVolume: function () {},
51
+ };
52
+ },
53
+ setAudioFactory: function (audioFactory) {
54
+ this.audioFactory = audioFactory;
55
+ },
56
+ setVolume: function (value) {
57
+ this._volume = value;
58
+ this._updateVolume();
59
+ },
60
+ mute: function () {
61
+ this._isMuted = true;
62
+ this._updateVolume();
63
+ },
64
+ unmute: function () {
65
+ this._isMuted = false;
66
+ this._updateVolume();
67
+ },
68
+ getVolume: function () {
69
+ return this._volume;
70
+ },
71
+ _updateVolume: function () {
72
+ var i;
73
+ var len = this.audios.length;
74
+ for (i = 0; i < len; i += 1) {
75
+ this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));
76
+ }
77
+ },
78
+ };
79
+
80
+ return function () {
81
+ return new AudioController();
82
+ };
83
+ }());
84
+
85
+ export default audioControllerFactory;
@@ -0,0 +1,6 @@
1
+ // TODO: fix Overwrite
2
+ function AudioElement(data) {
3
+ this.audioData = data;
4
+ }
5
+
6
+ export default AudioElement;
@@ -0,0 +1,251 @@
1
+ import {
2
+ bmPow,
3
+ bmFloor,
4
+ bmSqrt,
5
+ getDefaultCurveSegments,
6
+ } from './common';
7
+ import {
8
+ createSizedArray,
9
+ createTypedArray,
10
+ } from './helpers/arrays';
11
+ import segmentsLengthPool from './pooling/segments_length_pool';
12
+ import bezierLengthPool from './pooling/bezier_length_pool';
13
+
14
+ function bezFunction() {
15
+ var math = Math;
16
+
17
+ function pointOnLine2D(x1, y1, x2, y2, x3, y3) {
18
+ var det1 = (x1 * y2) + (y1 * x3) + (x2 * y3) - (x3 * y2) - (y3 * x1) - (x2 * y1);
19
+ return det1 > -0.001 && det1 < 0.001;
20
+ }
21
+
22
+ function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {
23
+ if (z1 === 0 && z2 === 0 && z3 === 0) {
24
+ return pointOnLine2D(x1, y1, x2, y2, x3, y3);
25
+ }
26
+ var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));
27
+ var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));
28
+ var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));
29
+ var diffDist;
30
+ if (dist1 > dist2) {
31
+ if (dist1 > dist3) {
32
+ diffDist = dist1 - dist2 - dist3;
33
+ } else {
34
+ diffDist = dist3 - dist2 - dist1;
35
+ }
36
+ } else if (dist3 > dist2) {
37
+ diffDist = dist3 - dist2 - dist1;
38
+ } else {
39
+ diffDist = dist2 - dist1 - dist3;
40
+ }
41
+ return diffDist > -0.0001 && diffDist < 0.0001;
42
+ }
43
+
44
+ var getBezierLength = (function () {
45
+ return function (pt1, pt2, pt3, pt4) {
46
+ var curveSegments = getDefaultCurveSegments();
47
+ var k;
48
+ var i;
49
+ var len;
50
+ var ptCoord;
51
+ var perc;
52
+ var addedLength = 0;
53
+ var ptDistance;
54
+ var point = [];
55
+ var lastPoint = [];
56
+ var lengthData = bezierLengthPool.newElement();
57
+ len = pt3.length;
58
+ for (k = 0; k < curveSegments; k += 1) {
59
+ perc = k / (curveSegments - 1);
60
+ ptDistance = 0;
61
+ for (i = 0; i < len; i += 1) {
62
+ ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];
63
+ point[i] = ptCoord;
64
+ if (lastPoint[i] !== null) {
65
+ ptDistance += bmPow(point[i] - lastPoint[i], 2);
66
+ }
67
+ lastPoint[i] = point[i];
68
+ }
69
+ if (ptDistance) {
70
+ ptDistance = bmSqrt(ptDistance);
71
+ addedLength += ptDistance;
72
+ }
73
+ lengthData.percents[k] = perc;
74
+ lengthData.lengths[k] = addedLength;
75
+ }
76
+ lengthData.addedLength = addedLength;
77
+ return lengthData;
78
+ };
79
+ }());
80
+
81
+ function getSegmentsLength(shapeData) {
82
+ var segmentsLength = segmentsLengthPool.newElement();
83
+ var closed = shapeData.c;
84
+ var pathV = shapeData.v;
85
+ var pathO = shapeData.o;
86
+ var pathI = shapeData.i;
87
+ var i;
88
+ var len = shapeData._length;
89
+ var lengths = segmentsLength.lengths;
90
+ var totalLength = 0;
91
+ for (i = 0; i < len - 1; i += 1) {
92
+ lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);
93
+ totalLength += lengths[i].addedLength;
94
+ }
95
+ if (closed && len) {
96
+ lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);
97
+ totalLength += lengths[i].addedLength;
98
+ }
99
+ segmentsLength.totalLength = totalLength;
100
+ return segmentsLength;
101
+ }
102
+
103
+ function BezierData(length) {
104
+ this.segmentLength = 0;
105
+ this.points = new Array(length);
106
+ }
107
+
108
+ function PointData(partial, point) {
109
+ this.partialLength = partial;
110
+ this.point = point;
111
+ }
112
+
113
+ var buildBezierData = (function () {
114
+ var storedData = {};
115
+
116
+ return function (pt1, pt2, pt3, pt4) {
117
+ var bezierName = (pt1[0] + '_' + pt1[1] + '_' + pt2[0] + '_' + pt2[1] + '_' + pt3[0] + '_' + pt3[1] + '_' + pt4[0] + '_' + pt4[1]).replace(/\./g, 'p');
118
+ if (!storedData[bezierName]) {
119
+ var curveSegments = getDefaultCurveSegments();
120
+ var k;
121
+ var i;
122
+ var len;
123
+ var ptCoord;
124
+ var perc;
125
+ var addedLength = 0;
126
+ var ptDistance;
127
+ var point;
128
+ var lastPoint = null;
129
+ if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {
130
+ curveSegments = 2;
131
+ }
132
+ var bezierData = new BezierData(curveSegments);
133
+ len = pt3.length;
134
+ for (k = 0; k < curveSegments; k += 1) {
135
+ point = createSizedArray(len);
136
+ perc = k / (curveSegments - 1);
137
+ ptDistance = 0;
138
+ for (i = 0; i < len; i += 1) {
139
+ ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];
140
+ point[i] = ptCoord;
141
+ if (lastPoint !== null) {
142
+ ptDistance += bmPow(point[i] - lastPoint[i], 2);
143
+ }
144
+ }
145
+ ptDistance = bmSqrt(ptDistance);
146
+ addedLength += ptDistance;
147
+ bezierData.points[k] = new PointData(ptDistance, point);
148
+ lastPoint = point;
149
+ }
150
+ bezierData.segmentLength = addedLength;
151
+ storedData[bezierName] = bezierData;
152
+ }
153
+ return storedData[bezierName];
154
+ };
155
+ }());
156
+
157
+ function getDistancePerc(perc, bezierData) {
158
+ var percents = bezierData.percents;
159
+ var lengths = bezierData.lengths;
160
+ var len = percents.length;
161
+ var initPos = bmFloor((len - 1) * perc);
162
+ var lengthPos = perc * bezierData.addedLength;
163
+ var lPerc = 0;
164
+ if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {
165
+ return percents[initPos];
166
+ }
167
+ var dir = lengths[initPos] > lengthPos ? -1 : 1;
168
+ var flag = true;
169
+ while (flag) {
170
+ if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {
171
+ lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);
172
+ flag = false;
173
+ } else {
174
+ initPos += dir;
175
+ }
176
+ if (initPos < 0 || initPos >= len - 1) {
177
+ // FIX for TypedArrays that don't store floating point values with enough accuracy
178
+ if (initPos === len - 1) {
179
+ return percents[initPos];
180
+ }
181
+ flag = false;
182
+ }
183
+ }
184
+ return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;
185
+ }
186
+
187
+ function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {
188
+ var t1 = getDistancePerc(percent, bezierData);
189
+ var u1 = 1 - t1;
190
+ var ptX = math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1000) / 1000;
191
+ var ptY = math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1000) / 1000;
192
+ return [ptX, ptY];
193
+ }
194
+
195
+ var bezierSegmentPoints = createTypedArray('float32', 8);
196
+
197
+ function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {
198
+ if (startPerc < 0) {
199
+ startPerc = 0;
200
+ } else if (startPerc > 1) {
201
+ startPerc = 1;
202
+ }
203
+ var t0 = getDistancePerc(startPerc, bezierData);
204
+ endPerc = endPerc > 1 ? 1 : endPerc;
205
+ var t1 = getDistancePerc(endPerc, bezierData);
206
+ var i;
207
+ var len = pt1.length;
208
+ var u0 = 1 - t0;
209
+ var u1 = 1 - t1;
210
+ var u0u0u0 = u0 * u0 * u0;
211
+ var t0u0u0_3 = t0 * u0 * u0 * 3; // eslint-disable-line camelcase
212
+ var t0t0u0_3 = t0 * t0 * u0 * 3; // eslint-disable-line camelcase
213
+ var t0t0t0 = t0 * t0 * t0;
214
+ //
215
+ var u0u0u1 = u0 * u0 * u1;
216
+ var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; // eslint-disable-line camelcase
217
+ var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; // eslint-disable-line camelcase
218
+ var t0t0t1 = t0 * t0 * t1;
219
+ //
220
+ var u0u1u1 = u0 * u1 * u1;
221
+ var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; // eslint-disable-line camelcase
222
+ var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; // eslint-disable-line camelcase
223
+ var t0t1t1 = t0 * t1 * t1;
224
+ //
225
+ var u1u1u1 = u1 * u1 * u1;
226
+ var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; // eslint-disable-line camelcase
227
+ var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; // eslint-disable-line camelcase
228
+ var t1t1t1 = t1 * t1 * t1;
229
+ for (i = 0; i < len; i += 1) {
230
+ bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase
231
+ bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase
232
+ bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase
233
+ bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1000) / 1000; // eslint-disable-line camelcase
234
+ }
235
+
236
+ return bezierSegmentPoints;
237
+ }
238
+
239
+ return {
240
+ getSegmentsLength: getSegmentsLength,
241
+ getNewSegment: getNewSegment,
242
+ getPointInSegment: getPointInSegment,
243
+ buildBezierData: buildBezierData,
244
+ pointOnLine2D: pointOnLine2D,
245
+ pointOnLine3D: pointOnLine3D,
246
+ };
247
+ }
248
+
249
+ const bez = bezFunction();
250
+
251
+ export default bez;