blob: 7a5014722606d639c819601ed3c50632a8c1a21a [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import SwiftUI
/// A view that displays a footer in the overflow menu.
struct OverflowMenuFooterRow: View {
enum Dimensions {
/// Space between elements on the icon line.
static let iconLineSpacing: CGFloat = 12
/// The vertical spacing between icon line, label (name) and link.
static let verticalSpacing: CGFloat = 3
/// The extra vertical above and below icon line.
static let iconLineExtraVerticalSpacing: CGFloat = 9
// The height of the icon line dividers.
static let iconLineDividerHeight: CGFloat = 1
}
/// The footer for this row.
@ObservedObject var footer: OverflowMenuFooter
var body: some View {
VStack(
alignment: .center,
spacing: Dimensions.verticalSpacing
) {
HStack(
alignment: .center,
spacing: Dimensions.iconLineSpacing
) {
Rectangle()
.foregroundColor(.overflowMenuSeparator)
.frame(height: Dimensions.iconLineDividerHeight)
footer.image
.fixedSize()
.foregroundColor(.grey500)
Rectangle()
.foregroundColor(.overflowMenuSeparator)
.frame(height: Dimensions.iconLineDividerHeight)
}
.padding([.top], Dimensions.iconLineExtraVerticalSpacing)
Text(footer.name)
.padding([.top], Dimensions.iconLineExtraVerticalSpacing)
.font(.footnote)
Text(footer.link)
.font(.caption2)
.foregroundColor(.chromeBlue)
.onTapGesture(perform: footer.handler)
.accessibilityIdentifier(footer.accessibilityIdentifier)
}
// Group all children together so VoiceOver doesn't have to read the two
// text labels individually.
.accessibilityElement(children: .combine)
.accessibilityAction(.default, footer.handler)
}
}