diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ba6e74541..f68d1e769f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,20 @@ file is the human-readable summary of what changed and why. ### Desktop / Web UI +- **The ⋮ menu on a session row opens on the first click** — it used to ignore + one click and open on the next, both in the sidebar's Recents and on the + **View all** list. The rows were being rebuilt from scratch whenever anything + the session list depends on changed, which could happen mid-click and threw + the click away; they are now updated in place. The same rebuild could also + close the menu under you while it was open, or drop a rename you were + part-way through typing. The ⋯ menu beside a session title was never + affected. + +- **Recents no longer draws a half-cut View all** — in a window short enough + that the list has no room for a whole row (roughly under 380px tall), **View + all** was still drawn and clipped by the edge of the list. It is now left out + at those sizes instead. + - **Delete reads as destructive** — the **Delete** item in a session's ⋮ / ⋯ menu is now red, in both the sidebar rows and the menu beside a session title, and it has lost its trailing ellipsis. It still asks for confirmation diff --git a/DIVERGENCES.md b/DIVERGENCES.md index 4019e0c3bd..7208d8ceb2 100644 --- a/DIVERGENCES.md +++ b/DIVERGENCES.md @@ -124,6 +124,7 @@ from the squash message first, or use a plain merge. | `packages/ui/src/theme/context.tsx`, `packages/app/public/oc-theme-preload.js`, `packages/app/src/theme-preload.test.ts`, `packages/app/src/pages/layout.tsx`, `packages/app/src/components/settings-general.tsx`, `packages/app/src/components/settings-v2/general.tsx` | **One theme in the web/desktop UI; light and dark are the only axis.** Upstream ships 36 selectable palettes with a Settings → Appearance **Theme** picker and command-palette entries. The fork exposes none of them: OC-2 is the theme, `colorScheme` (system/light/dark) is the only appearance choice. The lock lives at `normalize()` in `theme/context.tsx`, renamed to the exported `normalizeThemeID()` and returning the exported `SHIPPED_THEME_ID` unconditionally — that one function is already on every path (provider init, the `onMount` migration, `load`, the cross-tab `storage` listener, `setTheme`, `previewTheme`), so a stored id from before the picker was removed, or one written by another tab, resolves to OC-2 without a second guard. It is exported (and the six call sites renamed) so `theme/context.test.ts` can cover the invariant directly instead of only through its call sites — the module imports cleanly under `bun test` because `import.meta.glob` is called lazily inside `getFiles()`. It also gives the migration for free: `onMount` already rewrites `opencode-theme-id` and calls `clear()` when the raw value differs from the normalized one, which now drops the stale `opencode-theme-css-{light,dark}` cache. `ids()` returns `["oc-2"]` and `loadThemes()` loads only OC-2 instead of all 36 (it was `Promise.all(themeIDs().map(load))`). The bundled theme JSON, the `names` map and `registerTheme` are **left alone** — unreferenced data costs nothing and keeps upstream's theme edits applying cleanly. `oc-theme-preload.js` does the same rewrite *before* mount, so the first launch after upgrading does not paint the user's old palette for a frame; with no other theme reachable its cached-CSS `