feat(branding): whitelabel branding API + light/dark theming#261
Open
WilliamKarolDiCioccio wants to merge 5 commits into
Open
feat(branding): whitelabel branding API + light/dark theming#261WilliamKarolDiCioccio wants to merge 5 commits into
WilliamKarolDiCioccio wants to merge 5 commits into
Conversation
SoliplexGlow paints a soft radial gradient behind its child and bleeds outside the child's layout bounds, so it can back brand artwork that cannot be inverted for the current theme without disturbing surrounding layout. The glow is brightest at the center and fades to transparent at its rim; the [extent] controls how far it radiates past each edge. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
SoliplexColors.fromAccent builds a palette from a single brand accent color: it drives `primary` and picks a readable `onPrimary` foreground, while every neutral surface, container tone, and status slot stays on the Soliplex defaults. Container surfaces are deliberately brand- independent — tinting a surface that hosts colored content distorts how that content reads. Adds `copyWith` to back the derivation. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
…theme MarkdownThemeExtension moves out of the room module into the design theme layer and is baked into the theme factory, so flavors no longer hand-install it. soliplexLightTheme and the new soliplexDarkTheme are now both built from a shared _buildTheme parametrised by brightness. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
SoliplexBranding carries a flavor's brand identity: light and dark accent colors, an app name, and one or two logo widgets. BrandLogo renders the mark for the current brightness, falling back to the light logo on a SoliplexGlow backplate — its halo derived from the theme's onSurface — when no dedicated dark logo is given. Both are exported from the library surface. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
ShellConfig.theme becomes lightTheme plus an optional darkTheme and a themeMode, all plumbed through to MaterialApp.router. The standard flavor now builds both themes from a SoliplexBranding via SoliplexColors.fromAccent and passes a BrandLogo to the auth module; the flavor-local _defaultTheme and logo constants are gone. The home screen centers the logo box so a glow backplate is not stretched by the header column. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds a whitelabel branding API so a flavor can supply its own accent
colors, app name, and logo while the rest of the Soliplex design system
stays fixed — and splits the shell into light/dark themes.
The five commits are scoped to be reviewed in order; each compiles standalone.
Changes
SoliplexGlow— a radial-gradient backplate primitive in the designlayer, for brand artwork that can't be inverted for the active theme. It
bleeds outside its child's layout bounds and takes the child's size.
SoliplexColors.fromAccent— derives a palette from a single brandaccent: drives
primaryand a readableonPrimaryonly; neutral surfaces,container tones, and status colors stay Soliplex. Adds
copyWith.MarkdownThemeExtensionleaves the room module and is baked into the theme factory, so flavors no
longer hand-install it. Adds
soliplexDarkTheme, sharing a_buildThemeparametrised by brightness.
SoliplexBranding+BrandLogo— per-flavor brand identity (light/darkaccents, app name, one or two logos).
BrandLogopicks the logo for thecurrent brightness, falling back to the light logo on a
SoliplexGlowhalo(derived from the theme's
onSurface) when no dark logo is supplied.ShellConfiglight/dark split —themebecomeslightTheme+ optionaldarkTheme+themeMode, plumbed through toMaterialApp.router. Thestandard flavor builds both themes from a
SoliplexBranding.Notes for reviewers
fromAccent. For the default dark accent this re-derivesonPrimaryas thecanonical near-black (
0A0A0A) rather than the hand-tuned222222— anegligible shift on a near-white button, called out for completeness.
design_system/reference-bundle changes.Test Plan
flutter test— 1333 passing; adds coverage forSoliplexGlow,fromAccent,soliplexDarkTheme, the baked-in markdown extension, andBrandLogo(logo selection + glow derivation).flutter analyze— zero issues.Related Issues
N/A
🤖 Generated with Claude Code