feat(cv): rebuild section editing workflow
CI and Deploy / test (push) Failing after 30s
CI and Deploy / deploy (push) Has been skipped

This commit is contained in:
cesnimda
2026-08-27 15:27:54 +02:00
parent ccd0af908c
commit b5249357c7
10 changed files with 525 additions and 221 deletions
+13 -6
View File
@@ -20,9 +20,10 @@ which is retained only for the legacy tailored-draft flow and is not used by the
| Identity | `Id`, `Name`, `Category`, `Description` |
| Layout | `Layout` (`single` \| `sidebar-left` \| `sidebar-right` \| `header-band`), `SidebarWidthMm`, `SidebarSections` |
| Palette | `Accent`, `Ink`, `Muted`, `Line`, `Paper`, `SidebarBg`, `SidebarInk`, `HeadingColor` |
| Typography | `HeadingFont`, `BodyFont`, `NameSizePt`, `HeadingSizePt`, `BodySizePt`, `LineHeight` |
| Typography | `HeadingFont`, `BodyFont`, `UtilityFont`, `NameSizePt`, `HeadingSizePt`, `BodySizePt`, `LineHeight` |
| Spacing | `PageMarginMm`, `SectionGapMm`, `EntryGapMm` |
| Styling | `HeaderStyle` (`plain`\|`band`\|`centered`\|`kicker`), `HeadingStyle` (`caps-rule`\|`underline`\|`plain`\|`bar`), `PhotoShape` (`none`\|`square`\|`rounded`\|`circle`), `DefaultIcons` |
| Styling | `HeaderStyle` (`plain`\|`band`\|`centered`\|`kicker`), `HeadingStyle` (`caps-rule`\|`underline`\|`plain`\|`bar`), `PhotoShape` (`none`\|`square`\|`rounded`\|`circle`), `DefaultIcons`, `NumberSections` |
| Capabilities | `SupportedSettings` controls which editor panels the template exposes |
The renderer computes CSS from these plus normalized variant overrides: printable palette, curated
fonts, body/heading size, line height, spacing, page size, layout, sidebar width/content, header and
@@ -33,19 +34,21 @@ the structured career content.
## Adding a theme
1. Append one `CvTheme { … }` to `CvThemeCatalog.Themes` (`JobTrackerApi/Models/CvTheme.cs`). Only override the
fields that differ from the defaults.
2. Nothing else. It appears in `GET /api/cv/themes`, the Template tab and dashboard create flow.
fields that differ from the defaults and declare its `SupportedSettings` when the defaults do not apply.
2. Nothing else is wired manually. It appears in `GET /api/cv/themes`, the Template tab and dashboard create flow.
`GET /api/cv/themes/{id}/preview` renders isolated in-memory sample data for a real visual thumbnail;
preview data is never persisted.
3. Add a focused visual/PDF regression only when the template introduces a genuinely new layout behaviour.
Add a `CvBuilderTests.Every_catalog_theme_renders_valid_html` already loops the whole catalog, so a new
theme is smoke-tested automatically.
## Shipped themes (8)
## Shipped themes (9)
`modern` (header-band), `minimal` (single), `executive` (single, serif), `technical` (sidebar-left,
dense), `ats-classic` (single, no graphics), `nordic` (sidebar-right), `elegant` (single, editorial),
`creative` (sidebar-left, bold).
`creative` (sidebar-left, bold), `code` (single-column developer/editorial layout with numbered
sections and monospaced utility details).
## Rich text, ATS, and print (2026-07-18)
@@ -60,6 +63,10 @@ dense), `ats-classic` (single, no graphics), `nordic` (sidebar-right), `elegant`
block. Section headings avoid a following break, list items carry widow/orphan rules, and long
names/titles/contact values/URLs/tags wrap within `minmax(0, …)` columns. Typography is not scaled
down to mask overflow.
- **Builder pagination**: the screen preview runs the same keep-together policy over the rendered
section/entry/list classes before cropping real A4 or Letter frames. It uses deterministic internal
padding for unused page space (avoiding collapsing margins), while PDF export remains native
Chromium paged media. A long structured Code-theme browser/PDF test guards both paths.
## Deliberately not here (yet)