Repository navigation
material 3.2.5
Menus and tooltips match the spec.
Fixes
-
A disabled menu item dims every part of itself, and a selected disabled item
dims its content in every layout and its container where the spec has one
(#110).
Only the label faded: the icon, the supporting text and the shortcut each
declared their ownon-surface-variantcolour with no disabled rule, and the
selected item's rule stood after the disabled one at equal specificity, so a
selected item kept the opaque selection colours and still drew its hover and
press layers. All three parts now inherit the item's dimmed colour, and
selected plus disabled is a compound rule in both menu variants that puts the
selection's content at 0.38 — and, in the baseline and vertical standard
menus, the container with it — and sets the state layer's opacity to 0. The
vertical vibrant menu's spec defines no container colour for the state, so it
keeps the enabled selection's container at full opacity. Measured in Chromium
against the packed stylesheet, on baseline, vertical standard and vertical
vibrant menus: the disabled icon, supporting text and shortcut land on the
label's colour at 0.38 instead of opaqueon-surface-variant; a selected
disabled item dims its content in all three layouts and its container only in
baseline and vertical standard, and keeps no hover layer; and no disabled part
changes colour on hover or press. -
Tooltips use Body Small's regular weight, and rich tooltips the spec's 8dp
bottom padding (#111).
A base rule overrode Body Small after its typography mixin, so plain and
default tooltips rendered their supporting text at weight 500; rich tooltips
used symmetric12px 16pxpadding, a 12px bottom inset. The override is gone,
so the mixin's regular 400 applies, and rich tooltips take12px 16px 8px.
Measured in Chromium across the existing 72-case matrix — default, plain and
rich variants, both modes and every placement — computed weight, size, line
height and all four padding edges match the token table, with rich padding at
12/16/8/16. -
A horizontal radios group reserves its 16px gaps before upgrade (#129).
Adirection="horizontal"group changed its host width at upgrade because
the undefined host laid out its light children without the component item's
margin-inline-end: 16px: a three-option group grew 32px, 16px per gap, in
both directions, and every following box on the line moved with it. The
pre-upgrade rule now gives each option that margin except the last, matching
the shadow item rule, with the last found among the options rather than among
all children. Measured outside the repository in LTR and RTL: 290.3 → 322.3px
on main against 322.3 → 322.3px on the fix, with the next sibling still on
both sides. -
A fresh wheel notch that crosses a snap by less than a pixel lands on that
snap instead of running to the next one (#141).
The destination comparison required a strict crossing, so a destination that
sat under a snap by up to a pixel advanced a full item; from a third of a
pixel short of a snap, a 1px notch moved one item on. The comparison now
reaches a snap it has crossed by less than 1px, and only for a fresh gesture:
a continuing gesture keeps the exact threshold, so its accumulation still
moves on as soon as it passes a snap. The unit case is seeded at a
deterministic sub-pixel position instead of depending on a clock read, and the
browser check measured four carousels in Chromium: main landed on 1014 / 1040
/ 3600 / 3312 where the fix lands on 811 / 832 / 2880 / 2640, the crossed
snap, with the continuing-gesture control passing on both.
Internal
-
README documents the
:lang()arms an old-target bundler adds, and the
full-cssfixture records that its row measures that bundle (#125).
The full stylesheet ships no:lang()or:dir()rules — the tabs element
sheet carries the two:host(:dir(rtl))badge rules that are the exception —
and a bundler targeting browsers without logical properties adds one
:lang()-guarded arm per physical declaration it rewrites. On the full
stylesheet that is 12,426 arms, about 7.6 kB gzip of the 63.5 kB bundle. They
key on the document's language rather than its direction, so they are an
approximation, but in a build that targets old browsers they are what mirrors
the layout and must not be stripped. The size fixture's note carries the count
and the bytes, so the ceiling is read as guarding that larger bundle. -
The release costs 34 bytes gzipped in the all-js row (127,452 to 127,486)
and 123 in the full stylesheet (63,527 to 63,650); the packed tarball is
1,086,173 bytes compressed, 6,471,097 unpacked, against 1,084,867 and
6,460,889 in 3.2.4. No ceiling moved, and all seven README size rows stand
as measured.
npm: material@3.2.5 · Docs: md3.io · Full history: CHANGELOG.md
The history before 3.0.0 was developed in floor/mtrl; #numbers in commit subjects before 3.0.0 refer to pull requests there.