@octane-xplat/lottie 0.9.0 → 0.11.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 (313) hide show
  1. package/README.md +36 -16
  2. package/dist/native/index.js +10 -9
  3. package/dist/native/octane-client-build.json +1 -1
  4. package/dist/web/index.js +39 -25
  5. package/dist/web/octane-client-build.json +1 -1
  6. package/package.json +25 -3
  7. package/platforms/macos/LICENSE-EpoxyCore-Apache-2.0.txt +201 -0
  8. package/platforms/macos/LICENSE-LRUCache-MIT.txt +22 -0
  9. package/platforms/macos/LICENSE-Lottie-Apache-2.0.txt +201 -0
  10. package/platforms/macos/LICENSE-ZIPFoundation-MIT.txt +21 -0
  11. package/platforms/macos/UPSTREAM.md +13 -0
  12. package/platforms/macos/resources/PrivacyInfo.xcprivacy +23 -0
  13. package/platforms/macos/resources/THIRD-PARTY-NOTICES.txt +10 -0
  14. package/platforms/macos/src/XplatAppKitLottie.swift +246 -0
  15. package/platforms/macos/src/vendor/Lottie/PrivacyInfo.xcprivacy +23 -0
  16. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
  17. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +476 -0
  18. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +92 -0
  19. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/CustomPathAnimation.swift +89 -0
  20. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/DropShadowAnimation.swift +179 -0
  21. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/EllipseAnimation.swift +53 -0
  22. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/GradientAnimations.swift +287 -0
  23. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/LayerProperty.swift +440 -0
  24. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/OpacityAnimation.swift +53 -0
  25. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/RectangleAnimation.swift +59 -0
  26. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/ShapeAnimation.swift +246 -0
  27. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/StarAnimation.swift +119 -0
  28. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/StrokeAnimation.swift +96 -0
  29. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/TransformAnimations.swift +380 -0
  30. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/VisibilityAnimation.swift +63 -0
  31. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/CompatibilityTracker.swift +129 -0
  32. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/CoreAnimationLayer.swift +645 -0
  33. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift +35 -0
  34. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift +28 -0
  35. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Extensions/Keyframes+combined.swift +345 -0
  36. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Extensions/Keyframes+timeRemapping.swift +46 -0
  37. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/AnimationLayer.swift +169 -0
  38. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/BaseAnimationLayer.swift +46 -0
  39. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/BaseCompositionLayer.swift +120 -0
  40. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +169 -0
  41. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/GradientRenderLayer.swift +101 -0
  42. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/ImageLayer.swift +81 -0
  43. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/InfiniteOpaqueAnimationLayer.swift +57 -0
  44. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift +59 -0
  45. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/MaskCompositionLayer.swift +139 -0
  46. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/PreCompLayer.swift +107 -0
  47. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/RepeaterLayer.swift +113 -0
  48. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/ShapeItemLayer.swift +346 -0
  49. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/ShapeLayer.swift +569 -0
  50. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/SolidLayer.swift +66 -0
  51. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/TextLayer.swift +157 -0
  52. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/TransformLayer.swift +13 -0
  53. package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/ValueProviderStore.swift +157 -0
  54. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/Collection+Diff.swift +267 -0
  55. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/Diffable.swift +19 -0
  56. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/DiffableSection.swift +16 -0
  57. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/IndexChangeset.swift +187 -0
  58. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/SectionedChangeset.swift +22 -0
  59. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Logging/EpoxyLogger.swift +102 -0
  60. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/CallbackContextEpoxyModeled.swift +8 -0
  61. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelArrayBuilder.swift +48 -0
  62. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelProperty.swift +158 -0
  63. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelStorage.swift +88 -0
  64. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModeled.swift +54 -0
  65. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Internal/AnyEpoxyModelProperty.swift +31 -0
  66. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Internal/ClassReference.swift +39 -0
  67. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/AnimatedProviding.swift +10 -0
  68. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DataIDProviding.swift +58 -0
  69. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidDisplayProviding.swift +41 -0
  70. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidEndDisplayingProviding.swift +42 -0
  71. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidSelectProviding.swift +36 -0
  72. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ErasedContentProviding.swift +49 -0
  73. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/MakeViewProviding.swift +61 -0
  74. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/SetBehaviorsProviding.swift +38 -0
  75. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/SetContentProviding.swift +38 -0
  76. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/StyleIDProviding.swift +38 -0
  77. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/TraitCollectionProviding.swift +14 -0
  78. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ViewDifferentiatorProviding.swift +34 -0
  79. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ViewProviding.swift +13 -0
  80. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/WillDisplayProviding.swift +41 -0
  81. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/ViewEpoxyModeled.swift +10 -0
  82. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/README.md +30 -0
  83. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxySwiftUIIntrinsicContentSizeInvalidator.swift +34 -0
  84. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxySwiftUILayoutMargins.swift +38 -0
  85. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxyableView+SwiftUIView.swift +165 -0
  86. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/LayoutUtilities/MeasuringViewRepresentable.swift +127 -0
  87. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/LayoutUtilities/SwiftUIMeasurementContainer.swift +468 -0
  88. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/SwiftUIView.swift +146 -0
  89. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/UIView+SwiftUIView.swift +39 -0
  90. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/UIViewConfiguringSwiftUIView.swift +41 -0
  91. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/BehaviorsConfigurableView.swift +45 -0
  92. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/ContentConfigurableView.swift +36 -0
  93. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/EpoxyableView.swift +5 -0
  94. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/StyledView.swift +43 -0
  95. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/ViewType.swift +47 -0
  96. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/LRUCache/LRUCache.swift +257 -0
  97. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/LRUCache/README.md +24 -0
  98. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/README.md +43 -0
  99. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+BackingConfiguration.swift +149 -0
  100. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Deprecated.swift +23 -0
  101. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Helpers.swift +361 -0
  102. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+MemoryFile.swift +205 -0
  103. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Progress.swift +66 -0
  104. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Reading.swift +160 -0
  105. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+ReadingDeprecated.swift +50 -0
  106. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Writing.swift +403 -0
  107. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+WritingDeprecated.swift +95 -0
  108. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+ZIP64.swift +191 -0
  109. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive.swift +404 -0
  110. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Data+Compression.swift +632 -0
  111. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Data+CompressionDeprecated.swift +43 -0
  112. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Data+Serialization.swift +146 -0
  113. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Date+ZIP.swift +101 -0
  114. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Entry+Serialization.swift +191 -0
  115. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Entry+ZIP64.swift +170 -0
  116. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Entry.swift +669 -0
  117. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/FileManager+ZIP.swift +405 -0
  118. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/FileManager+ZIPDeprecated.swift +28 -0
  119. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/README.md +24 -0
  120. package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/URL+ZIP.swift +34 -0
  121. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/CompositionLayer.swift +177 -0
  122. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/ImageCompositionLayer.swift +54 -0
  123. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/MaskContainerLayer.swift +191 -0
  124. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/NullCompositionLayer.swift +28 -0
  125. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/PreCompositionLayer.swift +137 -0
  126. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/ShapeCompositionLayer.swift +60 -0
  127. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/SolidCompositionLayer.swift +57 -0
  128. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/TextCompositionLayer.swift +247 -0
  129. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift +321 -0
  130. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift +56 -0
  131. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/CompositionLayersInitializer.swift +103 -0
  132. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift +424 -0
  133. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/InvertedMatteLayer.swift +55 -0
  134. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift +39 -0
  135. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/LayerImageProvider.swift +52 -0
  136. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift +38 -0
  137. package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/LayerTransformNode.swift +149 -0
  138. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Extensions/ItemsExtension.swift +146 -0
  139. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/NodeProperty.swift +62 -0
  140. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift +53 -0
  141. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift +26 -0
  142. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift +23 -0
  143. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift +43 -0
  144. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/ValueContainer.swift +47 -0
  145. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift +39 -0
  146. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift +43 -0
  147. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/LayerEffectNodes/DropShadowNode.swift +102 -0
  148. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/LayerEffectNodes/LayerEffectNode.swift +25 -0
  149. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/ModifierNodes/RoundedCornersNode.swift +85 -0
  150. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/ModifierNodes/TrimPathNode.swift +281 -0
  151. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/GroupOutputNode.swift +74 -0
  152. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift +47 -0
  153. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/PathOutputNode.swift +89 -0
  154. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift +69 -0
  155. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift +253 -0
  156. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift +64 -0
  157. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift +158 -0
  158. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift +165 -0
  159. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +143 -0
  160. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +173 -0
  161. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/RectNode.swift +238 -0
  162. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/ShapeNode.swift +73 -0
  163. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/StarNode.swift +224 -0
  164. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +162 -0
  165. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/FillNode.swift +88 -0
  166. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientFillNode.swift +103 -0
  167. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +149 -0
  168. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +179 -0
  169. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift +345 -0
  170. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Protocols/AnimatorNode.swift +197 -0
  171. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Protocols/PathNode.swift +20 -0
  172. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Protocols/RenderNode.swift +60 -0
  173. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/RenderLayers/ShapeContainerLayer.swift +78 -0
  174. package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift +98 -0
  175. package/platforms/macos/src/vendor/Lottie/Private/Model/Assets/Asset.swift +51 -0
  176. package/platforms/macos/src/vendor/Lottie/Private/Model/Assets/AssetLibrary.swift +75 -0
  177. package/platforms/macos/src/vendor/Lottie/Private/Model/Assets/ImageAsset.swift +141 -0
  178. package/platforms/macos/src/vendor/Lottie/Private/Model/Assets/PrecompAsset.swift +47 -0
  179. package/platforms/macos/src/vendor/Lottie/Private/Model/DictionaryInitializable.swift +73 -0
  180. package/platforms/macos/src/vendor/Lottie/Private/Model/DotLottie/DotLottieAnimation.swift +57 -0
  181. package/platforms/macos/src/vendor/Lottie/Private/Model/DotLottie/DotLottieImageProvider.swift +89 -0
  182. package/platforms/macos/src/vendor/Lottie/Private/Model/DotLottie/DotLottieManifest.swift +42 -0
  183. package/platforms/macos/src/vendor/Lottie/Private/Model/DotLottie/DotLottieUtils.swift +71 -0
  184. package/platforms/macos/src/vendor/Lottie/Private/Model/Extensions/Bundle.swift +58 -0
  185. package/platforms/macos/src/vendor/Lottie/Private/Model/Extensions/KeyedDecodingContainerExtensions.swift +71 -0
  186. package/platforms/macos/src/vendor/Lottie/Private/Model/Keyframes/KeyframeData.swift +111 -0
  187. package/platforms/macos/src/vendor/Lottie/Private/Model/Keyframes/KeyframeGroup.swift +265 -0
  188. package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/DropShadowEffect.swift +52 -0
  189. package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/EffectValues/ColorEffectValue.swift +45 -0
  190. package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/EffectValues/EffectValue.swift +98 -0
  191. package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/EffectValues/Vector1DEffectValue.swift +45 -0
  192. package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/LayerEffect.swift +103 -0
  193. package/platforms/macos/src/vendor/Lottie/Private/Model/LayerStyles/DropShadowStyle.swift +79 -0
  194. package/platforms/macos/src/vendor/Lottie/Private/Model/LayerStyles/LayerStyle.swift +85 -0
  195. package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/ImageLayerModel.swift +49 -0
  196. package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/LayerModel.swift +266 -0
  197. package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/PreCompLayerModel.swift +74 -0
  198. package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/ShapeLayerModel.swift +50 -0
  199. package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/SolidLayerModel.swift +63 -0
  200. package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/TextLayerModel.swift +65 -0
  201. package/platforms/macos/src/vendor/Lottie/Private/Model/Objects/DashPattern.swift +42 -0
  202. package/platforms/macos/src/vendor/Lottie/Private/Model/Objects/Marker.swift +35 -0
  203. package/platforms/macos/src/vendor/Lottie/Private/Model/Objects/Mask.swift +80 -0
  204. package/platforms/macos/src/vendor/Lottie/Private/Model/Objects/Transform.swift +261 -0
  205. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Ellipse.swift +79 -0
  206. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Fill.swift +79 -0
  207. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/GradientFill.swift +142 -0
  208. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/GradientStroke.swift +244 -0
  209. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Group.swift +55 -0
  210. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Merge.swift +63 -0
  211. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Rectangle.swift +79 -0
  212. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Repeater.swift +181 -0
  213. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/RoundedCorners.swift +53 -0
  214. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Shape.swift +63 -0
  215. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/ShapeItem.swift +171 -0
  216. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/ShapeTransform.swift +202 -0
  217. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Star.swift +136 -0
  218. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Stroke.swift +144 -0
  219. package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Trim.swift +90 -0
  220. package/platforms/macos/src/vendor/Lottie/Private/Model/Text/Font.swift +67 -0
  221. package/platforms/macos/src/vendor/Lottie/Private/Model/Text/Glyph.swift +94 -0
  222. package/platforms/macos/src/vendor/Lottie/Private/Model/Text/TextAnimator.swift +240 -0
  223. package/platforms/macos/src/vendor/Lottie/Private/Model/Text/TextDocument.swift +142 -0
  224. package/platforms/macos/src/vendor/Lottie/Private/RootAnimationLayer.swift +54 -0
  225. package/platforms/macos/src/vendor/Lottie/Private/Utility/Debugging/AnimatorNodeDebugging.swift +23 -0
  226. package/platforms/macos/src/vendor/Lottie/Private/Utility/Debugging/LayerDebugging.swift +231 -0
  227. package/platforms/macos/src/vendor/Lottie/Private/Utility/Debugging/TestHelpers.swift +10 -0
  228. package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/AnimationKeypathExtension.swift +303 -0
  229. package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/BlendMode+Filter.swift +31 -0
  230. package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/CGColor+RGB.swift +45 -0
  231. package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/CGFloatExtensions.swift +152 -0
  232. package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/DataExtension.swift +33 -0
  233. package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/MathKit.swift +454 -0
  234. package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/StringExtensions.swift +44 -0
  235. package/platforms/macos/src/vendor/Lottie/Private/Utility/Helpers/AnimationContext.swift +95 -0
  236. package/platforms/macos/src/vendor/Lottie/Private/Utility/Helpers/AnyEquatable.swift +23 -0
  237. package/platforms/macos/src/vendor/Lottie/Private/Utility/Helpers/Binding+Map.swift +19 -0
  238. package/platforms/macos/src/vendor/Lottie/Private/Utility/Helpers/View+ValueChanged.swift +35 -0
  239. package/platforms/macos/src/vendor/Lottie/Private/Utility/Interpolatable/InterpolatableExtensions.swift +143 -0
  240. package/platforms/macos/src/vendor/Lottie/Private/Utility/Interpolatable/KeyframeExtensions.swift +47 -0
  241. package/platforms/macos/src/vendor/Lottie/Private/Utility/Interpolatable/KeyframeInterpolator.swift +250 -0
  242. package/platforms/macos/src/vendor/Lottie/Private/Utility/LottieAnimationSource.swift +51 -0
  243. package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/BezierPath.swift +509 -0
  244. package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/BezierPathRoundExtension.swift +163 -0
  245. package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/CGPointExtension.swift +35 -0
  246. package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/ColorExtension.swift +101 -0
  247. package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/CompoundBezierPath.swift +169 -0
  248. package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/CurveVertex.swift +190 -0
  249. package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/PathElement.swift +78 -0
  250. package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/UnitBezier.swift +119 -0
  251. package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/VectorsExtensions.swift +368 -0
  252. package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimation.swift +179 -0
  253. package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimationHelpers.swift +317 -0
  254. package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimationLayer.swift +1582 -0
  255. package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimationView.swift +1090 -0
  256. package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimationViewInitializers.swift +226 -0
  257. package/platforms/macos/src/vendor/Lottie/Public/Animation/LottiePlaybackMode.swift +266 -0
  258. package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieView.swift +643 -0
  259. package/platforms/macos/src/vendor/Lottie/Public/AnimationCache/AnimationCacheProvider.swift +21 -0
  260. package/platforms/macos/src/vendor/Lottie/Public/AnimationCache/DefaultAnimationCache.swift +67 -0
  261. package/platforms/macos/src/vendor/Lottie/Public/AnimationCache/LRUAnimationCache.swift +11 -0
  262. package/platforms/macos/src/vendor/Lottie/Public/AnimationCache/LottieAnimationCache.swift +15 -0
  263. package/platforms/macos/src/vendor/Lottie/Public/Configuration/DecodingStrategy.swift +15 -0
  264. package/platforms/macos/src/vendor/Lottie/Public/Configuration/LottieConfiguration.swift +54 -0
  265. package/platforms/macos/src/vendor/Lottie/Public/Configuration/LottieURLSession.swift +31 -0
  266. package/platforms/macos/src/vendor/Lottie/Public/Configuration/ReducedMotionOption.swift +128 -0
  267. package/platforms/macos/src/vendor/Lottie/Public/Configuration/RenderingEngineOption.swift +117 -0
  268. package/platforms/macos/src/vendor/Lottie/Public/Controls/AnimatedButton.swift +128 -0
  269. package/platforms/macos/src/vendor/Lottie/Public/Controls/AnimatedControl.swift +248 -0
  270. package/platforms/macos/src/vendor/Lottie/Public/Controls/AnimatedSwitch.swift +271 -0
  271. package/platforms/macos/src/vendor/Lottie/Public/Controls/LottieButton.swift +119 -0
  272. package/platforms/macos/src/vendor/Lottie/Public/Controls/LottieSwitch.swift +144 -0
  273. package/platforms/macos/src/vendor/Lottie/Public/Controls/LottieViewType.swift +79 -0
  274. package/platforms/macos/src/vendor/Lottie/Public/DotLottie/Cache/DotLottieCache.swift +66 -0
  275. package/platforms/macos/src/vendor/Lottie/Public/DotLottie/Cache/DotLottieCacheProvider.swift +21 -0
  276. package/platforms/macos/src/vendor/Lottie/Public/DotLottie/DotLottieConfiguration.swift +72 -0
  277. package/platforms/macos/src/vendor/Lottie/Public/DotLottie/DotLottieFile.swift +186 -0
  278. package/platforms/macos/src/vendor/Lottie/Public/DotLottie/DotLottieFileHelpers.swift +386 -0
  279. package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/AnimationKeypath.swift +57 -0
  280. package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/AnyValueProvider.swift +132 -0
  281. package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift +96 -0
  282. package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift +81 -0
  283. package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +138 -0
  284. package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/PointValueProvider.swift +81 -0
  285. package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift +81 -0
  286. package/platforms/macos/src/vendor/Lottie/Public/FontProvider/AnimationFontProvider.swift +41 -0
  287. package/platforms/macos/src/vendor/Lottie/Public/ImageProvider/AnimationImageProvider.swift +43 -0
  288. package/platforms/macos/src/vendor/Lottie/Public/Keyframes/Interpolatable.swift +285 -0
  289. package/platforms/macos/src/vendor/Lottie/Public/Keyframes/Keyframe.swift +98 -0
  290. package/platforms/macos/src/vendor/Lottie/Public/Logging/LottieLogger.swift +138 -0
  291. package/platforms/macos/src/vendor/Lottie/Public/Primitives/AnimationTime.swift +15 -0
  292. package/platforms/macos/src/vendor/Lottie/Public/Primitives/LottieColor.swift +43 -0
  293. package/platforms/macos/src/vendor/Lottie/Public/Primitives/Vectors.swift +36 -0
  294. package/platforms/macos/src/vendor/Lottie/Public/TextProvider/AnimationTextProvider.swift +135 -0
  295. package/platforms/macos/src/vendor/Lottie/Public/iOS/AnimationSubview.swift +19 -0
  296. package/platforms/macos/src/vendor/Lottie/Public/iOS/BundleImageProvider.swift +98 -0
  297. package/platforms/macos/src/vendor/Lottie/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +33 -0
  298. package/platforms/macos/src/vendor/Lottie/Public/iOS/Compatibility/CompatibleAnimationView.swift +567 -0
  299. package/platforms/macos/src/vendor/Lottie/Public/iOS/Compatibility/CompatibleFontProvider.swift +41 -0
  300. package/platforms/macos/src/vendor/Lottie/Public/iOS/Compatibility/CompatibleImageProvider.swift +43 -0
  301. package/platforms/macos/src/vendor/Lottie/Public/iOS/FilepathImageProvider.swift +78 -0
  302. package/platforms/macos/src/vendor/Lottie/Public/iOS/LottieAnimationViewBase.swift +85 -0
  303. package/platforms/macos/src/vendor/Lottie/Public/iOS/UIColorExtension.swift +23 -0
  304. package/platforms/macos/src/vendor/Lottie/Public/macOS/AnimationSubview.macOS.swift +19 -0
  305. package/platforms/macos/src/vendor/Lottie/Public/macOS/BundleImageProvider.macOS.swift +90 -0
  306. package/platforms/macos/src/vendor/Lottie/Public/macOS/FilepathImageProvider.macOS.swift +86 -0
  307. package/platforms/macos/src/vendor/Lottie/Public/macOS/LottieAnimationViewBase.macOS.swift +102 -0
  308. package/src/Lottie.macos.tsrx +129 -0
  309. package/src/Lottie.tsrx +6 -4
  310. package/src/Lottie.web.tsrx +28 -11
  311. package/src/index.macos.ts +2 -0
  312. package/src/props.ts +6 -1
  313. package/types/generated/props.d.ts +5 -1
@@ -0,0 +1,144 @@
1
+ // Created by Cal Stephens on 8/11/23.
2
+ // Copyright © 2023 Airbnb Inc. All rights reserved.
3
+
4
+ #if canImport(SwiftUI)
5
+ import SwiftUI
6
+
7
+ /// A wrapper which exposes Lottie's `AnimatedSwitch` to SwiftUI
8
+ public struct LottieSwitch: UIViewConfiguringSwiftUIView {
9
+
10
+ // MARK: Lifecycle
11
+
12
+ public init(animation: LottieAnimation?) {
13
+ self.animation = animation
14
+ }
15
+
16
+ // MARK: Public
17
+
18
+ public var body: some View {
19
+ AnimatedSwitch.swiftUIView {
20
+ let animatedSwitch = AnimatedSwitch(animation: animation, configuration: configuration)
21
+ animatedSwitch.isOn = isOn?.wrappedValue ?? false
22
+ return animatedSwitch
23
+ }
24
+ .configure { context in
25
+ // We check referential equality of the animation before updating as updating the
26
+ // animation has a side-effect of rebuilding the animation layer, and it would be
27
+ // prohibitive to do so on every state update.
28
+ if animation !== context.view.animationView.animation {
29
+ context.view.animationView.animation = animation
30
+ }
31
+
32
+ #if os(macOS)
33
+ // Disable the intrinsic content size constraint on the inner animation view,
34
+ // or the Epoxy `SwiftUIMeasurementContainer` won't size this view correctly.
35
+ context.view.animationView.isVerticalContentSizeConstraintActive = false
36
+ context.view.animationView.isHorizontalContentSizeConstraintActive = false
37
+ #endif
38
+
39
+ if let isOn = isOn?.wrappedValue, isOn != context.view.isOn {
40
+ context.view.setIsOn(isOn, animated: true)
41
+ }
42
+ }
43
+ .configurations(configurations)
44
+ }
45
+
46
+ /// Returns a copy of this `LottieView` updated to have the given closure applied to its
47
+ /// represented `LottieAnimationView` whenever it is updated via the `updateUIView(…)`
48
+ /// or `updateNSView(…)` method.
49
+ public func configure(_ configure: @escaping (AnimatedSwitch) -> Void) -> Self {
50
+ var copy = self
51
+ copy.configurations.append { context in
52
+ configure(context.view)
53
+ }
54
+ return copy
55
+ }
56
+
57
+ /// Returns a copy of this view with its `LottieConfiguration` updated to the given value.
58
+ public func configuration(_ configuration: LottieConfiguration) -> Self {
59
+ var copy = self
60
+ copy.configuration = configuration
61
+
62
+ copy = copy.configure { view in
63
+ if view.animationView.configuration != configuration {
64
+ view.animationView.configuration = configuration
65
+ }
66
+ }
67
+
68
+ return copy
69
+ }
70
+
71
+ /// Returns a copy of this view with the given `Binding` reflecting the `isOn` state of the switch.
72
+ public func isOn(_ binding: Binding<Bool>) -> Self {
73
+ var copy = self
74
+ copy.isOn = binding
75
+ return copy.configure { view in
76
+ view.stateUpdated = { isOn in
77
+ DispatchQueue.main.async {
78
+ binding.wrappedValue = isOn
79
+ }
80
+ }
81
+ }
82
+ }
83
+
84
+ /// Returns a copy of this view with the "on" animation configured
85
+ /// to start and end at the given progress values.
86
+ /// Defaults to playing the entire animation forwards (0...1).
87
+ public func onAnimation(
88
+ fromProgress onStartProgress: AnimationProgressTime,
89
+ toProgress onEndProgress: AnimationProgressTime
90
+ ) -> Self {
91
+ configure { view in
92
+ if onStartProgress != view.onStartProgress || onEndProgress != view.onEndProgress {
93
+ view.setProgressForState(
94
+ fromProgress: onStartProgress,
95
+ toProgress: onEndProgress,
96
+ forOnState: true
97
+ )
98
+ }
99
+ }
100
+ }
101
+
102
+ /// Returns a copy of this view with the "on" animation configured
103
+ /// to start and end at the given progress values.
104
+ /// Defaults to playing the entire animation backwards (1...0).
105
+ public func offAnimation(
106
+ fromProgress offStartProgress: AnimationProgressTime,
107
+ toProgress offEndProgress: AnimationProgressTime
108
+ ) -> Self {
109
+ configure { view in
110
+ if offStartProgress != view.offStartProgress || offEndProgress != view.offEndProgress {
111
+ view.setProgressForState(
112
+ fromProgress: offStartProgress,
113
+ toProgress: offEndProgress,
114
+ forOnState: false
115
+ )
116
+ }
117
+ }
118
+ }
119
+
120
+ /// Returns a copy of this view using the given value provider for the given keypath.
121
+ /// The value provider must be `Equatable` to avoid unnecessary state updates / re-renders.
122
+ public func valueProvider<ValueProvider: AnyValueProvider & Equatable>(
123
+ _ valueProvider: ValueProvider,
124
+ for keypath: AnimationKeypath
125
+ ) -> Self {
126
+ configure { view in
127
+ if (view.animationView.valueProviders[keypath] as? ValueProvider) != valueProvider {
128
+ view.animationView.setValueProvider(valueProvider, keypath: keypath)
129
+ }
130
+ }
131
+ }
132
+
133
+ // MARK: Internal
134
+
135
+ var configurations = [SwiftUIView<AnimatedSwitch, Void>.Configuration]()
136
+
137
+ // MARK: Private
138
+
139
+ private let animation: LottieAnimation?
140
+ private var configuration = LottieConfiguration.shared
141
+ private var isOn: Binding<Bool>?
142
+
143
+ }
144
+ #endif
@@ -0,0 +1,79 @@
1
+ // Created by Cal Stephens on 8/11/23.
2
+ // Copyright © 2023 Airbnb Inc. All rights reserved.
3
+
4
+ #if canImport(UIKit)
5
+ import UIKit
6
+
7
+ /// The control base type for this platform.
8
+ /// - `UIControl` on iOS / tvOS and `NSControl` on macOS.
9
+ public typealias LottieControlType = UIControl
10
+
11
+ /// The `State` type of `LottieControlType`
12
+ /// - `UIControl.State` on iOS / tvOS and `NSControl.StateValue` on macOS.
13
+ public typealias LottieControlState = UIControl.State
14
+
15
+ /// The event type handled by the `LottieControlType` component for this platform.
16
+ /// - `UIControl.Event` on iOS / tvOS and `LottieNSControlEvent` on macOS.
17
+ public typealias LottieControlEvent = UIControl.Event
18
+
19
+ extension LottieControlEvent {
20
+ var id: AnyHashable {
21
+ rawValue
22
+ }
23
+ }
24
+ #else
25
+ import AppKit
26
+
27
+ /// The control base type for this platform.
28
+ /// - `UIControl` on iOS / tvOS and `NSControl` on macOS.
29
+ public typealias LottieControlType = NSControl
30
+
31
+ /// The `State` type of `LottieControlType`
32
+ /// - `UIControl.State` on iOS / tvOS and `NSControl.StateValue` on macOS.
33
+ public typealias LottieControlState = LottieNSControlState
34
+
35
+ /// AppKit equivalent of `UIControl.State` for `AnimatedControl`
36
+ public enum LottieNSControlState: UInt, RawRepresentable {
37
+ /// The normal, or default, state of a control where the control is enabled but neither selected nor highlighted.
38
+ case normal
39
+ /// The highlighted state of a control.
40
+ case highlighted
41
+ }
42
+
43
+ /// The event type handled by the `LottieControlType` component for this platform.
44
+ /// - `UIControl.Event` on iOS / tvOS and `LottieNSControlEvent` on macOS.
45
+ public typealias LottieControlEvent = LottieNSControlEvent
46
+
47
+ public struct LottieNSControlEvent: Equatable, Sendable {
48
+
49
+ // MARK: Lifecycle
50
+
51
+ public init(_ event: NSEvent.EventType, inside: Bool) {
52
+ self.event = event
53
+ self.inside = inside
54
+ }
55
+
56
+ // MARK: Public
57
+
58
+ /// macOS equivalent to `UIControl.Event.touchDown`
59
+ public static let touchDown = LottieNSControlEvent(.leftMouseDown, inside: true)
60
+
61
+ /// macOS equivalent to `UIControl.Event.touchUpInside`
62
+ public static let touchUpInside = LottieNSControlEvent(.leftMouseUp, inside: true)
63
+
64
+ /// macOS equivalent to `UIControl.Event.touchUpInside`
65
+ public static let touchUpOutside = LottieNSControlEvent(.leftMouseUp, inside: false)
66
+
67
+ /// The underlying `NSEvent.EventType` of this event, which is roughly equivalent to `UIControl.Event`
68
+ public var event: NSEvent.EventType
69
+
70
+ /// Whether or not the mouse must be inside the control.
71
+ public var inside: Bool
72
+
73
+ // MARK: Internal
74
+
75
+ var id: AnyHashable {
76
+ [AnyHashable(event.rawValue), AnyHashable(inside)]
77
+ }
78
+ }
79
+ #endif
@@ -0,0 +1,66 @@
1
+ //
2
+ // LRUDotLottieCache.swift
3
+ // Lottie
4
+ //
5
+ // Created by Evandro Hoffmann on 20/10/22.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ // MARK: - DotLottieCache
11
+
12
+ /// A DotLottie Cache that will store lottie files up to `cacheSize`.
13
+ ///
14
+ /// Once `cacheSize` is reached, the least recently used lottie will be ejected.
15
+ /// The default size of the cache is 100.
16
+ public final class DotLottieCache: DotLottieCacheProvider {
17
+
18
+ // MARK: Lifecycle
19
+
20
+ public init() {
21
+ cache.countLimit = Self.defaultCacheCountLimit
22
+ }
23
+
24
+ // MARK: Public
25
+
26
+ /// The global shared Cache.
27
+ public static let sharedCache = DotLottieCache()
28
+
29
+ /// The size of the cache.
30
+ public var cacheSize = defaultCacheCountLimit {
31
+ didSet {
32
+ cache.countLimit = cacheSize
33
+ }
34
+ }
35
+
36
+ /// Clears the Cache.
37
+ public func clearCache() {
38
+ cache.removeAllValues()
39
+ }
40
+
41
+ public func file(forKey key: String) -> DotLottieFile? {
42
+ cache.value(forKey: key)
43
+ }
44
+
45
+ public func setFile(_ lottie: DotLottieFile, forKey key: String) {
46
+ cache.setValue(lottie, forKey: key)
47
+ }
48
+
49
+ // MARK: Private
50
+
51
+ private static let defaultCacheCountLimit = 100
52
+
53
+ /// The underlying storage of this cache.
54
+ /// - We use the `LRUCache` library instead of `NSCache`, because `NSCache`
55
+ /// clears all cached values when the app is backgrounded instead of
56
+ /// only when the app receives a memory warning notification.
57
+ private var cache = LRUCache<String, DotLottieFile>()
58
+
59
+ }
60
+
61
+ // MARK: @unchecked Sendable
62
+
63
+ // DotLottieCacheProvider has a Sendable requirement, but we can't
64
+ // redesign DotLottieCache to be properly Sendable without making breaking changes.
65
+ // swiftlint:disable:next no_unchecked_sendable
66
+ extension DotLottieCache: @unchecked Sendable { }
@@ -0,0 +1,21 @@
1
+ //
2
+ // DotLottieCacheProvider.swift
3
+ // Lottie
4
+ //
5
+ // Created by Evandro Hoffmann on 20/10/22.
6
+ //
7
+
8
+ /// `DotLottieCacheProvider` is a protocol that describes a DotLottie Cache.
9
+ /// DotLottie Cache is used when loading `DotLottie` models. Using a DotLottie Cache
10
+ /// can increase performance when loading an animation multiple times.
11
+ ///
12
+ /// Lottie comes with a prebuilt LRU DotLottie Cache.
13
+ public protocol DotLottieCacheProvider: Sendable {
14
+
15
+ func file(forKey: String) -> DotLottieFile?
16
+
17
+ func setFile(_ lottie: DotLottieFile, forKey: String)
18
+
19
+ func clearCache()
20
+
21
+ }
@@ -0,0 +1,72 @@
1
+ //
2
+ // DotLottieConfiguration.swift
3
+ // Lottie
4
+ //
5
+ // Created by Evandro Hoffmann on 19/10/22.
6
+ //
7
+
8
+ // MARK: - DotLottieConfiguration
9
+
10
+ /// The `DotLottieConfiguration` model holds the presets extracted from DotLottieAnimation
11
+ /// - The presets are used as input to setup `LottieAnimationView` before playing the animation.
12
+ public struct DotLottieConfiguration {
13
+
14
+ // MARK: Public
15
+
16
+ /// id of the animation
17
+ public var id: String
18
+
19
+ /// Loop behavior of animation
20
+ public var loopMode: LottieLoopMode
21
+
22
+ /// Playback speed of animation
23
+ public var speed: Double
24
+
25
+ /// Animation Image Provider
26
+ public var imageProvider: AnimationImageProvider? {
27
+ dotLottieImageProvider
28
+ }
29
+
30
+ // MARK: Internal
31
+
32
+ /// The underlying `DotLottieImageProvider` used by this dotLottie animation
33
+ var dotLottieImageProvider: DotLottieImageProvider?
34
+ }
35
+
36
+ // MARK: - DotLottieConfigurationComponents
37
+
38
+ /// Components of the `DotLottieConfiguration` to apply to the `LottieAnimationView`.
39
+ /// - When using `LottieView`, if the component is selected to be applied it will
40
+ /// override any value provided via other `LottieView` APIs.
41
+ public struct DotLottieConfigurationComponents: OptionSet {
42
+
43
+ // MARK: Lifecycle
44
+
45
+ public init(rawValue: Int) {
46
+ self.rawValue = rawValue
47
+ }
48
+
49
+ // MARK: Public
50
+
51
+ /// `DotLottieConfiguration.imageProvider` will be applied to the `LottieAnimationView`
52
+ /// - When using `LottieView`, the image provider from the dotLottie animation will override
53
+ /// the image provider applied manually using `LottieView.imageProvider(...)`.
54
+ public static let imageProvider = DotLottieConfigurationComponents(rawValue: 1 << 0)
55
+
56
+ /// `DotLottieConfigurationMode.loopMode` will be applied to the `LottieAnimationView`.
57
+ /// - When using `LottieView`, the loop mode from the dotLottie animation will override
58
+ /// the loopMode applied by any playback method.
59
+ public static let loopMode = DotLottieConfigurationComponents(rawValue: 1 << 1)
60
+
61
+ /// `DotLottieConfigurationMode.speed` will be applied to the `LottieAnimationView`.
62
+ /// - When using `LottieView`, the speed from the dotLottie animation will override
63
+ /// the speed applied manually using `LottieView.animationSpeed(...)`.
64
+ public static let animationSpeed = DotLottieConfigurationComponents(rawValue: 1 << 2)
65
+
66
+ public static let all: DotLottieConfigurationComponents = [.imageProvider, .loopMode, .animationSpeed]
67
+
68
+ public static let none: DotLottieConfigurationComponents = []
69
+
70
+ public let rawValue: Int
71
+
72
+ }
@@ -0,0 +1,186 @@
1
+ //
2
+ // DotLottie.swift
3
+ // Lottie
4
+ //
5
+ // Created by Evandro Harrison Hoffmann on 27/06/2020.
6
+ //
7
+
8
+ import Foundation
9
+
10
+ // MARK: - DotLottieFile
11
+
12
+ /// Detailed .lottie file structure
13
+ public final class DotLottieFile {
14
+
15
+ // MARK: Lifecycle
16
+
17
+ /// Loads `DotLottie` from `Data` object containing a compressed animation.
18
+ ///
19
+ /// - Parameters:
20
+ /// - data: Data of .lottie file
21
+ /// - filename: Name of .lottie file
22
+ /// - Returns: Deserialized `DotLottie`. Optional.
23
+ init(data: Data, filename: String) throws {
24
+ fileUrl = DotLottieUtils.tempDirectoryURL.appendingPathComponent(filename.asFilename())
25
+ try decompress(data: data, to: fileUrl)
26
+ }
27
+
28
+ // MARK: Public
29
+
30
+ /// Definition for a single animation within a `DotLottieFile`
31
+ public struct Animation {
32
+ public let animation: LottieAnimation
33
+ public let configuration: DotLottieConfiguration
34
+ }
35
+
36
+ /// List of `LottieAnimation` in the file
37
+ public private(set) var animations = [Animation]()
38
+
39
+ // MARK: Internal
40
+
41
+ /// Image provider for animations
42
+ private(set) var imageProvider: DotLottieImageProvider?
43
+
44
+ /// Animations folder url
45
+ ///
46
+ /// - Parameters:
47
+ /// - version: version of .lottie file
48
+ func animationsUrl(for version: String?) -> URL {
49
+ switch Int(version ?? "1") ?? 1 {
50
+ case 2...:
51
+ fileUrl.appendingPathComponent("a")
52
+ default:
53
+ fileUrl.appendingPathComponent("animations")
54
+ }
55
+ }
56
+
57
+ /// All files in animations folder
58
+ ///
59
+ /// - Parameters:
60
+ /// - version: version of .lottie file
61
+ func animationUrls(for version: String?) -> [URL] {
62
+ FileManager.default.urls(for: animationsUrl(for: version)) ?? []
63
+ }
64
+
65
+ /// Images folder url
66
+ ///
67
+ /// - Parameters:
68
+ /// - version: version of .lottie file
69
+ func imagesUrl(for version: String?) -> URL {
70
+ switch Int(version ?? "1") ?? 1 {
71
+ case 2...:
72
+ fileUrl.appendingPathComponent("i")
73
+ default:
74
+ fileUrl.appendingPathComponent("images")
75
+ }
76
+ }
77
+
78
+ /// All images in images folder
79
+ ///
80
+ /// - Parameters:
81
+ /// - version: version of .lottie file
82
+ func imageUrls(for version: String?) -> [URL] {
83
+ FileManager.default.urls(for: imagesUrl(for: version)) ?? []
84
+ }
85
+
86
+ /// The `LottieAnimation` and `DotLottieConfiguration` for the given animation ID in this file
87
+ func animation(for id: String? = nil) -> DotLottieFile.Animation? {
88
+ if let id {
89
+ animations.first(where: { $0.configuration.id == id })
90
+ } else {
91
+ animations.first
92
+ }
93
+ }
94
+
95
+ /// The `LottieAnimation` and `DotLottieConfiguration` for the given animation index in this file
96
+ func animation(at index: Int) -> DotLottieFile.Animation? {
97
+ guard index < animations.count else { return nil }
98
+ return animations[index]
99
+ }
100
+
101
+ // MARK: Private
102
+
103
+ private static let manifestFileName = "manifest.json"
104
+
105
+ private let fileUrl: URL
106
+
107
+ /// Decompresses .lottie file from `URL` and saves to local temp folder
108
+ ///
109
+ /// - Parameters:
110
+ /// - url: url to .lottie file
111
+ /// - destinationURL: url to destination of decompression contents
112
+ private func decompress(from url: URL, to destinationURL: URL) throws {
113
+ try? FileManager.default.removeItem(at: destinationURL)
114
+ try FileManager.default.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil)
115
+ try FileManager.default.unzipItem(at: url, to: destinationURL)
116
+ try loadContent()
117
+ try? FileManager.default.removeItem(at: destinationURL)
118
+ try? FileManager.default.removeItem(at: url)
119
+ }
120
+
121
+ /// Decompresses .lottie file from `Data` and saves to local temp folder
122
+ ///
123
+ /// - Parameters:
124
+ /// - url: url to .lottie file
125
+ /// - destinationURL: url to destination of decompression contents
126
+ private func decompress(data: Data, to destinationURL: URL) throws {
127
+ let url = destinationURL.appendingPathExtension("lottie")
128
+ try FileManager.default.createDirectory(at: destinationURL, withIntermediateDirectories: true, attributes: nil)
129
+ try data.write(to: url)
130
+ try decompress(from: url, to: destinationURL)
131
+ }
132
+
133
+ /// Loads file content to memory
134
+ private func loadContent() throws {
135
+ let manifest = try loadManifest()
136
+
137
+ imageProvider = DotLottieImageProvider(filepath: imagesUrl(for: manifest.version))
138
+
139
+ animations = try manifest.animations.map { dotLottieAnimation in
140
+ let animation = try dotLottieAnimation.animation(url: animationsUrl(for: manifest.version))
141
+ let configuration = DotLottieConfiguration(
142
+ id: dotLottieAnimation.id,
143
+ loopMode: dotLottieAnimation.loopMode,
144
+ speed: dotLottieAnimation.animationSpeed,
145
+ dotLottieImageProvider: imageProvider
146
+ )
147
+
148
+ return DotLottieFile.Animation(
149
+ animation: animation,
150
+ configuration: configuration
151
+ )
152
+ }
153
+ }
154
+
155
+ private func loadManifest() throws -> DotLottieManifest {
156
+ let path = fileUrl.appendingPathComponent(DotLottieFile.manifestFileName)
157
+ return try DotLottieManifest.load(from: path)
158
+ }
159
+ }
160
+
161
+ extension String {
162
+
163
+ // MARK: Fileprivate
164
+
165
+ fileprivate func asFilename() -> String {
166
+ lastPathComponent().removingPathExtension()
167
+ }
168
+
169
+ // MARK: Private
170
+
171
+ private func lastPathComponent() -> String {
172
+ (self as NSString).lastPathComponent
173
+ }
174
+
175
+ private func removingPathExtension() -> String {
176
+ (self as NSString).deletingPathExtension
177
+ }
178
+ }
179
+
180
+ // MARK: - DotLottieFile + @unchecked Sendable
181
+
182
+ // Mark `DotLottieFile` as `@unchecked Sendable` to allow it to be used when strict concurrency is enabled.
183
+ // In the future, it may be necessary to make changes to the internal implementation of `DotLottieFile`
184
+ // to make it truly thread-safe.
185
+ // swiftlint:disable:next no_unchecked_sendable
186
+ extension DotLottieFile: @unchecked Sendable { }