classes (classContext) {
    // Step 1: We get the global classes for all keys.
    const coreClasses = this.options.coreClasses(classContext)
    // Step 2: We extend those classes with a user defined baseClasses.
    const baseClasses = this.options.baseClasses(coreClasses, classContext)
    return Object.keys(baseClasses).reduce((classMap, key) => {
      // Step 3: For each key, apply any global overrides for that key.
      let classesForKey = applyClasses(baseClasses[key], this.options.classes[key], classContext)
      // Step 4: Apply any prop-level overrides for that key.
      classesForKey = applyClasses(classesForKey, classContext[`${key}Class`], classContext)
      // Step 5: Add state based classes from props.
      classesForKey = applyStates(key, classesForKey, this.options.classes, classContext)
      // Now we have our final classes, assign to the given key.
      return Object.assign(classMap, { [key]: classesForKey })
    }, {})
  }
Generate all classes for a particular context.
@param {Object} context