diff --git a/Example/OpenSwiftUIUITests/Render/GeometryEffect/IgnoredByLayoutEffectUITests.swift b/Example/OpenSwiftUIUITests/Render/GeometryEffect/IgnoredByLayoutEffectUITests.swift index 0fc9e38d0..9ab345177 100644 --- a/Example/OpenSwiftUIUITests/Render/GeometryEffect/IgnoredByLayoutEffectUITests.swift +++ b/Example/OpenSwiftUIUITests/Render/GeometryEffect/IgnoredByLayoutEffectUITests.swift @@ -8,7 +8,7 @@ import SnapshotTesting @MainActor @Suite(.snapshots(record: .never, diffTool: diffTool)) struct IgnoredByLayoutEffectUITests { - @Test(.disabled("Animation is not implmemented yet")) + @Test func offsetIgnoredByLayout() { struct ContentView: View { var body: some View { diff --git a/Sources/OpenSwiftUI/Animation/Animatable/AnimatableModifier.swift b/Sources/OpenSwiftUI/Animation/Animatable/AnimatableModifier.swift new file mode 100644 index 000000000..d23a43231 --- /dev/null +++ b/Sources/OpenSwiftUI/Animation/Animatable/AnimatableModifier.swift @@ -0,0 +1,50 @@ +// +// AnimatableModifier.swift +// OpenSwiftUI +// +// Audited for 6.5.4 +// Status: Complete + +@_spi(ForOpenSwiftUIOnly) +import OpenSwiftUICore + +/// A modifier that can create another modifier with animation. +@available(OpenSwiftUI_v1_0, *) +@available(*, deprecated, message: "use Animatable directly") +public protocol AnimatableModifier: Animatable, ViewModifier {} + +@available(OpenSwiftUI_v1_0, *) +@available(*, deprecated, message: "use Animatable directly") +extension AnimatableModifier { + nonisolated public static func _makeView( + modifier: _GraphValue, + inputs: _ViewInputs, + body: @escaping (_Graph, _ViewInputs) -> _ViewOutputs + ) -> _ViewOutputs { + let animatableViewModifier = makeAnimatable( + value: modifier, + inputs: inputs.base + ) + return makeView( + modifier: _GraphValue(animatableViewModifier), + inputs: inputs, + body: body + ) + } + + nonisolated public static func _makeViewList( + modifier: _GraphValue, + inputs: _ViewListInputs, + body: @escaping (_Graph, _ViewListInputs) -> _ViewListOutputs + ) -> _ViewListOutputs { + let animatableViewModifier = makeAnimatable( + value: modifier, + inputs: inputs.base + ) + return makeViewList( + modifier: _GraphValue(animatableViewModifier), + inputs: inputs, + body: body + ) + } +} diff --git a/Sources/OpenSwiftUI/Animation/Animatable/AnimatableView.swift b/Sources/OpenSwiftUI/Animation/Animatable/AnimatableView.swift new file mode 100644 index 000000000..42243a45f --- /dev/null +++ b/Sources/OpenSwiftUI/Animation/Animatable/AnimatableView.swift @@ -0,0 +1,33 @@ +// +// AnimatableView.swift +// OpenSwiftUI +// +// Audited for 6.5.4 +// Status: Complete + +@_spi(ForOpenSwiftUIOnly) +import OpenSwiftUICore + +@available(OpenSwiftUI_v1_0, *) +@available(*, deprecated, message: "use Animatable directly") +public protocol _AnimatableView: Animatable, View {} + +@available(OpenSwiftUI_v1_0, *) +@available(*, deprecated, message: "use Animatable directly") +extension _AnimatableView { + nonisolated public static func _makeView( + view: _GraphValue, + inputs: _ViewInputs + ) -> _ViewOutputs { + let animatableView = makeAnimatable(value: view, inputs: inputs.base) + return makeView(view: _GraphValue(animatableView), inputs: inputs) + } + + nonisolated public static func _makeViewList( + view: _GraphValue, + inputs: _ViewListInputs + ) -> _ViewListOutputs { + let animatableView = makeAnimatable(value: view, inputs: inputs.base) + return makeViewList(view: _GraphValue(animatableView), inputs: inputs) + } +} diff --git a/Sources/OpenSwiftUICore/View/Animation/Animation/Animatable.swift b/Sources/OpenSwiftUICore/Animation/Animatable/Animatable.swift similarity index 96% rename from Sources/OpenSwiftUICore/View/Animation/Animation/Animatable.swift rename to Sources/OpenSwiftUICore/Animation/Animatable/Animatable.swift index 2332167b1..b1779cd00 100644 --- a/Sources/OpenSwiftUICore/View/Animation/Animation/Animatable.swift +++ b/Sources/OpenSwiftUICore/Animation/Animatable/Animatable.swift @@ -2,12 +2,13 @@ // Animatable.swift // OpenSwiftUICore // +// Audited for 6.4.41 // Status: Complete public import Foundation package import OpenGraphShims -// MARK: - Animatable [6.4.41] +// MARK: - Animatable /// A type that describes how to animate a property of a view. public protocol Animatable { @@ -22,7 +23,7 @@ public protocol Animatable { static func _makeAnimatable(value: inout _GraphValue, inputs: _GraphInputs) } -// MARK: - Animateble + Extension [6.4.41] +// MARK: - Animateble + Extension extension Animatable where Self: VectorArithmetic { public var animatableData: Self { @@ -77,7 +78,7 @@ extension Animatable { } } -// MARK: - EmptyAnimatableData [6.4.41] +// MARK: - EmptyAnimatableData /// An empty type for animatable data. /// diff --git a/Sources/OpenSwiftUICore/View/Animation/Animation/AnimatableArray.swift b/Sources/OpenSwiftUICore/Animation/Animatable/AnimatableArray.swift similarity index 98% rename from Sources/OpenSwiftUICore/View/Animation/Animation/AnimatableArray.swift rename to Sources/OpenSwiftUICore/Animation/Animatable/AnimatableArray.swift index dd3b2a04a..ed827e402 100644 --- a/Sources/OpenSwiftUICore/View/Animation/Animation/AnimatableArray.swift +++ b/Sources/OpenSwiftUICore/Animation/Animatable/AnimatableArray.swift @@ -2,7 +2,7 @@ // AnimatableArray.swift // OpenSwiftUICore // -// Audited for iOS 18.0 +// Audited for 6.0.87 // Status: Complete package struct AnimatableArray: VectorArithmetic where Element: VectorArithmetic { diff --git a/Sources/OpenSwiftUICore/Animation/Animatable/AnimatableAttribute.swift b/Sources/OpenSwiftUICore/Animation/Animatable/AnimatableAttribute.swift new file mode 100644 index 000000000..8d2f6c280 --- /dev/null +++ b/Sources/OpenSwiftUICore/Animation/Animatable/AnimatableAttribute.swift @@ -0,0 +1,685 @@ +// +// AnimatableAttribute.swift +// OpenSwiftUICore +// +// Audited for 6.5.4 +// Status: Blocked by Trace +// ID: 35ADF281214A25133F1A6DF28858952D (SwiftUICore) + +package import Foundation +package import OpenGraphShims + +// MARK: - AnimatableAttribute + +package struct AnimatableAttribute: StatefulRule, AsyncAttribute, ObservedAttribute, CustomStringConvertible where Value: Animatable { + @Attribute var source: Value + @Attribute var environment: EnvironmentValues + var helper: AnimatableAttributeHelper + + package init( + source: Attribute, + phase: Attribute<_GraphInputs.Phase>, + time: Attribute