Files
Termind/TFI/DesignSystem/MobileToolbarEnvironment.swift
T

51 lines
1.5 KiB
Swift

import SwiftUI
struct MobileToolbarLayout: Equatable {
var isTopBar = false
var isSidebar = false
var verticalEdge: HorizontalEdge?
var isVertical: Bool { verticalEdge != nil }
var usesIconSwitcher: Bool { isTopBar }
var showsWorkspaceTabs: Bool { isTopBar || isSidebar || isVertical }
}
extension EnvironmentValues {
@Entry var mobileToolbarLayout = MobileToolbarLayout()
}
/// Read inside a Tab's content, outside the detail's visibility preferences.
private struct MobileToolbarEnvironment: ViewModifier {
@Environment(\.tabBarPlacement) private var placement
func body(content: Content) -> some View {
if #available(iOS 27.1, *) {
content.modifier(
MobileVerticalToolbarEnvironment(isTopBar: placement == .topBar, isSidebar: placement == .sidebar))
} else {
content.environment(
\.mobileToolbarLayout,
MobileToolbarLayout(isTopBar: placement == .topBar, isSidebar: placement == .sidebar))
}
}
}
@available(iOS 27.1, *)
private struct MobileVerticalToolbarEnvironment: ViewModifier {
let isTopBar: Bool
let isSidebar: Bool
@Environment(\.toolbarVerticalEdge) private var edge
func body(content: Content) -> some View {
content.environment(
\.mobileToolbarLayout,
MobileToolbarLayout(isTopBar: isTopBar, isSidebar: isSidebar, verticalEdge: edge))
}
}
extension View {
func mobileToolbarEnvironment() -> some View {
modifier(MobileToolbarEnvironment())
}
}