What are the differences between Configuration.isVisible and Configuration.isCanBeConsumed?

looking at https://docs.gradle.org/5.6/userguide/dependency_management_attribute_based_matching.html describes a few different dependency resolution techniques for `Configuration:

  1. can be resolved
  2. can be consumed

Configuration also has a property for isVisible:

A visible configuration is usable outside the project it belongs to.

Based on the documentation for both of these, what is the difference between isVisible and isCanBeConsumed?