added template and shadow dom