moved customElements source for ease of testing