button component and demo