mirror of
https://github.com/olehomelchenko/astrolabe.git
synced 2026-08-08 02:02:33 +00:00
Chart theming: custom named themes + Theme Builder
This commit is contained in:
@@ -142,9 +142,17 @@ ships, it is an explicit per-font user action, never automatic.
|
||||
(spec §03G): bake the active theme into `spec.config` (existing keys win,
|
||||
render-identical), or lift `spec.config` out to the clipboard (copy before remove —
|
||||
a failed copy aborts).
|
||||
4. **Custom named themes** — new IndexedDB entity `{ name, config, fonts? }` + list UI;
|
||||
created by duplicating a preset or extract-from-spec; appears in the slice-2
|
||||
selector. Export/import as JSON alongside the library.
|
||||
4. **Custom named themes** ✅ (2026-06-12, except export/import) — IndexedDB entity
|
||||
`{ id, name, config }` (`core/custom-theme.ts`, themes store @ DB v2) + the **Theme
|
||||
Builder** modal: theme list, JSON config editor, a font control that populates one
|
||||
family across every font slot (`applyFontToConfig`), and a live multi-chart gallery
|
||||
(`core/theme-preview-specs.ts`) so one edit is previewed across titles, axes,
|
||||
legends, headers, and the major marks. Created by duplicating the currently-selected
|
||||
theme (house/preset/custom) or via the editor's **Extract Config to New Theme**
|
||||
action (spec §03G); appears in the selector as `custom:<id>` (the "Edit themes…"
|
||||
action row sits right after the customs, before the preset roster); deleting the
|
||||
active one falls back to Astrolabe. **Remaining:** export/import as JSON alongside
|
||||
the library (touches the §08 envelope + import-normalize atomicity).
|
||||
5. **Shipped font roster** — fontsource packages, `@font-face` registration, selector
|
||||
metadata (which themes/fonts pair), `document.fonts.load` gate in the render path,
|
||||
precache strategy above. Roster finalized via visual specimen.
|
||||
@@ -158,6 +166,22 @@ it without a second mechanism).
|
||||
|
||||
## 5. Status log
|
||||
|
||||
- **2026-06-12 (slice 4)** — **custom named themes + Theme Builder shipped.**
|
||||
`CustomTheme` entity through the full stack (core → theme-store @ DB v2 →
|
||||
CustomThemeStore → theme-persistence → startup hydrate); selection model extended to
|
||||
`custom:<id>` with missing-record fallback to the house style; Theme Builder modal
|
||||
(xlarge, list + name + config JSON + font-apply control + 7-card live gallery, canvas
|
||||
renderer, per-card chain-lock); picker gains custom entries + an "Edit themes…"
|
||||
action row. The font control ships with render-safe faces only (Plex + web-safe
|
||||
stacks) — the roster slice (5) extends `THEME_FONT_OPTIONS` and adds the
|
||||
`document.fonts.load` gate. Spec updated (§01C, §04 Chart theme + Theme Builder,
|
||||
§09C/E/G) + architecture 05 §3. Same-day follow-ups from first use: `openDB` now
|
||||
verifies the store layout and self-heals an interrupted upgrade (arch 02 §2.1,
|
||||
`db.test.ts` on fake-indexeddb); "Edit themes…" moved before the preset roster
|
||||
(discoverability); **Extract Config to New Theme** added as the third Config-menu
|
||||
action (spec §03G) — config block → saved theme, selected, removed from the spec.
|
||||
Not yet done: themes in the §08 export/import envelope.
|
||||
|
||||
- **2026-06-12 (slices 2–3)** — **theme selector + merge/extract shipped.**
|
||||
`ChartThemeId`/`chartConfigForSelection` in core; `ui.chartTheme` persisted via the
|
||||
`previewFitMode` orchestration pattern; `SelectControl` picker in the preview header;
|
||||
|
||||
Reference in New Issue
Block a user