use component-based mixins, update docs