crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

commit a80f4ff678caa09eb27351d910d759432306fe5d
parent b812b0fc67c9e44d7027a9d8031ef7b12e6fbd3f
Author: Michael Camilleri <[email protected]>
Date:   Sat,  9 May 2026 07:40:57 +0900

Fix Success Panel animation

Diffstat:
MCrossmate/Views/PuzzleView.swift | 32+++++++++++++++++++++++---------
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] }