enhanced button() mixin