From fd1dd5f8580e66e8022e68fea98644ff252218fe Mon Sep 17 00:00:00 2001 From: phranck Date: Sat, 7 Feb 2026 13:07:23 +0100 Subject: [PATCH] Fix: Resolve Swift 6 Equatable conformance errors for MainActor-isolated Views - Add explicit nonisolated == implementations using MainActor.assumeIsolated - Fix DimmedModifier, FlexibleFrameView, OverlayModifier - Remove unnecessary @preconcurrency attributes --- Sources/TUIkit/Modifiers/DimmedModifier.swift | 8 ++++++-- Sources/TUIkit/Modifiers/FrameModifier.swift | 15 ++++++++++++++- Sources/TUIkit/Modifiers/OverlayModifier.swift | 10 +++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/Sources/TUIkit/Modifiers/DimmedModifier.swift b/Sources/TUIkit/Modifiers/DimmedModifier.swift index bc55712..d3bab70 100644 --- a/Sources/TUIkit/Modifiers/DimmedModifier.swift +++ b/Sources/TUIkit/Modifiers/DimmedModifier.swift @@ -15,7 +15,7 @@ /// The result is a flat, de-emphasized text layer with no visual ornaments. public struct DimmedModifier: View { /// The content to dim. - nonisolated(unsafe) let content: Content + let content: Content public var body: Never { fatalError("DimmedModifier renders via Renderable") @@ -24,7 +24,11 @@ public struct DimmedModifier: View { // MARK: - Equatable Conformance -extension DimmedModifier: @preconcurrency Equatable where Content: Equatable {} +extension DimmedModifier: Equatable where Content: Equatable { + nonisolated public static func == (lhs: DimmedModifier, rhs: DimmedModifier) -> Bool { + MainActor.assumeIsolated { lhs.content == rhs.content } + } +} // MARK: - Ornament Characters diff --git a/Sources/TUIkit/Modifiers/FrameModifier.swift b/Sources/TUIkit/Modifiers/FrameModifier.swift index 08c5693..63350c0 100644 --- a/Sources/TUIkit/Modifiers/FrameModifier.swift +++ b/Sources/TUIkit/Modifiers/FrameModifier.swift @@ -41,7 +41,20 @@ public struct FlexibleFrameView: View { // MARK: - Equatable Conformance -extension FlexibleFrameView: @preconcurrency Equatable where Content: Equatable {} +extension FlexibleFrameView: Equatable where Content: Equatable { + nonisolated public static func == (lhs: FlexibleFrameView, rhs: FlexibleFrameView) -> Bool { + MainActor.assumeIsolated { + lhs.content == rhs.content && + lhs.minWidth == rhs.minWidth && + lhs.idealWidth == rhs.idealWidth && + lhs.maxWidth == rhs.maxWidth && + lhs.minHeight == rhs.minHeight && + lhs.idealHeight == rhs.idealHeight && + lhs.maxHeight == rhs.maxHeight && + lhs.alignment == rhs.alignment + } + } +} // MARK: - Renderable diff --git a/Sources/TUIkit/Modifiers/OverlayModifier.swift b/Sources/TUIkit/Modifiers/OverlayModifier.swift index d140574..09c7289 100644 --- a/Sources/TUIkit/Modifiers/OverlayModifier.swift +++ b/Sources/TUIkit/Modifiers/OverlayModifier.swift @@ -26,7 +26,15 @@ public struct OverlayModifier: View { // MARK: - Equatable Conformance -extension OverlayModifier: @preconcurrency Equatable where Base: Equatable, Overlay: Equatable {} +extension OverlayModifier: Equatable where Base: Equatable, Overlay: Equatable { + nonisolated public static func == (lhs: OverlayModifier, rhs: OverlayModifier) -> Bool { + MainActor.assumeIsolated { + lhs.base == rhs.base && + lhs.overlay == rhs.overlay && + lhs.alignment == rhs.alignment + } + } +} // MARK: - Renderable