lottie-ios 3.2.3 → 3.4.2

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 (434) hide show
  1. package/.github/actions/setup/action.yml +32 -0
  2. package/.github/issue_template.md +6 -23
  3. package/.github/workflows/main.yml +98 -0
  4. package/.github/workflows/stale_issues.yml +17 -0
  5. package/.spi.yml +6 -0
  6. package/.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata +7 -0
  7. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  8. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  9. package/.swiftpm/xcode/xcuserdata/{brandonwithrow.xcuserdatad → cal.xcuserdatad}/xcschemes/xcschememanagement.plist +25 -15
  10. package/.swiftpm/xcode/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  11. package/Gemfile +4 -0
  12. package/Gemfile.lock +102 -0
  13. package/Lottie.xcodeproj/project.pbxproj +2011 -1972
  14. package/Lottie.xcodeproj/project.xcworkspace/contents.xcworkspacedata +1 -1
  15. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  16. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_iOS.xcscheme → Lottie (iOS).xcscheme } +15 -18
  17. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_tvOS.xcscheme → Lottie (macOS).xcscheme } +5 -18
  18. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_macOS.xcscheme → Lottie (tvOS).xcscheme } +5 -18
  19. package/Lottie.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +37 -0
  20. package/Lottie.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +24 -0
  21. package/Lottie.xcworkspace/contents.xcworkspacedata +10 -0
  22. package/Lottie.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  23. package/Lottie.xcworkspace/xcshareddata/swiftpm/Package.resolved +34 -0
  24. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  25. package/{Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad → Lottie.xcworkspace/xcuserdata/cal.xcuserdatad}/xcdebugger/Breakpoints_v2.xcbkptlist +2 -2
  26. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/xcdebugger/Expressions.xcexplist +153 -0
  27. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  28. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +22 -0
  29. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +138 -0
  30. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +30 -0
  31. package/Package.swift +5 -15
  32. package/README.md +40 -60
  33. package/Rakefile +160 -0
  34. package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
  35. package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +447 -0
  36. package/Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +81 -0
  37. package/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift +41 -0
  38. package/Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift +55 -0
  39. package/Sources/Private/CoreAnimation/Animations/GradientAnimations.swift +210 -0
  40. package/Sources/Private/CoreAnimation/Animations/LayerProperty.swift +229 -0
  41. package/Sources/Private/CoreAnimation/Animations/OpacityAnimation.swift +52 -0
  42. package/Sources/Private/CoreAnimation/Animations/RectangleAnimation.swift +58 -0
  43. package/Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift +257 -0
  44. package/Sources/Private/CoreAnimation/Animations/StarAnimation.swift +124 -0
  45. package/Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift +73 -0
  46. package/Sources/Private/CoreAnimation/Animations/TransformAnimations.swift +205 -0
  47. package/Sources/Private/CoreAnimation/Animations/VisibilityAnimation.swift +37 -0
  48. package/Sources/Private/CoreAnimation/CompatibilityTracker.swift +130 -0
  49. package/Sources/Private/CoreAnimation/CoreAnimationLayer.swift +497 -0
  50. package/Sources/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift +35 -0
  51. package/Sources/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift +37 -0
  52. package/Sources/Private/CoreAnimation/Extensions/Keyframes+combinedIfPossible.swift +154 -0
  53. package/Sources/Private/CoreAnimation/Layers/AnimationLayer.swift +83 -0
  54. package/Sources/Private/CoreAnimation/Layers/BaseAnimationLayer.swift +33 -0
  55. package/Sources/Private/CoreAnimation/Layers/BaseCompositionLayer.swift +88 -0
  56. package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +167 -0
  57. package/Sources/Private/CoreAnimation/Layers/GradientRenderLayer.swift +94 -0
  58. package/Sources/Private/CoreAnimation/Layers/ImageLayer.swift +79 -0
  59. package/Sources/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift +64 -0
  60. package/Sources/Private/CoreAnimation/Layers/MaskCompositionLayer.swift +138 -0
  61. package/Sources/Private/CoreAnimation/Layers/PreCompLayer.swift +140 -0
  62. package/Sources/Private/CoreAnimation/Layers/RepeaterLayer.swift +85 -0
  63. package/Sources/Private/CoreAnimation/Layers/ShapeItemLayer.swift +315 -0
  64. package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +390 -0
  65. package/Sources/Private/CoreAnimation/Layers/SolidLayer.swift +47 -0
  66. package/Sources/Private/CoreAnimation/Layers/TextLayer.swift +91 -0
  67. package/Sources/Private/CoreAnimation/Layers/TransformLayer.swift +11 -0
  68. package/Sources/Private/CoreAnimation/ValueProviderStore.swift +139 -0
  69. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/CompositionLayer.swift +94 -86
  70. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ImageCompositionLayer.swift +24 -21
  71. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/MaskContainerLayer.swift +75 -54
  72. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/NullCompositionLayer.swift +5 -5
  73. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/PreCompositionLayer.swift +59 -43
  74. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ShapeCompositionLayer.swift +22 -20
  75. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/SolidCompositionLayer.swift +26 -17
  76. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/TextCompositionLayer.swift +42 -36
  77. package/{lottie-swift/src/Private/LayerContainers/AnimationContainer.swift → Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift} +200 -140
  78. package/Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift +47 -0
  79. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/CompositionLayersInitializer.swift +33 -24
  80. package/{lottie-swift/src/Private/LayerContainers/Utility/TextLayer.swift → Sources/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift} +149 -106
  81. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/InvertedMatteLayer.swift +26 -24
  82. package/Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift +41 -0
  83. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerImageProvider.swift +20 -16
  84. package/Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift +40 -0
  85. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerTransformNode.swift +82 -67
  86. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Extensions/ItemsExtension.swift +9 -4
  87. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/NodeProperty.swift +29 -21
  88. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift +16 -10
  89. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift +6 -6
  90. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift +5 -5
  91. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift +10 -8
  92. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueContainer.swift +25 -21
  93. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift +23 -17
  94. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift +22 -17
  95. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/ModifierNodes/TrimPathNode.swift +110 -79
  96. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/GroupOutputNode.swift +22 -16
  97. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift +19 -15
  98. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/PathOutputNode.swift +22 -20
  99. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift +22 -23
  100. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift +247 -0
  101. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift +30 -24
  102. package/{lottie-swift/src/Private/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift → Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift} +93 -66
  103. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift +23 -19
  104. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +139 -0
  105. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +170 -0
  106. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/RectNode.swift +95 -58
  107. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/ShapeNode.swift +42 -29
  108. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/PathNodes/StarNode.swift +108 -69
  109. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +155 -0
  110. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/FillNode.swift +51 -37
  111. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientFillNode.swift +57 -42
  112. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +66 -58
  113. package/Sources/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +169 -0
  114. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift +138 -119
  115. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/AnimatorNode.swift +80 -79
  116. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/PathNode.swift +5 -3
  117. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Protocols/RenderNode.swift +22 -17
  118. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeContainerLayer.swift +27 -24
  119. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift +34 -25
  120. package/Sources/Private/Model/Animation.swift +160 -0
  121. package/Sources/Private/Model/Assets/Asset.swift +43 -0
  122. package/{lottie-swift/src → Sources}/Private/Model/Assets/AssetLibrary.swift +40 -13
  123. package/Sources/Private/Model/Assets/ImageAsset.swift +112 -0
  124. package/{lottie-swift/src → Sources}/Private/Model/Assets/PrecompAsset.swift +20 -10
  125. package/Sources/Private/Model/DictionaryInitializable.swift +67 -0
  126. package/Sources/Private/Model/Extensions/Bundle.swift +34 -0
  127. package/{lottie-swift/src → Sources}/Private/Model/Extensions/KeyedDecodingContainerExtensions.swift +8 -4
  128. package/Sources/Private/Model/Keyframes/KeyframeData.swift +113 -0
  129. package/Sources/Private/Model/Keyframes/KeyframeGroup.swift +222 -0
  130. package/{lottie-swift/src → Sources}/Private/Model/Layers/ImageLayerModel.swift +21 -11
  131. package/Sources/Private/Model/Layers/LayerModel.swift +228 -0
  132. package/{lottie-swift/src → Sources}/Private/Model/Layers/PreCompLayerModel.swift +39 -22
  133. package/{lottie-swift/src → Sources}/Private/Model/Layers/ShapeLayerModel.swift +23 -12
  134. package/{lottie-swift/src → Sources}/Private/Model/Layers/SolidLayerModel.swift +31 -19
  135. package/{lottie-swift/src → Sources}/Private/Model/Layers/TextLayerModel.swift +33 -19
  136. package/Sources/Private/Model/Objects/DashPattern.swift +44 -0
  137. package/Sources/Private/Model/Objects/Marker.swift +33 -0
  138. package/Sources/Private/Model/Objects/Mask.swift +80 -0
  139. package/Sources/Private/Model/Objects/Transform.swift +179 -0
  140. package/Sources/Private/Model/ShapeItems/Ellipse.swift +74 -0
  141. package/Sources/Private/Model/ShapeItems/Fill.swift +74 -0
  142. package/Sources/Private/Model/ShapeItems/GradientFill.swift +137 -0
  143. package/Sources/Private/Model/ShapeItems/GradientStroke.swift +185 -0
  144. package/Sources/Private/Model/ShapeItems/Group.swift +48 -0
  145. package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Merge.swift +29 -12
  146. package/Sources/Private/Model/ShapeItems/Rectangle.swift +72 -0
  147. package/Sources/Private/Model/ShapeItems/Repeater.swift +135 -0
  148. package/Sources/Private/Model/ShapeItems/Shape.swift +56 -0
  149. package/Sources/Private/Model/ShapeItems/ShapeItem.swift +163 -0
  150. package/Sources/Private/Model/ShapeItems/ShapeTransform.swift +135 -0
  151. package/Sources/Private/Model/ShapeItems/Star.swift +131 -0
  152. package/Sources/Private/Model/ShapeItems/Stroke.swift +101 -0
  153. package/Sources/Private/Model/ShapeItems/Trim.swift +77 -0
  154. package/Sources/Private/Model/Text/Font.swift +61 -0
  155. package/{lottie-swift/src → Sources}/Private/Model/Text/Glyph.swift +63 -39
  156. package/Sources/Private/Model/Text/TextAnimator.swift +164 -0
  157. package/Sources/Private/Model/Text/TextDocument.swift +123 -0
  158. package/Sources/Private/RootAnimationLayer.swift +51 -0
  159. package/{lottie-swift/src → Sources}/Private/Utility/Debugging/AnimatorNodeDebugging.swift +7 -7
  160. package/{lottie-swift/src → Sources}/Private/Utility/Debugging/LayerDebugging.swift +72 -48
  161. package/Sources/Private/Utility/Debugging/TestHelpers.swift +10 -0
  162. package/{lottie-swift/src → Sources}/Private/Utility/Extensions/AnimationKeypathExtension.swift +69 -59
  163. package/Sources/Private/Utility/Extensions/BlendMode+Filter.swift +31 -0
  164. package/Sources/Private/Utility/Extensions/CGColor+RGB.swift +22 -0
  165. package/{lottie-swift/src → Sources}/Private/Utility/Extensions/CGFloatExtensions.swift +70 -67
  166. package/Sources/Private/Utility/Extensions/DataExtension.swift +27 -0
  167. package/Sources/Private/Utility/Extensions/MathKit.swift +450 -0
  168. package/Sources/Private/Utility/Extensions/StringExtensions.swift +38 -0
  169. package/{lottie-swift/src → Sources}/Private/Utility/Helpers/AnimationContext.swift +42 -16
  170. package/Sources/Private/Utility/Interpolatable/InterpolatableExtensions.swift +134 -0
  171. package/{lottie-swift/src → Sources}/Private/Utility/Interpolatable/KeyframeExtensions.swift +13 -10
  172. package/Sources/Private/Utility/Interpolatable/KeyframeGroup+Extensions.swift +59 -0
  173. package/{lottie-swift/src/Private/NodeRenderSystem/NodeProperties/ValueProviders → Sources/Private/Utility/Interpolatable}/KeyframeInterpolator.swift +125 -108
  174. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/BezierPath.swift +229 -143
  175. package/Sources/Private/Utility/Primitives/CGPointExtension.swift +35 -0
  176. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/ColorExtension.swift +46 -14
  177. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/CompoundBezierPath.swift +58 -49
  178. package/Sources/Private/Utility/Primitives/CurveVertex.swift +184 -0
  179. package/Sources/Private/Utility/Primitives/PathElement.swift +75 -0
  180. package/Sources/Private/Utility/Primitives/UnitBezier.swift +115 -0
  181. package/Sources/Private/Utility/Primitives/VectorsExtensions.swift +341 -0
  182. package/Sources/Public/Animation/AnimationPublic.swift +266 -0
  183. package/Sources/Public/Animation/AnimationView.swift +1335 -0
  184. package/Sources/Public/Animation/AnimationViewInitializers.swift +109 -0
  185. package/Sources/Public/AnimationCache/AnimationCacheProvider.swift +22 -0
  186. package/{lottie-swift/src → Sources}/Public/AnimationCache/LRUAnimationCache.swift +22 -18
  187. package/Sources/Public/DynamicProperties/AnimationKeypath.swift +49 -0
  188. package/Sources/Public/DynamicProperties/AnyValueProvider.swift +132 -0
  189. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift +54 -36
  190. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift +40 -36
  191. package/Sources/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +123 -0
  192. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/PointValueProvider.swift +40 -35
  193. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift +40 -35
  194. package/{lottie-swift/src → Sources}/Public/FontProvider/AnimationFontProvider.swift +15 -8
  195. package/Sources/Public/ImageProvider/AnimationImageProvider.swift +21 -0
  196. package/Sources/Public/Keyframes/Interpolatable.swift +253 -0
  197. package/Sources/Public/Keyframes/Keyframe.swift +92 -0
  198. package/Sources/Public/Logging/LottieLogger.swift +137 -0
  199. package/Sources/Public/LottieConfiguration.swift +143 -0
  200. package/{lottie-swift/src → Sources}/Public/Primitives/AnimationTime.swift +1 -1
  201. package/{lottie-swift/src → Sources}/Public/Primitives/Color.swift +10 -6
  202. package/{lottie-swift/src → Sources}/Public/Primitives/Vectors.swift +13 -12
  203. package/Sources/Public/TextProvider/AnimationTextProvider.swift +53 -0
  204. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedButton.swift +42 -26
  205. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedControl.swift +100 -91
  206. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedSwitch.swift +128 -94
  207. package/{lottie-swift/src → Sources}/Public/iOS/AnimationSubview.swift +3 -3
  208. package/Sources/Public/iOS/AnimationViewBase.swift +78 -0
  209. package/{lottie-swift/src → Sources}/Public/iOS/BundleImageProvider.swift +36 -34
  210. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +4 -0
  211. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationView.swift +38 -29
  212. package/{lottie-swift/src → Sources}/Public/iOS/FilepathImageProvider.swift +24 -21
  213. package/{lottie-swift/src → Sources}/Public/iOS/UIColorExtension.swift +4 -4
  214. package/{lottie-swift/src/Public/MacOS/AnimationSubview.swift → Sources/Public/macOS/AnimationSubview.macOS.swift} +4 -5
  215. package/{lottie-swift/src/Public/MacOS/LottieView.swift → Sources/Public/macOS/AnimationViewBase.macOS.swift} +58 -50
  216. package/{lottie-swift/src/Public/MacOS/BundleImageProvider.swift → Sources/Public/macOS/BundleImageProvider.macOS.swift} +31 -32
  217. package/Sources/Public/macOS/FilepathImageProvider.macOS.swift +67 -0
  218. package/Tests/AnimationKeypathTests.swift +103 -0
  219. package/Tests/AutomaticEngineTests.swift +57 -0
  220. package/Tests/BundleTests.swift +25 -0
  221. package/Tests/DataURLTests.swift +64 -0
  222. package/Tests/ParsingTests.swift +43 -0
  223. package/Tests/PerformanceTests.swift +214 -0
  224. package/Tests/Samples/9squares_AlBoardman.json +1 -0
  225. package/Tests/Samples/Boat_Loader.json +1 -0
  226. package/Tests/Samples/HamburgerArrow.json +1 -0
  227. package/Tests/Samples/IconTransitions.json +1 -0
  228. package/Tests/Samples/Images/dog.png +0 -0
  229. package/Tests/Samples/Issues/issue_1125.json +1 -0
  230. package/Tests/Samples/Issues/issue_1260.json +1 -0
  231. package/Tests/Samples/Issues/issue_1403.json +1 -0
  232. package/Tests/Samples/Issues/issue_1407.json +1 -0
  233. package/Tests/Samples/Issues/issue_1460.json +1 -0
  234. package/Tests/Samples/Issues/issue_1488.json +1 -0
  235. package/Tests/Samples/Issues/issue_1505.json +1 -0
  236. package/Tests/Samples/Issues/issue_1541.json +1 -0
  237. package/Tests/Samples/Issues/issue_1557.json +1 -0
  238. package/Tests/Samples/Issues/issue_1603.json +1 -0
  239. package/Tests/Samples/Issues/issue_1628.json +1 -0
  240. package/Tests/Samples/Issues/issue_1636.json +1 -0
  241. package/Tests/Samples/Issues/issue_1643.json +1 -0
  242. package/Tests/Samples/Issues/issue_1655.json +1 -0
  243. package/Tests/Samples/Issues/issue_1664.json +1 -0
  244. package/Tests/Samples/Issues/issue_1683.json +1 -0
  245. package/Tests/Samples/Issues/issue_1687.json +1 -0
  246. package/Tests/Samples/Issues/issue_1711.json +1 -0
  247. package/Tests/Samples/Issues/issue_1717.json +1 -0
  248. package/Tests/Samples/Issues/issue_769.json +1 -0
  249. package/Tests/Samples/Issues/issue_885.json +1 -0
  250. package/Tests/Samples/Issues/issue_965.json +1 -0
  251. package/Tests/Samples/Issues/pr_1536.json +1 -0
  252. package/Tests/Samples/Issues/pr_1563.json +8439 -0
  253. package/Tests/Samples/Issues/pr_1592.json +5527 -0
  254. package/Tests/Samples/Issues/pr_1599.json +738 -0
  255. package/Tests/Samples/Issues/pr_1604_1.json +1 -0
  256. package/Tests/Samples/Issues/pr_1604_2.json +1 -0
  257. package/Tests/Samples/Issues/pr_1632_1.json +1 -0
  258. package/Tests/Samples/Issues/pr_1632_2.json +1 -0
  259. package/Tests/Samples/Issues/pr_1686.json +513 -0
  260. package/Tests/Samples/Issues/pr_1698.json +1 -0
  261. package/Tests/Samples/Issues/pr_1699.json +1 -0
  262. package/Tests/Samples/LottieFiles/LICENSE.md +14 -0
  263. package/Tests/Samples/LottieFiles/bounce_strokes.json +1 -0
  264. package/Tests/Samples/LottieFiles/cactus.json +1 -0
  265. package/Tests/Samples/LottieFiles/dog_car_ride.json +1 -0
  266. package/Tests/Samples/LottieFiles/draft_icon.json +1 -0
  267. package/Tests/Samples/LottieFiles/fireworks.json +1 -0
  268. package/Tests/Samples/LottieFiles/gradient_1.json +1 -0
  269. package/Tests/Samples/LottieFiles/gradient_2.json +1 -0
  270. package/Tests/Samples/LottieFiles/gradient_pill.json +1 -0
  271. package/Tests/Samples/LottieFiles/gradient_shapes.json +1 -0
  272. package/Tests/Samples/LottieFiles/gradient_square.json +1 -0
  273. package/Tests/Samples/LottieFiles/growth.json +1 -0
  274. package/Tests/Samples/LottieFiles/infinity_loader.json +1 -0
  275. package/Tests/Samples/LottieFiles/loading_dots_1.json +1 -0
  276. package/Tests/Samples/LottieFiles/loading_dots_2.json +1 -0
  277. package/Tests/Samples/LottieFiles/loading_dots_3.json +1 -0
  278. package/Tests/Samples/LottieFiles/loading_gradient_strokes.json +1 -0
  279. package/Tests/Samples/LottieFiles/settings_slider.json +1 -0
  280. package/Tests/Samples/LottieFiles/shop.json +1 -0
  281. package/Tests/Samples/LottieFiles/step_loader.json +1 -0
  282. package/Tests/Samples/LottieLogo1.json +1 -0
  283. package/Tests/Samples/LottieLogo1_masked.json +1 -0
  284. package/Tests/Samples/LottieLogo2.json +1 -0
  285. package/Tests/Samples/MotionCorpse_Jrcanest.json +1 -0
  286. package/Tests/Samples/Nonanimating/BasicLayers.json +1 -0
  287. package/Tests/Samples/Nonanimating/DisableNodesTest.json +1 -0
  288. package/Tests/Samples/Nonanimating/FirstText.json +1 -0
  289. package/Tests/Samples/Nonanimating/GeometryTransformTest.json +1 -0
  290. package/Tests/Samples/Nonanimating/Text_AnimatedProperties.json +1 -0
  291. package/Tests/Samples/Nonanimating/Text_Glyph.json +1 -0
  292. package/Tests/Samples/Nonanimating/Text_NoAnimation.json +1 -0
  293. package/Tests/Samples/Nonanimating/Text_NoGlyph.json +1 -0
  294. package/Tests/Samples/Nonanimating/Zoom.json +1 -0
  295. package/Tests/Samples/Nonanimating/_dog.json +1 -0
  296. package/Tests/Samples/Nonanimating/base64Test.json +1 -0
  297. package/Tests/Samples/Nonanimating/blend_mode_test.json +1 -0
  298. package/Tests/Samples/Nonanimating/keypathTest.json +1 -0
  299. package/Tests/Samples/Nonanimating/verifyLineHeight.json +1 -0
  300. package/Tests/Samples/PinJump.json +1 -0
  301. package/Tests/Samples/Switch.json +1 -0
  302. package/Tests/Samples/Switch_States.json +1 -0
  303. package/Tests/Samples/TwitterHeart.json +1 -0
  304. package/Tests/Samples/TwitterHeartButton.json +1 -0
  305. package/Tests/Samples/TypeFace/A.json +1 -0
  306. package/Tests/Samples/TypeFace/Apostrophe.json +1 -0
  307. package/Tests/Samples/TypeFace/B.json +1 -0
  308. package/Tests/Samples/TypeFace/BlinkingCursor.json +1 -0
  309. package/Tests/Samples/TypeFace/C.json +1 -0
  310. package/Tests/Samples/TypeFace/Colon.json +1 -0
  311. package/Tests/Samples/TypeFace/Comma.json +1 -0
  312. package/Tests/Samples/TypeFace/D.json +1 -0
  313. package/Tests/Samples/TypeFace/E.json +1 -0
  314. package/Tests/Samples/TypeFace/F.json +1 -0
  315. package/Tests/Samples/TypeFace/G.json +1 -0
  316. package/Tests/Samples/TypeFace/H.json +1 -0
  317. package/Tests/Samples/TypeFace/I.json +1 -0
  318. package/Tests/Samples/TypeFace/J.json +1 -0
  319. package/Tests/Samples/TypeFace/K.json +1 -0
  320. package/Tests/Samples/TypeFace/L.json +1 -0
  321. package/Tests/Samples/TypeFace/M.json +1 -0
  322. package/Tests/Samples/TypeFace/N.json +1 -0
  323. package/Tests/Samples/TypeFace/O.json +1 -0
  324. package/Tests/Samples/TypeFace/P.json +1 -0
  325. package/Tests/Samples/TypeFace/Q.json +1 -0
  326. package/Tests/Samples/TypeFace/R.json +1 -0
  327. package/Tests/Samples/TypeFace/S.json +1 -0
  328. package/Tests/Samples/TypeFace/T.json +1 -0
  329. package/Tests/Samples/TypeFace/U.json +1 -0
  330. package/Tests/Samples/TypeFace/V.json +1 -0
  331. package/Tests/Samples/TypeFace/W.json +1 -0
  332. package/Tests/Samples/TypeFace/X.json +1 -0
  333. package/Tests/Samples/TypeFace/Y.json +1 -0
  334. package/Tests/Samples/TypeFace/Z.json +1 -0
  335. package/Tests/Samples/Watermelon.json +1 -0
  336. package/Tests/Samples/setValueTest.json +1 -0
  337. package/Tests/Samples/timeremap.json +1 -0
  338. package/Tests/Samples/vcTransition1.json +1 -0
  339. package/Tests/Samples/vcTransition2.json +1 -0
  340. package/Tests/SnapshotConfiguration.swift +158 -0
  341. package/Tests/SnapshotTests.swift +265 -0
  342. package/Tests/Utils/Bundle+Module.swift +30 -0
  343. package/Tests/Utils/HardcodedFontProvider.swift +19 -0
  344. package/Tests/Utils/HardcodedImageProvider.swift +23 -0
  345. package/Tests/Utils/Snapshotting+presentationLayer.swift +47 -0
  346. package/Tests/ValueProvidersTests.swift +27 -0
  347. package/lottie-ios.podspec +12 -12
  348. package/package.json +1 -1
  349. package/script/test-carthage/Cartfile +1 -0
  350. package/script/test-carthage/Cartfile.resolved +1 -0
  351. package/script/test-carthage/CarthageTest/AppDelegate.swift +26 -0
  352. package/script/test-carthage/CarthageTest/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  353. package/script/test-carthage/CarthageTest/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  354. package/script/test-carthage/CarthageTest/Assets.xcassets/Contents.json +6 -0
  355. package/script/test-carthage/CarthageTest/Base.lproj/LaunchScreen.storyboard +25 -0
  356. package/script/test-carthage/CarthageTest/Base.lproj/Main.storyboard +24 -0
  357. package/script/test-carthage/CarthageTest/Info.plist +66 -0
  358. package/script/test-carthage/CarthageTest/SceneDelegate.swift +10 -0
  359. package/script/test-carthage/CarthageTest/ViewController.swift +15 -0
  360. package/script/test-carthage/CarthageTest-macOS/AppDelegate.swift +7 -0
  361. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  362. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
  363. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/Contents.json +6 -0
  364. package/script/test-carthage/CarthageTest-macOS/Base.lproj/Main.storyboard +717 -0
  365. package/script/test-carthage/CarthageTest-macOS/CarthageTest_macOS.entitlements +10 -0
  366. package/script/test-carthage/CarthageTest-macOS/ViewController.swift +15 -0
  367. package/script/test-carthage/CarthageTest.xcodeproj/project.pbxproj +532 -0
  368. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  369. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  370. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  371. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  372. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  373. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  374. package/script/test-carthage/Mintfile +1 -0
  375. package/script/test-spm/LottieSPM.xcworkspace/contents.xcworkspacedata +7 -0
  376. package/script/test-spm/LottieSPM.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  377. package/script/test-spm/Mintfile +1 -0
  378. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  379. package/Lottie/Info.plist +0 -22
  380. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  381. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/LottieLibraryMacOS.xcscheme +0 -80
  382. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/xcschememanagement.plist +0 -57
  383. package/lottie-swift/Assets/.gitkeep +0 -0
  384. package/lottie-swift/src/Private/LayerContainers/Utility/LayerFontProvider.swift +0 -37
  385. package/lottie-swift/src/Private/LayerContainers/Utility/LayerTextProvider.swift +0 -36
  386. package/lottie-swift/src/Private/Model/Animation.swift +0 -107
  387. package/lottie-swift/src/Private/Model/Assets/Asset.swift +0 -27
  388. package/lottie-swift/src/Private/Model/Assets/ImageAsset.swift +0 -48
  389. package/lottie-swift/src/Private/Model/Keyframes/Keyframe.swift +0 -128
  390. package/lottie-swift/src/Private/Model/Keyframes/KeyframeGroup.swift +0 -108
  391. package/lottie-swift/src/Private/Model/Layers/LayerModel.swift +0 -150
  392. package/lottie-swift/src/Private/Model/Objects/DashPattern.swift +0 -24
  393. package/lottie-swift/src/Private/Model/Objects/Marker.swift +0 -23
  394. package/lottie-swift/src/Private/Model/Objects/Mask.swift +0 -48
  395. package/lottie-swift/src/Private/Model/Objects/Transform.swift +0 -105
  396. package/lottie-swift/src/Private/Model/ShapeItems/Ellipse.swift +0 -50
  397. package/lottie-swift/src/Private/Model/ShapeItems/FillI.swift +0 -49
  398. package/lottie-swift/src/Private/Model/ShapeItems/GradientFill.swift +0 -86
  399. package/lottie-swift/src/Private/Model/ShapeItems/GradientStroke.swift +0 -125
  400. package/lottie-swift/src/Private/Model/ShapeItems/Group.swift +0 -32
  401. package/lottie-swift/src/Private/Model/ShapeItems/Rectangle.swift +0 -50
  402. package/lottie-swift/src/Private/Model/ShapeItems/Repeater.swift +0 -80
  403. package/lottie-swift/src/Private/Model/ShapeItems/Shape.swift +0 -37
  404. package/lottie-swift/src/Private/Model/ShapeItems/ShapeItem.swift +0 -95
  405. package/lottie-swift/src/Private/Model/ShapeItems/ShapeTransform.swift +0 -68
  406. package/lottie-swift/src/Private/Model/ShapeItems/Star.swift +0 -86
  407. package/lottie-swift/src/Private/Model/ShapeItems/Stroke.swift +0 -67
  408. package/lottie-swift/src/Private/Model/ShapeItems/Trim.swift +0 -53
  409. package/lottie-swift/src/Private/Model/Text/Font.swift +0 -35
  410. package/lottie-swift/src/Private/Model/Text/TextAnimator.swift +0 -99
  411. package/lottie-swift/src/Private/Model/Text/TextDocument.swift +0 -70
  412. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +0 -109
  413. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +0 -132
  414. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +0 -141
  415. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +0 -127
  416. package/lottie-swift/src/Private/Utility/Extensions/MathKit.swift +0 -539
  417. package/lottie-swift/src/Private/Utility/Extensions/StringExtensions.swift +0 -32
  418. package/lottie-swift/src/Private/Utility/Interpolatable/Interpolatable.swift +0 -18
  419. package/lottie-swift/src/Private/Utility/Interpolatable/InterpolatableExtensions.swift +0 -170
  420. package/lottie-swift/src/Private/Utility/Primitives/CurveVertex.swift +0 -177
  421. package/lottie-swift/src/Private/Utility/Primitives/PathElement.swift +0 -68
  422. package/lottie-swift/src/Private/Utility/Primitives/VectorsExtensions.swift +0 -218
  423. package/lottie-swift/src/Public/Animation/AnimationPublic.swift +0 -196
  424. package/lottie-swift/src/Public/Animation/AnimationView.swift +0 -1006
  425. package/lottie-swift/src/Public/Animation/AnimationViewInitializers.swift +0 -83
  426. package/lottie-swift/src/Public/AnimationCache/AnimationCacheProvider.swift +0 -24
  427. package/lottie-swift/src/Public/DynamicProperties/AnimationKeypath.swift +0 -46
  428. package/lottie-swift/src/Public/DynamicProperties/AnyValueProvider.swift +0 -29
  429. package/lottie-swift/src/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +0 -114
  430. package/lottie-swift/src/Public/ImageProvider/AnimationImageProvider.swift +0 -23
  431. package/lottie-swift/src/Public/MacOS/FilepathImageProvider.swift +0 -67
  432. package/lottie-swift/src/Public/TextProvider/AnimationTextProvider.swift +0 -39
  433. package/lottie-swift/src/Public/iOS/LottieView.swift +0 -62
  434. package/lottie-swift-testing.podspec +0 -32
@@ -1,150 +0,0 @@
1
- //
2
- // Layer.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/7/19.
6
- //
7
-
8
- import Foundation
9
-
10
- /// Used for mapping a heterogeneous list to classes for parsing.
11
- extension LayerType: ClassFamily {
12
- static var discriminator: Discriminator = .type
13
-
14
- func getType() -> AnyObject.Type {
15
- switch self {
16
- case .precomp:
17
- return PreCompLayerModel.self
18
- case .solid:
19
- return SolidLayerModel.self
20
- case .image:
21
- return ImageLayerModel.self
22
- case .null:
23
- return LayerModel.self
24
- case .shape:
25
- return ShapeLayerModel.self
26
- case .text:
27
- return TextLayerModel.self
28
- }
29
- }
30
- }
31
-
32
- public enum LayerType: Int, Codable {
33
- case precomp
34
- case solid
35
- case image
36
- case null
37
- case shape
38
- case text
39
-
40
- public init(from decoder: Decoder) throws {
41
- self = try LayerType(rawValue: decoder.singleValueContainer().decode(RawValue.self)) ?? .null
42
- }
43
- }
44
-
45
- public enum MatteType: Int, Codable {
46
- case none
47
- case add
48
- case invert
49
- case unknown
50
- }
51
-
52
- public enum BlendMode: Int, Codable {
53
- case normal
54
- case multiply
55
- case screen
56
- case overlay
57
- case darken
58
- case lighten
59
- case colorDodge
60
- case colorBurn
61
- case hardLight
62
- case softLight
63
- case difference
64
- case exclusion
65
- case hue
66
- case saturation
67
- case color
68
- case luminosity
69
- }
70
-
71
- /**
72
- A base top container for shapes, images, and other view objects.
73
- */
74
- class LayerModel: Codable {
75
-
76
- /// The readable name of the layer
77
- let name: String
78
-
79
- /// The index of the layer
80
- let index: Int
81
-
82
- /// The type of the layer.
83
- let type: LayerType
84
-
85
- /// The coordinate space
86
- let coordinateSpace: CoordinateSpace
87
-
88
- /// The in time of the layer in frames.
89
- let inFrame: Double
90
- /// The out time of the layer in frames.
91
- let outFrame: Double
92
-
93
- /// The start time of the layer in frames.
94
- let startTime: Double
95
-
96
- /// The transform of the layer
97
- let transform: Transform
98
-
99
- /// The index of the parent layer, if applicable.
100
- let parent: Int?
101
-
102
- /// The blending mode for the layer
103
- let blendMode: BlendMode
104
-
105
- /// An array of masks for the layer.
106
- let masks: [Mask]?
107
-
108
- /// A number that stretches time by a multiplier
109
- let timeStretch: Double
110
-
111
- /// The type of matte if any.
112
- let matte: MatteType?
113
-
114
- let hidden: Bool
115
-
116
- private enum CodingKeys : String, CodingKey {
117
- case name = "nm"
118
- case index = "ind"
119
- case type = "ty"
120
- case coordinateSpace = "ddd"
121
- case inFrame = "ip"
122
- case outFrame = "op"
123
- case startTime = "st"
124
- case transform = "ks"
125
- case parent = "parent"
126
- case blendMode = "bm"
127
- case masks = "masksProperties"
128
- case timeStretch = "sr"
129
- case matte = "tt"
130
- case hidden = "hd"
131
- }
132
-
133
- required init(from decoder: Decoder) throws {
134
- let container = try decoder.container(keyedBy: LayerModel.CodingKeys.self)
135
- self.name = try container.decodeIfPresent(String.self, forKey: .name) ?? "Layer"
136
- self.index = try container.decode(Int.self, forKey: .index)
137
- self.type = try container.decode(LayerType.self, forKey: .type)
138
- self.coordinateSpace = try container.decodeIfPresent(CoordinateSpace.self, forKey: .coordinateSpace) ?? .type2d
139
- self.inFrame = try container.decode(Double.self, forKey: .inFrame)
140
- self.outFrame = try container.decode(Double.self, forKey: .outFrame)
141
- self.startTime = try container.decode(Double.self, forKey: .startTime)
142
- self.transform = try container.decode(Transform.self, forKey: .transform)
143
- self.parent = try container.decodeIfPresent(Int.self, forKey: .parent)
144
- self.blendMode = try container.decodeIfPresent(BlendMode.self, forKey: .blendMode) ?? .normal
145
- self.masks = try container.decodeIfPresent([Mask].self, forKey: .masks)
146
- self.timeStretch = try container.decodeIfPresent(Double.self, forKey: .timeStretch) ?? 1
147
- self.matte = try container.decodeIfPresent(MatteType.self, forKey: .matte)
148
- self.hidden = try container.decodeIfPresent(Bool.self, forKey: .hidden) ?? false
149
- }
150
- }
@@ -1,24 +0,0 @@
1
- //
2
- // DashPattern.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/22/19.
6
- //
7
-
8
- import Foundation
9
-
10
- enum DashElementType: String, Codable {
11
- case offset = "o"
12
- case dash = "d"
13
- case gap = "g"
14
- }
15
-
16
- final class DashElement: Codable {
17
- let type: DashElementType
18
- let value: KeyframeGroup<Vector1D>
19
-
20
- enum CodingKeys : String, CodingKey {
21
- case type = "n"
22
- case value = "v"
23
- }
24
- }
@@ -1,23 +0,0 @@
1
- //
2
- // Marker.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/9/19.
6
- //
7
-
8
- import Foundation
9
-
10
- /// A time marker
11
- final class Marker: Codable {
12
-
13
- /// The Marker Name
14
- let name: String
15
-
16
- /// The Frame time of the marker
17
- let frameTime: AnimationFrameTime
18
-
19
- enum CodingKeys : String, CodingKey {
20
- case name = "cm"
21
- case frameTime = "tm"
22
- }
23
- }
@@ -1,48 +0,0 @@
1
- //
2
- // Mask.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/8/19.
6
- //
7
-
8
- import Foundation
9
-
10
- enum MaskMode: String, Codable {
11
- case add = "a"
12
- case subtract = "s"
13
- case intersect = "i"
14
- case lighten = "l"
15
- case darken = "d"
16
- case difference = "f"
17
- case none = "n"
18
- }
19
-
20
- final class Mask: Codable {
21
-
22
- let mode: MaskMode
23
-
24
- let opacity: KeyframeGroup<Vector1D>
25
-
26
- let shape: KeyframeGroup<BezierPath>
27
-
28
- let inverted: Bool
29
-
30
- let expansion: KeyframeGroup<Vector1D>
31
-
32
- enum CodingKeys : String, CodingKey {
33
- case mode = "mode"
34
- case opacity = "o"
35
- case inverted = "inv"
36
- case shape = "pt"
37
- case expansion = "x"
38
- }
39
-
40
- required init(from decoder: Decoder) throws {
41
- let container = try decoder.container(keyedBy: Mask.CodingKeys.self)
42
- self.mode = try container.decodeIfPresent(MaskMode.self, forKey: .mode) ?? .add
43
- self.opacity = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .opacity) ?? KeyframeGroup(Vector1D(100))
44
- self.shape = try container.decode(KeyframeGroup<BezierPath>.self, forKey: .shape)
45
- self.inverted = try container.decodeIfPresent(Bool.self, forKey: .inverted) ?? false
46
- self.expansion = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .expansion) ?? KeyframeGroup(Vector1D(0))
47
- }
48
- }
@@ -1,105 +0,0 @@
1
- //
2
- // Transform.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/7/19.
6
- //
7
-
8
- import Foundation
9
-
10
- /// The animatable transform for a layer. Controls position, rotation, scale, and opacity.
11
- final class Transform: Codable {
12
-
13
- /// The anchor point of the transform.
14
- let anchorPoint: KeyframeGroup<Vector3D>
15
-
16
- /// The position of the transform. This is nil if the position data was split.
17
- let position: KeyframeGroup<Vector3D>?
18
-
19
- /// The positionX of the transform. This is nil if the position property is set.
20
- let positionX: KeyframeGroup<Vector1D>?
21
-
22
- /// The positionY of the transform. This is nil if the position property is set.
23
- let positionY: KeyframeGroup<Vector1D>?
24
-
25
- /// The scale of the transform
26
- let scale: KeyframeGroup<Vector3D>
27
-
28
- /// The rotation of the transform. Note: This is single dimensional rotation.
29
- let rotation: KeyframeGroup<Vector1D>
30
-
31
- /// The opacity of the transform.
32
- let opacity: KeyframeGroup<Vector1D>
33
-
34
- /// Should always be nil.
35
- let rotationZ: KeyframeGroup<Vector1D>?
36
-
37
- enum CodingKeys : String, CodingKey {
38
- case anchorPoint = "a"
39
- case position = "p"
40
- case positionX = "px"
41
- case positionY = "py"
42
- case scale = "s"
43
- case rotation = "r"
44
- case rotationZ = "rz"
45
- case opacity = "o"
46
- }
47
-
48
- enum PositionCodingKeys : String, CodingKey {
49
- case split = "s"
50
- case positionX = "x"
51
- case positionY = "y"
52
- }
53
-
54
-
55
- required init(from decoder: Decoder) throws {
56
- /**
57
- This manual override of decode is required because we want to throw an error
58
- in the case that there is not position data.
59
- */
60
- let container = try decoder.container(keyedBy: Transform.CodingKeys.self)
61
-
62
- // AnchorPoint
63
- self.anchorPoint = try container.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .anchorPoint) ?? KeyframeGroup(Vector3D(x: Double(0), y: 0, z: 0))
64
-
65
- // Position
66
- if container.contains(.positionX), container.contains(.positionY) {
67
- // Position dimensions are split into two keyframe groups
68
- self.positionX = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .positionX)
69
- self.positionY = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .positionY)
70
- self.position = nil
71
- } else if let positionKeyframes = try? container.decode(KeyframeGroup<Vector3D>.self, forKey: .position) {
72
- // Position dimensions are a single keyframe group.
73
- self.position = positionKeyframes
74
- self.positionX = nil
75
- self.positionY = nil
76
- } else if let positionContainer = try? container.nestedContainer(keyedBy: PositionCodingKeys.self, forKey: .position),
77
- let positionX = try? positionContainer.decode(KeyframeGroup<Vector1D>.self, forKey: .positionX),
78
- let positionY = try? positionContainer.decode(KeyframeGroup<Vector1D>.self, forKey: .positionY) {
79
- /// Position keyframes are split and nested.
80
- self.positionX = positionX
81
- self.positionY = positionY
82
- self.position = nil
83
- } else {
84
- /// Default value.
85
- self.position = KeyframeGroup(Vector3D(x: Double(0), y: 0, z: 0))
86
- self.positionX = nil
87
- self.positionY = nil
88
- }
89
-
90
-
91
- // Scale
92
- self.scale = try container.decodeIfPresent(KeyframeGroup<Vector3D>.self, forKey: .scale) ?? KeyframeGroup(Vector3D(x: Double(100), y: 100, z: 100))
93
-
94
- // Rotation
95
- if let rotationZ = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .rotationZ) {
96
- self.rotation = rotationZ
97
- } else {
98
- self.rotation = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .rotation) ?? KeyframeGroup(Vector1D(0))
99
- }
100
- self.rotationZ = nil
101
-
102
- // Opacity
103
- self.opacity = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .opacity) ?? KeyframeGroup(Vector1D(100))
104
- }
105
- }
@@ -1,50 +0,0 @@
1
- //
2
- // EllipseItem.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/8/19.
6
- //
7
-
8
- import Foundation
9
-
10
- enum PathDirection: Int, Codable {
11
- case clockwise = 1
12
- case userSetClockwise = 2
13
- case counterClockwise = 3
14
- }
15
-
16
- /// An item that define an ellipse shape
17
- final class Ellipse: ShapeItem {
18
-
19
- /// The direction of the ellipse.
20
- let direction: PathDirection
21
-
22
- /// The position of the ellipse
23
- let position: KeyframeGroup<Vector3D>
24
-
25
- /// The size of the ellipse
26
- let size: KeyframeGroup<Vector3D>
27
-
28
- private enum CodingKeys : String, CodingKey {
29
- case direction = "d"
30
- case position = "p"
31
- case size = "s"
32
- }
33
-
34
- required init(from decoder: Decoder) throws {
35
- let container = try decoder.container(keyedBy: Ellipse.CodingKeys.self)
36
- self.direction = try container.decodeIfPresent(PathDirection.self, forKey: .direction) ?? .clockwise
37
- self.position = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .position)
38
- self.size = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .size)
39
- try super.init(from: decoder)
40
- }
41
-
42
- override func encode(to encoder: Encoder) throws {
43
- try super.encode(to: encoder)
44
- var container = encoder.container(keyedBy: CodingKeys.self)
45
- try container.encode(direction, forKey: .direction)
46
- try container.encode(position, forKey: .position)
47
- try container.encode(size, forKey: .size)
48
- }
49
-
50
- }
@@ -1,49 +0,0 @@
1
- //
2
- // FillShape.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/8/19.
6
- //
7
-
8
- import Foundation
9
-
10
- enum FillRule: Int, Codable {
11
- case none
12
- case nonZeroWinding
13
- case evenOdd
14
- }
15
-
16
- /// An item that defines a fill render
17
- final class Fill: ShapeItem {
18
-
19
- /// The opacity of the fill
20
- let opacity: KeyframeGroup<Vector1D>
21
-
22
- /// The color keyframes for the fill
23
- let color: KeyframeGroup<Color>
24
-
25
- let fillRule: FillRule
26
-
27
- private enum CodingKeys : String, CodingKey {
28
- case opacity = "o"
29
- case color = "c"
30
- case fillRule = "r"
31
- }
32
-
33
- required init(from decoder: Decoder) throws {
34
- let container = try decoder.container(keyedBy: Fill.CodingKeys.self)
35
- self.opacity = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .opacity)
36
- self.color = try container.decode(KeyframeGroup<Color>.self, forKey: .color)
37
- self.fillRule = try container.decodeIfPresent(FillRule.self, forKey: .fillRule) ?? .nonZeroWinding
38
- try super.init(from: decoder)
39
- }
40
-
41
- override func encode(to encoder: Encoder) throws {
42
- try super.encode(to: encoder)
43
- var container = encoder.container(keyedBy: CodingKeys.self)
44
- try container.encode(opacity, forKey: .opacity)
45
- try container.encode(color, forKey: .color)
46
- try container.encode(fillRule, forKey: .fillRule)
47
- }
48
-
49
- }
@@ -1,86 +0,0 @@
1
- //
2
- // GradientFill.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/8/19.
6
- //
7
-
8
- import Foundation
9
-
10
- enum GradientType: Int, Codable {
11
- case none
12
- case linear
13
- case radial
14
- }
15
-
16
- /// An item that define a gradient fill
17
- final class GradientFill: ShapeItem {
18
-
19
- /// The opacity of the fill
20
- let opacity: KeyframeGroup<Vector1D>
21
-
22
- /// The start of the gradient
23
- let startPoint: KeyframeGroup<Vector3D>
24
-
25
- /// The end of the gradient
26
- let endPoint: KeyframeGroup<Vector3D>
27
-
28
- /// The type of gradient
29
- let gradientType: GradientType
30
-
31
- /// Gradient Highlight Length. Only if type is Radial
32
- let highlightLength: KeyframeGroup<Vector1D>?
33
-
34
- /// Highlight Angle. Only if type is Radial
35
- let highlightAngle: KeyframeGroup<Vector1D>?
36
-
37
- /// The number of color points in the gradient
38
- let numberOfColors: Int
39
-
40
- /// The Colors of the gradient.
41
- let colors: KeyframeGroup<[Double]>
42
-
43
- private enum CodingKeys : String, CodingKey {
44
- case opacity = "o"
45
- case startPoint = "s"
46
- case endPoint = "e"
47
- case gradientType = "t"
48
- case highlightLength = "h"
49
- case highlightAngle = "a"
50
- case colors = "g"
51
- }
52
-
53
- private enum GradientDataKeys : String, CodingKey {
54
- case numberOfColors = "p"
55
- case colors = "k"
56
- }
57
-
58
- required init(from decoder: Decoder) throws {
59
- let container = try decoder.container(keyedBy: GradientFill.CodingKeys.self)
60
- self.opacity = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .opacity)
61
- self.startPoint = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .startPoint)
62
- self.endPoint = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .endPoint)
63
- self.gradientType = try container.decode(GradientType.self, forKey: .gradientType)
64
- self.highlightLength = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .highlightLength)
65
- self.highlightAngle = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .highlightAngle)
66
- let colorsContainer = try container.nestedContainer(keyedBy: GradientDataKeys.self, forKey: .colors)
67
- self.colors = try colorsContainer.decode(KeyframeGroup<[Double]>.self, forKey: .colors)
68
- self.numberOfColors = try colorsContainer.decode(Int.self, forKey: .numberOfColors)
69
- try super.init(from: decoder)
70
- }
71
-
72
- override func encode(to encoder: Encoder) throws {
73
- try super.encode(to: encoder)
74
- var container = encoder.container(keyedBy: CodingKeys.self)
75
- try container.encode(opacity, forKey: .opacity)
76
- try container.encode(startPoint, forKey: .startPoint)
77
- try container.encode(endPoint, forKey: .endPoint)
78
- try container.encode(gradientType, forKey: .gradientType)
79
- try container.encodeIfPresent(highlightLength, forKey: .highlightLength)
80
- try container.encodeIfPresent(highlightAngle, forKey: .highlightAngle)
81
- var colorsContainer = container.nestedContainer(keyedBy: GradientDataKeys.self, forKey: .colors)
82
- try colorsContainer.encode(numberOfColors, forKey: .numberOfColors)
83
- try colorsContainer.encode(colors, forKey: .colors)
84
- }
85
-
86
- }
@@ -1,125 +0,0 @@
1
- //
2
- // GradientStroke.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/8/19.
6
- //
7
-
8
- import Foundation
9
-
10
- enum LineCap: Int, Codable {
11
- case none
12
- case butt
13
- case round
14
- case square
15
- }
16
-
17
- enum LineJoin: Int, Codable {
18
- case none
19
- case miter
20
- case round
21
- case bevel
22
- }
23
-
24
- /// An item that define an ellipse shape
25
- final class GradientStroke: ShapeItem {
26
-
27
- /// The opacity of the fill
28
- let opacity: KeyframeGroup<Vector1D>
29
-
30
- /// The start of the gradient
31
- let startPoint: KeyframeGroup<Vector3D>
32
-
33
- /// The end of the gradient
34
- let endPoint: KeyframeGroup<Vector3D>
35
-
36
- /// The type of gradient
37
- let gradientType: GradientType
38
-
39
- /// Gradient Highlight Length. Only if type is Radial
40
- let highlightLength: KeyframeGroup<Vector1D>?
41
-
42
- /// Highlight Angle. Only if type is Radial
43
- let highlightAngle: KeyframeGroup<Vector1D>?
44
-
45
- /// The number of color points in the gradient
46
- let numberOfColors: Int
47
-
48
- /// The Colors of the gradient.
49
- let colors: KeyframeGroup<[Double]>
50
-
51
- /// The width of the stroke
52
- let width: KeyframeGroup<Vector1D>
53
-
54
- /// Line Cap
55
- let lineCap: LineCap
56
-
57
- /// Line Join
58
- let lineJoin: LineJoin
59
-
60
- /// Miter Limit
61
- let miterLimit: Double
62
-
63
- /// The dash pattern of the stroke
64
- let dashPattern: [DashElement]?
65
-
66
- private enum CodingKeys : String, CodingKey {
67
- case opacity = "o"
68
- case startPoint = "s"
69
- case endPoint = "e"
70
- case gradientType = "t"
71
- case highlightLength = "h"
72
- case highlightAngle = "a"
73
- case colors = "g"
74
- case width = "w"
75
- case lineCap = "lc"
76
- case lineJoin = "lj"
77
- case miterLimit = "ml"
78
- case dashPattern = "d"
79
- }
80
-
81
- private enum GradientDataKeys : String, CodingKey {
82
- case numberOfColors = "p"
83
- case colors = "k"
84
- }
85
-
86
- required init(from decoder: Decoder) throws {
87
- let container = try decoder.container(keyedBy: GradientStroke.CodingKeys.self)
88
- self.opacity = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .opacity)
89
- self.startPoint = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .startPoint)
90
- self.endPoint = try container.decode(KeyframeGroup<Vector3D>.self, forKey: .endPoint)
91
- self.gradientType = try container.decode(GradientType.self, forKey: .gradientType)
92
- self.highlightLength = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .highlightLength)
93
- self.highlightAngle = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .highlightAngle)
94
- self.width = try container.decode(KeyframeGroup<Vector1D>.self, forKey: .width)
95
- self.lineCap = try container.decodeIfPresent(LineCap.self, forKey: .lineCap) ?? .round
96
- self.lineJoin = try container.decodeIfPresent(LineJoin.self, forKey: .lineJoin) ?? .round
97
- self.miterLimit = try container.decodeIfPresent(Double.self, forKey: .miterLimit) ?? 4
98
- // TODO Decode Color Objects instead of array.
99
- let colorsContainer = try container.nestedContainer(keyedBy: GradientDataKeys.self, forKey: .colors)
100
- self.colors = try colorsContainer.decode(KeyframeGroup<[Double]>.self, forKey: .colors)
101
- self.numberOfColors = try colorsContainer.decode(Int.self, forKey: .numberOfColors)
102
- self.dashPattern = try container.decodeIfPresent([DashElement].self, forKey: .dashPattern)
103
- try super.init(from: decoder)
104
- }
105
-
106
- override func encode(to encoder: Encoder) throws {
107
- try super.encode(to: encoder)
108
- var container = encoder.container(keyedBy: CodingKeys.self)
109
- try container.encode(opacity, forKey: .opacity)
110
- try container.encode(startPoint, forKey: .startPoint)
111
- try container.encode(endPoint, forKey: .endPoint)
112
- try container.encode(gradientType, forKey: .gradientType)
113
- try container.encodeIfPresent(highlightLength, forKey: .highlightLength)
114
- try container.encodeIfPresent(highlightAngle, forKey: .highlightAngle)
115
- try container.encode(width, forKey: .width)
116
- try container.encode(lineCap, forKey: .lineCap)
117
- try container.encode(lineJoin, forKey: .lineJoin)
118
- try container.encode(miterLimit, forKey: .miterLimit)
119
- var colorsContainer = container.nestedContainer(keyedBy: GradientDataKeys.self, forKey: .colors)
120
- try colorsContainer.encode(numberOfColors, forKey: .numberOfColors)
121
- try colorsContainer.encode(colors, forKey: .colors)
122
- try container.encodeIfPresent(dashPattern, forKey: .dashPattern)
123
- }
124
-
125
- }
@@ -1,32 +0,0 @@
1
- //
2
- // GroupItem.swift
3
- // lottie-swift
4
- //
5
- // Created by Brandon Withrow on 1/8/19.
6
- //
7
-
8
- import Foundation
9
-
10
- /// An item that define an ellipse shape
11
- final class Group: ShapeItem {
12
-
13
- /// A list of shape items.
14
- let items: [ShapeItem]
15
-
16
- private enum CodingKeys : String, CodingKey {
17
- case items = "it"
18
- }
19
-
20
- required init(from decoder: Decoder) throws {
21
- let container = try decoder.container(keyedBy: Group.CodingKeys.self)
22
- self.items = try container.decode([ShapeItem].self, ofFamily: ShapeType.self, forKey: .items)
23
- try super.init(from: decoder)
24
- }
25
-
26
- override func encode(to encoder: Encoder) throws {
27
- try super.encode(to: encoder)
28
- var container = encoder.container(keyedBy: CodingKeys.self)
29
- try container.encode(items, forKey: .items)
30
- }
31
-
32
- }