Put it on the element that paints the surface
The one sharp edge in this API. The wash lives in its own layer, and that layer takes its corner radius from its host with border-radius: inherit — exact, per instance, per theme, with no token to declare. The cost is that on a wrapper whose child paints the rounded background, the layer inherits the wrapper's radius — very often 0 — and the wash squares off at the corners.
Both buttons below are ripple-wrapped; only the second has the directive on the element that actually has the radius. Press each and watch the corners.
<div class="row">
<!-- Wrong: the wrapper has no radius, so the layer inherits 0 and the wash squares off. -->
<span class="wrapper" gogRipple>
<button class="surface surface--pill">On the wrapper</button>
</span>
<!-- Right: the directive sits on the element that actually paints the rounded background. -->
<span class="wrapper">
<button class="surface surface--pill" gogRipple>On the surface</button>
</span>
</div>The library's own components never make you think about this — each opts its own inner element in. The rule applies only to markup you wrote yourself.