Skip to content

Commit 740ca69

Browse files
Merge pull request #11 from refactorfirst/implement-dark-mode
#5 Implement Dark Mode
2 parents f1a00f3 + c65198d commit 740ca69

10 files changed

Lines changed: 1272 additions & 55 deletions

File tree

‎AGENTS.md‎

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,21 @@ in `out/` is served by any static host (GitHub Pages, GitLab Pages, Bitbucket).
1010

1111
**Key Features:**
1212
- Search over curated repository listing (`repositories.txt`)
13-
- Breadcrumb trail under the menu (`components/breadcrumbs.jsx` +
14-
`lib/breadcrumbs.js`): mirrors `/user/repo/branch` with linked ancestors;
13+
- Dark mode, 100% CSS switching (`components/theme-toggle.jsx` +
14+
`plans/css-only-dark-mode.md`): three radios (light/dark/system) on the
15+
right side of the `.theme-bar` row below the header, rendered by
16+
`app/layout.jsx` — the breadcrumb trail shares the row on report routes
17+
(crumbs left, toggle right, vertically centered; the right-edge mirror
18+
of the breadcrumbs' left-edge alignment) — palettes selected in
19+
`app/globals.css` via `:root:has(#rf-theme-…:checked)` +
20+
`prefers-color-scheme`; an inline pre-paint script in `app/layout.jsx`
21+
only restores/persists the choice (CSP-hashed by the build). Guards:
22+
`tests/unit/theme-css.test.js` (the two dark blocks must stay
23+
byte-identical; all hex colors live in the palette blocks; dark palette
24+
passes the same WCAG AA math as `tests/unit/css-a11y.test.js`)
25+
- Breadcrumb trail on the theme bar row under the menu
26+
(`components/breadcrumbs.jsx` + `lib/breadcrumbs.js`): mirrors
27+
`/user/repo/branch` with linked ancestors;
1528
the repo crumb never self-links, and ReportView announces the resolved
1629
branch (`rf:branch-resolved` event) so the label matches the loaded report
1730
(`main` 404 → `master` fallback)
@@ -130,6 +143,14 @@ coverage there when introducing new markup patterns.
130143
- **Environment config:** meta tags in `app/layout.jsx` (`submission-target`,
131144
`sentry-dsn`, `platform-base-url`) plus `NEXT_PUBLIC_HOSTING_ENVIRONMENT`
132145
/ `NEXT_PUBLIC_BASE_PATH` at build time.
146+
- **Theming:** see the dark-mode bullet above — the radios in
147+
`components/theme-toggle.jsx` are the single source of truth; never add
148+
JS-driven styling. All colors must be custom properties declared only in
149+
the four palette blocks (`:root`, `html:root` mvp overrides, and the two
150+
identical dark blocks) in `app/globals.css`; mvp.css light overrides must
151+
stay on `html:root` (mvp loads after the bundle). Report-template
152+
widgets that hardcode light colors are re-driven from `main#app …`
153+
rules there (the mustache stays byte-identical).
133154

134155
## Report Tables (Enhanced)
135156

@@ -178,7 +199,7 @@ coverage there when introducing new markup patterns.
178199

179200
## Current Test Count
180201

181-
~543 unit/integration + ~202 E2E (~198 across three browsers + 4 basePath leg).
202+
~584 unit/integration + ~229 E2E (~202 across three browsers + 4 basePath leg + 27 dark mode).
182203

183204
WCAG 2.2 AA / HTML5 guards live in tests/unit/html5-attributes.test.js,
184205
tests/unit/report-template-wcag.test.js, tests/unit/css-a11y.test.js and

0 commit comments

Comments
 (0)