Widget refactor: split attrs on htmlAttrs and internalAttrs