Improve dropzone when dragging an image from Finder

This commit is contained in:
Otavio Cordeiro 2025-12-17 22:26:22 +01:00 committed by Otávio
parent f5a4bf476d
commit d15f7a1be3

View file

@ -25,16 +25,7 @@ struct UploadView: View {
// MARK: - Public
var body: some View {
VStack {
HStack(alignment: .top) {
makeSidebarView()
.frame(width: 200)
makeEditorView()
}
makeVisibilityView()
}
makeContentView()
.frame(minWidth: 400, idealWidth: 640, maxWidth: 640)
.toolbar {
makeToolbarContent()
@ -62,26 +53,42 @@ struct UploadView: View {
@ViewBuilder
private func makeSidebarView() -> some View {
if viewModel.isDragging {
makeDropPictureView()
} else {
VStack {
makePictureView()
makePicturePickerView()
}
}
@ViewBuilder
private func makeContentView() -> some View {
ZStack {
if viewModel.isDragging {
makeDropZoneView()
} else {
VStack {
HStack(alignment: .top) {
makeSidebarView()
.frame(width: 200)
makeEditorView()
}
makeVisibilityView()
}
}
}
}
@ViewBuilder
private func makeDropPictureView() -> some View {
VStack(alignment: .center, spacing: 8) {
Image(systemName: "arrow.down.heart")
.font(.largeTitle)
Text("Drop it here")
}
.frame(width: 100, height: 100)
.card(.accentColor)
private func makeDropZoneView() -> some View {
RoundedRectangle(cornerRadius: 8)
.fill(
AnyShapeStyle(
viewModel.isDragging ? Color.accentColor.opacity(0.1) : .clear
)
)
.strokeBorder(
viewModel.isDragging ? Color.accentColor : .secondary.opacity(0.3),
style: StrokeStyle(lineWidth: 2, dash: [8, 4])
)
}
@ViewBuilder