| 411 |
411 |
|
println!("cargo:rerun-if-changed=frontend/index.html");
|
| 412 |
412 |
|
}
|
| 413 |
413 |
|
|
|
414 |
+ |
/// Class-and-property overlaps with the generated stylesheet that have been
|
|
415 |
+ |
/// read and kept.
|
|
416 |
+ |
///
|
|
417 |
+ |
/// Every one of these is the two sheets styling **different selector arms** of
|
|
418 |
+ |
/// the same class, which is a pairing rather than a collision. The check
|
|
419 |
+ |
/// collapses arms, because separating them would need a selector matcher and a
|
|
420 |
+ |
/// checker that guesses wrong about specificity fails correct builds. So the
|
|
421 |
+ |
/// judgement is recorded here instead.
|
|
422 |
+ |
///
|
|
423 |
+ |
/// The pattern, which holds for six of the eight: makeover styles the state
|
|
424 |
+ |
/// arms of a component -- `:disabled`, `[aria-disabled]`, `[data-tone]` -- and
|
|
425 |
+ |
/// this app styles the base and its own variants. Neither sheet touches the
|
|
426 |
+ |
/// other's arm, and deleting either side would lose a state nothing else
|
|
427 |
+ |
/// draws.
|
|
428 |
+ |
///
|
|
429 |
+ |
/// - `.badge { color }` and `.tab { color }` -- makeover colours the tone and
|
|
430 |
+ |
/// disabled arms; GO colours the base and its own `[data-color]` palette,
|
|
431 |
+ |
/// which is a per-tag colour rather than a makeover `Tone`.
|
|
432 |
+ |
/// - `.button { color }`, `.button { cursor }`, `.card { cursor }` -- makeover
|
|
433 |
+ |
/// sets the disabled arm (`not-allowed`, muted text); GO sets the resting one
|
|
434 |
+ |
/// (`pointer`, ordinary text) and its `--primary` / `--danger` variants.
|
|
435 |
+ |
/// - `.field { color }` -- same split.
|
|
436 |
+ |
/// - `.field { box-shadow }` -- makeover owns the resting and invalid bevels;
|
|
437 |
+ |
/// GO's are `.field--ghost` (deliberately borderless in toolbars) and the
|
|
438 |
+ |
/// `:focus` ring on an invalid field, which makeover draws no arm for.
|
|
439 |
+ |
/// - `.table-heading { content }` -- the sort caret's reserved gap. Declared on
|
|
440 |
+ |
/// the **unsorted** arm (`:not([aria-sort])::after`) precisely so it cannot
|
|
441 |
+ |
/// blank the generated caret on the sorted one. Declaring it on the sorted
|
|
442 |
+ |
/// arm is the trap that bit twice on 2026-08-11; this entry is what keeps the
|
|
443 |
+ |
/// correct arrangement legible rather than looking like the bug.
|
|
444 |
+ |
/// - `.table-heading { display }` -- different elements, not different arms:
|
|
445 |
+ |
/// makeover sets `table-cell` on the heading, GO sets `inline-block` on the
|
|
446 |
+ |
/// caret pseudo-element inside it.
|
|
447 |
+ |
///
|
|
448 |
+ |
/// An entry that stops colliding fails the build, so this list cannot outlive
|
|
449 |
+ |
/// what it describes.
|
|
450 |
+ |
const REVIEWED_OVERLAPS: &[(&str, &str)] = &[
|
|
451 |
+ |
("badge", "color"),
|
|
452 |
+ |
("button", "color"),
|
|
453 |
+ |
("button", "cursor"),
|
|
454 |
+ |
("card", "cursor"),
|
|
455 |
+ |
("field", "box-shadow"),
|
|
456 |
+ |
("field", "color"),
|
|
457 |
+ |
("tab", "color"),
|
|
458 |
+ |
("table-heading", "content"),
|
|
459 |
+ |
("table-heading", "display"),
|
|
460 |
+ |
];
|
|
461 |
+ |
|
| 414 |
462 |
|
/// Widths that are tuning inside the wide shell, not a shell boundary.
|
| 415 |
463 |
|
///
|
| 416 |
464 |
|
/// A shell boundary is a [`SizeClass`] edge and belongs to makeover-geometry.
|
| 446 |
494 |
|
// a parameter to get there: TUNING_WIDTHS is this app's own list, where the
|
| 447 |
495 |
|
// touch string is makeover-geometry's and no app gets a say.
|
| 448 |
496 |
|
makeover_build::check_breakpoints(&frontend, TUNING_WIDTHS);
|
|
497 |
+ |
makeover_build::check_vocabulary(
|
|
498 |
+ |
&frontend,
|
|
499 |
+ |
&makeover_build::Emit::default(),
|
|
500 |
+ |
&["geometry.css", "layout.css", "tables.css"],
|
|
501 |
+ |
REVIEWED_OVERLAPS,
|
|
502 |
+ |
);
|
| 449 |
503 |
|
makeover_build::check_touch_density(frontend.join("js"));
|
| 450 |
504 |
|
check_sortable_headers(&frontend);
|
| 451 |
505 |
|
|