Add honeycomb pattern toggle and make theme switching reactive

Adds a toggleable honeycomb hexagonal grid overlay (matching the website pattern)
that can be enabled independently of any theme via the Appearance screen. Uses a
cached tiled UIImage approach consistent with the existing grain texture system.

Replaces the destructive refreshID-based theme switching (which destroyed all
NavigationStacks and dismissed sheets) with @Observable AppThemeSource. Color
resolution now happens through Swift's Observation framework, so all views using
Color.appPrimary etc. automatically re-render when the theme changes — no view
identity reset needed.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-03-07 11:36:24 -06:00
parent 28339544e5
commit 73dd440d7b
9 changed files with 247 additions and 48 deletions

View File

@@ -47,4 +47,11 @@ struct ThemeIDTests {
@Test func oceanRawValueIsOcean() {
#expect(ThemeID.ocean.rawValue == "Ocean")
}
// MARK: - Honeycomb Setting Tests
@Test func honeycombDefaultsToDisabled() {
// HoneycombSetting reads from UserDefaults which defaults to false for unset Bool keys
#expect(HoneycombSetting.isEnabled == false)
}
}