docs: Material Symbols, responsive panes, the code face, and the SSR theme mode
Four things preview.7 ships, each written where someone would look for it rather
than in a changelog.
Icons: the pack table gains Material Symbols, and the page finally says what an
icon package IS — a catalog of IconGlyph, drawn with `Glyph`, not `Icon`. With
the number that matters: a page naming two glyphs emits 627 bytes out of a
catalog whose source is ~8 MB, so pack size is a build cost, not a download.
DeclarativeSurface: `Glyph` joins `Gap` and `DotBadge` in the named-factory
table, with the reason it differs — `Icon` has two constructors and a mirrored
factory can only be one of them, so a pack glyph could only be drawn with `new`,
in the one place the framework promises you never need it.
WriteOnceComponents: `Flexible` with a basis, which is what makes a responsive
two-pane layout expressible. The example is the constructor + initializer form
because `Wrap` is an init property — the first draft used a `with` expression on
a class, which does not compile, and this one was compiled in a scaffolded app
before being written down.
Styling and ServerIntegration: `--eq-font-mono` (and why the measurer reads the
same variable — a caret lands beside its character otherwise), and
`UseInitialThemeMode`, including why applying on the server is inert.
docs: authoring without `new`, including your own components
The factory surface had no page of its own: the README showed it, the template
used it, and anyone asking "why does this compile without a `new`?" had nowhere
to look. Worse, the answer everyone reaches for — "that must be a framework-only
trick" — is wrong, and nothing said so.
DeclarativeSurface covers the contract (named like the type, mirrors a
constructor, no overloads, `children` last), how an app's own components join it
through the generator, the widest-constructor rule and `[UiFactory]`, EQ3101 and
EQ3102, and the one sharp edge: a factory shadows its type, but only for types
that arrive through a `using` — so your own are never shadowed, and `Gap` and
`DotBadge` exist for the framework's two that are.
Also the `dotnet clean` note for a renamed generator, because eqc reads the
generated FILES and the compiler never removes what a generator stopped writing.