lottie-ios 3.2.2 → 3.4.1

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 (316) 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/.spi.yml +6 -0
  5. package/.swift-version +1 -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 +2003 -1972
  13. package/Lottie.xcodeproj/project.xcworkspace/contents.xcworkspacedata +1 -1
  14. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  15. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_iOS.xcscheme → Lottie (iOS).xcscheme } +15 -18
  16. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_macOS.xcscheme → Lottie (macOS).xcscheme } +7 -20
  17. package/Lottie.xcodeproj/xcshareddata/xcschemes/{Lottie_tvOS.xcscheme → Lottie (tvOS).xcscheme } +5 -18
  18. package/Lottie.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +37 -0
  19. package/Lottie.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +24 -0
  20. package/Lottie.xcworkspace/contents.xcworkspacedata +10 -0
  21. package/Lottie.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  22. package/Lottie.xcworkspace/xcshareddata/swiftpm/Package.resolved +115 -0
  23. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  24. package/{Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad → Lottie.xcworkspace/xcuserdata/cal.xcuserdatad}/xcdebugger/Breakpoints_v2.xcbkptlist +2 -2
  25. package/Lottie.xcworkspace/xcuserdata/cal.xcuserdatad/xcdebugger/Expressions.xcexplist +153 -0
  26. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  27. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +39 -0
  28. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcdebugger/Expressions.xcexplist +25 -0
  29. package/Lottie.xcworkspace/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +30 -0
  30. package/Package.resolved +88 -0
  31. package/Package.swift +10 -15
  32. package/README.md +40 -60
  33. package/Rakefile +121 -0
  34. package/Sources/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
  35. package/Sources/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +448 -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 +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 +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 +73 -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 +87 -0
  56. package/Sources/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +131 -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 +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 +302 -0
  63. package/Sources/Private/CoreAnimation/Layers/ShapeLayer.swift +319 -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 +93 -85
  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 +75 -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 +61 -44
  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 +42 -36
  76. package/{lottie-swift/src/Private/LayerContainers/AnimationContainer.swift → Sources/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift} +200 -140
  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} +120 -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 +82 -67
  85. package/{lottie-swift/src/Private → Sources/Private/MainThread}/NodeRenderSystem/Extensions/ItemsExtension.swift +4 -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 +6 -6
  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 +125 -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 +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 +242 -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 +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 +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 +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/Sources/Private/Model/ShapeItems/Group.swift +48 -0
  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 +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 → Sources}/Private/Utility/Primitives/BezierPath.swift +229 -143
  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 +184 -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 +266 -0
  182. package/Sources/Public/Animation/AnimationView.swift +1335 -0
  183. package/Sources/Public/Animation/AnimationViewInitializers.swift +109 -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 +123 -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 +137 -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 +42 -26
  204. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedControl.swift +100 -91
  205. package/{lottie-swift/src → Sources}/Public/iOS/AnimatedSwitch.swift +128 -94
  206. package/{lottie-swift/src → Sources}/Public/iOS/AnimationSubview.swift +3 -3
  207. package/Sources/Public/iOS/AnimationViewBase.swift +78 -0
  208. package/{lottie-swift/src → Sources}/Public/iOS/BundleImageProvider.swift +36 -34
  209. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +4 -0
  210. package/{lottie-swift/src → Sources}/Public/iOS/Compatibility/CompatibleAnimationView.swift +38 -29
  211. package/{lottie-swift/src → Sources}/Public/iOS/FilepathImageProvider.swift +24 -21
  212. package/{lottie-swift/src → Sources}/Public/iOS/UIColorExtension.swift +4 -4
  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} +31 -32
  216. package/Sources/Public/macOS/FilepathImageProvider.macOS.swift +67 -0
  217. package/Tests/AnimationKeypathTests.swift +94 -0
  218. package/Tests/AutomaticEngineTests.swift +57 -0
  219. package/Tests/BundleTests.swift +25 -0
  220. package/Tests/DataURLTests.swift +64 -0
  221. package/Tests/ParsingTests.swift +43 -0
  222. package/Tests/PerformanceTests.swift +215 -0
  223. package/Tests/SnapshotConfiguration.swift +153 -0
  224. package/Tests/SnapshotTests.swift +265 -0
  225. package/Tests/Utils/Bundle+Module.swift +30 -0
  226. package/Tests/Utils/HardcodedFontProvider.swift +19 -0
  227. package/Tests/Utils/HardcodedImageProvider.swift +23 -0
  228. package/Tests/Utils/Snapshotting+presentationLayer.swift +47 -0
  229. package/Tests/ValueProvidersTests.swift +27 -0
  230. package/lottie-ios.podspec +11 -12
  231. package/package.json +1 -1
  232. package/script/test-carthage/Cartfile +1 -0
  233. package/script/test-carthage/Cartfile.resolved +1 -0
  234. package/script/test-carthage/CarthageTest/AppDelegate.swift +26 -0
  235. package/script/test-carthage/CarthageTest/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  236. package/script/test-carthage/CarthageTest/Assets.xcassets/AppIcon.appiconset/Contents.json +98 -0
  237. package/script/test-carthage/CarthageTest/Assets.xcassets/Contents.json +6 -0
  238. package/script/test-carthage/CarthageTest/Base.lproj/LaunchScreen.storyboard +25 -0
  239. package/script/test-carthage/CarthageTest/Base.lproj/Main.storyboard +24 -0
  240. package/script/test-carthage/CarthageTest/Info.plist +66 -0
  241. package/script/test-carthage/CarthageTest/SceneDelegate.swift +10 -0
  242. package/script/test-carthage/CarthageTest/ViewController.swift +15 -0
  243. package/script/test-carthage/CarthageTest-macOS/AppDelegate.swift +7 -0
  244. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AccentColor.colorset/Contents.json +11 -0
  245. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json +58 -0
  246. package/script/test-carthage/CarthageTest-macOS/Assets.xcassets/Contents.json +6 -0
  247. package/script/test-carthage/CarthageTest-macOS/Base.lproj/Main.storyboard +717 -0
  248. package/script/test-carthage/CarthageTest-macOS/CarthageTest_macOS.entitlements +10 -0
  249. package/script/test-carthage/CarthageTest-macOS/ViewController.swift +15 -0
  250. package/script/test-carthage/CarthageTest.xcodeproj/project.pbxproj +532 -0
  251. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  252. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  253. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  254. package/script/test-carthage/CarthageTest.xcodeproj/project.xcworkspace/xcuserdata/calstephens.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  255. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/cal.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  256. package/script/test-carthage/CarthageTest.xcodeproj/xcuserdata/calstephens.xcuserdatad/xcschemes/xcschememanagement.plist +19 -0
  257. package/script/test-carthage/Mintfile +1 -0
  258. package/script/test-spm/LottieSPM.xcworkspace/contents.xcworkspacedata +7 -0
  259. package/script/test-spm/LottieSPM.xcworkspace/xcuserdata/cal.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  260. package/script/test-spm/Mintfile +1 -0
  261. package/.swiftpm/xcode/package.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  262. package/Lottie/Info.plist +0 -22
  263. package/Lottie.xcodeproj/project.xcworkspace/xcuserdata/brandonwithrow.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  264. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/LottieLibraryMacOS.xcscheme +0 -80
  265. package/Lottie.xcodeproj/xcuserdata/brandonwithrow.xcuserdatad/xcschemes/xcschememanagement.plist +0 -57
  266. package/lottie-swift/Assets/.gitkeep +0 -0
  267. package/lottie-swift/src/Private/LayerContainers/Utility/LayerFontProvider.swift +0 -37
  268. package/lottie-swift/src/Private/LayerContainers/Utility/LayerTextProvider.swift +0 -36
  269. package/lottie-swift/src/Private/Model/Animation.swift +0 -107
  270. package/lottie-swift/src/Private/Model/Assets/Asset.swift +0 -27
  271. package/lottie-swift/src/Private/Model/Assets/ImageAsset.swift +0 -48
  272. package/lottie-swift/src/Private/Model/Keyframes/Keyframe.swift +0 -128
  273. package/lottie-swift/src/Private/Model/Keyframes/KeyframeGroup.swift +0 -108
  274. package/lottie-swift/src/Private/Model/Layers/LayerModel.swift +0 -150
  275. package/lottie-swift/src/Private/Model/Objects/DashPattern.swift +0 -24
  276. package/lottie-swift/src/Private/Model/Objects/Marker.swift +0 -23
  277. package/lottie-swift/src/Private/Model/Objects/Mask.swift +0 -48
  278. package/lottie-swift/src/Private/Model/Objects/Transform.swift +0 -105
  279. package/lottie-swift/src/Private/Model/ShapeItems/Ellipse.swift +0 -50
  280. package/lottie-swift/src/Private/Model/ShapeItems/FillI.swift +0 -49
  281. package/lottie-swift/src/Private/Model/ShapeItems/GradientFill.swift +0 -86
  282. package/lottie-swift/src/Private/Model/ShapeItems/GradientStroke.swift +0 -125
  283. package/lottie-swift/src/Private/Model/ShapeItems/Group.swift +0 -32
  284. package/lottie-swift/src/Private/Model/ShapeItems/Rectangle.swift +0 -50
  285. package/lottie-swift/src/Private/Model/ShapeItems/Repeater.swift +0 -80
  286. package/lottie-swift/src/Private/Model/ShapeItems/Shape.swift +0 -37
  287. package/lottie-swift/src/Private/Model/ShapeItems/ShapeItem.swift +0 -95
  288. package/lottie-swift/src/Private/Model/ShapeItems/ShapeTransform.swift +0 -68
  289. package/lottie-swift/src/Private/Model/ShapeItems/Star.swift +0 -86
  290. package/lottie-swift/src/Private/Model/ShapeItems/Stroke.swift +0 -67
  291. package/lottie-swift/src/Private/Model/ShapeItems/Trim.swift +0 -53
  292. package/lottie-swift/src/Private/Model/Text/Font.swift +0 -35
  293. package/lottie-swift/src/Private/Model/Text/TextAnimator.swift +0 -99
  294. package/lottie-swift/src/Private/Model/Text/TextDocument.swift +0 -70
  295. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +0 -109
  296. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +0 -132
  297. package/lottie-swift/src/Private/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +0 -141
  298. package/lottie-swift/src/Private/Utility/Extensions/MathKit.swift +0 -539
  299. package/lottie-swift/src/Private/Utility/Extensions/StringExtensions.swift +0 -32
  300. package/lottie-swift/src/Private/Utility/Interpolatable/Interpolatable.swift +0 -18
  301. package/lottie-swift/src/Private/Utility/Interpolatable/InterpolatableExtensions.swift +0 -170
  302. package/lottie-swift/src/Private/Utility/Primitives/CurveVertex.swift +0 -177
  303. package/lottie-swift/src/Private/Utility/Primitives/PathElement.swift +0 -68
  304. package/lottie-swift/src/Private/Utility/Primitives/VectorsExtensions.swift +0 -218
  305. package/lottie-swift/src/Public/Animation/AnimationPublic.swift +0 -196
  306. package/lottie-swift/src/Public/Animation/AnimationView.swift +0 -1006
  307. package/lottie-swift/src/Public/Animation/AnimationViewInitializers.swift +0 -83
  308. package/lottie-swift/src/Public/AnimationCache/AnimationCacheProvider.swift +0 -24
  309. package/lottie-swift/src/Public/DynamicProperties/AnimationKeypath.swift +0 -46
  310. package/lottie-swift/src/Public/DynamicProperties/AnyValueProvider.swift +0 -29
  311. package/lottie-swift/src/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +0 -114
  312. package/lottie-swift/src/Public/ImageProvider/AnimationImageProvider.swift +0 -23
  313. package/lottie-swift/src/Public/MacOS/FilepathImageProvider.swift +0 -67
  314. package/lottie-swift/src/Public/TextProvider/AnimationTextProvider.swift +0 -39
  315. package/lottie-swift/src/Public/iOS/LottieView.swift +0 -62
  316. package/lottie-swift-testing.podspec +0 -32
@@ -0,0 +1,123 @@
1
+ //
2
+ // TextDocument.swift
3
+ // lottie-swift
4
+ //
5
+ // Created by Brandon Withrow on 1/9/19.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ // MARK: - TextJustification
11
+
12
+ enum TextJustification: Int, Codable {
13
+ case left
14
+ case right
15
+ case center
16
+ }
17
+
18
+ // MARK: - TextDocument
19
+
20
+ final class TextDocument: Codable, DictionaryInitializable, AnyInitializable {
21
+
22
+ // MARK: Lifecycle
23
+
24
+ init(dictionary: [String: Any]) throws {
25
+ text = try dictionary.value(for: CodingKeys.text)
26
+ fontSize = try dictionary.value(for: CodingKeys.fontSize)
27
+ fontFamily = try dictionary.value(for: CodingKeys.fontFamily)
28
+ let justificationValue: Int = try dictionary.value(for: CodingKeys.justification)
29
+ guard let justification = TextJustification(rawValue: justificationValue) else {
30
+ throw InitializableError.invalidInput
31
+ }
32
+ self.justification = justification
33
+ tracking = try dictionary.value(for: CodingKeys.tracking)
34
+ lineHeight = try dictionary.value(for: CodingKeys.lineHeight)
35
+ baseline = try dictionary.value(for: CodingKeys.baseline)
36
+ if let fillColorRawValue = dictionary[CodingKeys.fillColorData.rawValue] {
37
+ fillColorData = try? Color(value: fillColorRawValue)
38
+ } else {
39
+ fillColorData = nil
40
+ }
41
+ if let strokeColorRawValue = dictionary[CodingKeys.strokeColorData.rawValue] {
42
+ strokeColorData = try? Color(value: strokeColorRawValue)
43
+ } else {
44
+ strokeColorData = nil
45
+ }
46
+ strokeWidth = try? dictionary.value(for: CodingKeys.strokeWidth)
47
+ strokeOverFill = try? dictionary.value(for: CodingKeys.strokeOverFill)
48
+ if let textFramePositionRawValue = dictionary[CodingKeys.textFramePosition.rawValue] {
49
+ textFramePosition = try? Vector3D(value: textFramePositionRawValue)
50
+ } else {
51
+ textFramePosition = nil
52
+ }
53
+ if let textFrameSizeRawValue = dictionary[CodingKeys.textFrameSize.rawValue] {
54
+ textFrameSize = try? Vector3D(value: textFrameSizeRawValue)
55
+ } else {
56
+ textFrameSize = nil
57
+ }
58
+ }
59
+
60
+ convenience init(value: Any) throws {
61
+ guard let dictionary = value as? [String: Any] else {
62
+ throw InitializableError.invalidInput
63
+ }
64
+ try self.init(dictionary: dictionary)
65
+ }
66
+
67
+ // MARK: Internal
68
+
69
+ /// The Text
70
+ let text: String
71
+
72
+ /// The Font size
73
+ let fontSize: Double
74
+
75
+ /// The Font Family
76
+ let fontFamily: String
77
+
78
+ /// Justification
79
+ let justification: TextJustification
80
+
81
+ /// Tracking
82
+ let tracking: Int
83
+
84
+ /// Line Height
85
+ let lineHeight: Double
86
+
87
+ /// Baseline
88
+ let baseline: Double?
89
+
90
+ /// Fill Color data
91
+ let fillColorData: Color?
92
+
93
+ /// Scroke Color data
94
+ let strokeColorData: Color?
95
+
96
+ /// Stroke Width
97
+ let strokeWidth: Double?
98
+
99
+ /// Stroke Over Fill
100
+ let strokeOverFill: Bool?
101
+
102
+ let textFramePosition: Vector3D?
103
+
104
+ let textFrameSize: Vector3D?
105
+
106
+ // MARK: Private
107
+
108
+ private enum CodingKeys: String, CodingKey {
109
+ case text = "t"
110
+ case fontSize = "s"
111
+ case fontFamily = "f"
112
+ case justification = "j"
113
+ case tracking = "tr"
114
+ case lineHeight = "lh"
115
+ case baseline = "ls"
116
+ case fillColorData = "fc"
117
+ case strokeColorData = "sc"
118
+ case strokeWidth = "sw"
119
+ case strokeOverFill = "of"
120
+ case textFramePosition = "ps"
121
+ case textFrameSize = "sz"
122
+ }
123
+ }
@@ -0,0 +1,51 @@
1
+ // Created by Cal Stephens on 12/13/21.
2
+ // Copyright © 2021 Airbnb Inc. All rights reserved.
3
+
4
+ import QuartzCore
5
+
6
+ // MARK: - RootAnimationLayer
7
+
8
+ /// A root `CALayer` responsible for playing a Lottie animation
9
+ protocol RootAnimationLayer: CALayer {
10
+ var currentFrame: AnimationFrameTime { get set }
11
+ var renderScale: CGFloat { get set }
12
+ var respectAnimationFrameRate: Bool { get set }
13
+
14
+ var _animationLayers: [CALayer] { get }
15
+ var imageProvider: AnimationImageProvider { get set }
16
+ var textProvider: AnimationTextProvider { get set }
17
+ var fontProvider: AnimationFontProvider { get set }
18
+
19
+ /// The `CAAnimation` key corresponding to the primary animation.
20
+ /// - `AnimationView` uses this key to check if the animation is still active
21
+ var primaryAnimationKey: AnimationKey { get }
22
+
23
+ /// Whether or not this layer is currently playing an animation
24
+ /// - If the layer returns `nil`, `AnimationView` determines if an animation
25
+ /// is playing by checking if there is an active animation for `primaryAnimationKey`
26
+ var isAnimationPlaying: Bool? { get }
27
+
28
+ /// Instructs this layer to remove all `CAAnimation`s,
29
+ /// other than the `CAAnimation` managed by `AnimationView` (if applicable)
30
+ func removeAnimations()
31
+
32
+ func reloadImages()
33
+ func forceDisplayUpdate()
34
+ func logHierarchyKeypaths()
35
+
36
+ func setValueProvider(_ valueProvider: AnyValueProvider, keypath: AnimationKeypath)
37
+ func getValue(for keypath: AnimationKeypath, atFrame: AnimationFrameTime?) -> Any?
38
+ func getOriginalValue(for keypath: AnimationKeypath, atFrame: AnimationFrameTime?) -> Any?
39
+
40
+ func layer(for keypath: AnimationKeypath) -> CALayer?
41
+ func animatorNodes(for keypath: AnimationKeypath) -> [AnimatorNode]?
42
+ }
43
+
44
+ // MARK: - AnimationKey
45
+
46
+ enum AnimationKey {
47
+ /// The primary animation and its key should be managed by `AnimationView`
48
+ case managed
49
+ /// The primary animation always uses the given key
50
+ case specific(String)
51
+ }
@@ -8,18 +8,18 @@
8
8
  import Foundation
9
9
 
10
10
  extension AnimatorNode {
11
-
11
+
12
12
  func printNodeTree() {
13
13
  parentNode?.printNodeTree()
14
- print(String(describing: type(of: self)))
15
-
14
+ LottieLogger.shared.info(String(describing: type(of: self)))
15
+
16
16
  if let group = self as? GroupNode {
17
- print("* |Children")
17
+ LottieLogger.shared.info("* |Children")
18
18
  group.rootNode?.printNodeTree()
19
- print("*")
19
+ LottieLogger.shared.info("*")
20
20
  } else {
21
- print("|")
21
+ LottieLogger.shared.info("|")
22
22
  }
23
23
  }
24
-
24
+
25
25
  }
@@ -8,6 +8,8 @@
8
8
  import Foundation
9
9
  import QuartzCore
10
10
 
11
+ // MARK: - LayerDebugStyle
12
+
11
13
  struct LayerDebugStyle {
12
14
  let anchorColor: CGColor
13
15
  let boundsColor: CGColor
@@ -15,14 +17,20 @@ struct LayerDebugStyle {
15
17
  let boundsWidth: CGFloat
16
18
  }
17
19
 
20
+ // MARK: - LayerDebugging
21
+
18
22
  protocol LayerDebugging {
19
23
  var debugStyle: LayerDebugStyle { get }
20
24
  }
21
25
 
26
+ // MARK: - CustomLayerDebugging
27
+
22
28
  protocol CustomLayerDebugging {
23
29
  func layerForDebugging() -> CALayer
24
30
  }
25
31
 
32
+ // MARK: - DebugLayer
33
+
26
34
  class DebugLayer: CALayer {
27
35
  init(style: LayerDebugStyle) {
28
36
  super.init()
@@ -30,45 +38,48 @@ class DebugLayer: CALayer {
30
38
  bounds = CGRect(x: 0, y: 0, width: style.anchorWidth, height: style.anchorWidth)
31
39
  backgroundColor = style.anchorColor
32
40
  }
33
-
34
- required init?(coder aDecoder: NSCoder) {
41
+
42
+ required init?(coder _: NSCoder) {
35
43
  fatalError("init(coder:) has not been implemented")
36
44
  }
37
45
  }
38
46
 
39
- public extension CALayer {
40
-
41
- func logLayerTree(withIndent: Int = 0) {
47
+ extension CALayer {
48
+
49
+ @nonobjc
50
+ public func logLayerTree(withIndent: Int = 0) {
42
51
  var string = ""
43
52
  for _ in 0...withIndent {
44
53
  string = string + " "
45
54
  }
46
55
  string = string + "|_" + String(describing: self)
47
- print(string)
56
+ LottieLogger.shared.info(string)
48
57
  if let sublayers = sublayers {
49
58
  for sublayer in sublayers {
50
59
  sublayer.logLayerTree(withIndent: withIndent + 1)
51
60
  }
52
61
  }
53
62
  }
54
-
63
+
55
64
  }
56
65
 
66
+ // MARK: - CompositionLayer + CustomLayerDebugging
67
+
57
68
  extension CompositionLayer: CustomLayerDebugging {
58
69
  func layerForDebugging() -> CALayer {
59
- return contentsLayer
70
+ contentsLayer
60
71
  }
61
72
  }
62
73
 
63
74
  extension CALayer {
64
75
 
76
+ @nonobjc
65
77
  func setDebuggingState(visible: Bool) {
66
-
67
78
  var sublayers = self.sublayers
68
79
  if let cust = self as? CustomLayerDebugging {
69
80
  sublayers = cust.layerForDebugging().sublayers
70
81
  }
71
-
82
+
72
83
  if let sublayers = sublayers {
73
84
  for i in 0..<sublayers.count {
74
85
  if let debugLayer = sublayers[i] as? DebugLayer {
@@ -77,11 +88,11 @@ extension CALayer {
77
88
  }
78
89
  }
79
90
  }
80
-
91
+
81
92
  if let sublayers = sublayers {
82
93
  sublayers.forEach({ $0.setDebuggingState(visible: visible) })
83
94
  }
84
-
95
+
85
96
  if visible {
86
97
  let style: LayerDebugStyle
87
98
  if let layerDebugging = self as? LayerDebugging {
@@ -105,89 +116,102 @@ extension CALayer {
105
116
  }
106
117
  }
107
118
 
108
- extension AnimationContainer: LayerDebugging {
119
+ // MARK: - MainThreadAnimationLayer + LayerDebugging
120
+
121
+ extension MainThreadAnimationLayer: LayerDebugging {
109
122
  var debugStyle: LayerDebugStyle {
110
- return LayerDebugStyle.topLayerStyle()
123
+ LayerDebugStyle.topLayerStyle()
111
124
  }
112
125
  }
113
126
 
127
+ // MARK: - NullCompositionLayer + LayerDebugging
128
+
114
129
  extension NullCompositionLayer: LayerDebugging {
115
130
  var debugStyle: LayerDebugStyle {
116
- return LayerDebugStyle.nullLayerStyle()
131
+ LayerDebugStyle.nullLayerStyle()
117
132
  }
118
133
  }
119
134
 
135
+ // MARK: - ShapeCompositionLayer + LayerDebugging
136
+
120
137
  extension ShapeCompositionLayer: LayerDebugging {
121
138
  var debugStyle: LayerDebugStyle {
122
- return LayerDebugStyle.shapeLayerStyle()
139
+ LayerDebugStyle.shapeLayerStyle()
123
140
  }
124
141
  }
125
142
 
143
+ // MARK: - ShapeRenderLayer + LayerDebugging
144
+
126
145
  extension ShapeRenderLayer: LayerDebugging {
127
146
  var debugStyle: LayerDebugStyle {
128
- return LayerDebugStyle.shapeRenderLayerStyle()
147
+ LayerDebugStyle.shapeRenderLayerStyle()
129
148
  }
130
149
  }
131
150
 
132
151
  extension LayerDebugStyle {
133
152
  static func defaultStyle() -> LayerDebugStyle {
134
153
  let colorSpace = CGColorSpaceCreateDeviceRGB()
135
-
154
+
136
155
  let anchorColor = CGColor(colorSpace: colorSpace, components: [1, 0, 0, 1])!
137
156
  let boundsColor = CGColor(colorSpace: colorSpace, components: [1, 1, 0, 1])!
138
- return LayerDebugStyle(anchorColor: anchorColor,
139
- boundsColor: boundsColor,
140
- anchorWidth: 10,
141
- boundsWidth: 2)
157
+ return LayerDebugStyle(
158
+ anchorColor: anchorColor,
159
+ boundsColor: boundsColor,
160
+ anchorWidth: 10,
161
+ boundsWidth: 2)
142
162
  }
143
-
163
+
144
164
  static func topLayerStyle() -> LayerDebugStyle {
145
165
  let colorSpace = CGColorSpaceCreateDeviceRGB()
146
166
  let anchorColor = CGColor(colorSpace: colorSpace, components: [1, 0.5, 0, 0])!
147
167
  let boundsColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 1])!
148
-
149
- return LayerDebugStyle(anchorColor: anchorColor,
150
- boundsColor: boundsColor,
151
- anchorWidth: 10,
152
- boundsWidth: 2)
168
+
169
+ return LayerDebugStyle(
170
+ anchorColor: anchorColor,
171
+ boundsColor: boundsColor,
172
+ anchorWidth: 10,
173
+ boundsWidth: 2)
153
174
  }
154
-
175
+
155
176
  static func nullLayerStyle() -> LayerDebugStyle {
156
177
  let colorSpace = CGColorSpaceCreateDeviceRGB()
157
178
  let anchorColor = CGColor(colorSpace: colorSpace, components: [0, 0, 1, 0])!
158
179
  let boundsColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 1])!
159
-
160
- return LayerDebugStyle(anchorColor: anchorColor,
161
- boundsColor: boundsColor,
162
- anchorWidth: 10,
163
- boundsWidth: 2)
180
+
181
+ return LayerDebugStyle(
182
+ anchorColor: anchorColor,
183
+ boundsColor: boundsColor,
184
+ anchorWidth: 10,
185
+ boundsWidth: 2)
164
186
  }
165
-
187
+
166
188
  static func shapeLayerStyle() -> LayerDebugStyle {
167
189
  let colorSpace = CGColorSpaceCreateDeviceRGB()
168
190
  let anchorColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 0])!
169
191
  let boundsColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 1])!
170
-
171
- return LayerDebugStyle(anchorColor: anchorColor,
172
- boundsColor: boundsColor,
173
- anchorWidth: 10,
174
- boundsWidth: 2)
192
+
193
+ return LayerDebugStyle(
194
+ anchorColor: anchorColor,
195
+ boundsColor: boundsColor,
196
+ anchorWidth: 10,
197
+ boundsWidth: 2)
175
198
  }
176
-
199
+
177
200
  static func shapeRenderLayerStyle() -> LayerDebugStyle {
178
201
  let colorSpace = CGColorSpaceCreateDeviceRGB()
179
202
  let anchorColor = CGColor(colorSpace: colorSpace, components: [0, 1, 1, 0])!
180
203
  let boundsColor = CGColor(colorSpace: colorSpace, components: [0, 1, 0, 1])!
181
-
182
- return LayerDebugStyle(anchorColor: anchorColor,
183
- boundsColor: boundsColor,
184
- anchorWidth: 10,
185
- boundsWidth: 2)
204
+
205
+ return LayerDebugStyle(
206
+ anchorColor: anchorColor,
207
+ boundsColor: boundsColor,
208
+ anchorWidth: 10,
209
+ boundsWidth: 2)
186
210
  }
187
211
  }
188
212
 
189
213
  extension Array where Element == LayerModel {
190
-
214
+
191
215
  var parents: [Int] {
192
216
  var array = [Int]()
193
217
  for layer in self {
@@ -199,5 +223,5 @@ extension Array where Element == LayerModel {
199
223
  }
200
224
  return array
201
225
  }
202
-
226
+
203
227
  }
@@ -0,0 +1,10 @@
1
+ // Created by Cal Stephens on 1/28/22.
2
+ // Copyright © 2022 Airbnb Inc. All rights reserved.
3
+
4
+ enum TestHelpers {
5
+ /// Whether or not snapshot tests are currently running in a test target
6
+ static var snapshotTestsAreRunning = false
7
+
8
+ /// Whether or not performance tests are currently running in a test target
9
+ static var performanceTestsAreRunning = false
10
+ }