update component: add abstract widget class