break out visual components into directives and templates