feat(apple): storage screen, About content, and fixes

- Settings: add Storage screen (size breakdown + delete-all-transfers) and
  expand About (what it is/isn't, privacy & security, license/source)
- Move Report a bug to a toolbar sheet (cancel-only unless empty)
- Send progress: derive the list-row bar from receiver delivery status so it
  clears once every receiver completes
- Fixes: iPad orientations, onChange(of:) iOS 17 API, weak-self captures,
  invalid SF Symbol, macOS bug-report form labels; bump core build target to
  match the app (18.2/15.0)
This commit is contained in:
2026-07-19 13:58:20 +02:00
parent ceccfcda71
commit bfa489def1
13 changed files with 685 additions and 132 deletions

View File

@@ -176,7 +176,7 @@ final class ReceiveModel: ObservableObject {
text: .resource("receive_completed"),
tone: .success,
actionLabel: canReveal ? .resource("button_show_in_files") : nil,
onAction: canReveal ? { [weak self] in self?.revealReceiveFolder(folder) } : nil
onAction: canReveal ? { self.revealReceiveFolder(folder) } : nil
))
case .failure(let error):
if error.isUserCancellation {
@@ -193,7 +193,7 @@ final class ReceiveModel: ObservableObject {
text: uiText,
tone: .error,
actionLabel: .resource("button_retry"),
onAction: { [weak self] in self?.receive() }
onAction: { self.receive() }
))
}
}

View File

@@ -17,7 +17,7 @@ struct ReceiveScreen: View {
NavigationStack {
Group {
if transfers.isEmpty {
ScrollView { emptyState }
emptyState
} else {
history
}
@@ -88,11 +88,11 @@ struct ReceiveScreen: View {
}
private var emptyState: some View {
EmptyStateView(
systemImage: "tray.and.arrow.down",
title: String(localized: "receive_empty_title"),
message: String(localized: "receive_empty_body")
) {
ContentUnavailableView {
Label(String(localized: "receive_empty_title"), systemImage: "tray.and.arrow.down")
} description: {
Text(LocalizedStringKey("receive_empty_body"))
} actions: {
Button(action: model.openAcquisition) {
Label(String(localized: "button_receive_files"), systemImage: "plus")
}