pull out layout to it's own component