add: support custom widgets