Two general fixes for single-line chips/pills whose labels wrapped onto
a second line in generated output:
1. fixedWidthButtonLike treated any constant-width button as authored
fixed-width, but a content-sized chip whose label never changes paints
the same width at every viewport. When the sizing probe proved
width:auto reproduces the box at its own max-content at every painted
sample (with genuinely wrappable text inside), the width is
content-derived - don't lock it. Baking that px invited the emitters'
quantization (snapLen 0.1px rounding, snapBase spacing-scale snap) to
land fractionally below the intrinsic single-line width, wrapping the
last word. Authored intent (sourceFixedWidth/sourceFixedSize) still
locks.
2. nowrapWrapVulnerable bailed on any element child, so an icon svg
beside the label disqualified the classic icon+text chip shape.
Replaced children (svg/img/...) can't wrap and their constant width is
already inside the probe's wMin/wMax, so they're now permitted; any
non-replaced element child still bails.
525 tests (5 new), typecheck clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>