@octane-xplat/lottie 0.9.0 → 0.10.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 +3 -2
- 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
|
@@ -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 { }
|