visual attribute widget refactor