feat: create webcomponent