OptionalonOptionalonContent the skin draws changed without a layout or a state transition
(2026-08-07, A-12): a Slider's or ProgressIndicator's value, a
ProgressIndicator's indeterminate flag, an ImageWidget's source or
natural size.
A fourth hook rather than an overloaded onStateChange because these are
not §75 states — a mirror must not announce a dragged slider as having
changed its hover or focus — and not onLayout because the widget's box is
exactly what did not move. A skin that draws only backgrounds ignores
it, which is why it is optional like the rest.
OptionalonOptionalonOptionalonwidget's interaction state changed (§72) — any of the flags in
WidgetStateSnapshot, including a checkable control's checked.
The application-supplied visuals of one widget — the seam described at the top of this module.
Every hook is optional, and every hook is called with the widget itself: a skin reads whatever it needs off the widget (size, state, text layout) and owns whatever it builds. A skin is free to add child nodes to the widget, to draw into an entirely separate subtree, or to do nothing at all.
Ordering guarantees:
onAttachruns before the firstonLayout/onStateChangeof that skin (assigning a skin to an already laid-out widget calls all three immediately, so a late skin is never stale), andonDetachruns before the widget forgets the skin.