PhotosPicker (bis 3 Bilder) + Thumbnails + Entfernen; FeedbackImagePrep (ImageIO/CoreGraphics, iOS+macOS, EXIF-frei). FeedbackFormModel haelt pickedItems/images. Braucht ManaCore >= 2.2.0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
43 KiB
Changelog
Alle Änderungen werden hier dokumentiert. Format orientiert an Keep a Changelog, Versionierung nach Semver.
[Unreleased]
Neu — Screenshot-Anhänge im ManaFeedbackSheet
PhotosPicker (bis 3 Bilder) mit Thumbnails + Entfernen; herunterskaliert
und EXIF-frei via neuem FeedbackImagePrep (ImageIO/CoreGraphics, baut auf
iOS und macOS). FeedbackFormModel hält pickedItems/images, lädt +
komprimiert in loadPickedImages() und hängt sie als FeedbackImage an die
Einreichung. Schließt die letzte Web↔Nativ-Lücke beim Feedback. Braucht
ManaCore ≥ 2.2.0.
Neu — ManaAccountView: „Profilbild ändern"-Zeile (Vereinheitlichung Weg B)
Der geteilte Konto-Screen rendert im eingeloggten Zustand jetzt eine
„Profilbild ändern"-Zeile im Konto-Block (nach „Name ändern"), die das
Profilbild-Studio hub.mana.how/profil im Browser öffnet. Damit ist das
Profilbild-Setzen (Foto→3D + Pixel-Baukasten) in allen nativen Apps
erreichbar, ohne den Editor pro App zu duplizieren — das Studio bleibt
single-source im Vereins-Hub. Pendant zur Compose-ManaAccountScreen
(mana-kotlin-ui 0.18.0) + Web-UserMenuPanel (@mana/shared-ui 1.21.0).
Neu — ManaComponentsUI: ManaScreenHeader / ManaSectionHeader / ManaPinnedGlyph
Geteilte Bausteine für die Listen-Optik, drift-sicher als Pendant-Paare zur Compose-Lib (mana-kotlin-ui):
ManaScreenHeader— links-bündiger, unterstrichener Seitentitel (jetzt fett) + optionaler Untertitel/Trailing-Slot.titleColor-Override für monochrome Titel auf dunkler Fläche.ManaSectionHeader— großer (.title2/SemiBold) Abschnitts-Header für scrollende Listen, optional einklappbar (Chevron). Ersetzt das winzige Caption-Muster.ManaPinnedGlyph— gezeichneter Fünfzack-Stern (geteilte Geometrie mit Android,ManaStarShape) als „Angepinnt"-Marker; kein SF-Symbol, damit er pixelgleich zum Material-Pendant bleibt.
Neu — ManaComponentsUI: ManaSettingsSection / ManaSettingsRow
Geteilte Settings-Bausteine, SwiftUI-Pendant zur Compose-ManaSettingsSection
(mana-kotlin-ui 0.11.0). ManaSettingsSection(icon:title:footer:) rendert eine
native, gruppierte Section mit Icon-Label-Header + Footer; ManaSettingsRow
ist die auswählbare Zeile (Symbol + Titel/Untertitel + Häkchen). Damit lassen sich
Settings-Screens iOS↔Android struktur- und wortgleich bauen (gleiche API, je native
Optik). Erstkonsument: memoro-natives KI-Menü (AISettingsView).
Geändert — ManaOnboardingUI: eine scrollbare Seite, ein Titel
Der Flow ist jetzt eine einzige scrollbare Seite mit genau einem Titel statt mehrerer Wisch-Seiten:
- Kein
TabView-Pager, keine Seiten-Indikator-Punkte mehr. - Ganz oben ein Titel (der der ersten
ManaOnboardingPage) neben dem App-Icon (jetzt 40×40 statt 48×48). Darunter ausschließlich die Info-Karten — alle Zeilen aller Seiten flach untereinander, ohne Zwischen-/Abschnitts-Titel. - Unten genau ein Button („Los geht's“), kein „Weiter“ mehr.
- Vollständig datengetrieben aus dem bestehenden
[ManaOnboardingPage]— keine App muss etwas anpassen, greift via Pfad-Dependency überall. (Titel von Seiten ab der zweiten werden nicht mehr angezeigt.)
Geändert — ManaOnboardingUI: ruhigere Seiten (Icon überall, kein Fließtext)
Flottenweite Design-Angleichung aller Onboarding-Seiten:
- App-Icon steht jetzt auf jeder Seite neben dem Titel (vorher nur auf der ersten/Willkommens-Seite).
- Titel eine Stufe kleiner (
.title→.title2), Icon entsprechend 48×48 statt 54×54. - Vorspann (
intro) und Fußnote (footnote) werden nicht mehr gerendert — eine Seite trägt nur noch Überschrift + Zeilen-Karten. Die Model-Felder bleiben quellkompatibel (Defaultnil), werden aber ignoriert; Apps müssen nichts anpassen. Bei Gelegenheit können die jetzt totenintro:/footnote:-Argumente in den App-Onboardings entfernt werden.
Greift automatisch in allen Apps (lokale Pfad-Dependency), kein Bump nötig.
Hinzugefügt — ManaTransparencyUI (neues Product): „Danke & Transparenz"
Neues Library-Product ManaTransparencyUI — der geteilte native Renderer der
ökosystemweiten „Danke & Transparenz"-Fläche (Open-Source-Dank + Offenlegung
des Stacks). Pure SwiftUI, app-agnostisch, keine Dependencies.
ManaCredit(Codable/Sendable) +ManaTransparencyData.load(_:in:)— dekodiert die vom Generator (mana/scripts/transparenz/generate.mjs, Zielnative) erzeugte JSON aus dem App-Bundle.ManaTransparencyView(intro:entries:)bzw.ManaTransparencyView(_:)— gruppiert nach Sektion (Aufbauend auf / Frameworks / Bibliotheken / Schriften / Dienste / Bewusst externe Dienste), Einträge mit Lizenz + tippbarem Link.- Pendant zur Web-
<Transparenz>(@mana/shared-ui). SOT:../mana/docs/TRANSPARENZ.md. Adoption: 1 Dep + JSON ins Bundle + einManaTransparencyView(...)in den Einstellungen.
Hinzugefügt — ManaCreditsUI (neues Product): Gesamt-Mana-Anzeige
Neues Library-Product ManaCreditsUI — die native „Mana"-Seite, Pendant zur
Web-<ManaPage>:
ManaView(client:)— Gesamt-Guthaben (groß) + EUR-Gegenwert + Topf-Split (80/5/5/5/5 aus MISSION.md) + letzte Bewegungen. Read-only (Aufladen im Web).ManaBalanceRow(balance:)— kompakte Guthaben-Zeile für Account-/Settings- Screens.ManaBalanceLink(auth:)— fertiger Eintrag (Row + Laden + Navigation zurManaView) als Einzeiler fürForm/List-Sections; macht den App-Rollout trivial.ManaAccountView.Config.showManaBalance(ManaAuthUI, Defaultfalse) — schaltet die Gesamt-Mana-Anzeige direkt im geteilten Konto-Gerüst ein. Apps, dieManaAccountViewnutzen, brauchen so nur das Flag (kein eigener Code). ManaAuthUI hängt dafür neu (transitiv, leichtgewichtig) anManaCreditsUI.ManaFormat— Mana/EUR/Datum-Formatierung;ManaCreditsModel— Loader.- Konsumiert
ManaCreditsClientaus ManaCore; System-Styling (app-agnostisch), keine ManaTokens-Abhängigkeit.
Hinzugefügt — ManaAiActionMetaView (ManaLLMUI)
Geteilte, app-agnostische Anzeige-Zeile für KI-Verbrauch: Modell · Dienst
· Dauer · Tokens · Mana · ≈ Strom (System-Styling, .secondary). Pendant
zur Web-Komponente <AiActionMeta> in @mana/shared-ui. Konsumiert
ManaAiMeta aus ManaLLMShared. Energie ist bewusst als Schätzung
markiert (≈). SOT: mana/docs/AI_TRANSPARENCY.md.
ManaAiActionMetaView(meta:)inManaLLMUI.- Apps: opt-in — unter ein KI-Ergebnis setzen, sobald die App ein
ManaAiMetavon ihrer Produkt-API erhält.
Geändert — Login-AutoFill zuverlässiger (.manaUsernameField())
- Neuer View-Modifier
manaUsernameField()(ManaFields): wiemanaEmailField(), aber mittextContentType(.username)statt.emailAddress.ManaLoginViewnutzt ihn jetzt fürs Account-Feld. Warum: iOS-AutoFill erkennt das Feld dadurch als Credential-Account und überschreibt es auch, wenn der User bereits ein paar Zeichen getippt hat (vorher füllte.emailAddressoft nur leere Felder). Sign-Up/Reset bleiben bewusst beimanaEmailField()(reine Email-Eingabe). - Apps: kein Anpassungsbedarf —
ManaLoginViewwirkt automatisch. Eigene Login-Formulare könnenmanaEmailField()→manaUsernameField()umstellen.
Hinzugefügt — ManaJobStatusView (Wartezeit-Anzeige für GPU-Jobs)
- Ehrliche Inline-Anzeige für lang laufende KI-/GPU-Jobs (Stem-Separation,
Musik-Generierung, Transkription) in
ManaComponentsUI. Zuständequeued/running/done/failedmit „läuft seit …", „dauert meist … / bei Andrang bis zu X min" und optionaler Warteschlangen-Position; optionaler Abbrechen-Button viaonCancel. Sichtbares Gegenstück zum GPU-Broker (../mana/docs/GPU_BROKER.md), der die geteilte RTX 3090 serialisiert — die dadurch mögliche Wartezeit wird benannt statt versteckt. - Natives Pendant zu
<JobStatus>aus@mana/shared-ui1.14.0 (Web) — identische Formulierungen, damit web + nativ gleich klingen. - Spinner über
ProgressView(respektiert Reduce-Motion automatisch), Farben ausschließlich aus dem injiziertenmanaTheme(12 Tokens),Spacing/RadiusausManaTokens. Reine TexthelferManaJobStatusText(formatElapsed/ formatEstimate/defaultTitle) separat — getestet im neuen Test-TargetManaComponentsUITests(9 Tests,swift testgrün).
Hinzugefügt — ManaSearchResultsView (iOS-26-Such-Tab-Baustein)
- Geteilte Hülle für die native Such-Ansicht hinter
Tab(role: .search)(iOS 26: unten schwebendes Liquid-Glass-Suchfeld; ab iOS 18 als regulärer Such-Tab — kein Availability-Gating nötig). Vereinheitlicht die drei Such-Zustände flottenweit: leere Query (Einstiegs-Prompt), keine Treffer (ContentUnavailableView.search), Treffer (app-eigene Liste). Die App reicht nur Query + Treffer-Status + Ergebnis-Liste;NavigationStack/.searchable/navigationDestinationbleiben app-seitig (Ziel-Typen sind app-spezifisch). - Pilot: memoro (Such-Tab über alle Memos: Titel/Headline/Intro/Transkript),
im iOS-26-Sim verifiziert (Suchfeld unten, eigener Such-Tab). Ersetzt
perspektivisch den Custom-
ManaSearchButtondurch das native Muster. - Rollout abgeschlossen (2026-06-06): memoro, zitare, seepuls (Events +
Orte zusammengeführt), pageta, audioguide, comicello, wordeck (eigene Decks
lokal + Marktplatz server) haben alle den nativen Such-Tab; alle Inline-
.searchable/ManaSearchButton-Suchen sind entfernt.
Veraltet — ManaSearchButton
- Mit
@available(*, deprecated)markiert. Die Suche läuft flottenweit über den nativen Such-Tab (Tab(role: .search)) +ManaSearchResultsViewstatt über ein Custom-Such-Icon in der Filter-Leiste. Keine Konsumenten mehr; bleibt für Übergangs-Fälle, soll aber nicht neu adoptiert werden. Playbook:../mana/docs/playbooks/SEARCH_TAB_ROLLOUT.md.
Behoben — ManaAccountView folgt dem Theme-Variant in allen Sektionen
- Bisher folgten nur die selbstgetönten Karten (Anmelden/Feedback) dem
Theme; die Standard-Sektionen (Konto/Sicherheit, „Darstellung", „Status",
„Über" und app-eigene
extra()-Sektionen) nutzten den System-Grouped- Cell-Hintergrund und blieben beim Variant-Wechsel neutral-grau. Fix:ManaAccountViewliest@Environment(\.manaTheme)und legt.listRowBackground(theme.surface)auf alle Nicht-Karten-Sektionen (inkl.extra()).listRowBackgroundist ein Default — app-eigene Zeilen mit eigenem Row-Background überschreiben ihn weiterhin. - Page-Hintergrund themed + recessed für genug Card-Kontrast. Die
Theme-Tokens setzen
backgroundin Light fast deckungsgleich mitsurface(L≈98 vs 100) — die Card-Abgrenzung ist im Theme über den Border gedacht, der full-bleed in der groupedForman den Ecken clippt. Lösung: Page- Hintergrund = in Light der klar recessedtheme.muted(L≈92), in Dark das dunkleretheme.background(deutlich untersurface) — gewählt per@Environment(\.colorScheme). Beides ist themed (folgt dem Variant) und klar von densurface-Cards abgesetzt; mehr Kontrast als der zuvor genutzte near-white System-Grouped-Background, in beiden Modi.
Hinzugefügt — ManaAccountView: Profil-Avatar im Sheet + Icons
- Eingeloggt zeigt der Konto-Block jetzt oben einen Profil-Header: das
große, rund beschnittene Ökosystem-Avatarbild (gleiche Quelle wie der
Toolbar-Avatar,
ManaAvatarImageStore), darunter Anzeigename (ausAuthClient.getProfile()) und E-Mail. Fällt auf einperson.crop.circle.fill-Glyph (intheme.primary) zurück, solange kein Bild gesetzt/geladen ist. Kein App-Code nötig —ManaAccountViewlädt selbst. - Icons auf den Konto-Einträgen: E-Mail (
envelope), E-Mail ändern (pencil), Passwort ändern (key), Abmelden (rectangle.portrait.and.arrow.right), Konto löschen (trash). Stil (gedämpftes Icon + Vordergrund-Titel + Chevron) konsistent mitManaTwoFactorAccountRow; destruktive Zeilen inerror-Farbe ohne Chevron. - „Name ändern"-Zeile in der Konto-Sektion (
person-Icon) — leichter Alert mit Textfeld, schreibt viaAuthClient.updateName(_:)(mana-swift-core ≥ Unreleased). Der Avatar-Header-Name aktualisiert sich danach. Damit ist der Anzeigename erstmals nativ änderbar (vorher nur Registrierung/Web). Voraussetzung:mana-swift-coremitupdateName.
Behoben — Karten-Border in ManaAccountView an den Ecken abgeschnitten
- Der Anmelde-CTA (
ManaSignInCTA) und die Feedback-Karte (ManaFeedbackCard) saßen full-bleed in der inset-groupedFormund zogen einen.manaCard(border:). Die gerundete Section-Maske derFormclippt den Zelleninhalt auf ihre Ecken — unabhängig vom Karten-Radius (empirisch verifiziert: 4/10/12 pt liefern identische Ecken). Ein Overlay-strokeBorderwird dadurch an den vier Ecken abgeschnitten; sichtbar vor allem in dunklen Themes (seepuls). Fix: Die beiden Karten verzichten full-bleed auf den Manual-Border und definieren sich über Surface- Kontrast, genau wie eine native grouped Section — volle Section-Breite bleibt erhalten, keine abgeschnittenen Ecken mehr. Neuer geteilter MarkerView.manaCardListRow()(ManaThemeUI) kapselt die full-bleed-Row- Konfiguration (Null-Insets + transparenter Row-Background) und dokumentiert die Regel. - Der Anmelde-CTA-Block trägt jetzt den Section-Header „Konto" (parallel zur eingeloggten Konto-Sektion), die Feedback-Karte den Header „Feedback" — damit auch diese beiden Blöcke, wie alle übrigen Konto-Tab-Sektionen, eine Überschrift haben.
Hinzugefügt — ManaAccountAvatarButton: Ökosystem-Profilbild (Stufe 1)
- Der geteilte Konto-Avatar oben rechts zeigt jetzt das im Avatar-Baukasten
(
avatar.mana.how) gebaute Profilbild des angemeldeten Nutzers, rund beschnitten — statt nur Initialen/Icon. Fällt sauber auf Initialen bzw. System-Icon zurück (lädt / kein Bild gesetzt / ausgeloggt). - Neuer
ManaAvatarImageStore(@MainActor, prozessweiter Cache): fragt mana-meGET /api/v1/me/images/primary/avatarmit dem User-JWT ab und baut die öffentliche mana-media-Thumb-URL. Dedupliziert über alle Buttons (einer pro Tab) und verwirft den Cache bei Abmeldung.invalidate()für „Profilbild gerade geändert". - Null App-Code nötig: der Button lädt selbst, Defaults zeigen auf die
Produktiv-Services (
me.mana.how/media.mana.how). Jede App, dieManaAccountAvatarButton/manaAccountToolbarschon nutzt, erbt das Bild nach einem Rebuild. Overrides additiv:loadsProfileImage(aus für rein anonyme Apps),meBaseURL/mediaBaseURL(Dev/Localhost).
Hinzugefügt — ManaLLMUI: KI-Einstellungen als geteilte Unterseite
ManaLLMSettingsLink— eineNavigationLink-Zeile (SF-Symbol + Titel + Use-Case-Untertitel), die auf eine eigene KI-Unterseite pusht, statt die vier KI-Sections inline in den Konto-/Settings-Tab zu kippen. Flottenweites Muster, damit der KI-Bereich in allen nativen Apps gleich aussieht.ManaLLMSettingsScreen— die Zielseite: hostet die bestehendeManaLLMSettingsView-Komposition in einerFormplus optionalen app-eigenen KI-Inhalt über einen generischenextra-Slot (@ViewBuilder, DefaultEmptyView). So zieht z.B. memoros Server-LLM-Picker hinter denselben einen KI-Link.- Beide Views additiv:
ManaLLMSettingsViewund die granularenManaLLM*Section-Views bleiben unverändert und weiter public. Apps, die bewusst inline bleiben wollen, sind nicht betroffen. - Defaults: Titel „Künstliche Intelligenz", Icon
sparkles— beides überschreibbar.
Hinzugefügt — ManaOnboardingUI (geteilter Einstiegs-Flow)
- Neues Library-Product
ManaOnboardingUI— Onboarding-Flow im Stil von Apples „Neue Funktionen“-Sheet für alle nativen Verein-Apps. Damit der Einstieg flottenweit gleich aussieht/sich anfühlt, aber im Signatur-Theme der App (Farben aus@Environment(\.manaTheme), kein hardcodetes Branding). ManaOnboardingPage— app-geliefertes Seiten-Modell: großer Titel, optionaler Vorspann, eine Liste vonRows (SF-Symbol + Titel + Text), optionale Fußnote. VollSendable(keine Action-Closures).- Doktrin: kein Berechtigungs-Abfragen im Onboarding. Das Paket fragt nie System-Rechte ab — Berechtigungen hängen an konkreten Features und werden just-in-time erfragt. Onboarding informiert nur (Werte-Entscheidung 2026-06-05: kein Extrahieren auf Vorrat).
ManaOnboardingView— Container. Links ausgerichteter Titel (auf Seite 1 mit dem App-Icon links daneben, automatisch aus dem Bundle), Zeilen als eingefasste Karten (.manaCard), wischbar zwischen Seiten (iOS Page-Style; macOS Cross-Fade), unten der brand-getönte Seiten-Indikator + genau ein Primär-Button. Reduced-Motion-aware.View.manaOnboarding(storageKey:pages:onFinish:)—@AppStorage- Gate, präsentiert als.sheetmit.presentationDetents([.large])+ Griff (Apple-Optik, nicht eingezwängt). Per Wischen verlassbar = als „gesehen“ gemerkt. Versionierter Key (…vN) zeigt bei großen Updates erneut. Erster Konsument:stetig-native.- Hängt nur an
ManaTokens+ManaThemeUI. Keine externen Deps, Public APISendable/@MainActor. Tests:ManaOnboardingUITests(7, Seiten-Modell).
Hinzugefügt — BYOK in der LLM-Settings-UI
ManaLLMByokSection(ManaLLMUI) — natives Pendant zum Web-ByokKeyManager. Verwaltet pro Anbieter (OpenAI / Anthropic / Gemini / Mistral) genau einen API-Schlüssel: hinzufügen (SecureField + Modell- Picker), ändern, löschen; bei ≥2 hinterlegten Schlüsseln ein „Standard-Anbieter“-Picker. Schlüssel liegen in derByokKeyVault(Keychain, app-privat, keine iCloud-Sync) ausManaLLM≥0.3.0. Der Schlüssel wird nie zurück in die UI geschrieben (nur „hinterlegt“ + Modell sind sichtbar).ManaLLMSettingsView(context:showByok:)— neuershowByok-Parameter (Defaulttrue) blendet die BYOK-Section ein/aus. Apps ohne Dritt- Anbieter-Wunsch setzenfalse.ManaLLMSettingsStateverwaltet jetzt BYOK:byokVault,byokStoredProviders,byokDefaultProvider(UserDefaults-persistiert),saveByokKey/deleteByokKey/byokModel/setByokDefaultProvider.makeRouter()reicht den Vault-Resolver durch, sodass.byokin der Availability-Map als.availableerscheint, sobald ein Schlüssel hinterlegt ist.ManaLLMBackendPickerSectionkennt jetzt die QuelleLLMBackendID.byok(Iconkey.fill, eigener Footer-Text, „Schlüssel hinterlegen“-Hinweis statt generischem „Fehlt: …“).
Voraussetzung:
ManaLLM(mana-swift-llm) ≥ 0.3.0 — diese Version fügtLLMBackendID.byokhinzu. Konsumenten-Apps mit eigenen erschöpfendenswitch-Statements überLLMBackendIDmüssen den Fall.byokergänzen (Xcode-Rebuild nötig).
Hinzugefügt
ManaAccountAvatarButton+.manaAccountToolbar(auth:profile:onTap:)(ManaAuthUI). Runder Konto-Avatar für die Navigationsleiste oben rechts; Tippen öffnet das Konto als Sheet statt eines eigenen Bottom-Tabs (Apple-Muster aus Podcasts / App Store). Darstellung nach Auth-Zustand: Initialen (signed-in + Name) →person.circle(signed-in ohne Name) →person.crop.circle(guest/signed-out); immer sichtbar, damit Settings- Sign-In im Sheet in jedem Zustand erreichbar bleiben. Initialer
Konsument: memoro. Flotten-Rollout siehe
../mana/docs/playbooks/ACCOUNT_AVATAR_MIGRATION.md.
- Sign-In im Sheet in jedem Zustand erreichbar bleiben. Initialer
Konsument: memoro. Flotten-Rollout siehe
Behoben
- 2FA-Status flackerte endlos im Konto-Tab aller nativen Apps (Text
sprang zwischen „2FA-Status lädt…" und „2FA aktivieren", teils
„Netzwerkverbindung abgebrochen"). Ursache:
.task/.sheetlagen auf einemGroup, der einen zustandsabhängigenswitchumschloss — Group verteilt Modifier auf jeden Zweig, also re-attachte sich.taskbei jedem State-Wechsel und feuertereload()erneut (Endlosschleife; der in-flightgetProfile()wurde dabei gecancelt →URLError.cancelled).stateContentist jetzt eine@ViewBuilder-Property, der Modifier wrappt von außen →.taskfeuert einmal pro Erscheinen. (ManaTwoFactorAccountRow) ManaLLMSettingsView: dieselbeGroup+.task-Falle —refreshAvailability()lief pro Section (3×) und erneut beim Ein-/Ausblenden der Prepare-Section..taskjetzt an der stabilen Backend-Picker-Section.
Hinzugefügt
-
ManaFeedbackUI Soft-Anerkennung — die Erfolgs-Ansicht zeigt eingeloggten Nutzern jetzt einen ehrlichen Aura-Hinweis („Wird daraus ein bestätigter Bug oder ein vielgewünschtes Feature, schreiben wir dir Aura gut."). Keine Sofort-Aura fürs reine Absenden — Anerkennung erst bei Bestätigung (siehe
mana/docs/INVITES_AND_AURA.md). -
ManaSafariLink(ManaAuthUI) — öffnet eine URL in-App (iOS:SFSafariViewController, macOS: System-Browser-Fallback) statt eine separate Browser-App aufzureißen. Für rechtliche/redaktionelle Seiten (Impressum, Datenschutz, Lizenz). Rendert alsForm-Zeile wie einLink. -
ManaAboutSection.Link.inApp(ManaAuthUI) — neuer Init-Parameter (inApp: Bool = false).true→ die „Über"-Sektion öffnet den Link viaManaSafariLinkin-App statt extern. Damit deckt eine Sektion App-Info und Rechtliches ab, statt einer separaten Legal-Links-Sektion pro App. Additiv, Default unverändert (externer Link). -
ManaAppearanceSection(ManaThemeUI) — vereinheitlichte „Darstellung"- Sektion für den Konto-/Einstellungen-Tab: bündeltManaAppearancePicker(Hell/Dunkel/Automatik) +ManaThemeGalleryin einerSectionmit Header- ökosystemweit gleichem Footer (
defaultFooter). Die Einzel-Picker waren schon geteilt, der Section-Rahmen + Footer-Wortlaut nicht — jede App baute ihn (leicht abweichend) von Hand. Persistenz bleibt App-Sache (zweiBindings rein, keinUserDefaults-Schreiben); Theme-Pass viaunlocked/onLockedTapdurchgereicht. Additiv.
- ökosystemweit gleichem Footer (
-
ManaAppearanceCard(ManaThemeUI) — Karten-Variante vonManaAppearanceSectionfür Apps mit Card-Layout (ScrollView/VStackstattForm/List, z.B. viadocu). Gleicher Inhalt im.manaCard-Container (continuous Squircle + Border) statt einerSection; Farben aus@Environment(\.manaTheme). Schließt die letzte Appearance-Lücke der Flotte. -
ManaComponentsUI(neues Library-Target) mitManaPill— eine einheitliche Kapsel-Pille (Filter-Chip / Bulk-Aktion) für alle nativen Apps. Größe und Form sind zentral festgelegt (Referenz: seepuls-Filterleiste — 18/11 Padding,.callout.semibold,Capsule), die Farben kommen aus@Environment(\.manaTheme)(keine Farb-Parameter → jede App behält ihre Theme-Variant). Varianten.selected/.neutral/.destructiveplusisOn-Komfort-Init für Toggle-Filter. Behebt die zu kleinen Bulk-Aktions- Pills im Auswahl-Modus und vereinheitlicht sie mit den seepuls-Filtern. Dependency: nurManaTokens. -
.manaCard(surface:border:cornerRadius:borderWidth:padding:)(ManaThemeUI) — geteiltes Karten-Chrome für alle Verein-Apps: gefülltesurface-Fläche, durchgehende continuous (Apple-Squircle-)Ecken und optionaler Hairline-Border aus einer gemeinsamen Form (sauberer Eckenverlauf statt zwei getrennter circular Shapes). Theming-agnostisch (Farben explizit), nutztRadius-Token als Defaults. Eine Quelle für die Kartenoptik, statt pro Komponente hardcodedcornerRadiusmal mit, mal ohne Border.ManaThemeUIist jetzt Dependency vonManaAuthUI+ManaFeedbackUI. -
RoundedRectangle.mana(_:)(ManaThemeUI) — Vereins-Standard-Form: continuous (Squircle-)Ecke an einemRadius-Token. Für Buttons, Eingabe- felder und kleine Inline-Boxen, die keine volle.manaCardbrauchen, aber dieselbe Ecken-Sprache sprechen sollen. Verhindert stilles Zurückfallen auf den eckigeren.circular-Default. -
ManaAboutSection(ManaAuthUI) — vereinheitlichte „Über"-Sektion für den Konto-Tab: App-Name + Version/Build (automatisch aus demBundle) + konfigurierbare Link-Liste.ManaAccountViewrendert sie an fester Position (ganz unten, nach den App-Sektionen), wenn der neueabout:- Parameter gesetzt ist — additiv, kein Breaking-Change (Defaultnil). Beendet das per-App-Handbauen der App-Info-Sektion (vorher uneinheitlich: comicello App/Version/Build+Links, wordeck nur Hosts, memoro gar nichts).
Geändert
-
Rest-Chrome auf
Radius-Token + continuous gezogen —ManaTextField/ManaSecureField(Feld-Box + Border, jetztstrokeBorderstattstroke),ManaPrimaryButton, die Feedback-Buttons (ManaFeedbackCard/ManaFeedbackSheet) und die 2FA-Views (QR-Box, Backup-Code-Chips, Kopier-Buttons) nutzen statt hardcodedcornerRadius-Literalen (6/8/10/12) jetztRoundedRectangle.mana(Radius.*). Radien konvergieren auf die Token-Skala (Felder/Buttons →Radius.md8, Code-Chips →Radius.sm4, QR-Box →Radius.lg12); alle Ecken jetzt continuous. Rein optisch, keine API-Änderung. -
ManaSignInCTA(Login-CTA) +ManaFeedbackCardziehen auf.manaCard— beide Karten teilen jetzt identisches Chrome (continuous Squircle-Ecken,Radius.lg, 1pt-Border inborder-Farbe). Vorher: Login rahmenlos mit circularcornerRadius 12, Feedback mit getrenntem Background+Overlay-Border beicornerRadius 16, dessen Strich den Ecken nicht sauber folgte. Optische Vereinheitlichung über alle Apps mitManaAccountView. Kein API-Bruch. -
ManaSignInCTA(ManaAuthUI) — prominente Anmelde-Card für den abgemeldeten Zustand: optionale Headline + Erklärtext + vollbreiter Brand-Button (ManaPrimaryButton), komplett über\.manaBrandgetönt. Gehoben aus viadocus handgebautemguestBanner, der als einzige App optisch „richtig" wirkte. Ersetzt die blasse Form- Listenzeile, die ein nackterButton/Labelin einerSectionrendert. -
ManaAccountView.Config.signInHeadline(ManaAuthUI) — Headline über dem Anmelde-CTA (Default „Noch nicht angemeldet",nilblendet sie aus).
Geändert
-
ManaThemeGalleryReihenfolge + App-Brücke — (1) freigeschaltete Variants stehen jetzt zuerst, gesperrte danach (stabile Partition überunlocked); vorher lagen freie Themes quer zwischen Schlössern verstreut. (2) Der „ öffnen"-Button bleibt nach dem Freischalten sichtbar (mit geändertem Infotext „Signatur-Theme von " statt der Freischalt- Aufforderung) — als dauerhafte Brücke zur Herkunfts-App, damit die anderen mana-Apps immer erreichbar bleiben und klar bleibt, woher das Theme stammt. Baseline-Variants (ohne Signatur-App) bekommen weiterhin keinen Button.onLockedTapfeuert jetzt auch beim freigeschalteten Button-Druck. Reine View-Änderung, keine API-Signatur-Änderung. Siehe THEME_PASS.md. -
ManaThemeGalleryTheme-Pass-Lock — gesperrte Variant öffnet die Signatur-App nicht mehr automatisch. Tippen/Einrasten zentriert sie nur; darunter erscheint „Probier aus, um „" freizuschalten" plus ein „ öffnen"-Button, der erst auf Druck die eigene Landingpage öffnet (ManaTheme.signatureAppHomepage, mana-swift-core ≥ 1.15.0; via@Environment(\.openURL)).onLockedTapist jetzt ein optionaler Analytics-Hook (feuert beim Button-Druck), keine Navigation mehr — Konsumenten können den Closure droppen. Datei zugleich auf die Repo-Konvention (4 Spaces) normalisiert. Siehe THEME_PASS.md. -
ManaAccountViewsigned-out rendert jetztManaSignInCTAstatt einer Label-Listenzeile — alle Apps, dieManaAccountViewnutzen (seepuls, pageta, wordeck, audioguide), bekommen den prominenten CTA automatisch, ohne Code-Änderung. -
ManaFeedbackCard(ManaFeedbackUI) — prominenter Feedback-Block für den Konto-/Einstellungen-Tab: Icon + aktivierender Titel („Hilf mit, die App zu formen") + ein Satz Einladung + gefüllter CTA in Vereinsfarbe. Löst die dezenteManaFeedbackButton-Listenzeile ab und präsentiert dasselbeManaFeedbackSheet. Theme-aware (\.manaTheme,surface+borderals Karten-Rahmen). Copy überschreibbar (title/message/cta). -
ManaAccountView.feedbackClient(ManaAuthUI) — neuer optionaler Init-Parameter. Ist er gesetzt, rendert der Standard-Block dieManaFeedbackCardan fester Position (direkt nach dem Konto-/Anmelden-Block, vorextra) — vereinheitlicht Platzierung + Optik des Feedbacks über alle Apps, statt es pro App handgebaut tief imextra-Slot zu verstecken.ManaAuthUIhängt dafür neu vonManaFeedbackUIab. Additiv, kein Breaking-Change (Defaultnil). -
ManaPasswordStrength+ManaPasswordStrengthView(ManaAuthUI) — segmentierte Passwortstärke-Anzeige unter dennewPassword-Feldern inManaSignUpViewundManaResetPasswordView. Reine Heuristik (Länge + Zeichenklassen, keine externe Bibliothek), testbar (PasswordStrengthTests). Blendet sich bei leerem Feld aus, markiert.weakperbrand.error. Stufen: schwach/mittel/gut/stark.
[0.9.0] — 2026-06-01
Minor — zwei neue Library-Produkte (ManaFeedbackUI,
ManaThemeUI) plus das vereinheitlichte Konto-Gerüst ManaAccountView
und der Passwort-Reveal in ManaSecureField.
Hinzugefügt
-
ManaThemeUI— neues Library-Produkt. Geteilte Theme-Galerie (ManaThemeGallery— Orb-Karussell mit Snap-to-Center und Lock-State für den Theme-Pass) plusManaAppearancePicker(Hell/Dunkel/System). KonsumiertManaTokens. Beendet das per-App-Handbauen der Theme-Auswahl. Siehemana/docs/THEME_PASS.md. -
ManaAccountView(ManaAuthUI) — vereinheitlichtes Konto-Gerüst: Form-basierter Standard-Block (E-Mail-Anzeige, E-Mail/Passwort ändern, 2FA, Konto löschen [Apple 5.1.1(v)], Abmelden) aus einemAuthClient, plus Sign-In-CTA im abgemeldeten Zustand. Config-Flags (showChangeEmail/showChangePassword/showTwoFactor),onSignIn/onSignOut-Callbacks,@ViewBuilder extra-Slot für App-spezifische Sektionen. Pendant zur Login-Konsolidierung — beendet das per-App-Handbauen des Konto-Tabs. -
ManaFeedbackUI— neues Library-Produkt.ManaFeedbackSheet(Kind-Picker Wunsch/Problem/Feedback, Titel, Beschreibung; bei anonymer Nutzung optionales Kontakt-Mail-Feld + Moderations-Hinweis),ManaFeedbackButton(Default-Label „Feedback" oder Custom-Label) und der.manaFeedbackSheet(isPresented:client:isLoggedIn:)-Modifier für eigene Trigger (z.B. Toolbar/Settings-Row). Postet viaManaCore.FeedbackClientan die zentrale Wunsch-App — Pendant zum Web-@mana/shared-feedback-Widget. Theming über\.manaTheme(ManaTokens). Siehemana/docs/FEEDBACK_NATIVE_PLAN.md.
Geändert
-
ManaSecureField(ManaAuthUI) — Augen-Button zum Sichtbarmachen des Passworts (SecureField↔TextField, Default verborgen). Barrierearm gelabelt („Passwort anzeigen"/„Passwort verbergen"), Fokus bleibt über den Feld-Tausch erhalten. Der Button erscheint erst, wenn etwas im Feld steht; ein geleertes Feld kehrt zur Maskierung zurück. Auf macOS warnt ein Feststelltasten-Symbol (capslock.fill) bei aktivem Caps-Lock — wie in Apples eigenen Passwortfeldern. Wirkt ökosystemweit: alle nativen Apps teilen diese Komponente (Login, Sign-Up, Reset, Passwort ändern, 2FA, Konto löschen). -
ManaWebShell: Die Fehler-Leiste inWebShellViewhat jetzt einen „Erneut laden"-Button. Bisher war ein Lade-Fehler eine Sackgasse — der User sah die Meldung, konnte die Seite aber nicht neu laden. Intern viareloadNudge→effectiveTarget.reloadToken.
[0.8.0] — 2026-05-22
Minor — neues Library-Product ManaLLMUI. Drop-in-Settings-UI
für die lokalen LLM-Backends aus mana-swift-llm. Pendant zu
ManaAuthUI — vorher hatte nur Memoro die UI handgeschrieben, die
drei anderen Konsumenten (pageta, comicello, herbatrium) hatten
gar nichts.
Hintergrund
Vier Apps konsumieren ManaLLM (Memoro, Pageta, Comicello, Herbatrium).
Memoros 250-Zeilen-LLM-UI (Picker + Prepare + Cellular-Toggle) war
strukturell shared-fähig — wurde rausgehoben, generalisiert und steht
jetzt allen Apps zur Verfügung.
Neu
ManaLLMUI-Product (deps:ManaLLM,ManaLLMShared)ManaLLMSettingsView— Convenience-Wrapper, drei Sections in einem SchwungManaLLMBackendPickerSection— Picker mit Availability-Status + Empfohlen-BadgeManaLLMPrepareSection— Download/Init-Card mit Progress, nur sichtbar für Gemma-Backends (shouldShow(for:)-Gate)ManaLLMDownloadPolicySection— WiFi-only-ToggleManaLLMSettingsState—@Observable-State-Klasse, hält Backend-Wahl + Availability + Prepare-Progress + delegiert an die Stores ausmana-swift-llmManaLLMContext— App-spezifischer Kontext (useCaseShort+useCaseLong) für Section-Texte..genericals Fallback
Migration
Apps die heute eigene LLM-Settings-UI haben (Memoro):
import ManaLLMfür die Settings-View durchimport ManaLLMUIersetzen- Lokale
llmSection/llmPrepareSection/llmDownloadPolicySection- Bodies entfernen ManaLLMSettingsView(context: ...)einhängenLLMBackendPreferenceStore+LLMDownloadOverCellularStorebleiben funktionsgleich — wandern aber nachManaLLM(siehemana-swift-llmCHANGELOG)
Apps die heute keine LLM-Settings-UI haben (Pageta, Comicello, Herbatrium):
ManaLLMUI-Product inproject.ymladdenManaLLMSettingsView(context: ...)an passender Stelle einhängen (eigene Settings-View oder NavigationLink im Profile-Tab)
[0.7.0] — 2026-05-22
Minor — logoAssetName in ManaBrandConfig. Apps können jetzt
ein eigenes Logo-Asset (Asset-Catalog-Name) statt eines SF-Symbols
für den Login-/Sign-Up-/Forgot-Password-Header liefern.
Hintergrund
Pageta hat ein eigenes Apple-Icon-Composer-SVG; das SF-Symbol
book.pages (vorher) sah neben dem polierten App-Icon unecht aus.
Andere Apps mit echten Logo-Assets (kommt) werden den gleichen
Migrationspfad gehen können.
Neu
ManaBrandConfig.logoAssetName: String?— Name eines Image-Assets im Bundle der konsumierenden App. Hat Vorrang vorlogoSymbol.ManaAuthScaffoldrendertlogoAssetName64×64pt,aspectRatio(.fit), ohne Tint (Asset behält Originalfarben — typisch Apple-Icon- Composer-Output mit Gradient). Fallback bleibt SF-Symbol mit Tint.
Geändert
ManaBrandConfig.inithat einen zusätzlichen optionalen ParameterlogoAssetName: String? = nil. Quellkompatibel — bestehende Apps brauchen nichts ändern.systemDefault-Config setztlogoAssetName: nilexplizit (kein Verhaltenswechsel).
Tests
- 50/50 grün (keine neuen Tests — die
ManaBrandConfig-Änderung ist rein additiv, gerendertes Asset hängt am Bundle der App).
Adoption
Apps mit eigenem Logo:
ManaBrandConfig(
appName: "Pageta",
logoSymbol: "book.pages", // SF-Fallback bleibt
logoAssetName: "PagetaLogo", // Asset-Catalog-Name, hat Vorrang
...
)
[0.6.0] — 2026-05-17
Minor — neues Library-Product ManaWebShell. WKWebView-Hülle für
Hybrid-Apps (Web-Lese-Surfaces + native Submit/Widget/ShareExt).
Extrahiert aus den fast-byte-identischen WebShell/-Ordnern in
seepuls-native und zitare-native (~900 LOC, davon ~700 LOC
Duplikat). Audit 2026-05-17 Vorschlag V2.
Neu
WebShellView(public SwiftUI View) —WKWebView-Wrapper mit Progress-Bar, Pull-to-Refresh (iOS), Fehler-Snackbar, External-Link- Delegation in den System-Browser. Universal (iOS + macOS).WebShellConfig(public, Sendable) — Host-Whitelist mit Wildcard- Support ("*.mana.how"), User-Agent, Theme-Hints (background, progressTint, errorBackground/Foreground/Icon), User-Scripts.WebTarget(public, Equatable+Sendable) — URL + monoton wachsenderreloadToken. Forciert Reload bei Universal-Link auf aktuelle URL.WebNavState(public, @Observable, @MainActor) — reaktiver Navigation-State (isLoading, estimatedProgress, lastError, currentURL, canGoBack).WebShellCoordinator(public, @MainActor) —WKNavigationDelegateWKUIDelegate-Implementierung. KVO-Observations, Pull-to-Refresh- Action.
WebShellScripts(public Enum, @MainActor) — vor-gefertigteWKUserScript-Helfer:preferDarkScheme,syncDarkMode(localStorageKey:),hideElements(selectors:tagName:). Apps stapeln nach Bedarf.
Logging
- ManaWebShell loggt unter Subsystem
ev.mana.webshell, Kategorieweb. App-OSLog bleibt unverändert.
Tests
ManaWebShellTestsmit 6 Tests gegenWebShellConfig.isAllowed. Coverage für exakte Hosts,*.root-Wildcard, Root-selbst, Negativ-Cases, leere Whitelist. 6/6 grün.
Migrations-Hinweis
seepuls-native und zitare-native können ihre lokalen
Sources/Features/WebShell/-Dateien gegen ManaWebShell ersetzen.
Pattern in mana/docs/playbooks/HYBRID_NATIVE_APP.md (entsteht
parallel). App-spezifisches (CookieBridge, App-Theme als
config.backgroundColor) bleibt in der App.
[0.5.0] — 2026-05-14
Minor — ManaTwoFactorAccountRow + ManaBackupCodeRegenerateView.
Macht den 2FA-Vollausbau in der AccountView nutzbar. Setzt
mana-swift-core ≥ 1.5.0 voraus (getProfile()).
Neu
ManaTwoFactorAccountRow— Drop-in für AccountView. Holt den 2FA-Status viaAuthClient.getProfile()und zeigt:- Off: "Zwei-Faktor aktivieren" → öffnet
ManaTwoFactorEnrollView - An: "Zwei-Faktor aktiv" + "Backup-Codes erneuern" + "Zwei-Faktor deaktivieren"
- Off: "Zwei-Faktor aktivieren" → öffnet
ManaBackupCodeRegenerateView— Re-Auth via Passwort, zeigt neue Backup-Codes + Copy-to-Clipboard.TwoFactorAccountRowModel— internes@Observable-VM, reloaded Status nach Enroll/Disable/Regenerate.
Damit ist 2FA in den Apps end-to-end nutzbar — User kann aktivieren, Backup-Codes verwalten, deaktivieren. Der Login-Flow ist seit v0.3.0 durchgängig.
[0.4.0] — 2026-05-14
Minor — 2FA-Enrollment-UI (Mini-Sprint B). Setzt mana-swift-core ≥ 1.4.0 voraus.
Neu
ManaTwoFactorEnrollView+TwoFactorEnrollmentViewModel— 3-Phasen-Wizard:- Passwort eingeben (Re-Auth)
- QR-Code (via
CoreImage.CIFilter.qrCodeGenerator, plattform- unabhängig auf iOS+macOS) scannen + 6-stelligen Test-Code eingeben - Backup-Codes anzeigen + Copy-to-Clipboard
ManaTwoFactorDisableView— Single-Step-Sheet, Re-Auth via Passwort + destruktiver Bestätigungs-Button.
Tests
- 5 neue Tests für Enroll-VM (Success, falsches PW, canSubmitVerify 6-Ziffern-Guard, confirmVerify Phase-Wechsel, backupCodes-Accessor).
- 44/44 grün.
[0.3.0] — 2026-05-14
Minor — ManaTwoFactorChallengeView für 2FA-Login. Setzt
mana-swift-core ≥ 1.3.0 voraus (Status .twoFactorRequired).
Neu
ManaTwoFactorChallengeView+TwoFactorChallengeViewModel— 6-stelliger TOTP-Code-Input (Number-Pad auf iOS), Fallback auf Backup-Codes via Toggle, "Abbrechen" routet viaauth.signOut(keepGuestMode:)zurück zum Login.LoginViewModel.Status.twoFactorRequired(email:)als neuer Case.ManaLoginViewschaltet bei.twoFactorRequiredautomatisch aufManaTwoFactorChallengeViewum (analog zu.emailNotVerified).
Tests
- 6 neue Tests für
TwoFactorChallengeViewModel: canSubmit-Guards (TOTP 6 Ziffern, Backup beliebig), toggleMode-State-Reset, submit bei Erfolg/Fehler, Backup-Code-Routing. - 39/39 grün.
[0.2.0] — 2026-05-13
Minor — Action-Level-Gate für Apps mit Guest-/Login-optional-Modus.
Komplett additiv; braucht mana-swift-core ≥ 1.2.0.
ManaAuthUI — neu: ManaAuthGate
ManaAuthGate—@Observable-State-Maschine, die eine Aktion erst laufen lässt, wenn der User eingeloggt ist. Wenn nicht, wird das Sign-In-Sheet aufgeklappt und die Aktion gemerkt; nach erfolgreichem Sign-In läuft sie automatisch.- Zwei
require-Overloads: synchron (() -> Void) und async (() async -> Void). Konsumenten schreibengate.require { ... }ohne sich um das Gate-Lifecycle zu kümmern. ManaAuthGateModifier/View.manaAuthGate(_:signIn:)— hängt das Sign-In-Sheet an einen Root-View und beobachtetauth.status. Wechsel auf.signedInschließt das Sheet und löst die Pending- Aktion aus; manuelles Dismiss verwirft die Pending-Aktion.lastReasonals optionaler Telemetrie-Hint prorequire-Call.
Konvention
Native-Apps sollen mana-swift-core v1.2.0 + Guest-Mode + diesen Gate
als Standardweg nutzen. Pattern für Cards/Manaspur/Memoro:
- Beim App-Start:
bootstrap(), dann bei.signedOut→enterGuestMode(). - Root-View zeigt immer App-Inhalte; nie eine Vollbild-Login-Wall.
- Aktionen, die einen Account brauchen, werden in
gate.require { ... }gewrappt — Login wird zur Inline-Eskalation statt zum App-Block.
Memoro hat dieses Muster informell schon umgesetzt (ContentView ohne Hard-Gate). Cards + Manaspur ziehen mit ihren nächsten Releases nach.
Tests
- 7 neue Tests für
ManaAuthGate: sofortiger Run bei.signedIn, Defer bei.signedOut/.guest,resolvePendingnach Sign-In,cancelPending,lastReason-Tracking.
[0.1.0] — 2026-05-13
Phase 2 aus dem Native-Auth-Vollausbau-Plan (Option A, siehe
../mana/docs/MANA_SWIFT.md). Entstanden weil drei Apps fast-byte-
identische LoginView.swift-Dateien hatten und Sign-Up/Forgot-PW
komplett fehlten.
ManaAuthUI (neu)
ManaBrandConfig— App-injiziertes Bündel aus appName, tagline, primary/surface/background/error-Colors. Apps liefern hier ihr Theme (z.B. forest für Cards/Manaspur, default-mana für Memoro).- Base-Components:
ManaAuthScaffold,ManaPrimaryButton,ManaTextField,ManaSecureField— geteilte Bausteine, alle brand-aware. ManaLoginView+LoginViewModel— Email/PW-Login mit Sign-Up- und Forgot-PW-Buttons. Bei.emailNotVerifiedautomatisch insManaEmailVerifyGateViewumgeleitet (Resend-Mail-Button).ManaSignUpView+SignUpViewModel— Registrierung mit Email/Name/Passwort. Nach Submit: Bestätigungs-Mail-Hinweis-Screen.ManaEmailVerifyGateView— wenn Login.emailNotVerifiedwarf, bietet "Bestätigungs-Mail erneut senden".ManaForgotPasswordView+ForgotPasswordViewModel— Reset-Mail anfordern. Server antwortet immer 200 (keine User-Enumeration), UI meldet generisch.ManaResetPasswordView+ResetPasswordViewModel— neues Passwort setzen mit Token aus Reset-Mail. Wird aus dem Universal-Link-Handler der App aufgerufen.ManaChangeEmailView,ManaChangePasswordView,ManaDeleteAccountView— Account-Bausteine für die AccountView der App.ManaDeleteAccountViewist App-Store-Pflicht (Guideline 5.1.1(v)) für jede App mit Account-Erstellung.
Tests
- ViewModel-Tests via URLProtocol-Mock für jeden Auth-Flow.
- Brand-Config-Defaults.
Bekannte Einschränkungen
ManaChangeEmailView/ManaChangePasswordView/ManaDeleteAccountViewfunktionieren erst nach Phase-3-Server-PR (Bearer-Plugin inmana-auth). UI ist fertig, Wire ist fertig, Server muss nachziehen.- 2FA, Magic-Link, Passkey-Flows nicht enthalten. Folgen in v0.2.0 zusammen mit ManaCore v1.2.0 und dem Server-PR.