commit a80f4ff678caa09eb27351d910d759432306fe5d
parent b812b0fc67c9e44d7027a9d8031ef7b12e6fbd3f
Author: Michael Camilleri <[email protected]>
Date: Sat, 9 May 2026 07:40:57 +0900
Fix Success Panel animation
Diffstat:
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/Crossmate/Views/PuzzleView.swift b/Crossmate/Views/PuzzleView.swift
@@ -270,19 +270,18 @@ struct PuzzleView: View {
private var controlsPanel: some View {
ZStack(alignment: .top) {
if isSolved {
- SuccessPanel(session: session, roster: roster)
- .frame(height: controlsPanelHeight)
- .ignoresSafeArea(edges: .bottom)
- .transition(.move(edge: .bottom))
+ ControlsView(height: controlsPanelHeight) {
+ SuccessPanel(session: session, roster: roster)
+ }
+ .transition(.move(edge: .bottom))
} else if showsCustomKeyboard {
- KeyboardView(session: session, showsNavigationKeys: padLayout != nil)
- .frame(height: controlsPanelHeight)
- .ignoresSafeArea(edges: .bottom)
- .transition(.move(edge: .bottom))
+ ControlsView(height: controlsPanelHeight) {
+ KeyboardView(session: session, showsNavigationKeys: padLayout != nil)
+ }
+ .transition(.move(edge: .bottom))
}
}
.frame(height: controlsPanelHeight, alignment: .top)
- .clipped()
.background {
Color(.systemGroupedBackground)
.ignoresSafeArea(edges: .bottom)
@@ -1157,6 +1156,21 @@ private struct RebusModal: View {
}
}
+private struct ControlsView<Content: View>: View {
+ let height: CGFloat
+ @ViewBuilder var content: () -> Content
+
+ var body: some View {
+ VStack(spacing: 0) {
+ content()
+ .frame(height: height)
+ Color(.systemGroupedBackground)
+ }
+ .background(Color(.systemGroupedBackground))
+ .ignoresSafeArea(edges: .bottom)
+ }
+}
+
private extension VerticalAlignment {
enum ClueCenterID: AlignmentID {
static func defaultValue(in d: ViewDimensions) -> CGFloat { d[VerticalAlignment.center] }