Skip to main content

max / makeover-layout

2.2 KB · 52 lines History Blame Raw
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