@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.
- package/README.md +36 -16
- package/dist/native/index.js +10 -9
- package/dist/native/octane-client-build.json +1 -1
- package/dist/web/index.js +39 -25
- package/dist/web/octane-client-build.json +1 -1
- package/package.json +25 -3
- package/platforms/macos/LICENSE-EpoxyCore-Apache-2.0.txt +201 -0
- package/platforms/macos/LICENSE-LRUCache-MIT.txt +22 -0
- package/platforms/macos/LICENSE-Lottie-Apache-2.0.txt +201 -0
- package/platforms/macos/LICENSE-ZIPFoundation-MIT.txt +21 -0
- package/platforms/macos/UPSTREAM.md +13 -0
- package/platforms/macos/resources/PrivacyInfo.xcprivacy +23 -0
- package/platforms/macos/resources/THIRD-PARTY-NOTICES.txt +10 -0
- package/platforms/macos/src/XplatAppKitLottie.swift +246 -0
- package/platforms/macos/src/vendor/Lottie/PrivacyInfo.xcprivacy +23 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/CAAnimation+TimingConfiguration.swift +81 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/CALayer+addAnimation.swift +476 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/CombinedShapeAnimation.swift +92 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/CustomPathAnimation.swift +89 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/DropShadowAnimation.swift +179 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/EllipseAnimation.swift +53 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/GradientAnimations.swift +287 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/LayerProperty.swift +440 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/OpacityAnimation.swift +53 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/RectangleAnimation.swift +59 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/ShapeAnimation.swift +246 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/StarAnimation.swift +119 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/StrokeAnimation.swift +96 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/TransformAnimations.swift +380 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/VisibilityAnimation.swift +63 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/CompatibilityTracker.swift +129 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/CoreAnimationLayer.swift +645 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Extensions/CALayer+fillBounds.swift +35 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Extensions/KeyframeGroup+exactlyOneKeyframe.swift +28 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Extensions/Keyframes+combined.swift +345 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Extensions/Keyframes+timeRemapping.swift +46 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/AnimationLayer.swift +169 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/BaseAnimationLayer.swift +46 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/BaseCompositionLayer.swift +120 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/CALayer+setupLayerHierarchy.swift +169 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/GradientRenderLayer.swift +101 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/ImageLayer.swift +81 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/InfiniteOpaqueAnimationLayer.swift +57 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/LayerModel+makeAnimationLayer.swift +59 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/MaskCompositionLayer.swift +139 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/PreCompLayer.swift +107 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/RepeaterLayer.swift +113 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/ShapeItemLayer.swift +346 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/ShapeLayer.swift +569 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/SolidLayer.swift +66 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/TextLayer.swift +157 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Layers/TransformLayer.swift +13 -0
- package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/ValueProviderStore.swift +157 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/Collection+Diff.swift +267 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/Diffable.swift +19 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/DiffableSection.swift +16 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/IndexChangeset.swift +187 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Diffing/SectionedChangeset.swift +22 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Logging/EpoxyLogger.swift +102 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/CallbackContextEpoxyModeled.swift +8 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelArrayBuilder.swift +48 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelProperty.swift +158 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModelStorage.swift +88 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/EpoxyModeled.swift +54 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Internal/AnyEpoxyModelProperty.swift +31 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Internal/ClassReference.swift +39 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/AnimatedProviding.swift +10 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DataIDProviding.swift +58 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidDisplayProviding.swift +41 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidEndDisplayingProviding.swift +42 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/DidSelectProviding.swift +36 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ErasedContentProviding.swift +49 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/MakeViewProviding.swift +61 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/SetBehaviorsProviding.swift +38 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/SetContentProviding.swift +38 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/StyleIDProviding.swift +38 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/TraitCollectionProviding.swift +14 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ViewDifferentiatorProviding.swift +34 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/ViewProviding.swift +13 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/Providers/WillDisplayProviding.swift +41 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Model/ViewEpoxyModeled.swift +10 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/README.md +30 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxySwiftUIIntrinsicContentSizeInvalidator.swift +34 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxySwiftUILayoutMargins.swift +38 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/EpoxyableView+SwiftUIView.swift +165 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/LayoutUtilities/MeasuringViewRepresentable.swift +127 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/LayoutUtilities/SwiftUIMeasurementContainer.swift +468 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/SwiftUIView.swift +146 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/UIView+SwiftUIView.swift +39 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/SwiftUI/UIViewConfiguringSwiftUIView.swift +41 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/BehaviorsConfigurableView.swift +45 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/ContentConfigurableView.swift +36 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/EpoxyableView.swift +5 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/StyledView.swift +43 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/EpoxyCore/Views/ViewType.swift +47 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/LRUCache/LRUCache.swift +257 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/LRUCache/README.md +24 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/README.md +43 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+BackingConfiguration.swift +149 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Deprecated.swift +23 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Helpers.swift +361 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+MemoryFile.swift +205 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Progress.swift +66 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Reading.swift +160 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+ReadingDeprecated.swift +50 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+Writing.swift +403 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+WritingDeprecated.swift +95 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive+ZIP64.swift +191 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Archive.swift +404 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Data+Compression.swift +632 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Data+CompressionDeprecated.swift +43 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Data+Serialization.swift +146 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Date+ZIP.swift +101 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Entry+Serialization.swift +191 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Entry+ZIP64.swift +170 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/Entry.swift +669 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/FileManager+ZIP.swift +405 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/FileManager+ZIPDeprecated.swift +28 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/README.md +24 -0
- package/platforms/macos/src/vendor/Lottie/Private/EmbeddedLibraries/ZipFoundation/URL+ZIP.swift +34 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/CompositionLayer.swift +177 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/ImageCompositionLayer.swift +54 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/MaskContainerLayer.swift +191 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/NullCompositionLayer.swift +28 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/PreCompositionLayer.swift +137 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/ShapeCompositionLayer.swift +60 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/SolidCompositionLayer.swift +57 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/CompLayers/TextCompositionLayer.swift +247 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/MainThreadAnimationLayer.swift +321 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/CachedImageProvider.swift +56 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/CompositionLayersInitializer.swift +103 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/CoreTextRenderLayer.swift +424 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/InvertedMatteLayer.swift +55 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/LayerFontProvider.swift +39 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/LayerImageProvider.swift +52 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/LayerTextProvider.swift +38 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/LayerContainers/Utility/LayerTransformNode.swift +149 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Extensions/ItemsExtension.swift +146 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/NodeProperty.swift +62 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyNodeProperty.swift +53 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/AnyValueContainer.swift +26 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/KeypathSearchable.swift +23 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/Protocols/NodePropertyMap.swift +43 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/ValueContainer.swift +47 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/GroupInterpolator.swift +39 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/NodeProperties/ValueProviders/SingleValueProvider.swift +43 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/LayerEffectNodes/DropShadowNode.swift +102 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/LayerEffectNodes/LayerEffectNode.swift +25 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/ModifierNodes/RoundedCornersNode.swift +85 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/ModifierNodes/TrimPathNode.swift +281 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/GroupOutputNode.swift +74 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/PassThroughOutputNode.swift +47 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/PathOutputNode.swift +89 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/FillRenderer.swift +69 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientFillRenderer.swift +253 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/GradientStrokeRenderer.swift +64 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/LegacyGradientFillRenderer.swift +158 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/OutputNodes/Renderables/StrokeRenderer.swift +165 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/EllipseNode.swift +143 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/PolygonNode.swift +173 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/RectNode.swift +238 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/ShapeNode.swift +73 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/PathNodes/StarNode.swift +224 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderContainers/GroupNode.swift +162 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/FillNode.swift +88 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientFillNode.swift +103 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/GradientStrokeNode.swift +149 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/RenderNodes/StrokeNode.swift +179 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Nodes/Text/TextAnimatorNode.swift +345 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Protocols/AnimatorNode.swift +197 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Protocols/PathNode.swift +20 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/Protocols/RenderNode.swift +60 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/RenderLayers/ShapeContainerLayer.swift +78 -0
- package/platforms/macos/src/vendor/Lottie/Private/MainThread/NodeRenderSystem/RenderLayers/ShapeRenderLayer.swift +98 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Assets/Asset.swift +51 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Assets/AssetLibrary.swift +75 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Assets/ImageAsset.swift +141 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Assets/PrecompAsset.swift +47 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/DictionaryInitializable.swift +73 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/DotLottie/DotLottieAnimation.swift +57 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/DotLottie/DotLottieImageProvider.swift +89 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/DotLottie/DotLottieManifest.swift +42 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/DotLottie/DotLottieUtils.swift +71 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Extensions/Bundle.swift +58 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Extensions/KeyedDecodingContainerExtensions.swift +71 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Keyframes/KeyframeData.swift +111 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Keyframes/KeyframeGroup.swift +265 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/DropShadowEffect.swift +52 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/EffectValues/ColorEffectValue.swift +45 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/EffectValues/EffectValue.swift +98 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/EffectValues/Vector1DEffectValue.swift +45 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/LayerEffects/LayerEffect.swift +103 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/LayerStyles/DropShadowStyle.swift +79 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/LayerStyles/LayerStyle.swift +85 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/ImageLayerModel.swift +49 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/LayerModel.swift +266 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/PreCompLayerModel.swift +74 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/ShapeLayerModel.swift +50 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/SolidLayerModel.swift +63 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Layers/TextLayerModel.swift +65 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Objects/DashPattern.swift +42 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Objects/Marker.swift +35 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Objects/Mask.swift +80 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Objects/Transform.swift +261 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Ellipse.swift +79 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Fill.swift +79 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/GradientFill.swift +142 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/GradientStroke.swift +244 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Group.swift +55 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Merge.swift +63 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Rectangle.swift +79 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Repeater.swift +181 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/RoundedCorners.swift +53 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Shape.swift +63 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/ShapeItem.swift +171 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/ShapeTransform.swift +202 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Star.swift +136 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Stroke.swift +144 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/ShapeItems/Trim.swift +90 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Text/Font.swift +67 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Text/Glyph.swift +94 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Text/TextAnimator.swift +240 -0
- package/platforms/macos/src/vendor/Lottie/Private/Model/Text/TextDocument.swift +142 -0
- package/platforms/macos/src/vendor/Lottie/Private/RootAnimationLayer.swift +54 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Debugging/AnimatorNodeDebugging.swift +23 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Debugging/LayerDebugging.swift +231 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Debugging/TestHelpers.swift +10 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/AnimationKeypathExtension.swift +303 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/BlendMode+Filter.swift +31 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/CGColor+RGB.swift +45 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/CGFloatExtensions.swift +152 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/DataExtension.swift +33 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/MathKit.swift +454 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Extensions/StringExtensions.swift +44 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Helpers/AnimationContext.swift +95 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Helpers/AnyEquatable.swift +23 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Helpers/Binding+Map.swift +19 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Helpers/View+ValueChanged.swift +35 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Interpolatable/InterpolatableExtensions.swift +143 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Interpolatable/KeyframeExtensions.swift +47 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Interpolatable/KeyframeInterpolator.swift +250 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/LottieAnimationSource.swift +51 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/BezierPath.swift +509 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/BezierPathRoundExtension.swift +163 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/CGPointExtension.swift +35 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/ColorExtension.swift +101 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/CompoundBezierPath.swift +169 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/CurveVertex.swift +190 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/PathElement.swift +78 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/UnitBezier.swift +119 -0
- package/platforms/macos/src/vendor/Lottie/Private/Utility/Primitives/VectorsExtensions.swift +368 -0
- package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimation.swift +179 -0
- package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimationHelpers.swift +317 -0
- package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimationLayer.swift +1582 -0
- package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimationView.swift +1090 -0
- package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieAnimationViewInitializers.swift +226 -0
- package/platforms/macos/src/vendor/Lottie/Public/Animation/LottiePlaybackMode.swift +266 -0
- package/platforms/macos/src/vendor/Lottie/Public/Animation/LottieView.swift +643 -0
- package/platforms/macos/src/vendor/Lottie/Public/AnimationCache/AnimationCacheProvider.swift +21 -0
- package/platforms/macos/src/vendor/Lottie/Public/AnimationCache/DefaultAnimationCache.swift +67 -0
- package/platforms/macos/src/vendor/Lottie/Public/AnimationCache/LRUAnimationCache.swift +11 -0
- package/platforms/macos/src/vendor/Lottie/Public/AnimationCache/LottieAnimationCache.swift +15 -0
- package/platforms/macos/src/vendor/Lottie/Public/Configuration/DecodingStrategy.swift +15 -0
- package/platforms/macos/src/vendor/Lottie/Public/Configuration/LottieConfiguration.swift +54 -0
- package/platforms/macos/src/vendor/Lottie/Public/Configuration/LottieURLSession.swift +31 -0
- package/platforms/macos/src/vendor/Lottie/Public/Configuration/ReducedMotionOption.swift +128 -0
- package/platforms/macos/src/vendor/Lottie/Public/Configuration/RenderingEngineOption.swift +117 -0
- package/platforms/macos/src/vendor/Lottie/Public/Controls/AnimatedButton.swift +128 -0
- package/platforms/macos/src/vendor/Lottie/Public/Controls/AnimatedControl.swift +248 -0
- package/platforms/macos/src/vendor/Lottie/Public/Controls/AnimatedSwitch.swift +271 -0
- package/platforms/macos/src/vendor/Lottie/Public/Controls/LottieButton.swift +119 -0
- package/platforms/macos/src/vendor/Lottie/Public/Controls/LottieSwitch.swift +144 -0
- package/platforms/macos/src/vendor/Lottie/Public/Controls/LottieViewType.swift +79 -0
- package/platforms/macos/src/vendor/Lottie/Public/DotLottie/Cache/DotLottieCache.swift +66 -0
- package/platforms/macos/src/vendor/Lottie/Public/DotLottie/Cache/DotLottieCacheProvider.swift +21 -0
- package/platforms/macos/src/vendor/Lottie/Public/DotLottie/DotLottieConfiguration.swift +72 -0
- package/platforms/macos/src/vendor/Lottie/Public/DotLottie/DotLottieFile.swift +186 -0
- package/platforms/macos/src/vendor/Lottie/Public/DotLottie/DotLottieFileHelpers.swift +386 -0
- package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/AnimationKeypath.swift +57 -0
- package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/AnyValueProvider.swift +132 -0
- package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/ColorValueProvider.swift +96 -0
- package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/FloatValueProvider.swift +81 -0
- package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/GradientValueProvider.swift +138 -0
- package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/PointValueProvider.swift +81 -0
- package/platforms/macos/src/vendor/Lottie/Public/DynamicProperties/ValueProviders/SizeValueProvider.swift +81 -0
- package/platforms/macos/src/vendor/Lottie/Public/FontProvider/AnimationFontProvider.swift +41 -0
- package/platforms/macos/src/vendor/Lottie/Public/ImageProvider/AnimationImageProvider.swift +43 -0
- package/platforms/macos/src/vendor/Lottie/Public/Keyframes/Interpolatable.swift +285 -0
- package/platforms/macos/src/vendor/Lottie/Public/Keyframes/Keyframe.swift +98 -0
- package/platforms/macos/src/vendor/Lottie/Public/Logging/LottieLogger.swift +138 -0
- package/platforms/macos/src/vendor/Lottie/Public/Primitives/AnimationTime.swift +15 -0
- package/platforms/macos/src/vendor/Lottie/Public/Primitives/LottieColor.swift +43 -0
- package/platforms/macos/src/vendor/Lottie/Public/Primitives/Vectors.swift +36 -0
- package/platforms/macos/src/vendor/Lottie/Public/TextProvider/AnimationTextProvider.swift +135 -0
- package/platforms/macos/src/vendor/Lottie/Public/iOS/AnimationSubview.swift +19 -0
- package/platforms/macos/src/vendor/Lottie/Public/iOS/BundleImageProvider.swift +98 -0
- package/platforms/macos/src/vendor/Lottie/Public/iOS/Compatibility/CompatibleAnimationKeypath.swift +33 -0
- package/platforms/macos/src/vendor/Lottie/Public/iOS/Compatibility/CompatibleAnimationView.swift +567 -0
- package/platforms/macos/src/vendor/Lottie/Public/iOS/Compatibility/CompatibleFontProvider.swift +41 -0
- package/platforms/macos/src/vendor/Lottie/Public/iOS/Compatibility/CompatibleImageProvider.swift +43 -0
- package/platforms/macos/src/vendor/Lottie/Public/iOS/FilepathImageProvider.swift +78 -0
- package/platforms/macos/src/vendor/Lottie/Public/iOS/LottieAnimationViewBase.swift +85 -0
- package/platforms/macos/src/vendor/Lottie/Public/iOS/UIColorExtension.swift +23 -0
- package/platforms/macos/src/vendor/Lottie/Public/macOS/AnimationSubview.macOS.swift +19 -0
- package/platforms/macos/src/vendor/Lottie/Public/macOS/BundleImageProvider.macOS.swift +90 -0
- package/platforms/macos/src/vendor/Lottie/Public/macOS/FilepathImageProvider.macOS.swift +86 -0
- package/platforms/macos/src/vendor/Lottie/Public/macOS/LottieAnimationViewBase.macOS.swift +102 -0
- package/src/Lottie.macos.tsrx +129 -0
- package/src/Lottie.tsrx +6 -4
- package/src/Lottie.web.tsrx +28 -11
- package/src/index.macos.ts +2 -0
- package/src/props.ts +6 -1
- package/types/generated/props.d.ts +5 -1
package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/TransformAnimations.swift
ADDED
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
// Created by Cal Stephens on 12/17/21.
|
|
2
|
+
// Copyright © 2021 Airbnb Inc. All rights reserved.
|
|
3
|
+
|
|
4
|
+
import QuartzCore
|
|
5
|
+
|
|
6
|
+
// MARK: - TransformModel
|
|
7
|
+
|
|
8
|
+
/// This protocol mirrors the interface of `Transform`,
|
|
9
|
+
/// but is also implemented by `ShapeTransform` to allow
|
|
10
|
+
/// both transform types to share the same animation implementation.
|
|
11
|
+
protocol TransformModel {
|
|
12
|
+
/// The anchor point of the transform.
|
|
13
|
+
var anchorPoint: KeyframeGroup<LottieVector3D> { get }
|
|
14
|
+
|
|
15
|
+
/// The position of the transform. This is nil if the position data was split.
|
|
16
|
+
var _position: KeyframeGroup<LottieVector3D>? { get }
|
|
17
|
+
|
|
18
|
+
/// The positionX of the transform. This is nil if the position property is set.
|
|
19
|
+
var _positionX: KeyframeGroup<LottieVector1D>? { get }
|
|
20
|
+
|
|
21
|
+
/// The positionY of the transform. This is nil if the position property is set.
|
|
22
|
+
var _positionY: KeyframeGroup<LottieVector1D>? { get }
|
|
23
|
+
|
|
24
|
+
/// The scale of the transform
|
|
25
|
+
var scale: KeyframeGroup<LottieVector3D> { get }
|
|
26
|
+
|
|
27
|
+
/// The rotation of the transform on X axis.
|
|
28
|
+
var rotationX: KeyframeGroup<LottieVector1D> { get }
|
|
29
|
+
|
|
30
|
+
/// The rotation of the transform on Y axis.
|
|
31
|
+
var rotationY: KeyframeGroup<LottieVector1D> { get }
|
|
32
|
+
|
|
33
|
+
/// The rotation of the transform on Z axis.
|
|
34
|
+
var rotationZ: KeyframeGroup<LottieVector1D> { get }
|
|
35
|
+
|
|
36
|
+
/// The skew of the transform (only present on `ShapeTransform`s)
|
|
37
|
+
var _skew: KeyframeGroup<LottieVector1D>? { get }
|
|
38
|
+
|
|
39
|
+
/// The skew axis of the transform (only present on `ShapeTransform`s)
|
|
40
|
+
var _skewAxis: KeyframeGroup<LottieVector1D>? { get }
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// MARK: - Transform + TransformModel
|
|
44
|
+
|
|
45
|
+
extension Transform: TransformModel {
|
|
46
|
+
var _position: KeyframeGroup<LottieVector3D>? {
|
|
47
|
+
position
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
var _positionX: KeyframeGroup<LottieVector1D>? {
|
|
51
|
+
positionX
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
var _positionY: KeyframeGroup<LottieVector1D>? {
|
|
55
|
+
positionY
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
var _skew: KeyframeGroup<LottieVector1D>? {
|
|
59
|
+
nil
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
var _skewAxis: KeyframeGroup<LottieVector1D>? {
|
|
63
|
+
nil
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// MARK: - ShapeTransform + TransformModel
|
|
68
|
+
|
|
69
|
+
extension ShapeTransform: TransformModel {
|
|
70
|
+
var anchorPoint: KeyframeGroup<LottieVector3D> {
|
|
71
|
+
anchor
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
var _position: KeyframeGroup<LottieVector3D>? {
|
|
75
|
+
position
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
var _positionX: KeyframeGroup<LottieVector1D>? {
|
|
79
|
+
nil
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
var _positionY: KeyframeGroup<LottieVector1D>? {
|
|
83
|
+
nil
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
var _skew: KeyframeGroup<LottieVector1D>? {
|
|
87
|
+
skew
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
var _skewAxis: KeyframeGroup<LottieVector1D>? {
|
|
91
|
+
skewAxis
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// MARK: - CALayer + TransformModel
|
|
96
|
+
|
|
97
|
+
extension CALayer {
|
|
98
|
+
|
|
99
|
+
// MARK: Internal
|
|
100
|
+
|
|
101
|
+
/// Adds transform-related animations from the given `TransformModel` to this layer
|
|
102
|
+
/// - This _doesn't_ apply `transform.opacity`, which has to be handled separately
|
|
103
|
+
/// since child layers don't inherit the `opacity` of their parent.
|
|
104
|
+
@nonobjc
|
|
105
|
+
func addTransformAnimations(
|
|
106
|
+
for transformModel: TransformModel,
|
|
107
|
+
context: LayerAnimationContext
|
|
108
|
+
) throws {
|
|
109
|
+
if
|
|
110
|
+
// CALayers don't support animating skew with its own set of keyframes.
|
|
111
|
+
// If the transform includes a skew, we have to combine all of the transform
|
|
112
|
+
// components into a single set of keyframes.
|
|
113
|
+
transformModel.hasSkew
|
|
114
|
+
// Negative `scale.x` values aren't applied correctly by Core Animation when animating
|
|
115
|
+
// `transform.scale.x` and `transform.scale.y` using separate `CAKeyframeAnimation`s
|
|
116
|
+
// (https://openradar.appspot.com/FB9862872). If the transform includes negative `scale.x`
|
|
117
|
+
// values, we have to combine all of the transform components into a single set of keyframes.
|
|
118
|
+
|| transformModel.hasNegativeXScaleValues
|
|
119
|
+
{
|
|
120
|
+
try addCombinedTransformAnimation(for: transformModel, context: context)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
else {
|
|
124
|
+
try addPositionAnimations(from: transformModel, context: context)
|
|
125
|
+
try addAnchorPointAnimation(from: transformModel, context: context)
|
|
126
|
+
try addScaleAnimations(from: transformModel, context: context)
|
|
127
|
+
try addRotationAnimations(from: transformModel, context: context)
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// MARK: Private
|
|
132
|
+
|
|
133
|
+
@nonobjc
|
|
134
|
+
private func addPositionAnimations(
|
|
135
|
+
from transformModel: TransformModel,
|
|
136
|
+
context: LayerAnimationContext
|
|
137
|
+
) throws {
|
|
138
|
+
if let positionKeyframes = transformModel._position {
|
|
139
|
+
try addAnimation(
|
|
140
|
+
for: .position,
|
|
141
|
+
keyframes: positionKeyframes,
|
|
142
|
+
value: \.pointValue,
|
|
143
|
+
context: context
|
|
144
|
+
)
|
|
145
|
+
} else if
|
|
146
|
+
let xKeyframes = transformModel._positionX,
|
|
147
|
+
let yKeyframes = transformModel._positionY
|
|
148
|
+
{
|
|
149
|
+
try addAnimation(
|
|
150
|
+
for: .positionX,
|
|
151
|
+
keyframes: xKeyframes,
|
|
152
|
+
value: \.cgFloatValue,
|
|
153
|
+
context: context
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
try addAnimation(
|
|
157
|
+
for: .positionY,
|
|
158
|
+
keyframes: yKeyframes,
|
|
159
|
+
value: \.cgFloatValue,
|
|
160
|
+
context: context
|
|
161
|
+
)
|
|
162
|
+
} else {
|
|
163
|
+
try context.logCompatibilityIssue("""
|
|
164
|
+
`Transform` values must provide either `position` or `positionX` / `positionY` keyframes
|
|
165
|
+
""")
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
@nonobjc
|
|
170
|
+
private func addAnchorPointAnimation(
|
|
171
|
+
from transformModel: TransformModel,
|
|
172
|
+
context: LayerAnimationContext
|
|
173
|
+
) throws {
|
|
174
|
+
try addAnimation(
|
|
175
|
+
for: .anchorPoint,
|
|
176
|
+
keyframes: transformModel.anchorPoint,
|
|
177
|
+
value: { absoluteAnchorPoint in
|
|
178
|
+
guard bounds.width > 0, bounds.height > 0 else {
|
|
179
|
+
context.logger.assertionFailure("Size must be non-zero before an animation can be played")
|
|
180
|
+
return .zero
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
// Lottie animation files express anchorPoint as an absolute point value,
|
|
184
|
+
// so we have to divide by the width/height of this layer to get the
|
|
185
|
+
// relative decimal values expected by Core Animation.
|
|
186
|
+
return CGPoint(
|
|
187
|
+
x: CGFloat(absoluteAnchorPoint.x) / bounds.width,
|
|
188
|
+
y: CGFloat(absoluteAnchorPoint.y) / bounds.height
|
|
189
|
+
)
|
|
190
|
+
},
|
|
191
|
+
context: context
|
|
192
|
+
)
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@nonobjc
|
|
196
|
+
private func addScaleAnimations(
|
|
197
|
+
from transformModel: TransformModel,
|
|
198
|
+
context: LayerAnimationContext
|
|
199
|
+
) throws {
|
|
200
|
+
try addAnimation(
|
|
201
|
+
for: .scaleX,
|
|
202
|
+
keyframes: transformModel.scale,
|
|
203
|
+
value: { scale in
|
|
204
|
+
// Lottie animation files express scale as a numerical percentage value
|
|
205
|
+
// (e.g. 50%, 100%, 200%) so we divide by 100 to get the decimal values
|
|
206
|
+
// expected by Core Animation (e.g. 0.5, 1.0, 2.0).
|
|
207
|
+
CGFloat(scale.x) / 100
|
|
208
|
+
},
|
|
209
|
+
context: context
|
|
210
|
+
)
|
|
211
|
+
|
|
212
|
+
try addAnimation(
|
|
213
|
+
for: .scaleY,
|
|
214
|
+
keyframes: transformModel.scale,
|
|
215
|
+
value: { scale in
|
|
216
|
+
// Lottie animation files express scale as a numerical percentage value
|
|
217
|
+
// (e.g. 50%, 100%, 200%) so we divide by 100 to get the decimal values
|
|
218
|
+
// expected by Core Animation (e.g. 0.5, 1.0, 2.0).
|
|
219
|
+
CGFloat(scale.y) / 100
|
|
220
|
+
},
|
|
221
|
+
context: context
|
|
222
|
+
)
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
private func addRotationAnimations(
|
|
226
|
+
from transformModel: TransformModel,
|
|
227
|
+
context: LayerAnimationContext
|
|
228
|
+
) throws {
|
|
229
|
+
let containsXRotationValues = transformModel.rotationX.keyframes.contains(where: { $0.value.cgFloatValue != 0 })
|
|
230
|
+
let containsYRotationValues = transformModel.rotationY.keyframes.contains(where: { $0.value.cgFloatValue != 0 })
|
|
231
|
+
|
|
232
|
+
// When `rotation.x` or `rotation.y` is used, it doesn't render property in test snapshots
|
|
233
|
+
// but do renders correctly on the simulator / device
|
|
234
|
+
if TestHelpers.snapshotTestsAreRunning {
|
|
235
|
+
if containsXRotationValues {
|
|
236
|
+
context.logger.warn("""
|
|
237
|
+
`rotation.x` values are not displayed correctly in snapshot tests
|
|
238
|
+
""")
|
|
239
|
+
}
|
|
240
|
+
|
|
241
|
+
if containsYRotationValues {
|
|
242
|
+
context.logger.warn("""
|
|
243
|
+
`rotation.y` values are not displayed correctly in snapshot tests
|
|
244
|
+
""")
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// Lottie animation files express rotation in degrees
|
|
249
|
+
// (e.g. 90º, 180º, 360º) so we convert to radians to get the
|
|
250
|
+
// values expected by Core Animation (e.g. π/2, π, 2π)
|
|
251
|
+
|
|
252
|
+
try addAnimation(
|
|
253
|
+
for: .rotationX,
|
|
254
|
+
keyframes: transformModel.rotationX,
|
|
255
|
+
value: { rotationDegrees in
|
|
256
|
+
rotationDegrees.cgFloatValue * .pi / 180
|
|
257
|
+
},
|
|
258
|
+
context: context
|
|
259
|
+
)
|
|
260
|
+
|
|
261
|
+
try addAnimation(
|
|
262
|
+
for: .rotationY,
|
|
263
|
+
keyframes: transformModel.rotationY,
|
|
264
|
+
value: { rotationDegrees in
|
|
265
|
+
rotationDegrees.cgFloatValue * .pi / 180
|
|
266
|
+
},
|
|
267
|
+
context: context
|
|
268
|
+
)
|
|
269
|
+
|
|
270
|
+
try addAnimation(
|
|
271
|
+
for: .rotationZ,
|
|
272
|
+
keyframes: transformModel.rotationZ,
|
|
273
|
+
value: { rotationDegrees in
|
|
274
|
+
// Lottie animation files express rotation in degrees
|
|
275
|
+
// (e.g. 90º, 180º, 360º) so we convert to radians to get the
|
|
276
|
+
// values expected by Core Animation (e.g. π/2, π, 2π)
|
|
277
|
+
rotationDegrees.cgFloatValue * .pi / 180
|
|
278
|
+
},
|
|
279
|
+
context: context
|
|
280
|
+
)
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/// Adds an animation for the entire `transform` key by combining all of the
|
|
284
|
+
/// position / size / rotation / skew animations into a single set of keyframes.
|
|
285
|
+
/// This is more expensive that animating each component separately, since
|
|
286
|
+
/// it may require manually interpolating the keyframes at each frame.
|
|
287
|
+
private func addCombinedTransformAnimation(
|
|
288
|
+
for transformModel: TransformModel,
|
|
289
|
+
context: LayerAnimationContext
|
|
290
|
+
) throws {
|
|
291
|
+
let requiresManualInterpolation =
|
|
292
|
+
// Core Animation doesn't animate skew changes properly. If the skew value
|
|
293
|
+
// changes over the course of the animation then we have to manually
|
|
294
|
+
// compute the `CATransform3D` for each frame individually.
|
|
295
|
+
transformModel.hasSkewAnimation
|
|
296
|
+
// `addAnimation` requires that we use an `Interpolatable` value, but we can't interpolate a `CATransform3D`.
|
|
297
|
+
// Since this is only necessary when using `complexTimeRemapping`, we can avoid this by manually interpolating
|
|
298
|
+
// when `context.mustUseComplexTimeRemapping` is true and just returning a `Hold` container.
|
|
299
|
+
// Since our keyframes are already manually interpolated, they won't need to be interpolated again.
|
|
300
|
+
|| context.mustUseComplexTimeRemapping
|
|
301
|
+
|
|
302
|
+
let combinedTransformKeyframes = Keyframes.combined(
|
|
303
|
+
transformModel.anchorPoint,
|
|
304
|
+
transformModel._position ?? KeyframeGroup(LottieVector3D(x: 0.0, y: 0.0, z: 0.0)),
|
|
305
|
+
transformModel._positionX ?? KeyframeGroup(LottieVector1D(0)),
|
|
306
|
+
transformModel._positionY ?? KeyframeGroup(LottieVector1D(0)),
|
|
307
|
+
transformModel.scale,
|
|
308
|
+
transformModel.rotationX,
|
|
309
|
+
transformModel.rotationY,
|
|
310
|
+
transformModel.rotationZ,
|
|
311
|
+
transformModel._skew ?? KeyframeGroup(LottieVector1D(0)),
|
|
312
|
+
transformModel._skewAxis ?? KeyframeGroup(LottieVector1D(0)),
|
|
313
|
+
requiresManualInterpolation: requiresManualInterpolation,
|
|
314
|
+
makeCombinedResult: {
|
|
315
|
+
anchor, position, positionX, positionY, scale, rotationX, rotationY, rotationZ, skew, skewAxis
|
|
316
|
+
-> Hold<CATransform3D> in
|
|
317
|
+
let transformPosition: CGPoint =
|
|
318
|
+
if transformModel._positionX != nil, transformModel._positionY != nil {
|
|
319
|
+
CGPoint(x: positionX.cgFloatValue, y: positionY.cgFloatValue)
|
|
320
|
+
} else {
|
|
321
|
+
position.pointValue
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
let transform = CATransform3D.makeTransform(
|
|
325
|
+
anchor: anchor.pointValue,
|
|
326
|
+
position: transformPosition,
|
|
327
|
+
scale: scale.sizeValue,
|
|
328
|
+
rotationX: rotationX.cgFloatValue,
|
|
329
|
+
rotationY: rotationY.cgFloatValue,
|
|
330
|
+
rotationZ: rotationZ.cgFloatValue,
|
|
331
|
+
skew: skew.cgFloatValue,
|
|
332
|
+
skewAxis: skewAxis.cgFloatValue
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
return Hold(value: transform)
|
|
336
|
+
}
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
try addAnimation(
|
|
340
|
+
for: .transform,
|
|
341
|
+
keyframes: combinedTransformKeyframes,
|
|
342
|
+
value: { $0.value },
|
|
343
|
+
context: context
|
|
344
|
+
)
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
extension TransformModel {
|
|
350
|
+
/// Whether or not this transform has a non-zero skew value
|
|
351
|
+
var hasSkew: Bool {
|
|
352
|
+
guard
|
|
353
|
+
let _skew,
|
|
354
|
+
let _skewAxis,
|
|
355
|
+
!_skew.keyframes.isEmpty,
|
|
356
|
+
!_skewAxis.keyframes.isEmpty
|
|
357
|
+
else {
|
|
358
|
+
return false
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
return _skew.keyframes.contains(where: { $0.value.cgFloatValue != 0 })
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/// Whether or not this transform has a non-zero skew value which animates
|
|
365
|
+
var hasSkewAnimation: Bool {
|
|
366
|
+
guard
|
|
367
|
+
hasSkew,
|
|
368
|
+
let _skew,
|
|
369
|
+
let _skewAxis
|
|
370
|
+
else { return false }
|
|
371
|
+
|
|
372
|
+
return _skew.keyframes.count > 1
|
|
373
|
+
|| _skewAxis.keyframes.count > 1
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
/// Whether or not this `TransformModel` has any negative X scale values
|
|
377
|
+
var hasNegativeXScaleValues: Bool {
|
|
378
|
+
scale.keyframes.contains(where: { $0.value.x < 0 })
|
|
379
|
+
}
|
|
380
|
+
}
|
package/platforms/macos/src/vendor/Lottie/Private/CoreAnimation/Animations/VisibilityAnimation.swift
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
// Created by Cal Stephens on 12/21/21.
|
|
2
|
+
// Copyright © 2021 Airbnb Inc. All rights reserved.
|
|
3
|
+
|
|
4
|
+
import QuartzCore
|
|
5
|
+
|
|
6
|
+
extension CALayer {
|
|
7
|
+
/// Adds an animation for the given `inTime` and `outTime` to this `CALayer`
|
|
8
|
+
@nonobjc
|
|
9
|
+
func addVisibilityAnimation(
|
|
10
|
+
inFrame: AnimationFrameTime,
|
|
11
|
+
outFrame: AnimationFrameTime,
|
|
12
|
+
context: LayerAnimationContext
|
|
13
|
+
) throws {
|
|
14
|
+
/// If this layer uses `complexTimeRemapping`, use the `addAnimation` codepath
|
|
15
|
+
/// which uses `Keyframes.manuallyInterpolatedWithTimeRemapping`.
|
|
16
|
+
if context.mustUseComplexTimeRemapping {
|
|
17
|
+
let isHiddenKeyframes = KeyframeGroup(keyframes: [
|
|
18
|
+
Keyframe(value: true, time: 0, isHold: true), // hidden, before `inFrame`
|
|
19
|
+
Keyframe(value: false, time: inFrame, isHold: true), // visible
|
|
20
|
+
Keyframe(value: true, time: outFrame, isHold: true), // hidden, after `outFrame`
|
|
21
|
+
])
|
|
22
|
+
|
|
23
|
+
try addAnimation(
|
|
24
|
+
for: .isHidden,
|
|
25
|
+
keyframes: isHiddenKeyframes.map { Hold(value: $0) },
|
|
26
|
+
value: { $0.value },
|
|
27
|
+
context: context
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/// Otherwise continue using the legacy codepath that doesn't support complex time remapping.
|
|
32
|
+
/// - TODO: We could remove this codepath in favor of always using the simpler codepath above,
|
|
33
|
+
/// but would have to solve https://github.com/airbnb/lottie-ios/pull/2254 for that codepath.
|
|
34
|
+
else {
|
|
35
|
+
let animation = CAKeyframeAnimation(keyPath: #keyPath(isHidden))
|
|
36
|
+
animation.calculationMode = .discrete
|
|
37
|
+
|
|
38
|
+
animation.values = [
|
|
39
|
+
true, // hidden, before `inFrame`
|
|
40
|
+
false, // visible
|
|
41
|
+
true, // hidden, after `outFrame`
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
// From the documentation of `keyTimes`:
|
|
45
|
+
// - If the calculationMode is set to discrete, the first value in the array
|
|
46
|
+
// must be 0.0 and the last value must be 1.0. The array should have one more
|
|
47
|
+
// entry than appears in the values array. For example, if there are two values,
|
|
48
|
+
// there should be three key times.
|
|
49
|
+
animation.keyTimes = [
|
|
50
|
+
NSNumber(value: 0.0),
|
|
51
|
+
NSNumber(value: max(Double(try context.progressTime(for: inFrame)), 0)),
|
|
52
|
+
// Anything visible during the last frame should stay visible until the absolute end of the animation.
|
|
53
|
+
// - This matches the behavior of the main thread rendering engine.
|
|
54
|
+
context.simpleTimeRemapping(outFrame) == context.animation.endFrame
|
|
55
|
+
? NSNumber(value: Double(1.0))
|
|
56
|
+
: NSNumber(value: min(Double(try context.progressTime(for: outFrame)), 1)),
|
|
57
|
+
NSNumber(value: 1.0),
|
|
58
|
+
]
|
|
59
|
+
|
|
60
|
+
add(animation, timedWith: context)
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
// Created by Cal Stephens on 5/4/22.
|
|
2
|
+
// Copyright © 2022 Airbnb Inc. All rights reserved.
|
|
3
|
+
|
|
4
|
+
// MARK: - CompatibilityIssue
|
|
5
|
+
|
|
6
|
+
/// A compatibility issue that was encountered while setting up an animation with the Core Animation engine
|
|
7
|
+
struct CompatibilityIssue: CustomStringConvertible {
|
|
8
|
+
let message: String
|
|
9
|
+
let context: String
|
|
10
|
+
|
|
11
|
+
var description: String {
|
|
12
|
+
"[\(context)] \(message)"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// MARK: - CompatibilityTracker
|
|
17
|
+
|
|
18
|
+
/// A type that tracks whether or not an animation is compatible with the Core Animation engine
|
|
19
|
+
final class CompatibilityTracker {
|
|
20
|
+
|
|
21
|
+
// MARK: Lifecycle
|
|
22
|
+
|
|
23
|
+
init(mode: Mode, logger: LottieLogger) {
|
|
24
|
+
self.mode = mode
|
|
25
|
+
self.logger = logger
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// MARK: Internal
|
|
29
|
+
|
|
30
|
+
/// How compatibility issues should be handled
|
|
31
|
+
enum Mode {
|
|
32
|
+
/// When a compatibility issue is encountered, an error will be thrown immediately,
|
|
33
|
+
/// aborting the animation setup process as soon as possible.
|
|
34
|
+
case abort
|
|
35
|
+
|
|
36
|
+
/// When a compatibility issue is encountered, it is stored in `CompatibilityTracker.issues`
|
|
37
|
+
case track
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
enum Error: Swift.Error {
|
|
41
|
+
case encounteredCompatibilityIssue(CompatibilityIssue)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/// Records a compatibility issue that will be reported according to `CompatibilityTracker.Mode`
|
|
45
|
+
func logIssue(message: String, context: String) throws {
|
|
46
|
+
logger.assert(!context.isEmpty, "Compatibility issue context is unexpectedly empty")
|
|
47
|
+
|
|
48
|
+
let issue = CompatibilityIssue(
|
|
49
|
+
// Compatibility messages are usually written in source files using multi-line strings,
|
|
50
|
+
// but converting them to be a single line makes it easier to read the ultimate log output.
|
|
51
|
+
message: message.replacingOccurrences(of: "\n", with: " "),
|
|
52
|
+
context: context
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
switch mode {
|
|
56
|
+
case .abort:
|
|
57
|
+
throw CompatibilityTracker.Error.encounteredCompatibilityIssue(issue)
|
|
58
|
+
case .track:
|
|
59
|
+
issues.append(issue)
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/// Asserts that a condition is true, otherwise logs a compatibility issue that will be reported
|
|
64
|
+
/// according to `CompatibilityTracker.Mode`
|
|
65
|
+
func assert(
|
|
66
|
+
_ condition: Bool,
|
|
67
|
+
_ message: @autoclosure () -> String,
|
|
68
|
+
context: @autoclosure () -> String
|
|
69
|
+
) throws {
|
|
70
|
+
if !condition {
|
|
71
|
+
try logIssue(message: message(), context: context())
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/// Reports the compatibility issues that were recorded when setting up the animation,
|
|
76
|
+
/// and clears the set of tracked issues.
|
|
77
|
+
func reportCompatibilityIssues(_ handler: ([CompatibilityIssue]) -> Void) {
|
|
78
|
+
handler(issues)
|
|
79
|
+
issues = []
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// MARK: Private
|
|
83
|
+
|
|
84
|
+
private let mode: Mode
|
|
85
|
+
private let logger: LottieLogger
|
|
86
|
+
|
|
87
|
+
/// Compatibility issues encountered while setting up the animation
|
|
88
|
+
private var issues = [CompatibilityIssue]()
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
// MARK: - CompatibilityTrackerProviding
|
|
93
|
+
|
|
94
|
+
protocol CompatibilityTrackerProviding {
|
|
95
|
+
var compatibilityTracker: CompatibilityTracker { get }
|
|
96
|
+
var compatibilityIssueContext: String { get }
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
extension CompatibilityTrackerProviding {
|
|
100
|
+
/// Records a compatibility issue that will be reported according to `CompatibilityTracker.Mode`
|
|
101
|
+
func logCompatibilityIssue(_ message: String) throws {
|
|
102
|
+
try compatibilityTracker.logIssue(message: message, context: compatibilityIssueContext)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/// Asserts that a condition is true, otherwise logs a compatibility issue that will be reported
|
|
106
|
+
/// according to `CompatibilityTracker.Mode`
|
|
107
|
+
func compatibilityAssert(
|
|
108
|
+
_ condition: Bool,
|
|
109
|
+
_ message: @autoclosure () -> String
|
|
110
|
+
) throws {
|
|
111
|
+
try compatibilityTracker.assert(condition, message(), context: compatibilityIssueContext)
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
// MARK: - LayerContext + CompatibilityTrackerProviding
|
|
116
|
+
|
|
117
|
+
extension LayerContext: CompatibilityTrackerProviding {
|
|
118
|
+
var compatibilityIssueContext: String {
|
|
119
|
+
layerName
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// MARK: - LayerAnimationContext + CompatibilityTrackerProviding
|
|
124
|
+
|
|
125
|
+
extension LayerAnimationContext: CompatibilityTrackerProviding {
|
|
126
|
+
var compatibilityIssueContext: String {
|
|
127
|
+
currentKeypath.fullPath
|
|
128
|
+
}
|
|
129
|
+
}
|