Port of bubble example to Angular