feature(public): add loading spinner