From 66ddd3c3667393060271e31636cc4d6d1d2cf483 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Sat, 9 May 2026 15:46:01 -0400 Subject: [PATCH] feat(flutter/theme): FabledSwordTheme.dark() + .light() factories Both factories produce the same field shape (semantic role-based names like obsidian/iron/parchment) with palette values from the new FabledSwordDarkTokens or FabledSwordLightTokens generated classes. fromTokens() stays as a back-compat alias returning the dark theme so existing call sites keep working. Co-Authored-By: Claude Opus 4.7 (1M context) --- flutter_client/lib/theme/theme_extension.dart | 61 +++++++++++++------ 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/flutter_client/lib/theme/theme_extension.dart b/flutter_client/lib/theme/theme_extension.dart index 8a328ced..7ddd46c2 100644 --- a/flutter_client/lib/theme/theme_extension.dart +++ b/flutter_client/lib/theme/theme_extension.dart @@ -30,26 +30,51 @@ class FabledSwordTheme extends ThemeExtension { final Color warning, error, info; final TextStyle display, body, mono; - static FabledSwordTheme fromTokens() => const FabledSwordTheme( - accent: FabledSwordTokens.accent, - obsidian: FabledSwordTokens.obsidian, - iron: FabledSwordTokens.iron, - slate: FabledSwordTokens.slate, - pewter: FabledSwordTokens.pewter, - parchment: FabledSwordTokens.parchment, - vellum: FabledSwordTokens.vellum, - ash: FabledSwordTokens.ash, - moss: FabledSwordTokens.moss, - bronze: FabledSwordTokens.bronze, - oxblood: FabledSwordTokens.oxblood, - warning: FabledSwordTokens.warning, - error: FabledSwordTokens.error, - info: FabledSwordTokens.info, - display: TextStyle(fontFamily: FabledSwordTokens.fontDisplay), - body: TextStyle(fontFamily: FabledSwordTokens.fontBody), - mono: TextStyle(fontFamily: FabledSwordTokens.fontMono), + factory FabledSwordTheme.dark() => FabledSwordTheme( + accent: FabledSwordFlatTokens.accent, + obsidian: FabledSwordDarkTokens.obsidian, + iron: FabledSwordDarkTokens.iron, + slate: FabledSwordDarkTokens.slate, + pewter: FabledSwordDarkTokens.pewter, + parchment: FabledSwordDarkTokens.parchment, + vellum: FabledSwordDarkTokens.vellum, + ash: FabledSwordDarkTokens.ash, + moss: FabledSwordFlatTokens.moss, + bronze: FabledSwordFlatTokens.bronze, + oxblood: FabledSwordFlatTokens.oxblood, + warning: FabledSwordFlatTokens.warning, + error: FabledSwordFlatTokens.error, + info: FabledSwordFlatTokens.info, + display: TextStyle(fontFamily: FabledSwordFlatTokens.fontDisplay), + body: TextStyle(fontFamily: FabledSwordFlatTokens.fontBody), + mono: TextStyle(fontFamily: FabledSwordFlatTokens.fontMono), ); + factory FabledSwordTheme.light() => FabledSwordTheme( + accent: FabledSwordFlatTokens.accent, + obsidian: FabledSwordLightTokens.obsidian, + iron: FabledSwordLightTokens.iron, + slate: FabledSwordLightTokens.slate, + pewter: FabledSwordLightTokens.pewter, + parchment: FabledSwordLightTokens.parchment, + vellum: FabledSwordLightTokens.vellum, + ash: FabledSwordLightTokens.ash, + moss: FabledSwordFlatTokens.moss, + bronze: FabledSwordFlatTokens.bronze, + oxblood: FabledSwordFlatTokens.oxblood, + warning: FabledSwordFlatTokens.warning, + error: FabledSwordFlatTokens.error, + info: FabledSwordFlatTokens.info, + display: TextStyle(fontFamily: FabledSwordFlatTokens.fontDisplay), + body: TextStyle(fontFamily: FabledSwordFlatTokens.fontBody), + mono: TextStyle(fontFamily: FabledSwordFlatTokens.fontMono), + ); + + /// Back-compat alias for the original API. Returns the dark theme. + /// Existing call sites can keep using fromTokens() until they're + /// migrated to .dark() / .light() explicitly. + static FabledSwordTheme fromTokens() => FabledSwordTheme.dark(); + @override FabledSwordTheme copyWith({ Color? accent,