mirror of
https://github.com/olehomelchenko/astrolabe.git
synced 2026-08-08 02:02:33 +00:00
Workspace transfer: custom themes ride the export/import envelope
This commit is contained in:
@@ -142,7 +142,7 @@ 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** ✅ (2026-06-12, except export/import) — IndexedDB entity
|
||||
4. **Custom named themes** ✅ (2026-06-12) — 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
|
||||
@@ -151,8 +151,9 @@ ships, it is an explicit per-font user action, never automatic.
|
||||
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).
|
||||
active one falls back to Astrolabe. Custom themes travel in the §08 workspace
|
||||
export/import envelope (additive `themes` array, name auto-suffix on clash, ids
|
||||
reassigned by the store, rolled back with datasets on a failed import).
|
||||
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.
|
||||
@@ -166,6 +167,16 @@ it without a second mechanism).
|
||||
|
||||
## 5. Status log
|
||||
|
||||
- **2026-06-12 (slice 4 close-out)** — **custom themes in the §08 envelope.** The
|
||||
workspace export now writes a `themes` array (additive — no format bump; importers
|
||||
treat it as optional, so pre-theme envelopes stay valid). Import normalizes each
|
||||
record (`normalizeCustomTheme`), auto-suffixes name clashes via the generalized
|
||||
`dedupeIncomingNames` (the dataset dedupe, now shared), reassigns ids through
|
||||
`CustomThemeStore.addThemes` (selection untouched), and rolls themes back together
|
||||
with datasets when the atomic snippet write fails. Toast counts gain a theme
|
||||
clause. Spec §08 updated ("Dataset conflicts" → "Name conflicts"). Slice 4 is now
|
||||
fully done; next is slice 5 (shipped font roster).
|
||||
|
||||
- **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
|
||||
|
||||
Reference in New Issue
Block a user