import SwiftUI struct SidebarNavItemView: View { let item: SidebarNavItem let isSelected: Bool let action: () -> Void var body: some View { Button(action: action) { SidebarItemRow( title: item.title, subtitle: item.subtitle, isSelected: isSelected ) { ModernSidebarIconView(kind: item.iconKind) } } .buttonStyle(AppPlainButtonStyle()) } } struct SidebarQuickAccessItemView: View { let isSelected: Bool let action: () -> Void var body: some View { Button(action: action) { SidebarItemRow( title: "Open Reddit", subtitle: "Browse Reddit in-app", isSelected: isSelected, showsChevron: true ) { ModernRedditIconView() } } .buttonStyle(AppPlainButtonStyle()) } } private struct SidebarItemRow: View { let title: String let subtitle: String var isSelected: Bool = false var showsChevron: Bool = false @ViewBuilder let icon: () -> Icon var body: some View { HStack(alignment: .center, spacing: AppTheme.sidebarRowSpacing) { icon() .frame(width: AppTheme.iconContainerSize, height: AppTheme.iconContainerSize) VStack(alignment: .leading, spacing: 1) { Text(title) .font(.system(size: 12, weight: .semibold)) .foregroundStyle(AppTheme.textPrimary) if !subtitle.isEmpty { Text(subtitle) .font(.system(size: 10)) .foregroundStyle(AppTheme.textSecondary) } } .padding(.leading, 2) Spacer(minLength: 0) if showsChevron { Image(systemName: "chevron.right") .font(.system(size: 10, weight: .semibold)) .foregroundStyle(AppTheme.textSecondary) } } .padding(.horizontal, AppTheme.sidebarRowPaddingH) .padding(.vertical, AppTheme.sidebarRowPaddingV) .contentShape(RoundedRectangle(cornerRadius: AppTheme.cornerRadiusSmall)) .sidebarRowHover(isSelected: isSelected) } } struct SidebarSectionHeader: View { let title: String var body: some View { Text(title) .font(.system(size: 10, weight: .bold)) .foregroundStyle(AppTheme.textTertiary) .tracking(1.0) .frame(maxWidth: .infinity, alignment: .leading) .padding(.horizontal, AppTheme.sidebarRowPaddingH) .padding(.top, 5) .padding(.bottom, 4) } }