implement type macro componentImpl