mana-swift-ui/Sources/ManaOnboardingUI/ManaOnboardingPage.swift
Till JS 8a64e785a7 ManaOnboardingUI: ruhigere Seiten — Icon überall, kein Fließtext
Flottenweite Onboarding-Angleichung:
- App-Icon neben dem Titel auf JEDER Seite (vorher nur Seite 1)
- Titel eine Stufe kleiner (.title -> .title2), Icon 48x48
- intro/footnote werden nicht mehr gerendert; Seite = Überschrift + Karten
  (Model-Felder bleiben quellkompatibel, werden ignoriert)

Greift via lokaler Pfad-Dependency automatisch in allen 22 Apps.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 18:18:35 +02:00

67 lines
2.6 KiB
Swift

import SwiftUI
/// Eine Seite im Einstiegs-Flow — im Stil von Apples „Neue Funktionen“-
/// Sheet: ein großer Titel, optional ein kurzer Vorspann, darunter eine
/// **vertikale Liste von Zeilen** (Icon links, Titel + Text rechts), und
/// pro Seite genau **ein** Weiter-Button (der Container rendert ihn).
///
/// Inhalt ist **app-geliefert** — das Paket weiß nichts über Vorsätze,
/// Decks oder Memos. Eine App baut `[ManaOnboardingPage]` und übergibt
/// sie an ``SwiftUICore/View/manaOnboarding(storageKey:pages:onFinish:)``.
/// Die Optik (Farben) kommt aus `@Environment(\.manaTheme)`, das die App
/// sowieso setzt — dadurch sieht der Flow flottenweit einheitlich aus,
/// aber im Signatur-Theme der jeweiligen App.
///
/// **Bewusst ohne Berechtigungs-Schritte.** `ManaOnboardingUI` fragt
/// **nie** System-Rechte ab — Berechtigungen hängen an konkreten Features
/// und werden *just-in-time* erfragt, wenn das Feature zum ersten Mal
/// genutzt wird. Das Onboarding **informiert** nur. (Werte-Entscheidung
/// 2026-06-05: kein Extrahieren auf Vorrat.)
public struct ManaOnboardingPage: Identifiable, Sendable {
public let id: String
/// Große Überschrift oben auf der Seite.
public let title: String
/// Früherer Vorspann unter dem Titel. **Wird nicht mehr angezeigt**
/// (Design-Entscheidung 2026-06-09: Onboarding-Seiten tragen nur
/// Überschrift + Karten, keinen freien Text). Param bleibt aus
/// Quellkompatibilität bestehen, wird aber ignoriert.
public let intro: String?
/// Die Inhalts-Zeilen (Apple-„Neue Funktionen“-Liste).
public let rows: [Row]
/// Frühere Fußnote über dem Button. **Wird nicht mehr angezeigt**
/// (siehe `intro`). Param bleibt aus Quellkompatibilität, ignoriert.
public let footnote: String?
public init(
id: String? = nil,
title: String,
intro: String? = nil,
rows: [Row],
footnote: String? = nil
) {
self.id = id ?? title
self.title = title
self.intro = intro
self.rows = rows
self.footnote = footnote
}
/// Eine Zeile: SF-Symbol (links, brand-getönt) + Titel + Beschreibung.
public struct Row: Identifiable, Sendable {
public let id: String
public let symbol: String
public let title: String
public let text: String
public init(id: String? = nil, symbol: String, title: String, text: String) {
self.id = id ?? title
self.symbol = symbol
self.title = title
self.text = text
}
}
}