/**
 * @class Ext.Config
 * This class manages a config property. Instances of this type are created and cached as
 * classes declare their config properties. One instance of this class is created per
 * config property name.
 *
 *      Ext.define('MyClass', {
 *          config: {
 *              foo: 42
 *          }
 *      });
 *
 * This uses the cached `Ext.Config` instance for the "foo" property.
 *
 * When config properties apply options to config properties a prototype chained object is
 * created from the cached instance. For example:
 *
 *      Ext.define('MyClass', {
 *          config: {
 *              foo: {
 *                  $value: 42,
 *                  lazy: true
 *              }
 *          }
 *      });
 *
 * This creates a prototype chain to the cached "foo" instance of `Ext.Config` and applies
 * the `lazy` option to that new instance. This chained instance is then kept by the
 * `Ext.Configurator` for that class.
 * @private
 */
 
/**
 * @cfg {Boolean} [cached=false]
 * When set as `true` the config property will be stored on the class prototype once
 * the first instance has had a chance to process the default value.
 * @private
 * @since 5.0.0
 */
 
/**
 * @cfg {Boolean} [lazy=false]
 * When set as `true` the config property will not be immediately initialized during
 * the `initConfig` call.
 * @private
 * @since 5.0.0
 */
 
/**
 * @cfg {Boolean} [evented=false]
 * When set as `true` the config property will be treated as a {@link Ext.Evented Evented Config}.
 * @private
 * @since 6.0.0
 */
 
/**
 * @cfg {Function} [merge]
 * This function if supplied will be called as classes or instances provide values
 * that need to be combined with inherited values. The function should return the
 * value that will be the config value. Further calls may receive such returned
 * values as `oldValue`.
 *
 * @cfg {Mixed} merge.newValue The new value to merge with the old.
 *
 * @cfg {Mixed} merge.oldValue The current value prior to `newValue` being merged.
 *
 * @cfg {Mixed} merge.target The class or instance to which the merged config value
 * will be applied.
 *
 * @cfg {Ext.Class} merge.mixinClass The mixin providing the `newValue` or `null` if
 * the `newValue` is not being provided by a mixin.
 */