renamed to slayout so there can be implementations for languages and systems other than JS and HTML