Fix tvOS legacy import rows acting as a single Remove button

On tvOS a Form row is one focusable unit, so the legacy account/source
cards - header, credential fields, and both buttons stacked in a single
row - focused as a whole and every click fired the first button (Remove),
making credentials and Import unreachable.

- Split the tvOS rows into individually focusable rows (info header,
  fields, Import, Remove), keeping the card layout on iOS/macOS
- Wrap the tvOS entry points in TVSidebarDetailContainer and drop the
  tvOS navigationTitle that rendered as a ghost behind the form
- Present the review screen from the first-launch alert as a
  fullScreenCover on tvOS: sheets render as a small transparent card
  that cannot fit the sidebar layout (Menu button dismisses the cover)
- Dim disabled TVSettingsButtonStyle buttons
- Widen the row icon frame for tvOS glyph sizes and skip the caption
  when it would repeat the host shown as the title
This commit is contained in:
Arkadiusz Fal
2026-07-19 19:23:36 +02:00
parent 9c97036684
commit 283c2cb9cb
4 changed files with 136 additions and 35 deletions

View File

@@ -412,7 +412,12 @@ struct AdvancedSettingsView: View {
if appEnvironment?.legacyMigrationService.hasLegacyDataToImport() == true {
#if os(tvOS)
NavigationLink {
LegacyDataImportView()
TVSidebarDetailContainer(
systemImage: "person.badge.key",
title: String(localized: "migration.accounts.title")
) {
LegacyDataImportView()
}
} label: {
Label(String(localized: "migration.accounts.title"), systemImage: "person.badge.key")
}