lottie-ios 3.2.0 → 3.4.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 (585) hide show
  1. package/.github/FUNDING.yml +1 -1
  2. package/.github/actions/setup/action.yml +32 -0
  3. package/.github/issue_template.md +6 -23
  4. package/.github/workflows/main.yml +95 -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/xcuserdata/{brandonwithrow.xcuserdatad → cal.xcuserdatad}/xcschemes/xcschememanagement.plist +25 -15
  9. package/.swiftpm/xcode/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  10. package/Gemfile +4 -0
  11. package/Gemfile.lock +102 -0
  12. package/Lottie.xcodeproj/project.pbxproj +2005 -1974
  13. package/Lottie.xcodeproj/project.xcworkspace/contents.xcworkspacedata +1 -1
  14. package/Lottie.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +23 -0
  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_macOS.xcscheme → Lottie (macOS).xcscheme } +7 -20
  18. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_tvOS.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 +39 -0
  29. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +25 -0
  30. package/Mintfile +3 -0
  31. package/Package.swift +5 -15
  32. package/README.md +40 -59
  33. package/Rakefile +125 -0
  34. package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +76 -0
  35. package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +322 -0
  36. package/Sources/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +53 -0
  37. package/Sources/Private/CoreAnimation/Animations/CustomPathAnimation.swift +41 -0
  38. package/Sources/Private/CoreAnimation/Animations/EllipseAnimation.swift +28 -0
  39. package/Sources/Private/CoreAnimation/Animations/GradientAnimations.swift +167 -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 +31 -0
  43. package/Sources/Private/CoreAnimation/Animations/ShapeAnimation.swift +246 -0
  44. package/Sources/Private/CoreAnimation/Animations/StarAnimation.swift +95 -0
  45. package/Sources/Private/CoreAnimation/Animations/StrokeAnimation.swift +70 -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 +492 -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 +61 -0
  53. package/Sources/Private/CoreAnimation/Layers/AnimationLayer.swift +77 -0
  54. package/Sources/Private/CoreAnimation/Layers/BaseAnimationLayer.swift +33 -0
  55. package/Sources/Private/CoreAnimation/Layers/BaseCompositionLayer.swift +87 -0
  56. package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +131 -0
  57. package/Sources/Private/CoreAnimation/Layers/GradientRenderLayer.swift +87 -0
  58. package/Sources/Private/CoreAnimation/Layers/ImageLayer.swift +79 -0
  59. package/Sources/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift +60 -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/ShapeItemLayer.swift +259 -0
  63. package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +305 -0
  64. package/Sources/Private/CoreAnimation/Layers/SolidLayer.swift +47 -0
  65. package/Sources/Private/CoreAnimation/Layers/TextLayer.swift +91 -0
  66. package/Sources/Private/CoreAnimation/Layers/TransformLayer.swift +11 -0
  67. package/Sources/Private/CoreAnimation/ValueProviderStore.swift +139 -0
  68. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/CompositionLayer.swift +94 -86
  69. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ImageCompositionLayer.swift +24 -21
  70. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/MaskContainerLayer.swift +77 -54
  71. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/NullCompositionLayer.swift +5 -5
  72. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/PreCompositionLayer.swift +59 -42
  73. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/ShapeCompositionLayer.swift +22 -20
  74. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/SolidCompositionLayer.swift +26 -17
  75. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/CompLayers/TextCompositionLayer.swift +46 -35
  76. package/{lottie-swift/src/Private/LayerContainers/AnimationContainer.swift → Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift} +203 -135
  77. package/Sources/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift +47 -0
  78. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/CompositionLayersInitializer.swift +33 -24
  79. package/{lottie-swift/src/Private/LayerContainers/Utility/TextLayer.swift → Sources/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift} +122 -106
  80. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/InvertedMatteLayer.swift +25 -24
  81. package/Sources/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift +41 -0
  82. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerImageProvider.swift +20 -16
  83. package/Sources/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift +40 -0
  84. package/{lottie-swift/src/Private → Sources/Private/MainThread}/LayerContainers/Utility/LayerTransformNode.swift +83 -67
  85. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Extensions/ItemsExtension.swift +6 -4
  86. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/NodeProperty.swift +29 -21
  87. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift +16 -10
  88. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift +7 -7
  89. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift +5 -5
  90. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift +10 -8
  91. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueContainer.swift +25 -21
  92. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift +23 -17
  93. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/NodeProperties/ValueProviders/KeyframeInterpolator.swift +128 -108
  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 +113 -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 +242 -0
  101. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift +29 -22
  102. package/{lottie-swift/src/Private/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift → Sources/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift} +92 -65
  103. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift +22 -18
  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 +94 -57
  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 +105 -66
  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 +54 -42
  112. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +65 -57
  113. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +84 -58
  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 +81 -80
  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 +26 -24
  119. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift +32 -27
  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 +197 -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 +75 -0
  141. package/Sources/Private/Model/ShapeItems/Fill.swift +74 -0
  142. package/Sources/Private/Model/ShapeItems/GradientFill.swift +124 -0
  143. package/Sources/Private/Model/ShapeItems/GradientStroke.swift +186 -0
  144. package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Group.swift +21 -10
  145. package/{lottie-swift/src → Sources}/Private/Model/ShapeItems/Merge.swift +29 -11
  146. package/Sources/Private/Model/ShapeItems/Rectangle.swift +73 -0
  147. package/Sources/Private/Model/ShapeItems/Repeater.swift +136 -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 +136 -0
  151. package/Sources/Private/Model/ShapeItems/Star.swift +132 -0
  152. package/Sources/Private/Model/ShapeItems/Stroke.swift +102 -0
  153. package/Sources/Private/Model/ShapeItems/Trim.swift +78 -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 +165 -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 -47
  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 +451 -0
  168. package/Sources/Private/Utility/Extensions/StringExtensions.swift +39 -0
  169. package/{lottie-swift/src → Sources}/Private/Utility/Helpers/AnimationContext.swift +42 -16
  170. package/Sources/Private/Utility/Interpolatable/InterpolatableExtensions.swift +135 -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 → Sources}/Private/Utility/Primitives/BezierPath.swift +229 -142
  174. package/Sources/Private/Utility/Primitives/CGPointExtension.swift +35 -0
  175. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/ColorExtension.swift +46 -14
  176. package/{lottie-swift/src → Sources}/Private/Utility/Primitives/CompoundBezierPath.swift +58 -49
  177. package/Sources/Private/Utility/Primitives/CurveVertex.swift +186 -0
  178. package/Sources/Private/Utility/Primitives/PathElement.swift +75 -0
  179. package/Sources/Private/Utility/Primitives/UnitBezier.swift +115 -0
  180. package/Sources/Private/Utility/Primitives/VectorsExtensions.swift +341 -0
  181. package/Sources/Public/Animation/AnimationPublic.swift +269 -0
  182. package/Sources/Public/Animation/AnimationView.swift +1315 -0
  183. package/Sources/Public/Animation/AnimationViewInitializers.swift +107 -0
  184. package/Sources/Public/AnimationCache/AnimationCacheProvider.swift +22 -0
  185. package/{lottie-swift/src → Sources}/Public/AnimationCache/LRUAnimationCache.swift +22 -18
  186. package/Sources/Public/DynamicProperties/AnimationKeypath.swift +49 -0
  187. package/Sources/Public/DynamicProperties/AnyValueProvider.swift +132 -0
  188. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift +54 -36
  189. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift +40 -36
  190. package/Sources/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +125 -0
  191. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/PointValueProvider.swift +40 -35
  192. package/{lottie-swift/src → Sources}/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift +40 -35
  193. package/{lottie-swift/src → Sources}/Public/FontProvider/AnimationFontProvider.swift +15 -8
  194. package/Sources/Public/ImageProvider/AnimationImageProvider.swift +21 -0
  195. package/Sources/Public/Keyframes/Interpolatable.swift +253 -0
  196. package/Sources/Public/Keyframes/Keyframe.swift +92 -0
  197. package/Sources/Public/Logging/LottieLogger.swift +124 -0
  198. package/Sources/Public/LottieConfiguration.swift +143 -0
  199. package/{lottie-swift/src → Sources}/Public/Primitives/AnimationTime.swift +1 -1
  200. package/{lottie-swift/src → Sources}/Public/Primitives/Color.swift +10 -6
  201. package/{lottie-swift/src → Sources}/Public/Primitives/Vectors.swift +13 -12
  202. package/Sources/Public/TextProvider/AnimationTextProvider.swift +53 -0
  203. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedButton.swift +37 -27
  204. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedControl.swift +103 -92
  205. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedSwitch.swift +124 -93
  206. package/{lottie-swift/src → Sources}/Public/iOS/AnimationSubview.swift +4 -4
  207. package/Sources/Public/iOS/AnimationViewBase.swift +78 -0
  208. package/{lottie-swift/src → Sources}/Public/iOS/BundleImageProvider.swift +38 -35
  209. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +5 -1
  210. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationView.swift +39 -30
  211. package/{lottie-swift/src → Sources}/Public/iOS/FilepathImageProvider.swift +25 -21
  212. package/{lottie-swift/src → Sources}/Public/iOS/UIColorExtension.swift +5 -5
  213. package/{lottie-swift/src/Public/MacOS/AnimationSubview.swift → Sources/Public/macOS/AnimationSubview.macOS.swift} +4 -5
  214. package/{lottie-swift/src/Public/MacOS/LottieView.swift → Sources/Public/macOS/AnimationViewBase.macOS.swift} +58 -50
  215. package/{lottie-swift/src/Public/MacOS/BundleImageProvider.swift → Sources/Public/macOS/BundleImageProvider.macOS.swift} +32 -32
  216. package/Sources/Public/macOS/FilepathImageProvider.macOS.swift +69 -0
  217. package/Tests/AnimationKeypathTests.swift +94 -0
  218. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~-7Vi1RszY1XYnR2CCkEwIpKG8NwwA9zsZEz_WD7Dv6kKh4RC7N7ob8NIRVHGUJKp7eXxlpeI_gzD87Pcs_2u0g== +0 -0
  219. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~-SKV2drO-SFlrlh-wrzECDMkUSr-aF1lV9h-5onOy94zSTsD-oI45s0-KpOK45L-kq3hRY7v9vm-xmh00_eheg== +0 -0
  220. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~-_CU_vuaiFfObSeDFfmp7GuB20ThMSAL-P_RUMowiQLbdu-y0bU9upIm3q8g6XmXUG5hP6J1az0Ma5Hi_rhhRg== +0 -0
  221. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~03aPYP6VHJjZj5DlphGarj0xdw43qu09Onx5SReZoPvg9zh5uL212E-KWfGct9jf6JG0JFV2tdbBi7X_8bH9aw== +0 -0
  222. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~1Z82GPBBPc1VLvn4O7V5glb6lgyXteNlDREUzV_TPymM4ra4UkBMklzV90lEqoYRCDuRVzaQHaDYbmYp3-8CFw== +0 -0
  223. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~1mFDCboXpUu9pSHAiVGr1O_QgqEEtvJp_LUhickxLZo0Z5pj3fvadn1l2MzEOd4bFsVBZifUvcyPa7dzlMWF-A== +0 -0
  224. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~2_L9PUjv2JDKu1n8bDLb4XLB-yex6ZVjDDMwfuKAr7teDw-SKgLgkW6H-m_gjWChIVdB4vW6yvHP7XJxvXtRNA== +0 -0
  225. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~4VqMqsI5lOfxRppnud6-VDWcNsU8J7VgFCJfW2dXPwOcAkvU-I8Um5yp9n0Zv6nr3VmcxYggaVMDFfR0U_vjKw== +1 -0
  226. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~4krT4ZMzDOu34msFUq0Xod142kw4pAeSWX4JSxlsjOI0Wanu3343qeespgFi61MTWq1DdH9XXspVKqGlGm_fyw== +0 -0
  227. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~5_aJsdP-e3dRTAUnH-y1U2plaCuUi1vyHriaZuNK0xFe8wGl9Qft6uLCX2Qt6CRBKJQluEe9o0uRWw1eb42FHQ== +0 -0
  228. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~8b0bSqV7eND54zvHvu1v2Htpm7yn-BOEFw5d3mITJrXWNykJ5BTR9WbrD80JEctNcT-rDqO2xfrQk1tFWeY6Sw== +0 -0
  229. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~9u8KAGpgtSm-mQ12Py8RZUbYbDlBhM3w1I2MQO53K2CSn6IePp7g65DBcdXTYMfG1bgoJ-6x30fjnGe-2UYsDQ== +0 -0
  230. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~Bw7uMs4wqB9ahfEqGii2FkQ9pvZmG6HGe2hmbAT2wyM5hpn8Xh5dELysMcEz6hEsqmn6HdRdLOLZhC_fNaXzgA== +0 -0
  231. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~BwUq2xXQYuE8ya6HT6lfNsdtEjz5AKGf8GvLY6VBxQyIY1vgj_Gov-3NeM69OS66BQRDK0PG9H4Oyg0R48E4vg== +0 -0
  232. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~EkDVUR6dcnzxV_lYjkrJ5QGMVTCvb_upAoBF6DBu61sQkGvZN3fSRTsJ1XfJIZO-JUzdNoVA3D_CcvokL0gnQg== +0 -0
  233. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~FUkcLSJ8RAuPenM4HFG1R-sN5-cDBGcTxgR2jaVCna7xV0ZTyBHriB1Nn59mariNlJDiCoBtMUQEmauGxWtfBA== +0 -0
  234. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~FqsuZe4RVLOOVUYLTL-GTIohZ8TdSfxx7m2KJtLYFPGOdE4XorTX7Oc7kXbhghPRppXT3jW-slI37M34YNEvLQ== +0 -0
  235. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~G4F_NtyTj3i46fmKm0NorHAeq8tYWWYf6uv5yC1DwzdpWVoYbOPufmFNvdEbxZt4AMdV0gKx3HI46EAXNOQVFg== +0 -0
  236. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~GxetzGUNDgaBBXcTmLK6p9JBDX3I3QPshshbui1IaEWvJbQko-E36tCKwaJYHbleAWz9FqkAM_Tqx3YOmSVkVg== +0 -0
  237. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~H1Wjd5kKWDW4t3SDodxiHV72V8WT0xwPubw5cJTNLkPRLgaILFPh-dpy8EOUNgy1KzrDujFsm9EcTsbuqtMPLA== +0 -0
  238. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~JpI5MH4zCgebUHFpXVn4zjtsGtMNnO7BQZWfNARAB5UWa9gqz6YXHR3uLCJ_AvJ3lh53BUVkavsx9TY2FMmxbA== +0 -0
  239. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~JujNYkJtcux0Ni4QnR64zu4Wz_zYjyKvYaYZm5ypxTLPSzF3_jNE_NO4sdbDamF8wEqWoky1uf4ZE0JT3L607A== +0 -0
  240. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~KJSEA6DKnb2_FRPSqKZGh41eo-C8x448J9kEBrH012bUrZfOSDvrgmIrU0Vz7Ri3gaS9aKKmSaVMvXsHSlTJVA== +0 -0
  241. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~MStOwu3jBlJtcRnxrseVOuhI4kCj--ggFPG7sqrq5w1hjrI3bVyD-bm1Jwyx0noY3wT1rHDEvaGWnV2qsGjGwg== +0 -0
  242. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~McsJ8kFVf3IjhgXIRdw8Xx-EXgbV071bmlj2BBnk52xrWl3sEeiIyxwUsF7mIWvMRWfcFfu4VGHYyqfk2BeHXw== +0 -0
  243. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~NHt9fVe4kDdbxnglKcEwXaRK-WsYEOaD23Kbl8SJPRMYHr_Z6SJd_HmG3BROHHR_M6TgSmucONpDJdTj5tjuFw== +0 -0
  244. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~Nfo2iwCPcfAcOBIVyoUAK0-PIfr5qYxIKZt-uaSaTBdrTNxAuJ1ItmeDPZ3VdJJmxD_c22No7x482bdd3_yYtw== +0 -0
  245. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~S2Qlu11xBhEd5aGSzWsnw1TR8u8PiOF93GO0j5bfNoAFCVzxKOwhRFoIXba2EpQnLQqFdIKyhWN3l70A4GPHmg== +0 -0
  246. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~W7a7M37RO9jgck2zeR0471Pm7e8K0Kqj5tXEouDjvqKZXSrWxMaWD28oqkKKYAiU4608R4S9mM11KyphljdMSw== +0 -0
  247. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~XUo1oyPCrlL7CA74wG-OzQ06VOWJYWvHGFHU7keZN1SKaIXjHX5qi_kBzjG_rBCi89-S8GVmCy7S3PHSjG8SbQ== +0 -0
  248. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~Xh0VmDvFNMELHu08-vrs54pegVyUwwDRxx_nXkwyD0NjnYozyqcGAKAr_QWHmw6F8XyuWg51M9KGpJJIFzzGuw== +0 -0
  249. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~Xve-wMBp_lxVUgD9qH5GwieGP9cAWtm0xULZvdGjBRUMvaevmpCB5gnbMBuIXAO6a1c9v6WUq0jNVX7ut5HvOw== +0 -0
  250. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~ZU1XkZFgnEE22CXEF-pOlcj5f10x-KM1Vw9d4IOLu-NiTZcz7koYPixhdrB1PJr8J-h9NpJmfqEastfxamA1jQ== +0 -0
  251. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~_YkNYEHTsbbtFILJpzH3HenH0t4ShI25dIMdve541CF5bl-jPF3X3F7tq-t5dvP0TEkATsOJdLQdBp1xv4Q-ag== +0 -0
  252. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~boy6mpn2jkwm60jjgQ0TG25UqRdN46LzmgTVCrpy6nBOgkLCGkGHcbceiwjU1itS_vj3-iQX0ZnrWOQrPyfHNA== +0 -0
  253. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~bwzpVZ9hAqGDHhXs2FRA82dfGfLmc7-m0uQhZDDfHHO7hQ17M_Np341BZX4WDLhYYS4cdUgaDodlNpdfpG3nXw== +0 -0
  254. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~cBxe-9PpAGFdAsYkmdN3lJVqEliLcRYlyoAov0aPZfJGwUr_cOm3XpjO7nmf_2eLf8UAx-rycjnJzw07xLrNCA== +1 -0
  255. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~dirWk6W4Pav1oyciuflfJlRu0iuxbYOmrpQapOJ0mV9C1SQ-jvDRv_7h753Cy18-SwULARUdWsyUy3yNNvxF7w== +0 -0
  256. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~ebwZVjSEHroc9jtIm4jd_h_YAqEBcOkAZ4HPNJT8pLCldjRcTq-obQLakxXOhfuoOBlYBoZLuO-Y0lskeZRYKw== +0 -0
  257. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~gfcRcmRIr0h09d0jiZsA7nUeQv2XtapxuYEXZy1Z9um0tTJQvz-O5ef5f7zhLenLvjnDtDtlY_aY4Hvpce6e1Q== +0 -0
  258. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~hgOgiVCyv2R0W-f0qKw5xYPeUwj8_ccCM9vKH_7vAQcCO9t8BwR1APGRBv20AONmp-PYMXmtgsBlQkNBRBpdQA== +0 -0
  259. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~hrhCl-YRAAr8ByNB_LCgEBsVNHMp92gTIUknetpUHMjcXl4Hpn_uY-h6C45oga0ZALnfGCo6iKTmiPLa4Qvnpg== +0 -0
  260. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~n2yoR7JsyL4DSUwmjnpE4Iq9Qi_eeZrmpPU8cdehDFKfESK7nwxXxfrSMQbk0BQ2lgGPadoRcd1-qr1xVz97jA== +0 -0
  261. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~nMCcZm8WvPogyO_nuJ926Q3Q2dqVMN2LdjEL1Kq2wJ_RG-rH-e_6v41l1xZbCsQTa3XykQdEiXNc0HtAvT6IRA== +0 -0
  262. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~oc3C7xkUt-OWDL6rrsxs-seS4Fu1bqBWAAXCHalgShaGg9MUrOiRbHT2DcAnhyQFKx6x5FRbvjmYoQWrQiXJZA== +0 -0
  263. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~p-ihj7SEgkDXpMu9hvKE_wiX9cvtwyXrdIn964BfedXHKGpC6o7mMPxEyC0kRPVi_EZs_MRV5bAPEpl5h5we0g== +0 -0
  264. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~qlhO_D9oE8uSKH-mZqyRF9pp4Zv1Tv0dIYcqrH4hb1VWlIxcdxmg2j0M8496cQeFXC5bn_JMXdBlD-d6cnFF8w== +0 -0
  265. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~tjpiyIxJR_boTdUNrtFDuKIZoY84fI4lA1oMJbq9e2ZmYKIK5FeRN2O8cV_yMOYJGr4lbv03kTmT70mCjUc2_Q== +0 -0
  266. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~wULeoj18eEKJWAKx1uFQVwS48cUGFcYPRJQj1Ro5XNJsWCwppGSCdIPhwifD6Z2f_j3zfI2SmC2Gg81sBXXW7g== +0 -0
  267. package/Tests/Artifacts/LottieTests.xcresult/Data/data.0~zrEihMys4NVV5rx6FmuzEGO2TjloI3OiC7yzIhvqYoRo43ibb2F-Km6Jf4NX-ac62pOLBYZRcjQTvYMpn75_oA== +0 -0
  268. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~-7Vi1RszY1XYnR2CCkEwIpKG8NwwA9zsZEz_WD7Dv6kKh4RC7N7ob8NIRVHGUJKp7eXxlpeI_gzD87Pcs_2u0g== +0 -0
  269. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~-SKV2drO-SFlrlh-wrzECDMkUSr-aF1lV9h-5onOy94zSTsD-oI45s0-KpOK45L-kq3hRY7v9vm-xmh00_eheg== +0 -0
  270. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~-_CU_vuaiFfObSeDFfmp7GuB20ThMSAL-P_RUMowiQLbdu-y0bU9upIm3q8g6XmXUG5hP6J1az0Ma5Hi_rhhRg== +0 -0
  271. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~03aPYP6VHJjZj5DlphGarj0xdw43qu09Onx5SReZoPvg9zh5uL212E-KWfGct9jf6JG0JFV2tdbBi7X_8bH9aw== +0 -0
  272. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~1Z82GPBBPc1VLvn4O7V5glb6lgyXteNlDREUzV_TPymM4ra4UkBMklzV90lEqoYRCDuRVzaQHaDYbmYp3-8CFw== +0 -0
  273. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~1mFDCboXpUu9pSHAiVGr1O_QgqEEtvJp_LUhickxLZo0Z5pj3fvadn1l2MzEOd4bFsVBZifUvcyPa7dzlMWF-A== +0 -0
  274. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~2_L9PUjv2JDKu1n8bDLb4XLB-yex6ZVjDDMwfuKAr7teDw-SKgLgkW6H-m_gjWChIVdB4vW6yvHP7XJxvXtRNA== +0 -0
  275. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~4VqMqsI5lOfxRppnud6-VDWcNsU8J7VgFCJfW2dXPwOcAkvU-I8Um5yp9n0Zv6nr3VmcxYggaVMDFfR0U_vjKw== +0 -0
  276. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~4krT4ZMzDOu34msFUq0Xod142kw4pAeSWX4JSxlsjOI0Wanu3343qeespgFi61MTWq1DdH9XXspVKqGlGm_fyw== +0 -0
  277. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~5_aJsdP-e3dRTAUnH-y1U2plaCuUi1vyHriaZuNK0xFe8wGl9Qft6uLCX2Qt6CRBKJQluEe9o0uRWw1eb42FHQ== +0 -0
  278. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~8b0bSqV7eND54zvHvu1v2Htpm7yn-BOEFw5d3mITJrXWNykJ5BTR9WbrD80JEctNcT-rDqO2xfrQk1tFWeY6Sw== +0 -0
  279. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~9u8KAGpgtSm-mQ12Py8RZUbYbDlBhM3w1I2MQO53K2CSn6IePp7g65DBcdXTYMfG1bgoJ-6x30fjnGe-2UYsDQ== +0 -0
  280. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~Bw7uMs4wqB9ahfEqGii2FkQ9pvZmG6HGe2hmbAT2wyM5hpn8Xh5dELysMcEz6hEsqmn6HdRdLOLZhC_fNaXzgA== +0 -0
  281. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~BwUq2xXQYuE8ya6HT6lfNsdtEjz5AKGf8GvLY6VBxQyIY1vgj_Gov-3NeM69OS66BQRDK0PG9H4Oyg0R48E4vg== +0 -0
  282. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~EkDVUR6dcnzxV_lYjkrJ5QGMVTCvb_upAoBF6DBu61sQkGvZN3fSRTsJ1XfJIZO-JUzdNoVA3D_CcvokL0gnQg== +0 -0
  283. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~FUkcLSJ8RAuPenM4HFG1R-sN5-cDBGcTxgR2jaVCna7xV0ZTyBHriB1Nn59mariNlJDiCoBtMUQEmauGxWtfBA== +0 -0
  284. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~FqsuZe4RVLOOVUYLTL-GTIohZ8TdSfxx7m2KJtLYFPGOdE4XorTX7Oc7kXbhghPRppXT3jW-slI37M34YNEvLQ== +0 -0
  285. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~G4F_NtyTj3i46fmKm0NorHAeq8tYWWYf6uv5yC1DwzdpWVoYbOPufmFNvdEbxZt4AMdV0gKx3HI46EAXNOQVFg== +0 -0
  286. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~GxetzGUNDgaBBXcTmLK6p9JBDX3I3QPshshbui1IaEWvJbQko-E36tCKwaJYHbleAWz9FqkAM_Tqx3YOmSVkVg== +0 -0
  287. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~H1Wjd5kKWDW4t3SDodxiHV72V8WT0xwPubw5cJTNLkPRLgaILFPh-dpy8EOUNgy1KzrDujFsm9EcTsbuqtMPLA== +0 -0
  288. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~JpI5MH4zCgebUHFpXVn4zjtsGtMNnO7BQZWfNARAB5UWa9gqz6YXHR3uLCJ_AvJ3lh53BUVkavsx9TY2FMmxbA== +0 -0
  289. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~JujNYkJtcux0Ni4QnR64zu4Wz_zYjyKvYaYZm5ypxTLPSzF3_jNE_NO4sdbDamF8wEqWoky1uf4ZE0JT3L607A== +0 -0
  290. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~KJSEA6DKnb2_FRPSqKZGh41eo-C8x448J9kEBrH012bUrZfOSDvrgmIrU0Vz7Ri3gaS9aKKmSaVMvXsHSlTJVA== +0 -0
  291. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~MStOwu3jBlJtcRnxrseVOuhI4kCj--ggFPG7sqrq5w1hjrI3bVyD-bm1Jwyx0noY3wT1rHDEvaGWnV2qsGjGwg== +0 -0
  292. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~McsJ8kFVf3IjhgXIRdw8Xx-EXgbV071bmlj2BBnk52xrWl3sEeiIyxwUsF7mIWvMRWfcFfu4VGHYyqfk2BeHXw== +0 -0
  293. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~NHt9fVe4kDdbxnglKcEwXaRK-WsYEOaD23Kbl8SJPRMYHr_Z6SJd_HmG3BROHHR_M6TgSmucONpDJdTj5tjuFw== +0 -0
  294. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~Nfo2iwCPcfAcOBIVyoUAK0-PIfr5qYxIKZt-uaSaTBdrTNxAuJ1ItmeDPZ3VdJJmxD_c22No7x482bdd3_yYtw== +0 -0
  295. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~S2Qlu11xBhEd5aGSzWsnw1TR8u8PiOF93GO0j5bfNoAFCVzxKOwhRFoIXba2EpQnLQqFdIKyhWN3l70A4GPHmg== +0 -0
  296. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~W7a7M37RO9jgck2zeR0471Pm7e8K0Kqj5tXEouDjvqKZXSrWxMaWD28oqkKKYAiU4608R4S9mM11KyphljdMSw== +0 -0
  297. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~XUo1oyPCrlL7CA74wG-OzQ06VOWJYWvHGFHU7keZN1SKaIXjHX5qi_kBzjG_rBCi89-S8GVmCy7S3PHSjG8SbQ== +0 -0
  298. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~Xh0VmDvFNMELHu08-vrs54pegVyUwwDRxx_nXkwyD0NjnYozyqcGAKAr_QWHmw6F8XyuWg51M9KGpJJIFzzGuw== +0 -0
  299. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~Xve-wMBp_lxVUgD9qH5GwieGP9cAWtm0xULZvdGjBRUMvaevmpCB5gnbMBuIXAO6a1c9v6WUq0jNVX7ut5HvOw== +0 -0
  300. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~ZU1XkZFgnEE22CXEF-pOlcj5f10x-KM1Vw9d4IOLu-NiTZcz7koYPixhdrB1PJr8J-h9NpJmfqEastfxamA1jQ== +0 -0
  301. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~_YkNYEHTsbbtFILJpzH3HenH0t4ShI25dIMdve541CF5bl-jPF3X3F7tq-t5dvP0TEkATsOJdLQdBp1xv4Q-ag== +0 -0
  302. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~boy6mpn2jkwm60jjgQ0TG25UqRdN46LzmgTVCrpy6nBOgkLCGkGHcbceiwjU1itS_vj3-iQX0ZnrWOQrPyfHNA== +0 -0
  303. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~bwzpVZ9hAqGDHhXs2FRA82dfGfLmc7-m0uQhZDDfHHO7hQ17M_Np341BZX4WDLhYYS4cdUgaDodlNpdfpG3nXw== +0 -0
  304. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~cBxe-9PpAGFdAsYkmdN3lJVqEliLcRYlyoAov0aPZfJGwUr_cOm3XpjO7nmf_2eLf8UAx-rycjnJzw07xLrNCA== +0 -0
  305. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~dirWk6W4Pav1oyciuflfJlRu0iuxbYOmrpQapOJ0mV9C1SQ-jvDRv_7h753Cy18-SwULARUdWsyUy3yNNvxF7w== +0 -0
  306. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~ebwZVjSEHroc9jtIm4jd_h_YAqEBcOkAZ4HPNJT8pLCldjRcTq-obQLakxXOhfuoOBlYBoZLuO-Y0lskeZRYKw== +0 -0
  307. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~gfcRcmRIr0h09d0jiZsA7nUeQv2XtapxuYEXZy1Z9um0tTJQvz-O5ef5f7zhLenLvjnDtDtlY_aY4Hvpce6e1Q== +0 -0
  308. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~hgOgiVCyv2R0W-f0qKw5xYPeUwj8_ccCM9vKH_7vAQcCO9t8BwR1APGRBv20AONmp-PYMXmtgsBlQkNBRBpdQA== +0 -0
  309. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~hrhCl-YRAAr8ByNB_LCgEBsVNHMp92gTIUknetpUHMjcXl4Hpn_uY-h6C45oga0ZALnfGCo6iKTmiPLa4Qvnpg== +0 -0
  310. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~n2yoR7JsyL4DSUwmjnpE4Iq9Qi_eeZrmpPU8cdehDFKfESK7nwxXxfrSMQbk0BQ2lgGPadoRcd1-qr1xVz97jA== +0 -0
  311. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~nMCcZm8WvPogyO_nuJ926Q3Q2dqVMN2LdjEL1Kq2wJ_RG-rH-e_6v41l1xZbCsQTa3XykQdEiXNc0HtAvT6IRA== +0 -0
  312. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~oc3C7xkUt-OWDL6rrsxs-seS4Fu1bqBWAAXCHalgShaGg9MUrOiRbHT2DcAnhyQFKx6x5FRbvjmYoQWrQiXJZA== +0 -0
  313. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~p-ihj7SEgkDXpMu9hvKE_wiX9cvtwyXrdIn964BfedXHKGpC6o7mMPxEyC0kRPVi_EZs_MRV5bAPEpl5h5we0g== +0 -0
  314. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~qlhO_D9oE8uSKH-mZqyRF9pp4Zv1Tv0dIYcqrH4hb1VWlIxcdxmg2j0M8496cQeFXC5bn_JMXdBlD-d6cnFF8w== +0 -0
  315. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~tjpiyIxJR_boTdUNrtFDuKIZoY84fI4lA1oMJbq9e2ZmYKIK5FeRN2O8cV_yMOYJGr4lbv03kTmT70mCjUc2_Q== +0 -0
  316. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~wULeoj18eEKJWAKx1uFQVwS48cUGFcYPRJQj1Ro5XNJsWCwppGSCdIPhwifD6Z2f_j3zfI2SmC2Gg81sBXXW7g== +0 -0
  317. package/Tests/Artifacts/LottieTests.xcresult/Data/refs.0~zrEihMys4NVV5rx6FmuzEGO2TjloI3OiC7yzIhvqYoRo43ibb2F-Km6Jf4NX-ac62pOLBYZRcjQTvYMpn75_oA== +0 -0
  318. package/Tests/Artifacts/LottieTests.xcresult/Info.plist +29 -0
  319. package/Tests/AutomaticEngineTests.swift +57 -0
  320. package/Tests/BundleTests.swift +25 -0
  321. package/Tests/DataURLTests.swift +64 -0
  322. package/Tests/ParsingTests.swift +42 -0
  323. package/Tests/PerformanceTests.swift +215 -0
  324. package/Tests/Samples/9squares_AlBoardman.json +1 -0
  325. package/Tests/Samples/Boat_Loader.json +1 -0
  326. package/Tests/Samples/HamburgerArrow.json +1 -0
  327. package/Tests/Samples/IconTransitions.json +1 -0
  328. package/Tests/Samples/Images/dog.png +0 -0
  329. package/Tests/Samples/Issues/issue_1403.json +1 -0
  330. package/Tests/Samples/Issues/issue_1407.json +1 -0
  331. package/Tests/Samples/Issues/issue_1488.json +1 -0
  332. package/Tests/Samples/Issues/issue_1505.json +1 -0
  333. package/Tests/Samples/Issues/issue_1628.json +1 -0
  334. package/Tests/Samples/Issues/pr_1536.json +1 -0
  335. package/Tests/Samples/Issues/pr_1563.json +8439 -0
  336. package/Tests/Samples/Issues/pr_1592.json +5527 -0
  337. package/Tests/Samples/Issues/pr_1599.json +738 -0
  338. package/Tests/Samples/Issues/pr_1604_1.json +1 -0
  339. package/Tests/Samples/Issues/pr_1604_2.json +1 -0
  340. package/Tests/Samples/LottieFiles/LICENSE.md +14 -0
  341. package/Tests/Samples/LottieFiles/bounce_strokes.json +1 -0
  342. package/Tests/Samples/LottieFiles/cactus.json +1 -0
  343. package/Tests/Samples/LottieFiles/dog_car_ride.json +1 -0
  344. package/Tests/Samples/LottieFiles/draft_icon.json +1 -0
  345. package/Tests/Samples/LottieFiles/gradient_1.json +1 -0
  346. package/Tests/Samples/LottieFiles/gradient_2.json +1 -0
  347. package/Tests/Samples/LottieFiles/gradient_pill.json +1 -0
  348. package/Tests/Samples/LottieFiles/gradient_shapes.json +1 -0
  349. package/Tests/Samples/LottieFiles/gradient_square.json +1 -0
  350. package/Tests/Samples/LottieFiles/growth.json +1 -0
  351. package/Tests/Samples/LottieFiles/infinity_loader.json +1 -0
  352. package/Tests/Samples/LottieFiles/loading_dots_1.json +1 -0
  353. package/Tests/Samples/LottieFiles/loading_dots_2.json +1 -0
  354. package/Tests/Samples/LottieFiles/loading_dots_3.json +1 -0
  355. package/Tests/Samples/LottieFiles/loading_gradient_strokes.json +1 -0
  356. package/Tests/Samples/LottieFiles/settings_slider.json +1 -0
  357. package/Tests/Samples/LottieFiles/shop.json +1 -0
  358. package/Tests/Samples/LottieFiles/step_loader.json +1 -0
  359. package/Tests/Samples/LottieLogo1.json +1 -0
  360. package/Tests/Samples/LottieLogo1_masked.json +1 -0
  361. package/Tests/Samples/LottieLogo2.json +1 -0
  362. package/Tests/Samples/MotionCorpse_Jrcanest.json +1 -0
  363. package/Tests/Samples/Nonanimating/BasicLayers.json +1 -0
  364. package/Tests/Samples/Nonanimating/DisableNodesTest.json +1 -0
  365. package/Tests/Samples/Nonanimating/FirstText.json +1 -0
  366. package/Tests/Samples/Nonanimating/GeometryTransformTest.json +1 -0
  367. package/Tests/Samples/Nonanimating/Text_AnimatedProperties.json +1 -0
  368. package/Tests/Samples/Nonanimating/Text_Glyph.json +1 -0
  369. package/Tests/Samples/Nonanimating/Text_NoAnimation.json +1 -0
  370. package/Tests/Samples/Nonanimating/Text_NoGlyph.json +1 -0
  371. package/Tests/Samples/Nonanimating/Zoom.json +1 -0
  372. package/Tests/Samples/Nonanimating/_dog.json +1 -0
  373. package/Tests/Samples/Nonanimating/base64Test.json +1 -0
  374. package/Tests/Samples/Nonanimating/blend_mode_test.json +1 -0
  375. package/Tests/Samples/Nonanimating/keypathTest.json +1 -0
  376. package/Tests/Samples/Nonanimating/verifyLineHeight.json +1 -0
  377. package/Tests/Samples/PinJump.json +1 -0
  378. package/Tests/Samples/Private/BrokenLottieFiles/growth_man.json +874 -0
  379. package/Tests/Samples/Private/BrokenLottieFiles/rocket.json +1 -0
  380. package/Tests/Samples/Private/China_EmptyState_Itinerary.json +1 -0
  381. package/Tests/Samples/Private/LoaderHourglass.json +12070 -0
  382. package/Tests/Samples/Private/README.md +7 -0
  383. package/Tests/Samples/Private/Urgency/alarm_animated.json +1 -0
  384. package/Tests/Samples/Private/Urgency/diamond_animated.json +1 -0
  385. package/Tests/Samples/Private/Urgency/eye_animated.json +1 -0
  386. package/Tests/Samples/Private/Urgency/light_bulb_animated.json +1 -0
  387. package/Tests/Samples/Private/Urgency/light_bulb_static.json +1 -0
  388. package/Tests/Samples/Private/Urgency/piggy_bank_static.json +1 -0
  389. package/Tests/Samples/Private/Urgency/price_tag_legacy.json +1 -0
  390. package/Tests/Samples/Private/Urgency/rausch_alarm.json +1 -0
  391. package/Tests/Samples/Private/Urgency/rausch_alert.json +1 -0
  392. package/Tests/Samples/Private/Urgency/rausch_clock.json +1 -0
  393. package/Tests/Samples/Private/Urgency/rausch_diamond.json +1 -0
  394. package/Tests/Samples/Private/Urgency/rausch_money.json +1 -0
  395. package/Tests/Samples/Private/Urgency/rausch_piggy_bank.json +1 -0
  396. package/Tests/Samples/Private/Urgency/rausch_tag.json +1 -0
  397. package/Tests/Samples/Private/Urgency/red_envelope_animated.json +1 -0
  398. package/Tests/Samples/Private/Urgency/tag_animated.json +1 -0
  399. package/Tests/Samples/Private/Urgency/trophy_animated.json +1 -0
  400. package/Tests/Samples/Private/Urgency/wings_key_animated.json +1 -0
  401. package/Tests/Samples/Private/_flexible.json +1 -0
  402. package/Tests/Samples/Private/aircover.json +1 -0
  403. package/Tests/Samples/Private/belo_spin_rausch.json +1 -0
  404. package/Tests/Samples/Private/celebration.json +2821 -0
  405. package/Tests/Samples/Private/checkbox.json +1 -0
  406. package/Tests/Samples/Private/checkbox_small.json +1 -0
  407. package/Tests/Samples/Private/getting_your_trip_ready.json +3540 -0
  408. package/Tests/Samples/Private/gradient_afternoon.json +1 -0
  409. package/Tests/Samples/Private/gradient_brand.json +1 -0
  410. package/Tests/Samples/Private/gradient_evening.json +1 -0
  411. package/Tests/Samples/Private/gradient_morning.json +1 -0
  412. package/Tests/Samples/Private/issue_1467.json +1 -0
  413. package/Tests/Samples/Private/loading_dots.json +1 -0
  414. package/Tests/Samples/Private/loading_dots_small.json +1 -0
  415. package/Tests/Samples/Private/payment_loader.json +1 -0
  416. package/Tests/Samples/Private/radio_button.json +1 -0
  417. package/Tests/Samples/Private/selfie_intro.json +1 -0
  418. package/Tests/Samples/Private/stepper_add.json +1 -0
  419. package/Tests/Samples/Private/stepper_subtract.json +1 -0
  420. package/Tests/Samples/Private/switch.json +1 -0
  421. package/Tests/Samples/Private/thumb.json +1 -0
  422. package/Tests/Samples/Private/toggle_no.json +1 -0
  423. package/Tests/Samples/Private/toggle_yes.json +1 -0
  424. package/Tests/Samples/Private/user_error_black_and_white.json +1 -0
  425. package/Tests/Samples/Private/user_error_cut_off.json +1 -0
  426. package/Tests/Samples/Switch.json +1 -0
  427. package/Tests/Samples/Switch_States.json +1 -0
  428. package/Tests/Samples/TwitterHeart.json +1 -0
  429. package/Tests/Samples/TwitterHeartButton.json +1 -0
  430. package/Tests/Samples/TypeFace/A.json +1 -0
  431. package/Tests/Samples/TypeFace/Apostrophe.json +1 -0
  432. package/Tests/Samples/TypeFace/B.json +1 -0
  433. package/Tests/Samples/TypeFace/BlinkingCursor.json +1 -0
  434. package/Tests/Samples/TypeFace/C.json +1 -0
  435. package/Tests/Samples/TypeFace/Colon.json +1 -0
  436. package/Tests/Samples/TypeFace/Comma.json +1 -0
  437. package/Tests/Samples/TypeFace/D.json +1 -0
  438. package/Tests/Samples/TypeFace/E.json +1 -0
  439. package/Tests/Samples/TypeFace/F.json +1 -0
  440. package/Tests/Samples/TypeFace/G.json +1 -0
  441. package/Tests/Samples/TypeFace/H.json +1 -0
  442. package/Tests/Samples/TypeFace/I.json +1 -0
  443. package/Tests/Samples/TypeFace/J.json +1 -0
  444. package/Tests/Samples/TypeFace/K.json +1 -0
  445. package/Tests/Samples/TypeFace/L.json +1 -0
  446. package/Tests/Samples/TypeFace/M.json +1 -0
  447. package/Tests/Samples/TypeFace/N.json +1 -0
  448. package/Tests/Samples/TypeFace/O.json +1 -0
  449. package/Tests/Samples/TypeFace/P.json +1 -0
  450. package/Tests/Samples/TypeFace/Q.json +1 -0
  451. package/Tests/Samples/TypeFace/R.json +1 -0
  452. package/Tests/Samples/TypeFace/S.json +1 -0
  453. package/Tests/Samples/TypeFace/T.json +1 -0
  454. package/Tests/Samples/TypeFace/U.json +1 -0
  455. package/Tests/Samples/TypeFace/V.json +1 -0
  456. package/Tests/Samples/TypeFace/W.json +1 -0
  457. package/Tests/Samples/TypeFace/X.json +1 -0
  458. package/Tests/Samples/TypeFace/Y.json +1 -0
  459. package/Tests/Samples/TypeFace/Z.json +1 -0
  460. package/Tests/Samples/Watermelon.json +1 -0
  461. package/Tests/Samples/setValueTest.json +1 -0
  462. package/Tests/Samples/timeremap.json +1 -0
  463. package/Tests/Samples/vcTransition1.json +1 -0
  464. package/Tests/Samples/vcTransition2.json +1 -0
  465. package/Tests/SnapshotConfiguration.swift +153 -0
  466. package/Tests/SnapshotTests.swift +265 -0
  467. package/Tests/Utils/Bundle+Module.swift +30 -0
  468. package/Tests/Utils/HardcodedFontProvider.swift +19 -0
  469. package/Tests/Utils/HardcodedImageProvider.swift +23 -0
  470. package/Tests/Utils/Snapshotting+presentationLayer.swift +47 -0
  471. package/Tests/ValueProvidersTests.swift +27 -0
  472. package/lottie-ios.podspec +12 -12
  473. package/package.json +1 -1
  474. package/script/lint/airbnb.swiftformat +68 -0
  475. package/script/lint/swiftlint.yml +38 -0
  476. package/script/test-carthage/Cartfile +1 -0
  477. package/script/test-carthage/Cartfile.resolved +1 -0
  478. package/script/test-carthage/Carthage/Build/.lottie-ios.version +19 -0
  479. package/script/test-carthage/Carthage/Build/Lottie.xcframework/Info.plist +46 -0
  480. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/BCSymbolMaps/BF971162-BE99-3507-B5B3-11947DC6B176.bcsymbolmap +14778 -0
  481. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/Lottie.framework/Headers/Lottie-Swift.h +673 -0
  482. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/Lottie.framework/Info.plist +0 -0
  483. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/Lottie.framework/Lottie +0 -0
  484. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/Lottie.framework/Modules/Lottie.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  485. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/Lottie.framework/Modules/Lottie.swiftmodule/arm64-apple-ios.swiftmodule +0 -0
  486. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/Lottie.framework/Modules/Lottie.swiftmodule/arm64.swiftdoc +0 -0
  487. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/Lottie.framework/Modules/Lottie.swiftmodule/arm64.swiftmodule +0 -0
  488. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/Lottie.framework/Modules/module.modulemap +4 -0
  489. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/dSYMs/Lottie.framework.dSYM/Contents/Info.plist +20 -0
  490. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64/dSYMs/Lottie.framework.dSYM/Contents/Resources/DWARF/Lottie +0 -0
  491. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Headers/Lottie-Swift.h +1352 -0
  492. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Info.plist +0 -0
  493. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Lottie +0 -0
  494. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/Project/arm64-apple-ios-simulator.swiftsourceinfo +0 -0
  495. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/Project/arm64.swiftsourceinfo +0 -0
  496. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/Project/x86_64-apple-ios-simulator.swiftsourceinfo +0 -0
  497. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/Project/x86_64.swiftsourceinfo +0 -0
  498. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  499. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/arm64-apple-ios-simulator.swiftmodule +0 -0
  500. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/arm64.swiftdoc +0 -0
  501. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/arm64.swiftmodule +0 -0
  502. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  503. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/x86_64-apple-ios-simulator.swiftmodule +0 -0
  504. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/x86_64.swiftdoc +0 -0
  505. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/Lottie.swiftmodule/x86_64.swiftmodule +0 -0
  506. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/Modules/module.modulemap +4 -0
  507. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/Lottie.framework/_CodeSignature/CodeResources +256 -0
  508. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/dSYMs/Lottie.framework.dSYM/Contents/Info.plist +20 -0
  509. package/script/test-carthage/Carthage/Build/Lottie.xcframework/ios-arm64_x86_64-simulator/dSYMs/Lottie.framework.dSYM/Contents/Resources/DWARF/Lottie +0 -0
  510. package/script/test-carthage/Carthage/Checkouts/lottie-ios/Lottie.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  511. package/script/test-carthage/Carthage/Checkouts/lottie-ios/Lottie.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +37 -0
  512. package/script/test-carthage/Carthage/Checkouts/lottie-ios/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  513. package/script/test-carthage/CarthageTest/AppDelegate.swift +27 -0
  514. package/script/test-carthage/CarthageTest/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  515. package/script/test-carthage/CarthageTest/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  516. package/script/test-carthage/CarthageTest/Assets.xcassets/Contents.json +6 -0
  517. package/script/test-carthage/CarthageTest/Base.lproj/LaunchScreen.storyboard +25 -0
  518. package/script/test-carthage/CarthageTest/Base.lproj/Main.storyboard +24 -0
  519. package/script/test-carthage/CarthageTest/Info.plist +66 -0
  520. package/script/test-carthage/CarthageTest/SceneDelegate.swift +10 -0
  521. package/script/test-carthage/CarthageTest/ViewController.swift +15 -0
  522. package/script/test-carthage/CarthageTest.xcodeproj/project.pbxproj +378 -0
  523. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  524. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  525. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  526. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  527. package/script/test-carthage/Mintfile +1 -0
  528. package/script/test-spm/LottieSPM.xcworkspace/contents.xcworkspacedata +7 -0
  529. package/script/test-spm/LottieSPM.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  530. package/script/test-spm/Mintfile +1 -0
  531. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  532. package/Lottie/Info.plist +0 -22
  533. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  534. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/LottieLibraryMacOS.xcscheme +0 -80
  535. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/xcschememanagement.plist +0 -57
  536. package/lottie-swift/Assets/.gitkeep +0 -0
  537. package/lottie-swift/src/Private/LayerContainers/Utility/LayerFontProvider.swift +0 -37
  538. package/lottie-swift/src/Private/LayerContainers/Utility/LayerTextProvider.swift +0 -36
  539. package/lottie-swift/src/Private/Model/Animation.swift +0 -107
  540. package/lottie-swift/src/Private/Model/Assets/Asset.swift +0 -27
  541. package/lottie-swift/src/Private/Model/Assets/ImageAsset.swift +0 -48
  542. package/lottie-swift/src/Private/Model/Keyframes/Keyframe.swift +0 -128
  543. package/lottie-swift/src/Private/Model/Keyframes/KeyframeGroup.swift +0 -108
  544. package/lottie-swift/src/Private/Model/Layers/LayerModel.swift +0 -150
  545. package/lottie-swift/src/Private/Model/Objects/DashPattern.swift +0 -24
  546. package/lottie-swift/src/Private/Model/Objects/Marker.swift +0 -23
  547. package/lottie-swift/src/Private/Model/Objects/Mask.swift +0 -48
  548. package/lottie-swift/src/Private/Model/Objects/Transform.swift +0 -105
  549. package/lottie-swift/src/Private/Model/ShapeItems/Ellipse.swift +0 -50
  550. package/lottie-swift/src/Private/Model/ShapeItems/FillI.swift +0 -49
  551. package/lottie-swift/src/Private/Model/ShapeItems/GradientFill.swift +0 -86
  552. package/lottie-swift/src/Private/Model/ShapeItems/GradientStroke.swift +0 -125
  553. package/lottie-swift/src/Private/Model/ShapeItems/Rectangle.swift +0 -50
  554. package/lottie-swift/src/Private/Model/ShapeItems/Repeater.swift +0 -80
  555. package/lottie-swift/src/Private/Model/ShapeItems/Shape.swift +0 -37
  556. package/lottie-swift/src/Private/Model/ShapeItems/ShapeItem.swift +0 -95
  557. package/lottie-swift/src/Private/Model/ShapeItems/ShapeTransform.swift +0 -68
  558. package/lottie-swift/src/Private/Model/ShapeItems/Star.swift +0 -86
  559. package/lottie-swift/src/Private/Model/ShapeItems/Stroke.swift +0 -67
  560. package/lottie-swift/src/Private/Model/ShapeItems/Trim.swift +0 -53
  561. package/lottie-swift/src/Private/Model/Text/Font.swift +0 -35
  562. package/lottie-swift/src/Private/Model/Text/TextAnimator.swift +0 -99
  563. package/lottie-swift/src/Private/Model/Text/TextDocument.swift +0 -70
  564. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +0 -109
  565. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +0 -132
  566. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +0 -141
  567. package/lottie-swift/src/Private/Utility/Extensions/MathKit.swift +0 -539
  568. package/lottie-swift/src/Private/Utility/Extensions/StringExtensions.swift +0 -32
  569. package/lottie-swift/src/Private/Utility/Interpolatable/Interpolatable.swift +0 -18
  570. package/lottie-swift/src/Private/Utility/Interpolatable/InterpolatableExtensions.swift +0 -170
  571. package/lottie-swift/src/Private/Utility/Primitives/CurveVertex.swift +0 -177
  572. package/lottie-swift/src/Private/Utility/Primitives/PathElement.swift +0 -68
  573. package/lottie-swift/src/Private/Utility/Primitives/VectorsExtensions.swift +0 -218
  574. package/lottie-swift/src/Public/Animation/AnimationPublic.swift +0 -196
  575. package/lottie-swift/src/Public/Animation/AnimationView.swift +0 -1007
  576. package/lottie-swift/src/Public/Animation/AnimationViewInitializers.swift +0 -83
  577. package/lottie-swift/src/Public/AnimationCache/AnimationCacheProvider.swift +0 -24
  578. package/lottie-swift/src/Public/DynamicProperties/AnimationKeypath.swift +0 -46
  579. package/lottie-swift/src/Public/DynamicProperties/AnyValueProvider.swift +0 -29
  580. package/lottie-swift/src/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +0 -114
  581. package/lottie-swift/src/Public/ImageProvider/AnimationImageProvider.swift +0 -23
  582. package/lottie-swift/src/Public/MacOS/FilepathImageProvider.swift +0 -67
  583. package/lottie-swift/src/Public/TextProvider/AnimationTextProvider.swift +0 -39
  584. package/lottie-swift/src/Public/iOS/LottieView.swift +0 -62
  585. package/lottie-swift-testing.podspec +0 -32
@@ -0,0 +1,228 @@
1
+ //
2
+ // Layer.swift
3
+ // lottie-swift
4
+ //
5
+ // Created by Brandon Withrow on 1/7/19.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ // MARK: - LayerType + ClassFamily
11
+
12
+ /// Used for mapping a heterogeneous list to classes for parsing.
13
+ extension LayerType: ClassFamily {
14
+ static var discriminator: Discriminator = .type
15
+
16
+ func getType() -> AnyObject.Type {
17
+ switch self {
18
+ case .precomp:
19
+ return PreCompLayerModel.self
20
+ case .solid:
21
+ return SolidLayerModel.self
22
+ case .image:
23
+ return ImageLayerModel.self
24
+ case .null:
25
+ return LayerModel.self
26
+ case .shape:
27
+ return ShapeLayerModel.self
28
+ case .text:
29
+ return TextLayerModel.self
30
+ }
31
+ }
32
+ }
33
+
34
+ // MARK: - LayerType
35
+
36
+ public enum LayerType: Int, Codable {
37
+ case precomp
38
+ case solid
39
+ case image
40
+ case null
41
+ case shape
42
+ case text
43
+
44
+ public init(from decoder: Decoder) throws {
45
+ self = try LayerType(rawValue: decoder.singleValueContainer().decode(RawValue.self)) ?? .null
46
+ }
47
+ }
48
+
49
+ // MARK: - MatteType
50
+
51
+ public enum MatteType: Int, Codable {
52
+ case none
53
+ case add
54
+ case invert
55
+ case unknown
56
+ }
57
+
58
+ // MARK: - BlendMode
59
+
60
+ public enum BlendMode: Int, Codable {
61
+ case normal
62
+ case multiply
63
+ case screen
64
+ case overlay
65
+ case darken
66
+ case lighten
67
+ case colorDodge
68
+ case colorBurn
69
+ case hardLight
70
+ case softLight
71
+ case difference
72
+ case exclusion
73
+ case hue
74
+ case saturation
75
+ case color
76
+ case luminosity
77
+ }
78
+
79
+ // MARK: - LayerModel
80
+
81
+ /// A base top container for shapes, images, and other view objects.
82
+ class LayerModel: Codable, DictionaryInitializable {
83
+
84
+ // MARK: Lifecycle
85
+
86
+ required init(from decoder: Decoder) throws {
87
+ let container = try decoder.container(keyedBy: LayerModel.CodingKeys.self)
88
+ name = try container.decodeIfPresent(String.self, forKey: .name) ?? "Layer"
89
+ index = try container.decodeIfPresent(Int.self, forKey: .index) ?? .random(in: Int.min...Int.max)
90
+ type = try container.decode(LayerType.self, forKey: .type)
91
+ coordinateSpace = try container.decodeIfPresent(CoordinateSpace.self, forKey: .coordinateSpace) ?? .type2d
92
+ inFrame = try container.decode(Double.self, forKey: .inFrame)
93
+ outFrame = try container.decode(Double.self, forKey: .outFrame)
94
+ startTime = try container.decode(Double.self, forKey: .startTime)
95
+ transform = try container.decode(Transform.self, forKey: .transform)
96
+ parent = try container.decodeIfPresent(Int.self, forKey: .parent)
97
+ blendMode = try container.decodeIfPresent(BlendMode.self, forKey: .blendMode) ?? .normal
98
+ masks = try container.decodeIfPresent([Mask].self, forKey: .masks)
99
+ timeStretch = try container.decodeIfPresent(Double.self, forKey: .timeStretch) ?? 1
100
+ matte = try container.decodeIfPresent(MatteType.self, forKey: .matte)
101
+ hidden = try container.decodeIfPresent(Bool.self, forKey: .hidden) ?? false
102
+ }
103
+
104
+ required init(dictionary: [String: Any]) throws {
105
+ name = (try? dictionary.value(for: CodingKeys.name)) ?? "Layer"
106
+ index = try dictionary.value(for: CodingKeys.index) ?? .random(in: Int.min...Int.max)
107
+ type = LayerType(rawValue: try dictionary.value(for: CodingKeys.type)) ?? .null
108
+ if
109
+ let coordinateSpaceRawValue = dictionary[CodingKeys.coordinateSpace.rawValue] as? Int,
110
+ let coordinateSpace = CoordinateSpace(rawValue: coordinateSpaceRawValue)
111
+ {
112
+ self.coordinateSpace = coordinateSpace
113
+ } else {
114
+ coordinateSpace = .type2d
115
+ }
116
+ inFrame = try dictionary.value(for: CodingKeys.inFrame)
117
+ outFrame = try dictionary.value(for: CodingKeys.outFrame)
118
+ startTime = try dictionary.value(for: CodingKeys.startTime)
119
+ transform = try Transform(dictionary: try dictionary.value(for: CodingKeys.transform))
120
+ parent = try? dictionary.value(for: CodingKeys.parent)
121
+ if
122
+ let blendModeRawValue = dictionary[CodingKeys.blendMode.rawValue] as? Int,
123
+ let blendMode = BlendMode(rawValue: blendModeRawValue)
124
+ {
125
+ self.blendMode = blendMode
126
+ } else {
127
+ blendMode = .normal
128
+ }
129
+ if let maskDictionaries = dictionary[CodingKeys.masks.rawValue] as? [[String: Any]] {
130
+ masks = try maskDictionaries.map({ try Mask(dictionary: $0) })
131
+ } else {
132
+ masks = nil
133
+ }
134
+ timeStretch = (try? dictionary.value(for: CodingKeys.timeStretch)) ?? 1
135
+ if let matteRawValue = dictionary[CodingKeys.matte.rawValue] as? Int {
136
+ matte = MatteType(rawValue: matteRawValue)
137
+ } else {
138
+ matte = nil
139
+ }
140
+ hidden = (try? dictionary.value(for: CodingKeys.hidden)) ?? false
141
+ }
142
+
143
+ // MARK: Internal
144
+
145
+ /// The readable name of the layer
146
+ let name: String
147
+
148
+ /// The index of the layer
149
+ let index: Int
150
+
151
+ /// The type of the layer.
152
+ let type: LayerType
153
+
154
+ /// The coordinate space
155
+ let coordinateSpace: CoordinateSpace
156
+
157
+ /// The in time of the layer in frames.
158
+ let inFrame: Double
159
+ /// The out time of the layer in frames.
160
+ let outFrame: Double
161
+
162
+ /// The start time of the layer in frames.
163
+ let startTime: Double
164
+
165
+ /// The transform of the layer
166
+ let transform: Transform
167
+
168
+ /// The index of the parent layer, if applicable.
169
+ let parent: Int?
170
+
171
+ /// The blending mode for the layer
172
+ let blendMode: BlendMode
173
+
174
+ /// An array of masks for the layer.
175
+ let masks: [Mask]?
176
+
177
+ /// A number that stretches time by a multiplier
178
+ let timeStretch: Double
179
+
180
+ /// The type of matte if any.
181
+ let matte: MatteType?
182
+
183
+ let hidden: Bool
184
+
185
+ // MARK: Fileprivate
186
+
187
+ fileprivate enum CodingKeys: String, CodingKey {
188
+ case name = "nm"
189
+ case index = "ind"
190
+ case type = "ty"
191
+ case coordinateSpace = "ddd"
192
+ case inFrame = "ip"
193
+ case outFrame = "op"
194
+ case startTime = "st"
195
+ case transform = "ks"
196
+ case parent
197
+ case blendMode = "bm"
198
+ case masks = "masksProperties"
199
+ case timeStretch = "sr"
200
+ case matte = "tt"
201
+ case hidden = "hd"
202
+ }
203
+ }
204
+
205
+ extension Array where Element == LayerModel {
206
+
207
+ static func fromDictionaries(_ dictionaries: [[String: Any]]) throws -> [LayerModel] {
208
+ try dictionaries.compactMap { dictionary in
209
+ let layerType = dictionary[LayerModel.CodingKeys.type.rawValue] as? Int
210
+ switch LayerType(rawValue: layerType ?? LayerType.null.rawValue) {
211
+ case .precomp:
212
+ return try PreCompLayerModel(dictionary: dictionary)
213
+ case .solid:
214
+ return try SolidLayerModel(dictionary: dictionary)
215
+ case .image:
216
+ return try ImageLayerModel(dictionary: dictionary)
217
+ case .null:
218
+ return try LayerModel(dictionary: dictionary)
219
+ case .shape:
220
+ return try ShapeLayerModel(dictionary: dictionary)
221
+ case .text:
222
+ return try TextLayerModel(dictionary: dictionary)
223
+ case .none:
224
+ return nil
225
+ }
226
+ }
227
+ }
228
+ }
@@ -9,35 +9,44 @@ import Foundation
9
9
 
10
10
  /// A layer that holds another animation composition.
11
11
  final class PreCompLayerModel: LayerModel {
12
-
12
+
13
+ // MARK: Lifecycle
14
+
15
+ required init(from decoder: Decoder) throws {
16
+ let container = try decoder.container(keyedBy: PreCompLayerModel.CodingKeys.self)
17
+ referenceID = try container.decode(String.self, forKey: .referenceID)
18
+ timeRemapping = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .timeRemapping)
19
+ width = try container.decode(Double.self, forKey: .width)
20
+ height = try container.decode(Double.self, forKey: .height)
21
+ try super.init(from: decoder)
22
+ }
23
+
24
+ required init(dictionary: [String: Any]) throws {
25
+ referenceID = try dictionary.value(for: CodingKeys.referenceID)
26
+ if let timeRemappingDictionary = dictionary[CodingKeys.timeRemapping.rawValue] as? [String: Any] {
27
+ timeRemapping = try KeyframeGroup<Vector1D>(dictionary: timeRemappingDictionary)
28
+ } else {
29
+ timeRemapping = nil
30
+ }
31
+ width = try dictionary.value(for: CodingKeys.width)
32
+ height = try dictionary.value(for: CodingKeys.height)
33
+ try super.init(dictionary: dictionary)
34
+ }
35
+
36
+ // MARK: Internal
37
+
13
38
  /// The reference ID of the precomp.
14
39
  let referenceID: String
15
-
40
+
16
41
  /// A value that remaps time over time.
17
42
  let timeRemapping: KeyframeGroup<Vector1D>?
18
-
43
+
19
44
  /// Precomp Width
20
45
  let width: Double
21
-
46
+
22
47
  /// Precomp Height
23
48
  let height: Double
24
-
25
- private enum CodingKeys : String, CodingKey {
26
- case referenceID = "refId"
27
- case timeRemapping = "tm"
28
- case width = "w"
29
- case height = "h"
30
- }
31
-
32
- required init(from decoder: Decoder) throws {
33
- let container = try decoder.container(keyedBy: PreCompLayerModel.CodingKeys.self)
34
- self.referenceID = try container.decode(String.self, forKey: .referenceID)
35
- self.timeRemapping = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .timeRemapping)
36
- self.width = try container.decode(Double.self, forKey: .width)
37
- self.height = try container.decode(Double.self, forKey: .height)
38
- try super.init(from: decoder)
39
- }
40
-
49
+
41
50
  override func encode(to encoder: Encoder) throws {
42
51
  try super.encode(to: encoder)
43
52
  var container = encoder.container(keyedBy: CodingKeys.self)
@@ -46,5 +55,13 @@ final class PreCompLayerModel: LayerModel {
46
55
  try container.encode(width, forKey: .width)
47
56
  try container.encode(height, forKey: .height)
48
57
  }
49
-
58
+
59
+ // MARK: Private
60
+
61
+ private enum CodingKeys: String, CodingKey {
62
+ case referenceID = "refId"
63
+ case timeRemapping = "tm"
64
+ case width = "w"
65
+ case height = "h"
66
+ }
50
67
  }
@@ -9,24 +9,35 @@ import Foundation
9
9
 
10
10
  /// A layer that holds vector shape objects.
11
11
  final class ShapeLayerModel: LayerModel {
12
-
13
- /// A list of shape items.
14
- let items: [ShapeItem]
15
-
16
- private enum CodingKeys : String, CodingKey {
17
- case items = "shapes"
18
- }
19
-
12
+
13
+ // MARK: Lifecycle
14
+
20
15
  required init(from decoder: Decoder) throws {
21
16
  let container = try decoder.container(keyedBy: ShapeLayerModel.CodingKeys.self)
22
- self.items = try container.decode([ShapeItem].self, ofFamily: ShapeType.self, forKey: .items)
17
+ items = try container.decode([ShapeItem].self, ofFamily: ShapeType.self, forKey: .items)
23
18
  try super.init(from: decoder)
24
19
  }
25
-
20
+
21
+ required init(dictionary: [String: Any]) throws {
22
+ let itemDictionaries: [[String: Any]] = try dictionary.value(for: CodingKeys.items)
23
+ items = try [ShapeItem].fromDictionaries(itemDictionaries)
24
+ try super.init(dictionary: dictionary)
25
+ }
26
+
27
+ // MARK: Internal
28
+
29
+ /// A list of shape items.
30
+ let items: [ShapeItem]
31
+
26
32
  override func encode(to encoder: Encoder) throws {
27
33
  try super.encode(to: encoder)
28
34
  var container = encoder.container(keyedBy: CodingKeys.self)
29
- try container.encode(self.items, forKey: .items)
35
+ try container.encode(items, forKey: .items)
36
+ }
37
+
38
+ // MARK: Private
39
+
40
+ private enum CodingKeys: String, CodingKey {
41
+ case items = "shapes"
30
42
  }
31
-
32
43
  }
@@ -9,30 +9,35 @@ import Foundation
9
9
 
10
10
  /// A layer that holds a solid color.
11
11
  final class SolidLayerModel: LayerModel {
12
-
12
+
13
+ // MARK: Lifecycle
14
+
15
+ required init(from decoder: Decoder) throws {
16
+ let container = try decoder.container(keyedBy: SolidLayerModel.CodingKeys.self)
17
+ colorHex = try container.decode(String.self, forKey: .colorHex)
18
+ width = try container.decode(Double.self, forKey: .width)
19
+ height = try container.decode(Double.self, forKey: .height)
20
+ try super.init(from: decoder)
21
+ }
22
+
23
+ required init(dictionary: [String: Any]) throws {
24
+ colorHex = try dictionary.value(for: CodingKeys.colorHex)
25
+ width = try dictionary.value(for: CodingKeys.width)
26
+ height = try dictionary.value(for: CodingKeys.height)
27
+ try super.init(dictionary: dictionary)
28
+ }
29
+
30
+ // MARK: Internal
31
+
13
32
  /// The color of the solid in Hex // Change to value provider.
14
33
  let colorHex: String
15
-
34
+
16
35
  /// The Width of the color layer
17
36
  let width: Double
18
-
37
+
19
38
  /// The height of the color layer
20
39
  let height: Double
21
-
22
- private enum CodingKeys : String, CodingKey {
23
- case colorHex = "sc"
24
- case width = "sw"
25
- case height = "sh"
26
- }
27
-
28
- required init(from decoder: Decoder) throws {
29
- let container = try decoder.container(keyedBy: SolidLayerModel.CodingKeys.self)
30
- self.colorHex = try container.decode(String.self, forKey: .colorHex)
31
- self.width = try container.decode(Double.self, forKey: .width)
32
- self.height = try container.decode(Double.self, forKey: .height)
33
- try super.init(from: decoder)
34
- }
35
-
40
+
36
41
  override func encode(to encoder: Encoder) throws {
37
42
  try super.encode(to: encoder)
38
43
  var container = encoder.container(keyedBy: CodingKeys.self)
@@ -40,5 +45,12 @@ final class SolidLayerModel: LayerModel {
40
45
  try container.encode(width, forKey: .width)
41
46
  try container.encode(height, forKey: .height)
42
47
  }
43
-
48
+
49
+ // MARK: Private
50
+
51
+ private enum CodingKeys: String, CodingKey {
52
+ case colorHex = "sc"
53
+ case width = "sw"
54
+ case height = "sh"
55
+ }
44
56
  }
@@ -10,29 +10,33 @@ import Foundation
10
10
  /// A layer that holds text.
11
11
  final class TextLayerModel: LayerModel {
12
12
 
13
- /// The text for the layer
14
- let text: KeyframeGroup<TextDocument>
15
-
16
- /// Text animators
17
- let animators: [TextAnimator]
18
-
19
- private enum CodingKeys : String, CodingKey {
20
- case textGroup = "t"
21
- }
22
-
23
- private enum TextCodingKeys : String, CodingKey {
24
- case text = "d"
25
- case animators = "a"
26
- }
27
-
13
+ // MARK: Lifecycle
14
+
28
15
  required init(from decoder: Decoder) throws {
29
16
  let container = try decoder.container(keyedBy: TextLayerModel.CodingKeys.self)
30
17
  let textContainer = try container.nestedContainer(keyedBy: TextCodingKeys.self, forKey: .textGroup)
31
- self.text = try textContainer.decode(KeyframeGroup<TextDocument>.self, forKey: .text)
32
- self.animators = try textContainer.decode([TextAnimator].self, forKey: .animators)
18
+ text = try textContainer.decode(KeyframeGroup<TextDocument>.self, forKey: .text)
19
+ animators = try textContainer.decode([TextAnimator].self, forKey: .animators)
33
20
  try super.init(from: decoder)
34
21
  }
35
-
22
+
23
+ required init(dictionary: [String: Any]) throws {
24
+ let containerDictionary: [String: Any] = try dictionary.value(for: CodingKeys.textGroup)
25
+ let textDictionary: [String: Any] = try containerDictionary.value(for: TextCodingKeys.text)
26
+ text = try KeyframeGroup<TextDocument>(dictionary: textDictionary)
27
+ let animatorDictionaries: [[String: Any]] = try containerDictionary.value(for: TextCodingKeys.animators)
28
+ animators = try animatorDictionaries.map({ try TextAnimator(dictionary: $0) })
29
+ try super.init(dictionary: dictionary)
30
+ }
31
+
32
+ // MARK: Internal
33
+
34
+ /// The text for the layer
35
+ let text: KeyframeGroup<TextDocument>
36
+
37
+ /// Text animators
38
+ let animators: [TextAnimator]
39
+
36
40
  override func encode(to encoder: Encoder) throws {
37
41
  try super.encode(to: encoder)
38
42
  var container = encoder.container(keyedBy: CodingKeys.self)
@@ -40,5 +44,15 @@ final class TextLayerModel: LayerModel {
40
44
  try textContainer.encode(text, forKey: .text)
41
45
  try textContainer.encode(animators, forKey: .animators)
42
46
  }
43
-
47
+
48
+ // MARK: Private
49
+
50
+ private enum CodingKeys: String, CodingKey {
51
+ case textGroup = "t"
52
+ }
53
+
54
+ private enum TextCodingKeys: String, CodingKey {
55
+ case text = "d"
56
+ case animators = "a"
57
+ }
44
58
  }
@@ -0,0 +1,44 @@
1
+ //
2
+ // DashPattern.swift
3
+ // lottie-swift
4
+ //
5
+ // Created by Brandon Withrow on 1/22/19.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ // MARK: - DashElementType
11
+
12
+ enum DashElementType: String, Codable {
13
+ case offset = "o"
14
+ case dash = "d"
15
+ case gap = "g"
16
+ }
17
+
18
+ // MARK: - DashElement
19
+
20
+ final class DashElement: Codable, DictionaryInitializable {
21
+
22
+ // MARK: Lifecycle
23
+
24
+ init(dictionary: [String: Any]) throws {
25
+ let typeRawValue: String = try dictionary.value(for: CodingKeys.type)
26
+ guard let type = DashElementType(rawValue: typeRawValue) else {
27
+ throw InitializableError.invalidInput
28
+ }
29
+ self.type = type
30
+ let valueDictionary: [String: Any] = try dictionary.value(for: CodingKeys.value)
31
+ value = try KeyframeGroup<Vector1D>(dictionary: valueDictionary)
32
+ }
33
+
34
+ // MARK: Internal
35
+
36
+ enum CodingKeys: String, CodingKey {
37
+ case type = "n"
38
+ case value = "v"
39
+ }
40
+
41
+ let type: DashElementType
42
+ let value: KeyframeGroup<Vector1D>
43
+
44
+ }
@@ -0,0 +1,33 @@
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, DictionaryInitializable {
12
+
13
+ // MARK: Lifecycle
14
+
15
+ init(dictionary: [String: Any]) throws {
16
+ name = try dictionary.value(for: CodingKeys.name)
17
+ frameTime = try dictionary.value(for: CodingKeys.frameTime)
18
+ }
19
+
20
+ // MARK: Internal
21
+
22
+ enum CodingKeys: String, CodingKey {
23
+ case name = "cm"
24
+ case frameTime = "tm"
25
+ }
26
+
27
+ /// The Marker Name
28
+ let name: String
29
+
30
+ /// The Frame time of the marker
31
+ let frameTime: AnimationFrameTime
32
+
33
+ }
@@ -0,0 +1,80 @@
1
+ //
2
+ // Mask.swift
3
+ // lottie-swift
4
+ //
5
+ // Created by Brandon Withrow on 1/8/19.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ // MARK: - MaskMode
11
+
12
+ enum MaskMode: String, Codable {
13
+ case add = "a"
14
+ case subtract = "s"
15
+ case intersect = "i"
16
+ case lighten = "l"
17
+ case darken = "d"
18
+ case difference = "f"
19
+ case none = "n"
20
+ }
21
+
22
+ // MARK: - Mask
23
+
24
+ final class Mask: Codable, DictionaryInitializable {
25
+
26
+ // MARK: Lifecycle
27
+
28
+ required init(from decoder: Decoder) throws {
29
+ let container = try decoder.container(keyedBy: Mask.CodingKeys.self)
30
+ mode = try container.decodeIfPresent(MaskMode.self, forKey: .mode) ?? .add
31
+ opacity = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .opacity) ?? KeyframeGroup(Vector1D(100))
32
+ shape = try container.decode(KeyframeGroup<BezierPath>.self, forKey: .shape)
33
+ inverted = try container.decodeIfPresent(Bool.self, forKey: .inverted) ?? false
34
+ expansion = try container.decodeIfPresent(KeyframeGroup<Vector1D>.self, forKey: .expansion) ?? KeyframeGroup(Vector1D(0))
35
+ }
36
+
37
+ init(dictionary: [String: Any]) throws {
38
+ if
39
+ let modeRawType = dictionary[CodingKeys.mode.rawValue] as? String,
40
+ let mode = MaskMode(rawValue: modeRawType)
41
+ {
42
+ self.mode = mode
43
+ } else {
44
+ mode = .add
45
+ }
46
+ if let opacityDictionary = dictionary[CodingKeys.opacity.rawValue] as? [String: Any] {
47
+ opacity = try KeyframeGroup<Vector1D>(dictionary: opacityDictionary)
48
+ } else {
49
+ opacity = KeyframeGroup(Vector1D(100))
50
+ }
51
+ let shapeDictionary: [String: Any] = try dictionary.value(for: CodingKeys.shape)
52
+ shape = try KeyframeGroup<BezierPath>(dictionary: shapeDictionary)
53
+ inverted = (try? dictionary.value(for: CodingKeys.inverted)) ?? false
54
+ if let expansionDictionary = dictionary[CodingKeys.expansion.rawValue] as? [String: Any] {
55
+ expansion = try KeyframeGroup<Vector1D>(dictionary: expansionDictionary)
56
+ } else {
57
+ expansion = KeyframeGroup(Vector1D(0))
58
+ }
59
+ }
60
+
61
+ // MARK: Internal
62
+
63
+ enum CodingKeys: String, CodingKey {
64
+ case mode
65
+ case opacity = "o"
66
+ case inverted = "inv"
67
+ case shape = "pt"
68
+ case expansion = "x"
69
+ }
70
+
71
+ let mode: MaskMode
72
+
73
+ let opacity: KeyframeGroup<Vector1D>
74
+
75
+ let shape: KeyframeGroup<BezierPath>
76
+
77
+ let inverted: Bool
78
+
79
+ let expansion: KeyframeGroup<Vector1D>
80
+ }