| 1 |
# makeover-layout |
| 2 |
|
| 3 |
The renderer-agnostic half of the make-family design system. |
| 4 |
|
| 5 |
`makeover` answers *what colour*, and varies by theme. `makeover-geometry` |
| 6 |
answers *how much space*, and varies by density and surface. This crate answers |
| 7 |
*what the thing is*, and varies by nothing. |
| 8 |
|
| 9 |
## The deferral rule |
| 10 |
|
| 11 |
A description names intents and relationships, never values. Say `Fill::Raised`, |
| 12 |
never `#D9DDF4`. Say `Gap::Peer`, never `6px`. What is left once colour and |
| 13 |
spacing are deferred is composition: which edges are lit, what inverts on press, |
| 14 |
what nests in what. |
| 15 |
|
| 16 |
The constraint that shapes it: a renderer that can only paint rectangles has to |
| 17 |
be able to express the result. egui has no `box-shadow: inset` and one stroke per |
| 18 |
widget with no per-side control. A terminal has box-drawing characters and one |
| 19 |
cell of resolution, and cannot draw a two-tone lit edge at all. So this crate |
| 20 |
names the intent, and each renderer picks an expression it can produce, including |
| 21 |
dropping half of one. |
| 22 |
|
| 23 |
## What is here |
| 24 |
|
| 25 |
Depth, and only depth: `Bevel`, `Edge`, `Fill`, `Depth`. Fill and bevel are named |
| 26 |
together, because naming them apart is what let them disagree. Every consumer had |
| 27 |
at least one region carrying a raised bevel over a recessed fill; audiofiles |
| 28 |
fixed it and wrote the bug down, Balanced Breakfast still had twelve of them a |
| 29 |
year later. `Depth` makes that unrepresentable. |
| 30 |
|
| 31 |
The vocabulary was read off audiofiles, the only implementation written by a |
| 32 |
consumer with no CSS, then checked against both webview apps. |
| 33 |
|
| 34 |
## What is not here yet |
| 35 |
|
| 36 |
Badge versus chip, toast versus banner, the list row's parts, heading levels, |
| 37 |
segmented controls, and whether a description names loading state at all. Each is |
| 38 |
a naming decision rather than a transcription, and each is tracked as a subtask |
| 39 |
of the extraction task. Guessing at them now is how a description becomes a |
| 40 |
framework. |
| 41 |
|
| 42 |
## Status |
| 43 |
|
| 44 |
Not published. Per the sequencing decision, 0.1.0 does not go to crates.io until |
| 45 |
a second renderer has exercised the vocabulary; a description with one renderer |
| 46 |
is an API with extra steps. Design and open questions live in the wiki note |
| 47 |
`makeover-layout`; the backlog is in GoingsOn under the project of the same name. |
| 48 |
|
| 49 |
## Licence |
| 50 |
|
| 51 |
MIT. |
| 52 |
|