Files
Kisani/Shared/Components/FolderRow.swift

54 lines
2.2 KiB
Swift
Raw Normal View History

import SwiftUI
struct FolderRow: View {
let item: NASItem
let isSelected: Bool
let onTap: () -> Void
var onNavigate: (() -> Void)? = nil
var body: some View {
HStack(spacing: 0) {
Button(action: onTap) {
HStack(spacing: 12) {
Image(systemName: item.isDirectory ? "folder.fill" : "doc")
.font(.system(size: 14, weight: .regular))
.foregroundStyle(isSelected ? AppTheme.inkInverse : AppTheme.inkSecondary)
.frame(width: 22)
Text(item.name)
.font(.system(size: 15, weight: isSelected ? .medium : .regular))
.foregroundStyle(isSelected ? AppTheme.inkInverse : AppTheme.ink)
.lineLimit(1)
Spacer()
if isSelected {
Image(systemName: "checkmark")
.font(.system(size: 12, weight: .semibold))
.foregroundStyle(AppTheme.inkInverse)
}
}
.padding(.leading, 16)
.padding(.trailing, item.isDirectory && onNavigate != nil ? 8 : 16)
.padding(.vertical, 12)
.background(isSelected ? AppTheme.ink : Color.clear)
.animation(.spring(response: 0.2, dampingFraction: 0.8), value: isSelected)
}
.buttonStyle(ScaleButtonStyle())
if item.isDirectory, let navigate = onNavigate {
Button(action: navigate) {
Image(systemName: "chevron.right")
.font(.system(size: 12, weight: .medium))
.foregroundStyle(isSelected ? AppTheme.inkInverse : AppTheme.inkQuaternary)
.padding(.horizontal, 14)
.padding(.vertical, 12)
.background(isSelected ? AppTheme.ink : Color.clear)
.animation(.spring(response: 0.2, dampingFraction: 0.8), value: isSelected)
}
.buttonStyle(ScaleButtonStyle())
}
}
}
}