Nao seria o caso de usar um VueJS, AngularJS, ReactJS, ou qualquer outro framework/lib para criar componentes personalizaveis ?