@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,521 @@
1
+ import {
2
+ degToRads,
3
+ bmFloor,
4
+ } from '../../utils/common';
5
+
6
+ import {
7
+ extendPrototype,
8
+ } from '../../utils/functionExtensions';
9
+ import PropertyFactory from '../../utils/PropertyFactory';
10
+ import RenderableElement from '../helpers/RenderableElement';
11
+ import BaseElement from '../BaseElement';
12
+ import TransformElement from '../helpers/TransformElement';
13
+ import HierarchyElement from '../helpers/HierarchyElement';
14
+ import FrameElement from '../helpers/FrameElement';
15
+ import RenderableDOMElement from '../helpers/RenderableDOMElement';
16
+ import ShapeTransformManager from '../helpers/shapes/ShapeTransformManager';
17
+ import CVBaseElement from './CVBaseElement';
18
+ import IShapeElement from '../ShapeElement';
19
+ import GradientProperty from '../../utils/shapes/GradientProperty';
20
+ import DashProperty from '../../utils/shapes/DashProperty';
21
+ import TransformPropertyFactory from '../../utils/TransformProperty';
22
+ import CVShapeData from '../helpers/shapes/CVShapeData';
23
+ import { ShapeModifiers } from '../../utils/shapes/ShapeModifiers';
24
+ import {
25
+ lineCapEnum,
26
+ lineJoinEnum,
27
+ } from '../../utils/helpers/shapeEnums';
28
+
29
+ function CVShapeElement(data, globalData, comp) {
30
+ this.shapes = [];
31
+ this.shapesData = data.shapes;
32
+ this.stylesList = [];
33
+ this.itemsData = [];
34
+ this.prevViewData = [];
35
+ this.shapeModifiers = [];
36
+ this.processedElements = [];
37
+ this.transformsManager = new ShapeTransformManager();
38
+ this.initElement(data, globalData, comp);
39
+ }
40
+
41
+ extendPrototype([BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement], CVShapeElement);
42
+
43
+ CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;
44
+
45
+ CVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: false };
46
+
47
+ CVShapeElement.prototype.dashResetter = [];
48
+
49
+ CVShapeElement.prototype.createContent = function () {
50
+ this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);
51
+ };
52
+
53
+ CVShapeElement.prototype.createStyleElement = function (data, transforms) {
54
+ var styleElem = {
55
+ data: data,
56
+ type: data.ty,
57
+ preTransforms: this.transformsManager.addTransformSequence(transforms),
58
+ transforms: [],
59
+ elements: [],
60
+ closed: data.hd === true,
61
+ };
62
+ var elementData = {};
63
+ if (data.ty === 'fl' || data.ty === 'st') {
64
+ elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);
65
+ if (!elementData.c.k) {
66
+ styleElem.co = 'rgb(' + bmFloor(elementData.c.v[0]) + ',' + bmFloor(elementData.c.v[1]) + ',' + bmFloor(elementData.c.v[2]) + ')';
67
+ }
68
+ } else if (data.ty === 'gf' || data.ty === 'gs') {
69
+ elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);
70
+ elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);
71
+ elementData.h = PropertyFactory.getProp(this, data.h || { k: 0 }, 0, 0.01, this);
72
+ elementData.a = PropertyFactory.getProp(this, data.a || { k: 0 }, 0, degToRads, this);
73
+ elementData.g = new GradientProperty(this, data.g, this);
74
+ }
75
+ elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);
76
+ if (data.ty === 'st' || data.ty === 'gs') {
77
+ styleElem.lc = lineCapEnum[data.lc || 2];
78
+ styleElem.lj = lineJoinEnum[data.lj || 2];
79
+ if (data.lj == 1) { // eslint-disable-line eqeqeq
80
+ styleElem.ml = data.ml;
81
+ }
82
+ elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);
83
+ if (!elementData.w.k) {
84
+ styleElem.wi = elementData.w.v;
85
+ }
86
+ if (data.d) {
87
+ var d = new DashProperty(this, data.d, 'canvas', this);
88
+ elementData.d = d;
89
+ if (!elementData.d.k) {
90
+ styleElem.da = elementData.d.dashArray;
91
+ styleElem.do = elementData.d.dashoffset[0];
92
+ }
93
+ }
94
+ } else {
95
+ styleElem.r = data.r === 2 ? 'evenodd' : 'nonzero';
96
+ }
97
+ this.stylesList.push(styleElem);
98
+ elementData.style = styleElem;
99
+ return elementData;
100
+ };
101
+
102
+ CVShapeElement.prototype.createGroupElement = function () {
103
+ var elementData = {
104
+ it: [],
105
+ prevViewData: [],
106
+ };
107
+ return elementData;
108
+ };
109
+
110
+ CVShapeElement.prototype.createTransformElement = function (data) {
111
+ var elementData = {
112
+ transform: {
113
+ opacity: 1,
114
+ _opMdf: false,
115
+ key: this.transformsManager.getNewKey(),
116
+ op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),
117
+ mProps: TransformPropertyFactory.getTransformProperty(this, data, this),
118
+ },
119
+ };
120
+ return elementData;
121
+ };
122
+
123
+ CVShapeElement.prototype.createShapeElement = function (data) {
124
+ var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);
125
+
126
+ this.shapes.push(elementData);
127
+ this.addShapeToModifiers(elementData);
128
+ return elementData;
129
+ };
130
+
131
+ CVShapeElement.prototype.reloadShapes = function () {
132
+ this._isFirstFrame = true;
133
+ var i;
134
+ var len = this.itemsData.length;
135
+ for (i = 0; i < len; i += 1) {
136
+ this.prevViewData[i] = this.itemsData[i];
137
+ }
138
+ this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);
139
+ len = this.dynamicProperties.length;
140
+ for (i = 0; i < len; i += 1) {
141
+ this.dynamicProperties[i].getValue();
142
+ }
143
+ this.renderModifiers();
144
+ this.transformsManager.processSequences(this._isFirstFrame);
145
+ };
146
+
147
+ CVShapeElement.prototype.addTransformToStyleList = function (transform) {
148
+ var i;
149
+ var len = this.stylesList.length;
150
+ for (i = 0; i < len; i += 1) {
151
+ if (!this.stylesList[i].closed) {
152
+ this.stylesList[i].transforms.push(transform);
153
+ }
154
+ }
155
+ };
156
+
157
+ CVShapeElement.prototype.removeTransformFromStyleList = function () {
158
+ var i;
159
+ var len = this.stylesList.length;
160
+ for (i = 0; i < len; i += 1) {
161
+ if (!this.stylesList[i].closed) {
162
+ this.stylesList[i].transforms.pop();
163
+ }
164
+ }
165
+ };
166
+
167
+ CVShapeElement.prototype.closeStyles = function (styles) {
168
+ var i;
169
+ var len = styles.length;
170
+ for (i = 0; i < len; i += 1) {
171
+ styles[i].closed = true;
172
+ }
173
+ };
174
+
175
+ CVShapeElement.prototype.searchShapes = function (arr, itemsData, prevViewData, shouldRender, transforms) {
176
+ var i;
177
+ var len = arr.length - 1;
178
+ var j;
179
+ var jLen;
180
+ var ownStyles = [];
181
+ var ownModifiers = [];
182
+ var processedPos;
183
+ var modifier;
184
+ var currentTransform;
185
+ var ownTransforms = [].concat(transforms);
186
+ for (i = len; i >= 0; i -= 1) {
187
+ processedPos = this.searchProcessedElement(arr[i]);
188
+ if (!processedPos) {
189
+ arr[i]._shouldRender = shouldRender;
190
+ } else {
191
+ itemsData[i] = prevViewData[processedPos - 1];
192
+ }
193
+ if (arr[i].ty === 'fl' || arr[i].ty === 'st' || arr[i].ty === 'gf' || arr[i].ty === 'gs') {
194
+ if (!processedPos) {
195
+ itemsData[i] = this.createStyleElement(arr[i], ownTransforms);
196
+ } else {
197
+ itemsData[i].style.closed = false;
198
+ }
199
+
200
+ ownStyles.push(itemsData[i].style);
201
+ } else if (arr[i].ty === 'gr') {
202
+ if (!processedPos) {
203
+ itemsData[i] = this.createGroupElement(arr[i]);
204
+ } else {
205
+ jLen = itemsData[i].it.length;
206
+ for (j = 0; j < jLen; j += 1) {
207
+ itemsData[i].prevViewData[j] = itemsData[i].it[j];
208
+ }
209
+ }
210
+ this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);
211
+ } else if (arr[i].ty === 'tr') {
212
+ if (!processedPos) {
213
+ currentTransform = this.createTransformElement(arr[i]);
214
+ itemsData[i] = currentTransform;
215
+ }
216
+ ownTransforms.push(itemsData[i]);
217
+ this.addTransformToStyleList(itemsData[i]);
218
+ } else if (arr[i].ty === 'sh' || arr[i].ty === 'rc' || arr[i].ty === 'el' || arr[i].ty === 'sr') {
219
+ if (!processedPos) {
220
+ itemsData[i] = this.createShapeElement(arr[i]);
221
+ }
222
+ } else if (arr[i].ty === 'tm' || arr[i].ty === 'rd' || arr[i].ty === 'pb' || arr[i].ty === 'zz' || arr[i].ty === 'op') {
223
+ if (!processedPos) {
224
+ modifier = ShapeModifiers.getModifier(arr[i].ty);
225
+ modifier.init(this, arr[i]);
226
+ itemsData[i] = modifier;
227
+ this.shapeModifiers.push(modifier);
228
+ } else {
229
+ modifier = itemsData[i];
230
+ modifier.closed = false;
231
+ }
232
+ ownModifiers.push(modifier);
233
+ } else if (arr[i].ty === 'rp') {
234
+ if (!processedPos) {
235
+ modifier = ShapeModifiers.getModifier(arr[i].ty);
236
+ itemsData[i] = modifier;
237
+ modifier.init(this, arr, i, itemsData);
238
+ this.shapeModifiers.push(modifier);
239
+ shouldRender = false;
240
+ } else {
241
+ modifier = itemsData[i];
242
+ modifier.closed = true;
243
+ }
244
+ ownModifiers.push(modifier);
245
+ }
246
+ this.addProcessedElement(arr[i], i + 1);
247
+ }
248
+ this.removeTransformFromStyleList();
249
+ this.closeStyles(ownStyles);
250
+ len = ownModifiers.length;
251
+ for (i = 0; i < len; i += 1) {
252
+ ownModifiers[i].closed = true;
253
+ }
254
+ };
255
+
256
+ CVShapeElement.prototype.renderInnerContent = function () {
257
+ this.transformHelper.opacity = 1;
258
+ this.transformHelper._opMdf = false;
259
+ this.renderModifiers();
260
+ this.transformsManager.processSequences(this._isFirstFrame);
261
+ this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);
262
+ };
263
+
264
+ CVShapeElement.prototype.renderShapeTransform = function (parentTransform, groupTransform) {
265
+ if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {
266
+ groupTransform.opacity = parentTransform.opacity;
267
+ groupTransform.opacity *= groupTransform.op.v;
268
+ groupTransform._opMdf = true;
269
+ }
270
+ };
271
+
272
+ CVShapeElement.prototype.drawLayer = function () {
273
+ var i;
274
+ var len = this.stylesList.length;
275
+ var j;
276
+ var jLen;
277
+ var k;
278
+ var kLen;
279
+ var elems;
280
+ var nodes;
281
+ var renderer = this.globalData.renderer;
282
+ var ctx = this.globalData.canvasContext;
283
+ var type;
284
+ var currentStyle;
285
+ for (i = 0; i < len; i += 1) {
286
+ currentStyle = this.stylesList[i];
287
+ type = currentStyle.type;
288
+
289
+ // Skipping style when
290
+ // Stroke width equals 0
291
+ // style should not be rendered (extra unused repeaters)
292
+ // current opacity equals 0
293
+ // global opacity equals 0
294
+ if (!(((type === 'st' || type === 'gs') && currentStyle.wi === 0) || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {
295
+ renderer.save();
296
+ elems = currentStyle.elements;
297
+ if (type === 'st' || type === 'gs') {
298
+ renderer.ctxStrokeStyle(type === 'st' ? currentStyle.co : currentStyle.grd);
299
+ // ctx.strokeStyle = type === 'st' ? currentStyle.co : currentStyle.grd;
300
+ renderer.ctxLineWidth(currentStyle.wi);
301
+ // ctx.lineWidth = currentStyle.wi;
302
+ renderer.ctxLineCap(currentStyle.lc);
303
+ // ctx.lineCap = currentStyle.lc;
304
+ renderer.ctxLineJoin(currentStyle.lj);
305
+ // ctx.lineJoin = currentStyle.lj;
306
+ renderer.ctxMiterLimit(currentStyle.ml || 0);
307
+ // ctx.miterLimit = currentStyle.ml || 0;
308
+ } else {
309
+ renderer.ctxFillStyle(type === 'fl' ? currentStyle.co : currentStyle.grd);
310
+ // ctx.fillStyle = type === 'fl' ? currentStyle.co : currentStyle.grd;
311
+ }
312
+ renderer.ctxOpacity(currentStyle.coOp);
313
+ if (type !== 'st' && type !== 'gs') {
314
+ ctx.beginPath();
315
+ }
316
+ renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);
317
+ jLen = elems.length;
318
+ for (j = 0; j < jLen; j += 1) {
319
+ if (type === 'st' || type === 'gs') {
320
+ ctx.beginPath();
321
+ if (currentStyle.da) {
322
+ ctx.setLineDash(currentStyle.da);
323
+ ctx.lineDashOffset = currentStyle.do;
324
+ }
325
+ }
326
+ nodes = elems[j].trNodes;
327
+ kLen = nodes.length;
328
+
329
+ for (k = 0; k < kLen; k += 1) {
330
+ if (nodes[k].t === 'm') {
331
+ ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);
332
+ } else if (nodes[k].t === 'c') {
333
+ ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]);
334
+ } else {
335
+ ctx.closePath();
336
+ }
337
+ }
338
+ if (type === 'st' || type === 'gs') {
339
+ // ctx.stroke();
340
+ renderer.ctxStroke();
341
+ if (currentStyle.da) {
342
+ ctx.setLineDash(this.dashResetter);
343
+ }
344
+ }
345
+ }
346
+ if (type !== 'st' && type !== 'gs') {
347
+ // ctx.fill(currentStyle.r);
348
+ this.globalData.renderer.ctxFill(currentStyle.r);
349
+ }
350
+ renderer.restore();
351
+ }
352
+ }
353
+ };
354
+
355
+ CVShapeElement.prototype.renderShape = function (parentTransform, items, data, isMain) {
356
+ var i;
357
+ var len = items.length - 1;
358
+ var groupTransform;
359
+ groupTransform = parentTransform;
360
+ for (i = len; i >= 0; i -= 1) {
361
+ if (items[i].ty === 'tr') {
362
+ groupTransform = data[i].transform;
363
+ this.renderShapeTransform(parentTransform, groupTransform);
364
+ } else if (items[i].ty === 'sh' || items[i].ty === 'el' || items[i].ty === 'rc' || items[i].ty === 'sr') {
365
+ this.renderPath(items[i], data[i]);
366
+ } else if (items[i].ty === 'fl') {
367
+ this.renderFill(items[i], data[i], groupTransform);
368
+ } else if (items[i].ty === 'st') {
369
+ this.renderStroke(items[i], data[i], groupTransform);
370
+ } else if (items[i].ty === 'gf' || items[i].ty === 'gs') {
371
+ this.renderGradientFill(items[i], data[i], groupTransform);
372
+ } else if (items[i].ty === 'gr') {
373
+ this.renderShape(groupTransform, items[i].it, data[i].it);
374
+ } else if (items[i].ty === 'tm') {
375
+ //
376
+ }
377
+ }
378
+ if (isMain) {
379
+ this.drawLayer();
380
+ }
381
+ };
382
+
383
+ CVShapeElement.prototype.renderStyledShape = function (styledShape, shape) {
384
+ if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {
385
+ var shapeNodes = styledShape.trNodes;
386
+ var paths = shape.paths;
387
+ var i;
388
+ var len;
389
+ var j;
390
+ var jLen = paths._length;
391
+ shapeNodes.length = 0;
392
+ var groupTransformMat = styledShape.transforms.finalTransform;
393
+ for (j = 0; j < jLen; j += 1) {
394
+ var pathNodes = paths.shapes[j];
395
+ if (pathNodes && pathNodes.v) {
396
+ len = pathNodes._length;
397
+ for (i = 1; i < len; i += 1) {
398
+ if (i === 1) {
399
+ shapeNodes.push({
400
+ t: 'm',
401
+ p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0),
402
+ });
403
+ }
404
+ shapeNodes.push({
405
+ t: 'c',
406
+ pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]),
407
+ });
408
+ }
409
+ if (len === 1) {
410
+ shapeNodes.push({
411
+ t: 'm',
412
+ p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0),
413
+ });
414
+ }
415
+ if (pathNodes.c && len) {
416
+ shapeNodes.push({
417
+ t: 'c',
418
+ pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]),
419
+ });
420
+ shapeNodes.push({
421
+ t: 'z',
422
+ });
423
+ }
424
+ }
425
+ }
426
+ styledShape.trNodes = shapeNodes;
427
+ }
428
+ };
429
+
430
+ CVShapeElement.prototype.renderPath = function (pathData, itemData) {
431
+ if (pathData.hd !== true && pathData._shouldRender) {
432
+ var i;
433
+ var len = itemData.styledShapes.length;
434
+ for (i = 0; i < len; i += 1) {
435
+ this.renderStyledShape(itemData.styledShapes[i], itemData.sh);
436
+ }
437
+ }
438
+ };
439
+
440
+ CVShapeElement.prototype.renderFill = function (styleData, itemData, groupTransform) {
441
+ var styleElem = itemData.style;
442
+
443
+ if (itemData.c._mdf || this._isFirstFrame) {
444
+ styleElem.co = 'rgb('
445
+ + bmFloor(itemData.c.v[0]) + ','
446
+ + bmFloor(itemData.c.v[1]) + ','
447
+ + bmFloor(itemData.c.v[2]) + ')';
448
+ }
449
+ if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {
450
+ styleElem.coOp = itemData.o.v * groupTransform.opacity;
451
+ }
452
+ };
453
+
454
+ CVShapeElement.prototype.renderGradientFill = function (styleData, itemData, groupTransform) {
455
+ var styleElem = itemData.style;
456
+ var grd;
457
+ if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || (styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf))) {
458
+ var ctx = this.globalData.canvasContext;
459
+ var pt1 = itemData.s.v;
460
+ var pt2 = itemData.e.v;
461
+ if (styleData.t === 1) {
462
+ grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);
463
+ } else {
464
+ var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));
465
+ var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);
466
+
467
+ var percent = itemData.h.v;
468
+ if (percent >= 1) {
469
+ percent = 0.99;
470
+ } else if (percent <= -1) {
471
+ percent = -0.99;
472
+ }
473
+ var dist = rad * percent;
474
+ var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];
475
+ var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];
476
+ grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);
477
+ }
478
+
479
+ var i;
480
+ var len = styleData.g.p;
481
+ var cValues = itemData.g.c;
482
+ var opacity = 1;
483
+
484
+ for (i = 0; i < len; i += 1) {
485
+ if (itemData.g._hasOpacity && itemData.g._collapsable) {
486
+ opacity = itemData.g.o[i * 2 + 1];
487
+ }
488
+ grd.addColorStop(cValues[i * 4] / 100, 'rgba(' + cValues[i * 4 + 1] + ',' + cValues[i * 4 + 2] + ',' + cValues[i * 4 + 3] + ',' + opacity + ')');
489
+ }
490
+ styleElem.grd = grd;
491
+ }
492
+ styleElem.coOp = itemData.o.v * groupTransform.opacity;
493
+ };
494
+
495
+ CVShapeElement.prototype.renderStroke = function (styleData, itemData, groupTransform) {
496
+ var styleElem = itemData.style;
497
+ var d = itemData.d;
498
+ if (d && (d._mdf || this._isFirstFrame)) {
499
+ styleElem.da = d.dashArray;
500
+ styleElem.do = d.dashoffset[0];
501
+ }
502
+ if (itemData.c._mdf || this._isFirstFrame) {
503
+ styleElem.co = 'rgb(' + bmFloor(itemData.c.v[0]) + ',' + bmFloor(itemData.c.v[1]) + ',' + bmFloor(itemData.c.v[2]) + ')';
504
+ }
505
+ if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {
506
+ styleElem.coOp = itemData.o.v * groupTransform.opacity;
507
+ }
508
+ if (itemData.w._mdf || this._isFirstFrame) {
509
+ styleElem.wi = itemData.w.v;
510
+ }
511
+ };
512
+
513
+ CVShapeElement.prototype.destroy = function () {
514
+ this.shapesData = null;
515
+ this.globalData = null;
516
+ this.canvasContext = null;
517
+ this.stylesList.length = 0;
518
+ this.itemsData.length = 0;
519
+ };
520
+
521
+ export default CVShapeElement;
@@ -0,0 +1,30 @@
1
+ import {
2
+ extendPrototype,
3
+ } from '../../utils/functionExtensions';
4
+ import RenderableElement from '../helpers/RenderableElement';
5
+ import BaseElement from '../BaseElement';
6
+ import TransformElement from '../helpers/TransformElement';
7
+ import HierarchyElement from '../helpers/HierarchyElement';
8
+ import FrameElement from '../helpers/FrameElement';
9
+ import CVBaseElement from './CVBaseElement';
10
+ import IImageElement from '../ImageElement';
11
+ import SVGShapeElement from '../svgElements/SVGShapeElement';
12
+
13
+ function CVSolidElement(data, globalData, comp) {
14
+ this.initElement(data, globalData, comp);
15
+ }
16
+ extendPrototype([BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement], CVSolidElement);
17
+
18
+ CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;
19
+ CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;
20
+
21
+ CVSolidElement.prototype.renderInnerContent = function () {
22
+ // var ctx = this.canvasContext;
23
+ this.globalData.renderer.ctxFillStyle(this.data.sc);
24
+ // ctx.fillStyle = this.data.sc;
25
+ this.globalData.renderer.ctxFillRect(0, 0, this.data.sw, this.data.sh);
26
+ // ctx.fillRect(0, 0, this.data.sw, this.data.sh);
27
+ //
28
+ };
29
+
30
+ export default CVSolidElement;