Button: add support to overriding type