add component support

because i've wanted this for oh so long