Upgrade to ExtJS 4.0.7 - Released 10/19/2011
[extjs.git] / docs / source / AbstractComponent.html
index 8197a86..bf4dd30 100644 (file)
@@ -3,8 +3,8 @@
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title>The source code</title>
-  <link href="../prettify/prettify.css" type="text/css" rel="stylesheet" />
-  <script type="text/javascript" src="../prettify/prettify.js"></script>
+  <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
+  <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
   <style type="text/css">
     .highlight { display: block; background-color: #ddd; }
   </style>
 </head>
 <body onload="prettyPrint(); highlight();">
   <pre class="prettyprint lang-js"><span id='Ext-AbstractComponent'>/**
-</span> * @class Ext.AbstractComponent
- * &lt;p&gt;An abstract base class which provides shared methods for Components across the Sencha product line.&lt;/p&gt;
- * &lt;p&gt;Please refer to sub class's documentation&lt;/p&gt;
+</span> * An abstract base class which provides shared methods for Components across the Sencha product line.
+ *
+ * Please refer to sub class's documentation
+ * @private
  */
-
 Ext.define('Ext.AbstractComponent', {
 
     /* Begin Definitions */
+    requires: [
+        'Ext.ComponentQuery',
+        'Ext.ComponentManager'
+    ],
 
     mixins: {
         observable: 'Ext.util.Observable',
@@ -31,23 +35,20 @@ Ext.define('Ext.AbstractComponent', {
         state: 'Ext.state.Stateful'
     },
 
-    requires: [
+    // The &quot;uses&quot; property specifies class which are used in an instantiated AbstractComponent.
+    // They do *not* have to be loaded before this class may be defined - that is what &quot;requires&quot; is for.
+    uses: [
         'Ext.PluginManager',
         'Ext.ComponentManager',
-        'Ext.core.Element',
-        'Ext.core.DomHelper',
+        'Ext.Element',
+        'Ext.DomHelper',
         'Ext.XTemplate',
         'Ext.ComponentQuery',
-        'Ext.LoadMask',
         'Ext.ComponentLoader',
         'Ext.EventManager',
         'Ext.layout.Layout',
-        'Ext.layout.component.Auto'
-    ],
-
-    // Please remember to add dependencies whenever you use it
-    // I had to fix these many times already
-    uses: [
+        'Ext.layout.component.Auto',
+        'Ext.LoadMask',
         'Ext.ZIndexManager'
     ],
 
@@ -66,270 +67,386 @@ Ext.define('Ext.AbstractComponent', {
 
 <span id='Ext-AbstractComponent-cfg-id'>    /**
 </span>     * @cfg {String} id
-     * &lt;p&gt;The &lt;b&gt;&lt;u&gt;unique id of this component instance&lt;/u&gt;&lt;/b&gt; (defaults to an {@link #getId auto-assigned id}).&lt;/p&gt;
-     * &lt;p&gt;It should not be necessary to use this configuration except for singleton objects in your application.
-     * Components created with an id may be accessed globally using {@link Ext#getCmp Ext.getCmp}.&lt;/p&gt;
-     * &lt;p&gt;Instead of using assigned ids, use the {@link #itemId} config, and {@link Ext.ComponentQuery ComponentQuery} which
-     * provides selector-based searching for Sencha Components analogous to DOM querying. The {@link Ext.container.Container Container}
-     * class contains {@link Ext.container.Container#down shortcut methods} to query its descendant Components by selector.&lt;/p&gt;
-     * &lt;p&gt;Note that this id will also be used as the element id for the containing HTML element
-     * that is rendered to the page for this component. This allows you to write id-based CSS
-     * rules to style the specific instance of this component uniquely, and also to select
-     * sub-elements using this component's id as the parent.&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: to avoid complications imposed by a unique &lt;tt&gt;id&lt;/tt&gt; also see &lt;code&gt;{@link #itemId}&lt;/code&gt;.&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: to access the container of a Component see &lt;code&gt;{@link #ownerCt}&lt;/code&gt;.&lt;/p&gt;
+     * The **unique id of this component instance.**
+     *
+     * It should not be necessary to use this configuration except for singleton objects in your application. Components
+     * created with an id may be accessed globally using {@link Ext#getCmp Ext.getCmp}.
+     *
+     * Instead of using assigned ids, use the {@link #itemId} config, and {@link Ext.ComponentQuery ComponentQuery}
+     * which provides selector-based searching for Sencha Components analogous to DOM querying. The {@link
+     * Ext.container.Container Container} class contains {@link Ext.container.Container#down shortcut methods} to query
+     * its descendant Components by selector.
+     *
+     * Note that this id will also be used as the element id for the containing HTML element that is rendered to the
+     * page for this component. This allows you to write id-based CSS rules to style the specific instance of this
+     * component uniquely, and also to select sub-elements using this component's id as the parent.
+     *
+     * **Note**: to avoid complications imposed by a unique id also see `{@link #itemId}`.
+     *
+     * **Note**: to access the container of a Component see `{@link #ownerCt}`.
+     *
+     * Defaults to an {@link #getId auto-assigned id}.
      */
 
 <span id='Ext-AbstractComponent-cfg-itemId'>    /**
 </span>     * @cfg {String} itemId
-     * &lt;p&gt;An &lt;tt&gt;itemId&lt;/tt&gt; can be used as an alternative way to get a reference to a component
-     * when no object reference is available.  Instead of using an &lt;code&gt;{@link #id}&lt;/code&gt; with
-     * {@link Ext}.{@link Ext#getCmp getCmp}, use &lt;code&gt;itemId&lt;/code&gt; with
+     * An itemId can be used as an alternative way to get a reference to a component when no object reference is
+     * available. Instead of using an `{@link #id}` with {@link Ext}.{@link Ext#getCmp getCmp}, use `itemId` with
      * {@link Ext.container.Container}.{@link Ext.container.Container#getComponent getComponent} which will retrieve
-     * &lt;code&gt;itemId&lt;/code&gt;'s or &lt;tt&gt;{@link #id}&lt;/tt&gt;'s. Since &lt;code&gt;itemId&lt;/code&gt;'s are an index to the
-     * container's internal MixedCollection, the &lt;code&gt;itemId&lt;/code&gt; is scoped locally to the container --
-     * avoiding potential conflicts with {@link Ext.ComponentManager} which requires a &lt;b&gt;unique&lt;/b&gt;
-     * &lt;code&gt;{@link #id}&lt;/code&gt;.&lt;/p&gt;
-     * &lt;pre&gt;&lt;code&gt;
-var c = new Ext.panel.Panel({ //
-    {@link Ext.Component#height height}: 300,
-    {@link #renderTo}: document.body,
-    {@link Ext.container.Container#layout layout}: 'auto',
-    {@link Ext.container.Container#items items}: [
-        {
-            itemId: 'p1',
-            {@link Ext.panel.Panel#title title}: 'Panel 1',
-            {@link Ext.Component#height height}: 150
-        },
-        {
-            itemId: 'p2',
-            {@link Ext.panel.Panel#title title}: 'Panel 2',
-            {@link Ext.Component#height height}: 150
-        }
-    ]
-})
-p1 = c.{@link Ext.container.Container#getComponent getComponent}('p1'); // not the same as {@link Ext#getCmp Ext.getCmp()}
-p2 = p1.{@link #ownerCt}.{@link Ext.container.Container#getComponent getComponent}('p2'); // reference via a sibling
-     * &lt;/code&gt;&lt;/pre&gt;
-     * &lt;p&gt;Also see &lt;tt&gt;{@link #id}&lt;/tt&gt;, &lt;code&gt;{@link Ext.container.Container#query}&lt;/code&gt;,
-     * &lt;code&gt;{@link Ext.container.Container#down}&lt;/code&gt; and &lt;code&gt;{@link Ext.container.Container#child}&lt;/code&gt;.&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: to access the container of an item see &lt;tt&gt;{@link #ownerCt}&lt;/tt&gt;.&lt;/p&gt;
+     * `itemId`'s or {@link #id}'s. Since `itemId`'s are an index to the container's internal MixedCollection, the
+     * `itemId` is scoped locally to the container -- avoiding potential conflicts with {@link Ext.ComponentManager}
+     * which requires a **unique** `{@link #id}`.
+     *
+     *     var c = new Ext.panel.Panel({ //
+     *         {@link Ext.Component#height height}: 300,
+     *         {@link #renderTo}: document.body,
+     *         {@link Ext.container.Container#layout layout}: 'auto',
+     *         {@link Ext.container.Container#items items}: [
+     *             {
+     *                 itemId: 'p1',
+     *                 {@link Ext.panel.Panel#title title}: 'Panel 1',
+     *                 {@link Ext.Component#height height}: 150
+     *             },
+     *             {
+     *                 itemId: 'p2',
+     *                 {@link Ext.panel.Panel#title title}: 'Panel 2',
+     *                 {@link Ext.Component#height height}: 150
+     *             }
+     *         ]
+     *     })
+     *     p1 = c.{@link Ext.container.Container#getComponent getComponent}('p1'); // not the same as {@link Ext#getCmp Ext.getCmp()}
+     *     p2 = p1.{@link #ownerCt}.{@link Ext.container.Container#getComponent getComponent}('p2'); // reference via a sibling
+     *
+     * Also see {@link #id}, `{@link Ext.container.Container#query}`, `{@link Ext.container.Container#down}` and
+     * `{@link Ext.container.Container#child}`.
+     *
+     * **Note**: to access the container of an item see {@link #ownerCt}.
      */
 
 <span id='Ext-AbstractComponent-property-ownerCt'>    /**
-</span>     * This Component's owner {@link Ext.container.Container Container} (defaults to undefined, and is set automatically when
-     * this Component is added to a Container).  Read-only.
-     * &lt;p&gt;&lt;b&gt;Note&lt;/b&gt;: to access items within the Container see &lt;tt&gt;{@link #itemId}&lt;/tt&gt;.&lt;/p&gt;
-     * @type Ext.Container
-     * @property ownerCt
-     */
-
-<span id='Ext-AbstractComponent-property-layoutManagedWidth'>     /**
-</span>      * @private
-      * Flag set by the container layout to which this Component is added.
-      * If the layout manages this Component's width, it sets the value to 1.
-      * If it does NOT manage the width, it sets it to 2.
-      * If the layout MAY affect the width, but only if the owning Container has a fixed width, this is set to 0.
-      * @type boolean
-      * @property layoutManagedWidth
-      */
-
-<span id='Ext-AbstractComponent-property-layoutManagedHeight'>     /**
-</span>      * @private
-      * Flag set by the container layout to which this Component is added.
-      * If the layout manages this Component's height, it sets the value to 1.
-      * If it does NOT manage the height, it sets it to 2.
-      * If the layout MAY affect the height, but only if the owning Container has a fixed height, this is set to 0.
-      * @type boolean
-      * @property layoutManagedHeight
-      */
+</span>     * @property {Ext.Container} ownerCt
+     * This Component's owner {@link Ext.container.Container Container} (is set automatically
+     * when this Component is added to a Container). Read-only.
+     *
+     * **Note**: to access items within the Container see {@link #itemId}.
+     */
+
+<span id='Ext-AbstractComponent-property-layoutManagedWidth'>    /**
+</span>     * @property {Boolean} layoutManagedWidth
+     * @private
+     * Flag set by the container layout to which this Component is added.
+     * If the layout manages this Component's width, it sets the value to 1.
+     * If it does NOT manage the width, it sets it to 2.
+     * If the layout MAY affect the width, but only if the owning Container has a fixed width, this is set to 0.
+     */
+
+<span id='Ext-AbstractComponent-property-layoutManagedHeight'>    /**
+</span>     * @property {Boolean} layoutManagedHeight
+     * @private
+     * Flag set by the container layout to which this Component is added.
+     * If the layout manages this Component's height, it sets the value to 1.
+     * If it does NOT manage the height, it sets it to 2.
+     * If the layout MAY affect the height, but only if the owning Container has a fixed height, this is set to 0.
+     */
 
 <span id='Ext-AbstractComponent-cfg-autoEl'>    /**
-</span>     * @cfg {Mixed} autoEl
-     * &lt;p&gt;A tag name or {@link Ext.core.DomHelper DomHelper} spec used to create the {@link #getEl Element} which will
-     * encapsulate this Component.&lt;/p&gt;
-     * &lt;p&gt;You do not normally need to specify this. For the base classes {@link Ext.Component} and {@link Ext.container.Container},
-     * this defaults to &lt;b&gt;&lt;tt&gt;'div'&lt;/tt&gt;&lt;/b&gt;. The more complex Sencha classes use a more complex
-     * DOM structure specified by their own {@link #renderTpl}s.&lt;/p&gt;
-     * &lt;p&gt;This is intended to allow the developer to create application-specific utility Components encapsulated by
-     * different DOM elements. Example usage:&lt;/p&gt;&lt;pre&gt;&lt;code&gt;
-{
-    xtype: 'component',
-    autoEl: {
-        tag: 'img',
-        src: 'http://www.example.com/example.jpg'
-    }
-}, {
-    xtype: 'component',
-    autoEl: {
-        tag: 'blockquote',
-        html: 'autoEl is cool!'
-    }
-}, {
-    xtype: 'container',
-    autoEl: 'ul',
-    cls: 'ux-unordered-list',
-    items: {
-        xtype: 'component',
-        autoEl: 'li',
-        html: 'First list item'
-    }
-}
-&lt;/code&gt;&lt;/pre&gt;
+</span>     * @cfg {String/Object} autoEl
+     * A tag name or {@link Ext.DomHelper DomHelper} spec used to create the {@link #getEl Element} which will
+     * encapsulate this Component.
+     *
+     * You do not normally need to specify this. For the base classes {@link Ext.Component} and
+     * {@link Ext.container.Container}, this defaults to **'div'**. The more complex Sencha classes use a more
+     * complex DOM structure specified by their own {@link #renderTpl}s.
+     *
+     * This is intended to allow the developer to create application-specific utility Components encapsulated by
+     * different DOM elements. Example usage:
+     *
+     *     {
+     *         xtype: 'component',
+     *         autoEl: {
+     *             tag: 'img',
+     *             src: 'http://www.example.com/example.jpg'
+     *         }
+     *     }, {
+     *         xtype: 'component',
+     *         autoEl: {
+     *             tag: 'blockquote',
+     *             html: 'autoEl is cool!'
+     *         }
+     *     }, {
+     *         xtype: 'container',
+     *         autoEl: 'ul',
+     *         cls: 'ux-unordered-list',
+     *         items: {
+     *             xtype: 'component',
+     *             autoEl: 'li',
+     *             html: 'First list item'
+     *         }
+     *     }
      */
 
 <span id='Ext-AbstractComponent-cfg-renderTpl'>    /**
-</span>     * @cfg {Mixed} renderTpl
-     * &lt;p&gt;An {@link Ext.XTemplate XTemplate} used to create the internal structure inside this Component's
-     * encapsulating {@link #getEl Element}.&lt;/p&gt;
-     * &lt;p&gt;You do not normally need to specify this. For the base classes {@link Ext.Component}
-     * and {@link Ext.container.Container}, this defaults to &lt;b&gt;&lt;code&gt;null&lt;/code&gt;&lt;/b&gt; which means that they will be initially rendered
-     * with no internal structure; they render their {@link #getEl Element} empty. The more specialized ExtJS and Touch classes
-     * which use a more complex DOM structure, provide their own template definitions.&lt;/p&gt;
-     * &lt;p&gt;This is intended to allow the developer to create application-specific utility Components with customized
-     * internal structure.&lt;/p&gt;
-     * &lt;p&gt;Upon rendering, any created child elements may be automatically imported into object properties using the
-     * {@link #renderSelectors} option.&lt;/p&gt;
+</span>     * @cfg {Ext.XTemplate/String/String[]} renderTpl
+     * An {@link Ext.XTemplate XTemplate} used to create the internal structure inside this Component's encapsulating
+     * {@link #getEl Element}.
+     *
+     * You do not normally need to specify this. For the base classes {@link Ext.Component} and
+     * {@link Ext.container.Container}, this defaults to **`null`** which means that they will be initially rendered
+     * with no internal structure; they render their {@link #getEl Element} empty. The more specialized ExtJS and Touch
+     * classes which use a more complex DOM structure, provide their own template definitions.
+     *
+     * This is intended to allow the developer to create application-specific utility Components with customized
+     * internal structure.
+     *
+     * Upon rendering, any created child elements may be automatically imported into object properties using the
+     * {@link #renderSelectors} and {@link #childEls} options.
      */
     renderTpl: null,
 
+<span id='Ext-AbstractComponent-cfg-renderData'>    /**
+</span>     * @cfg {Object} renderData
+     *
+     * The data used by {@link #renderTpl} in addition to the following property values of the component:
+     *
+     * - id
+     * - ui
+     * - uiCls
+     * - baseCls
+     * - componentCls
+     * - frame
+     *
+     * See {@link #renderSelectors} and {@link #childEls} for usage examples.
+     */
+
 <span id='Ext-AbstractComponent-cfg-renderSelectors'>    /**
 </span>     * @cfg {Object} renderSelectors
-
-An object containing properties specifying {@link Ext.DomQuery DomQuery} selectors which identify child elements
-created by the render process.
-
-After the Component's internal structure is rendered according to the {@link #renderTpl}, this object is iterated through,
-and the found Elements are added as properties to the Component using the `renderSelector` property name.
-
-For example, a Component which rendered an image, and description into its element might use the following properties
-coded into its prototype:
-
-    renderTpl: '&amp;lt;img src=&quot;{imageUrl}&quot; class=&quot;x-image-component-img&quot;&gt;&amp;lt;div class=&quot;x-image-component-desc&quot;&gt;{description}&amp;gt;/div&amp;lt;',
-
-    renderSelectors: {
-        image: 'img.x-image-component-img',
-        descEl: 'div.x-image-component-desc'
-    }
-
-After rendering, the Component would have a property &lt;code&gt;image&lt;/code&gt; referencing its child `img` Element,
-and a property `descEl` referencing the `div` Element which contains the description.
-
-     * @markdown
+     * An object containing properties specifying {@link Ext.DomQuery DomQuery} selectors which identify child elements
+     * created by the render process.
+     *
+     * After the Component's internal structure is rendered according to the {@link #renderTpl}, this object is iterated through,
+     * and the found Elements are added as properties to the Component using the `renderSelector` property name.
+     *
+     * For example, a Component which renderes a title and description into its element:
+     *
+     *     Ext.create('Ext.Component', {
+     *         renderTo: Ext.getBody(),
+     *         renderTpl: [
+     *             '&lt;h1 class=&quot;title&quot;&gt;{title}&lt;/h1&gt;',
+     *             '&lt;p&gt;{desc}&lt;/p&gt;'
+     *         ],
+     *         renderData: {
+     *             title: &quot;Error&quot;,
+     *             desc: &quot;Something went wrong&quot;
+     *         },
+     *         renderSelectors: {
+     *             titleEl: 'h1.title',
+     *             descEl: 'p'
+     *         },
+     *         listeners: {
+     *             afterrender: function(cmp){
+     *                 // After rendering the component will have a titleEl and descEl properties
+     *                 cmp.titleEl.setStyle({color: &quot;red&quot;});
+     *             }
+     *         }
+     *     });
+     *
+     * For a faster, but less flexible, alternative that achieves the same end result (properties for child elements on the
+     * Component after render), see {@link #childEls} and {@link #addChildEls}.
+     */
+
+<span id='Ext-AbstractComponent-cfg-childEls'>    /**
+</span>     * @cfg {Object[]} childEls
+     * An array describing the child elements of the Component. Each member of the array
+     * is an object with these properties:
+     *
+     * - `name` - The property name on the Component for the child element.
+     * - `itemId` - The id to combine with the Component's id that is the id of the child element.
+     * - `id` - The id of the child element.
+     *
+     * If the array member is a string, it is equivalent to `{ name: m, itemId: m }`.
+     *
+     * For example, a Component which renders a title and body text:
+     *
+     *     Ext.create('Ext.Component', {
+     *         renderTo: Ext.getBody(),
+     *         renderTpl: [
+     *             '&lt;h1 id=&quot;{id}-title&quot;&gt;{title}&lt;/h1&gt;',
+     *             '&lt;p&gt;{msg}&lt;/p&gt;',
+     *         ],
+     *         renderData: {
+     *             title: &quot;Error&quot;,
+     *             msg: &quot;Something went wrong&quot;
+     *         },
+     *         childEls: [&quot;title&quot;],
+     *         listeners: {
+     *             afterrender: function(cmp){
+     *                 // After rendering the component will have a title property
+     *                 cmp.title.setStyle({color: &quot;red&quot;});
+     *             }
+     *         }
+     *     });
+     *
+     * A more flexible, but somewhat slower, approach is {@link #renderSelectors}.
      */
 
 <span id='Ext-AbstractComponent-cfg-renderTo'>    /**
-</span>     * @cfg {Mixed} renderTo
-     * &lt;p&gt;Specify the id of the element, a DOM element or an existing Element that this component
-     * will be rendered into.&lt;/p&gt;&lt;div&gt;&lt;ul&gt;
-     * &lt;li&gt;&lt;b&gt;Notes&lt;/b&gt; : &lt;ul&gt;
-     * &lt;div class=&quot;sub-desc&quot;&gt;Do &lt;u&gt;not&lt;/u&gt; use this option if the Component is to be a child item of
-     * a {@link Ext.container.Container Container}. It is the responsibility of the
-     * {@link Ext.container.Container Container}'s {@link Ext.container.Container#layout layout manager}
-     * to render and manage its child items.&lt;/div&gt;
-     * &lt;div class=&quot;sub-desc&quot;&gt;When using this config, a call to render() is not required.&lt;/div&gt;
-     * &lt;/ul&gt;&lt;/li&gt;
-     * &lt;/ul&gt;&lt;/div&gt;
-     * &lt;p&gt;See &lt;code&gt;{@link #render}&lt;/code&gt; also.&lt;/p&gt;
+</span>     * @cfg {String/HTMLElement/Ext.Element} renderTo
+     * Specify the id of the element, a DOM element or an existing Element that this component will be rendered into.
+     *
+     * **Notes:**
+     *
+     * Do *not* use this option if the Component is to be a child item of a {@link Ext.container.Container Container}.
+     * It is the responsibility of the {@link Ext.container.Container Container}'s
+     * {@link Ext.container.Container#layout layout manager} to render and manage its child items.
+     *
+     * When using this config, a call to render() is not required.
+     *
+     * See `{@link #render}` also.
      */
 
 <span id='Ext-AbstractComponent-cfg-frame'>    /**
 </span>     * @cfg {Boolean} frame
-     * &lt;p&gt;Specify as &lt;code&gt;true&lt;/code&gt; to have the Component inject framing elements within the Component at render time to
-     * provide a graphical rounded frame around the Component content.&lt;/p&gt;
-     * &lt;p&gt;This is only necessary when running on outdated, or non standard-compliant browsers such as Microsoft's Internet Explorer
-     * prior to version 9 which do not support rounded corners natively.&lt;/p&gt;
-     * &lt;p&gt;The extra space taken up by this framing is available from the read only property {@link #frameSize}.&lt;/p&gt;
+     * Specify as `true` to have the Component inject framing elements within the Component at render time to provide a
+     * graphical rounded frame around the Component content.
+     *
+     * This is only necessary when running on outdated, or non standard-compliant browsers such as Microsoft's Internet
+     * Explorer prior to version 9 which do not support rounded corners natively.
+     *
+     * The extra space taken up by this framing is available from the read only property {@link #frameSize}.
      */
 
 <span id='Ext-AbstractComponent-property-frameSize'>    /**
-</span>     * &lt;p&gt;Read-only property indicating the width of any framing elements which were added within the encapsulating element
-     * to provide graphical, rounded borders. See the {@link #frame} config.&lt;/p&gt;
-     * &lt;p&gt; This is an object containing the frame width in pixels for all four sides of the Component containing
-     * the following properties:&lt;/p&gt;&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
-     * &lt;li&gt;&lt;code&gt;top&lt;/code&gt; The width of the top framing element in pixels.&lt;/li&gt;
-     * &lt;li&gt;&lt;code&gt;right&lt;/code&gt; The width of the right framing element in pixels.&lt;/li&gt;
-     * &lt;li&gt;&lt;code&gt;bottom&lt;/code&gt; The width of the bottom framing element in pixels.&lt;/li&gt;
-     * &lt;li&gt;&lt;code&gt;left&lt;/code&gt; The width of the left framing element in pixels.&lt;/li&gt;
-     * &lt;/ul&gt;&lt;/div&gt;
-     * @property frameSize
-     * @type {Object}
+</span>     * @property {Object} frameSize
+     * Read-only property indicating the width of any framing elements which were added within the encapsulating element
+     * to provide graphical, rounded borders. See the {@link #frame} config.
+     *
+     * This is an object containing the frame width in pixels for all four sides of the Component containing the
+     * following properties:
+     *
+     * @property {Number} frameSize.top The width of the top framing element in pixels.
+     * @property {Number} frameSize.right The width of the right framing element in pixels.
+     * @property {Number} frameSize.bottom The width of the bottom framing element in pixels.
+     * @property {Number} frameSize.left The width of the left framing element in pixels.
      */
 
 <span id='Ext-AbstractComponent-cfg-componentLayout'>    /**
 </span>     * @cfg {String/Object} componentLayout
-     * &lt;p&gt;The sizing and positioning of a Component's internal Elements is the responsibility of
-     * the Component's layout manager which sizes a Component's internal structure in response to the Component being sized.&lt;/p&gt;
-     * &lt;p&gt;Generally, developers will not use this configuration as all provided Components which need their internal
-     * elements sizing (Such as {@link Ext.form.field.Base input fields}) come with their own componentLayout managers.&lt;/p&gt;
-     * &lt;p&gt;The {@link Ext.layout.container.Auto default layout manager} will be used on instances of the base Ext.Component class
-     * which simply sizes the Component's encapsulating element to the height and width specified in the {@link #setSize} method.&lt;/p&gt;
+     * The sizing and positioning of a Component's internal Elements is the responsibility of the Component's layout
+     * manager which sizes a Component's internal structure in response to the Component being sized.
+     *
+     * Generally, developers will not use this configuration as all provided Components which need their internal
+     * elements sizing (Such as {@link Ext.form.field.Base input fields}) come with their own componentLayout managers.
+     *
+     * The {@link Ext.layout.container.Auto default layout manager} will be used on instances of the base Ext.Component
+     * class which simply sizes the Component's encapsulating element to the height and width specified in the
+     * {@link #setSize} method.
      */
 
 <span id='Ext-AbstractComponent-cfg-tpl'>    /**
-</span>     * @cfg {Mixed} tpl
-     * An &lt;bold&gt;{@link Ext.Template}&lt;/bold&gt;, &lt;bold&gt;{@link Ext.XTemplate}&lt;/bold&gt;
-     * or an array of strings to form an Ext.XTemplate.
-     * Used in conjunction with the &lt;code&gt;{@link #data}&lt;/code&gt; and
-     * &lt;code&gt;{@link #tplWriteMode}&lt;/code&gt; configurations.
+</span>     * @cfg {Ext.XTemplate/Ext.Template/String/String[]} tpl
+     * An {@link Ext.Template}, {@link Ext.XTemplate} or an array of strings to form an Ext.XTemplate. Used in
+     * conjunction with the `{@link #data}` and `{@link #tplWriteMode}` configurations.
      */
 
 <span id='Ext-AbstractComponent-cfg-data'>    /**
-</span>     * @cfg {Mixed} data
-     * The initial set of data to apply to the &lt;code&gt;{@link #tpl}&lt;/code&gt; to
-     * update the content area of the Component.
+</span>     * @cfg {Object} data
+     * The initial set of data to apply to the `{@link #tpl}` to update the content area of the Component.
+     */
+
+<span id='Ext-AbstractComponent-cfg-xtype'>    /**
+</span>     * @cfg {String} xtype
+     * The `xtype` configuration option can be used to optimize Component creation and rendering. It serves as a
+     * shortcut to the full componet name. For example, the component `Ext.button.Button` has an xtype of `button`.
+     *
+     * You can define your own xtype on a custom {@link Ext.Component component} by specifying the
+     * {@link Ext.Class#alias alias} config option with a prefix of `widget`. For example:
+     *
+     *     Ext.define('PressMeButton', {
+     *         extend: 'Ext.button.Button',
+     *         alias: 'widget.pressmebutton',
+     *         text: 'Press Me'
+     *     })
+     *
+     * Any Component can be created implicitly as an object config with an xtype specified, allowing it to be
+     * declared and passed into the rendering pipeline without actually being instantiated as an object. Not only is
+     * rendering deferred, but the actual creation of the object itself is also deferred, saving memory and resources
+     * until they are actually needed. In complex, nested layouts containing many Components, this can make a
+     * noticeable improvement in performance.
+     *
+     *     // Explicit creation of contained Components:
+     *     var panel = new Ext.Panel({
+     *        ...
+     *        items: [
+     *           Ext.create('Ext.button.Button', {
+     *              text: 'OK'
+     *           })
+     *        ]
+     *     };
+     *
+     *     // Implicit creation using xtype:
+     *     var panel = new Ext.Panel({
+     *        ...
+     *        items: [{
+     *           xtype: 'button',
+     *           text: 'OK'
+     *        }]
+     *     };
+     *
+     * In the first example, the button will always be created immediately during the panel's initialization. With
+     * many added Components, this approach could potentially slow the rendering of the page. In the second example,
+     * the button will not be created or rendered until the panel is actually displayed in the browser. If the panel
+     * is never displayed (for example, if it is a tab that remains hidden) then the button will never be created and
+     * will never consume any resources whatsoever.
      */
 
 <span id='Ext-AbstractComponent-cfg-tplWriteMode'>    /**
-</span>     * @cfg {String} tplWriteMode The Ext.(X)Template method to use when
-     * updating the content area of the Component. Defaults to &lt;code&gt;'overwrite'&lt;/code&gt;
-     * (see &lt;code&gt;{@link Ext.XTemplate#overwrite}&lt;/code&gt;).
+</span>     * @cfg {String} tplWriteMode
+     * The Ext.(X)Template method to use when updating the content area of the Component.
+     * See `{@link Ext.XTemplate#overwrite}` for information on default mode.
      */
     tplWriteMode: 'overwrite',
 
 <span id='Ext-AbstractComponent-cfg-baseCls'>    /**
-</span>     * @cfg {String} baseCls
-     * The base CSS class to apply to this components's element. This will also be prepended to
-     * elements within this component like Panel's body will get a class x-panel-body. This means
-     * that if you create a subclass of Panel, and you want it to get all the Panels styling for the
-     * element and the body, you leave the baseCls x-panel and use componentCls to add specific styling for this
-     * component.
+</span>     * @cfg {String} [baseCls='x-component']
+     * The base CSS class to apply to this components's element. This will also be prepended to elements within this
+     * component like Panel's body will get a class x-panel-body. This means that if you create a subclass of Panel, and
+     * you want it to get all the Panels styling for the element and the body, you leave the baseCls x-panel and use
+     * componentCls to add specific styling for this component.
      */
     baseCls: Ext.baseCSSPrefix + 'component',
 
 <span id='Ext-AbstractComponent-cfg-componentCls'>    /**
 </span>     * @cfg {String} componentCls
-     * CSS Class to be added to a components root level element to give distinction to it
-     * via styling.
+     * CSS Class to be added to a components root level element to give distinction to it via styling.
      */
 
 <span id='Ext-AbstractComponent-cfg-cls'>    /**
-</span>     * @cfg {String} cls
-     * An optional extra CSS class that will be added to this component's Element (defaults to '').  This can be
-     * useful for adding customized styles to the component or any of its children using standard CSS rules.
+</span>     * @cfg {String} [cls='']
+     * An optional extra CSS class that will be added to this component's Element. This can be useful
+     * for adding customized styles to the component or any of its children using standard CSS rules.
      */
 
 <span id='Ext-AbstractComponent-cfg-overCls'>    /**
-</span>     * @cfg {String} overCls
-     * An optional extra CSS class that will be added to this component's Element when the mouse moves
-     * over the Element, and removed when the mouse moves out. (defaults to '').  This can be
-     * useful for adding customized 'active' or 'hover' styles to the component or any of its children using standard CSS rules.
+</span>     * @cfg {String} [overCls='']
+     * An optional extra CSS class that will be added to this component's Element when the mouse moves over the Element,
+     * and removed when the mouse moves out. This can be useful for adding customized 'active' or 'hover' styles to the
+     * component or any of its children using standard CSS rules.
      */
 
 <span id='Ext-AbstractComponent-cfg-disabledCls'>    /**
-</span>     * @cfg {String} disabledCls
+</span>     * @cfg {String} [disabledCls='x-item-disabled']
      * CSS class to add when the Component is disabled. Defaults to 'x-item-disabled'.
      */
     disabledCls: Ext.baseCSSPrefix + 'item-disabled',
 
 <span id='Ext-AbstractComponent-cfg-ui'>    /**
-</span>     * @cfg {String/Array} ui
+</span>     * @cfg {String/String[]} ui
      * A set style for a component. Can be a string or an Array of multiple strings (UIs)
      */
     ui: 'default',
 
 <span id='Ext-AbstractComponent-cfg-uiCls'>    /**
-</span>     * @cfg {Array} uiCls
+</span>     * @cfg {String[]} uiCls
      * An array of of classNames which are currently applied to this component
      * @private
      */
@@ -337,31 +454,30 @@ and a property `descEl` referencing the `div` Element which contains the descrip
 
 <span id='Ext-AbstractComponent-cfg-style'>    /**
 </span>     * @cfg {String} style
-     * A custom style specification to be applied to this component's Element.  Should be a valid argument to
-     * {@link Ext.core.Element#applyStyles}.
-     * &lt;pre&gt;&lt;code&gt;
-        new Ext.panel.Panel({
-            title: 'Some Title',
-            renderTo: Ext.getBody(),
-            width: 400, height: 300,
-            layout: 'form',
-            items: [{
-                xtype: 'textarea',
-                style: {
-                    width: '95%',
-                    marginBottom: '10px'
-                }
-            },
-            new Ext.button.Button({
-                text: 'Send',
-                minWidth: '100',
-                style: {
-                    marginBottom: '10px'
-                }
-            })
-            ]
-        });
-     &lt;/code&gt;&lt;/pre&gt;
+     * A custom style specification to be applied to this component's Element. Should be a valid argument to
+     * {@link Ext.Element#applyStyles}.
+     *
+     *     new Ext.panel.Panel({
+     *         title: 'Some Title',
+     *         renderTo: Ext.getBody(),
+     *         width: 400, height: 300,
+     *         layout: 'form',
+     *         items: [{
+     *             xtype: 'textarea',
+     *             style: {
+     *                 width: '95%',
+     *                 marginBottom: '10px'
+     *             }
+     *         },
+     *         new Ext.button.Button({
+     *             text: 'Send',
+     *             minWidth: '100',
+     *             style: {
+     *                 marginBottom: '10px'
+     *             }
+     *         })
+     *         ]
+     *     });
      */
 
 <span id='Ext-AbstractComponent-cfg-width'>    /**
@@ -376,172 +492,191 @@ and a property `descEl` referencing the `div` Element which contains the descrip
 
 <span id='Ext-AbstractComponent-cfg-border'>    /**
 </span>     * @cfg {Number/String} border
-     * Specifies the border for this component. The border can be a single numeric value to apply to all sides or
-     * it can be a CSS style specification for each style, for example: '10 5 3 10'.
+     * Specifies the border for this component. The border can be a single numeric value to apply to all sides or it can
+     * be a CSS style specification for each style, for example: '10 5 3 10'.
      */
 
 <span id='Ext-AbstractComponent-cfg-padding'>    /**
 </span>     * @cfg {Number/String} padding
-     * Specifies the padding for this component. The padding can be a single numeric value to apply to all sides or
-     * it can be a CSS style specification for each style, for example: '10 5 3 10'.
+     * Specifies the padding for this component. The padding can be a single numeric value to apply to all sides or it
+     * can be a CSS style specification for each style, for example: '10 5 3 10'.
      */
 
 <span id='Ext-AbstractComponent-cfg-margin'>    /**
 </span>     * @cfg {Number/String} margin
-     * Specifies the margin for this component. The margin can be a single numeric value to apply to all sides or
-     * it can be a CSS style specification for each style, for example: '10 5 3 10'.
+     * Specifies the margin for this component. The margin can be a single numeric value to apply to all sides or it can
+     * be a CSS style specification for each style, for example: '10 5 3 10'.
      */
 
 <span id='Ext-AbstractComponent-cfg-hidden'>    /**
 </span>     * @cfg {Boolean} hidden
-     * Defaults to false.
+     * True to hide the component.
      */
     hidden: false,
 
 <span id='Ext-AbstractComponent-cfg-disabled'>    /**
 </span>     * @cfg {Boolean} disabled
-     * Defaults to false.
+     * True to disable the component.
      */
     disabled: false,
 
 <span id='Ext-AbstractComponent-cfg-draggable'>    /**
-</span>     * @cfg {Boolean} draggable
+</span>     * @cfg {Boolean} [draggable=false]
      * Allows the component to be dragged.
      */
 
 <span id='Ext-AbstractComponent-property-draggable'>    /**
-</span>     * Read-only property indicating whether or not the component can be dragged
-     * @property draggable
-     * @type {Boolean}
+</span>     * @property {Boolean} draggable
+     * Read-only property indicating whether or not the component can be dragged
      */
     draggable: false,
 
 <span id='Ext-AbstractComponent-cfg-floating'>    /**
 </span>     * @cfg {Boolean} floating
      * Create the Component as a floating and use absolute positioning.
-     * Defaults to false.
+     *
+     * The z-index of floating Components is handled by a ZIndexManager. If you simply render a floating Component into the DOM, it will be managed
+     * by the global {@link Ext.WindowManager WindowManager}.
+     *
+     * If you include a floating Component as a child item of a Container, then upon render, ExtJS will seek an ancestor floating Component to house a new
+     * ZIndexManager instance to manage its descendant floaters. If no floating ancestor can be found, the global WindowManager will be used.
+     *
+     * When a floating Component which has a ZindexManager managing descendant floaters is destroyed, those descendant floaters will also be destroyed.
      */
     floating: false,
 
 <span id='Ext-AbstractComponent-cfg-hideMode'>    /**
 </span>     * @cfg {String} hideMode
-     * A String which specifies how this Component's encapsulating DOM element will be hidden.
-     * Values may be&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
-     * &lt;li&gt;&lt;code&gt;'display'&lt;/code&gt; : The Component will be hidden using the &lt;code&gt;display: none&lt;/code&gt; style.&lt;/li&gt;
-     * &lt;li&gt;&lt;code&gt;'visibility'&lt;/code&gt; : The Component will be hidden using the &lt;code&gt;visibility: hidden&lt;/code&gt; style.&lt;/li&gt;
-     * &lt;li&gt;&lt;code&gt;'offsets'&lt;/code&gt; : The Component will be hidden by absolutely positioning it out of the visible area of the document. This
-     * is useful when a hidden Component must maintain measurable dimensions. Hiding using &lt;code&gt;display&lt;/code&gt; results
-     * in a Component having zero dimensions.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
-     * Defaults to &lt;code&gt;'display'&lt;/code&gt;.
+     * A String which specifies how this Component's encapsulating DOM element will be hidden. Values may be:
+     *
+     *   - `'display'` : The Component will be hidden using the `display: none` style.
+     *   - `'visibility'` : The Component will be hidden using the `visibility: hidden` style.
+     *   - `'offsets'` : The Component will be hidden by absolutely positioning it out of the visible area of the document.
+     *     This is useful when a hidden Component must maintain measurable dimensions. Hiding using `display` results in a
+     *     Component having zero dimensions.
      */
     hideMode: 'display',
 
 <span id='Ext-AbstractComponent-cfg-contentEl'>    /**
 </span>     * @cfg {String} contentEl
-     * &lt;p&gt;Optional. Specify an existing HTML element, or the &lt;code&gt;id&lt;/code&gt; of an existing HTML element to use as the content
-     * for this component.&lt;/p&gt;
-     * &lt;ul&gt;
-     * &lt;li&gt;&lt;b&gt;Description&lt;/b&gt; :
-     * &lt;div class=&quot;sub-desc&quot;&gt;This config option is used to take an existing HTML element and place it in the layout element
-     * of a new component (it simply moves the specified DOM element &lt;i&gt;after the Component is rendered&lt;/i&gt; to use as the content.&lt;/div&gt;&lt;/li&gt;
-     * &lt;li&gt;&lt;b&gt;Notes&lt;/b&gt; :
-     * &lt;div class=&quot;sub-desc&quot;&gt;The specified HTML element is appended to the layout element of the component &lt;i&gt;after any configured
-     * {@link #html HTML} has been inserted&lt;/i&gt;, and so the document will not contain this element at the time the {@link #render} event is fired.&lt;/div&gt;
-     * &lt;div class=&quot;sub-desc&quot;&gt;The specified HTML element used will not participate in any &lt;code&gt;&lt;b&gt;{@link Ext.container.Container#layout layout}&lt;/b&gt;&lt;/code&gt;
-     * scheme that the Component may use. It is just HTML. Layouts operate on child &lt;code&gt;&lt;b&gt;{@link Ext.container.Container#items items}&lt;/b&gt;&lt;/code&gt;.&lt;/div&gt;
-     * &lt;div class=&quot;sub-desc&quot;&gt;Add either the &lt;code&gt;x-hidden&lt;/code&gt; or the &lt;code&gt;x-hide-display&lt;/code&gt; CSS class to
-     * prevent a brief flicker of the content before it is rendered to the panel.&lt;/div&gt;&lt;/li&gt;
-     * &lt;/ul&gt;
+     * Specify an existing HTML element, or the `id` of an existing HTML element to use as the content for this component.
+     *
+     * This config option is used to take an existing HTML element and place it in the layout element of a new component
+     * (it simply moves the specified DOM element _after the Component is rendered_ to use as the content.
+     *
+     * **Notes:**
+     *
+     * The specified HTML element is appended to the layout element of the component _after any configured
+     * {@link #html HTML} has been inserted_, and so the document will not contain this element at the time
+     * the {@link #render} event is fired.
+     *
+     * The specified HTML element used will not participate in any **`{@link Ext.container.Container#layout layout}`**
+     * scheme that the Component may use. It is just HTML. Layouts operate on child
+     * **`{@link Ext.container.Container#items items}`**.
+     *
+     * Add either the `x-hidden` or the `x-hide-display` CSS class to prevent a brief flicker of the content before it
+     * is rendered to the panel.
      */
 
 <span id='Ext-AbstractComponent-cfg-html'>    /**
-</span>     * @cfg {String/Object} html
-     * An HTML fragment, or a {@link Ext.core.DomHelper DomHelper} specification to use as the layout element
-     * content (defaults to ''). The HTML content is added after the component is rendered,
-     * so the document will not contain this HTML at the time the {@link #render} event is fired.
-     * This content is inserted into the body &lt;i&gt;before&lt;/i&gt; any configured {@link #contentEl} is appended.
+</span>     * @cfg {String/Object} [html='']
+     * An HTML fragment, or a {@link Ext.DomHelper DomHelper} specification to use as the layout element content.
+     * The HTML content is added after the component is rendered, so the document will not contain this HTML at the time
+     * the {@link #render} event is fired. This content is inserted into the body _before_ any configured {@link #contentEl}
+     * is appended.
      */
 
 <span id='Ext-AbstractComponent-cfg-styleHtmlContent'>    /**
 </span>     * @cfg {Boolean} styleHtmlContent
      * True to automatically style the html inside the content target of this component (body for panels).
-     * Defaults to false.
      */
     styleHtmlContent: false,
 
 <span id='Ext-AbstractComponent-cfg-styleHtmlCls'>    /**
-</span>     * @cfg {String} styleHtmlCls
+</span>     * @cfg {String} [styleHtmlCls='x-html']
      * The class that is added to the content target when you set styleHtmlContent to true.
-     * Defaults to 'x-html'
      */
     styleHtmlCls: Ext.baseCSSPrefix + 'html',
 
 <span id='Ext-AbstractComponent-cfg-minHeight'>    /**
 </span>     * @cfg {Number} minHeight
-     * &lt;p&gt;The minimum value in pixels which this Component will set its height to.&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; This will override any size management applied by layout managers.&lt;/p&gt;
+     * The minimum value in pixels which this Component will set its height to.
+     *
+     * **Warning:** This will override any size management applied by layout managers.
      */
 <span id='Ext-AbstractComponent-cfg-minWidth'>    /**
 </span>     * @cfg {Number} minWidth
-     * &lt;p&gt;The minimum value in pixels which this Component will set its width to.&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; This will override any size management applied by layout managers.&lt;/p&gt;
+     * The minimum value in pixels which this Component will set its width to.
+     *
+     * **Warning:** This will override any size management applied by layout managers.
      */
 <span id='Ext-AbstractComponent-cfg-maxHeight'>    /**
 </span>     * @cfg {Number} maxHeight
-     * &lt;p&gt;The maximum value in pixels which this Component will set its height to.&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; This will override any size management applied by layout managers.&lt;/p&gt;
+     * The maximum value in pixels which this Component will set its height to.
+     *
+     * **Warning:** This will override any size management applied by layout managers.
      */
 <span id='Ext-AbstractComponent-cfg-maxWidth'>    /**
 </span>     * @cfg {Number} maxWidth
-     * &lt;p&gt;The maximum value in pixels which this Component will set its width to.&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;Warning:&lt;/b&gt; This will override any size management applied by layout managers.&lt;/p&gt;
+     * The maximum value in pixels which this Component will set its width to.
+     *
+     * **Warning:** This will override any size management applied by layout managers.
      */
 
 <span id='Ext-AbstractComponent-cfg-loader'>    /**
 </span>     * @cfg {Ext.ComponentLoader/Object} loader
-     * A configuration object or an instance of a {@link Ext.ComponentLoader} to load remote
-     * content for this Component.
+     * A configuration object or an instance of a {@link Ext.ComponentLoader} to load remote content for this Component.
      */
 
-     // @private
-     allowDomMove: true,
-
-<span id='Ext-AbstractComponent-cfg-autoShow'>     /**
-</span>      * @cfg {Boolean} autoShow True to automatically show the component upon creation.
-      * This config option may only be used for {@link #floating} components or components
-      * that use {@link #autoRender}. Defaults to &lt;tt&gt;false&lt;/tt&gt;.
-      */
-     autoShow: false,
+<span id='Ext-AbstractComponent-cfg-autoShow'>    /**
+</span>     * @cfg {Boolean} autoShow
+     * True to automatically show the component upon creation. This config option may only be used for
+     * {@link #floating} components or components that use {@link #autoRender}. Defaults to false.
+     */
+    autoShow: false,
 
 <span id='Ext-AbstractComponent-cfg-autoRender'>    /**
-</span>     * @cfg {Mixed} autoRender
-     * &lt;p&gt;This config is intended mainly for {@link #floating} Components which may or may not be shown. Instead
-     * of using {@link #renderTo} in the configuration, and rendering upon construction, this allows a Component
-     * to render itself upon first &lt;i&gt;{@link #show}&lt;/i&gt;.&lt;/p&gt;
-     * &lt;p&gt;Specify as &lt;code&gt;true&lt;/code&gt; to have this Component render to the document body upon first show.&lt;/p&gt;
-     * &lt;p&gt;Specify as an element, or the ID of an element to have this Component render to a specific element upon first show.&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;This defaults to &lt;code&gt;true&lt;/code&gt; for the {@link Ext.window.Window Window} class.&lt;/b&gt;&lt;/p&gt;
-     */
-     autoRender: false,
+</span>     * @cfg {Boolean/String/HTMLElement/Ext.Element} autoRender
+     * This config is intended mainly for non-{@link #floating} Components which may or may not be shown. Instead of using
+     * {@link #renderTo} in the configuration, and rendering upon construction, this allows a Component to render itself
+     * upon first _{@link #show}_. If {@link #floating} is true, the value of this config is omited as if it is `true`.
+     *
+     * Specify as `true` to have this Component render to the document body upon first show.
+     *
+     * Specify as an element, or the ID of an element to have this Component render to a specific element upon first
+     * show.
+     *
+     * **This defaults to `true` for the {@link Ext.window.Window Window} class.**
+     */
+    autoRender: false,
+
+    needsLayout: false,
 
-     needsLayout: false,
+    // @private
+    allowDomMove: true,
 
 <span id='Ext-AbstractComponent-cfg-plugins'>    /**
-</span>     * @cfg {Object/Array} plugins
-     * An object or array of objects that will provide custom functionality for this component.  The only
-     * requirement for a valid plugin is that it contain an init method that accepts a reference of type Ext.Component.
-     * When a component is created, if any plugins are available, the component will call the init method on each
-     * plugin, passing a reference to itself.  Each plugin can then call methods or respond to events on the
-     * component as needed to provide its functionality.
+</span>     * @cfg {Object/Object[]} plugins
+     * An object or array of objects that will provide custom functionality for this component. The only requirement for
+     * a valid plugin is that it contain an init method that accepts a reference of type Ext.Component. When a component
+     * is created, if any plugins are available, the component will call the init method on each plugin, passing a
+     * reference to itself. Each plugin can then call methods or respond to events on the component as needed to provide
+     * its functionality.
      */
 
 <span id='Ext-AbstractComponent-property-rendered'>    /**
-</span>     * Read-only property indicating whether or not the component has been rendered.
-     * @property rendered
-     * @type {Boolean}
+</span>     * @property {Boolean} rendered
+     * Read-only property indicating whether or not the component has been rendered.
      */
     rendered: false,
 
+<span id='Ext-AbstractComponent-property-componentLayoutCounter'>    /**
+</span>     * @property {Number} componentLayoutCounter
+     * @private
+     * The number of component layout calls made on this object.
+     */
+    componentLayoutCounter: 0,
+
     weight: 0,
 
     trimRe: /^\s+|\s+$/g,
@@ -549,12 +684,10 @@ and a property `descEl` referencing the `div` Element which contains the descrip
 
 
 <span id='Ext-AbstractComponent-property-maskOnDisable'>    /**
-</span>     * This is an internal flag that you use when creating custom components.
-     * By default this is set to true which means that every component gets a mask when its disabled.
-     * Components like FieldContainer, FieldSet, Field, Button, Tab override this property to false
-     * since they want to implement custom disable logic.
-     * @property maskOnDisable
-     * @type {Boolean}
+</span>     * @property {Boolean} maskOnDisable
+     * This is an internal flag that you use when creating custom components. By default this is set to true which means
+     * that every component gets a mask when its disabled. Components like FieldContainer, FieldSet, Field, Button, Tab
+     * override this property to false since they want to implement custom disable logic.
      */
     maskOnDisable: true,
 
@@ -573,32 +706,30 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         me.addEvents(
 <span id='Ext-AbstractComponent-event-beforeactivate'>            /**
 </span>             * @event beforeactivate
-             * Fires before a Component has been visually activated.
-             * Returning false from an event listener can prevent the activate
-             * from occurring.
+             * Fires before a Component has been visually activated. Returning false from an event listener can prevent
+             * the activate from occurring.
              * @param {Ext.Component} this
              */
-             'beforeactivate',
+            'beforeactivate',
 <span id='Ext-AbstractComponent-event-activate'>            /**
 </span>             * @event activate
              * Fires after a Component has been visually activated.
              * @param {Ext.Component} this
              */
-             'activate',
+            'activate',
 <span id='Ext-AbstractComponent-event-beforedeactivate'>            /**
 </span>             * @event beforedeactivate
-             * Fires before a Component has been visually deactivated.
-             * Returning false from an event listener can prevent the deactivate
-             * from occurring.
+             * Fires before a Component has been visually deactivated. Returning false from an event listener can
+             * prevent the deactivate from occurring.
              * @param {Ext.Component} this
              */
-             'beforedeactivate',
+            'beforedeactivate',
 <span id='Ext-AbstractComponent-event-deactivate'>            /**
 </span>             * @event deactivate
              * Fires after a Component has been visually deactivated.
              * @param {Ext.Component} this
              */
-             'deactivate',
+            'deactivate',
 <span id='Ext-AbstractComponent-event-added'>            /**
 </span>             * @event added
              * Fires after a Component had been added to a Container.
@@ -606,86 +737,88 @@ and a property `descEl` referencing the `div` Element which contains the descrip
              * @param {Ext.container.Container} container Parent Container
              * @param {Number} pos position of Component
              */
-             'added',
+            'added',
 <span id='Ext-AbstractComponent-event-disable'>            /**
 </span>             * @event disable
              * Fires after the component is disabled.
              * @param {Ext.Component} this
              */
-             'disable',
+            'disable',
 <span id='Ext-AbstractComponent-event-enable'>            /**
 </span>             * @event enable
              * Fires after the component is enabled.
              * @param {Ext.Component} this
              */
-             'enable',
+            'enable',
 <span id='Ext-AbstractComponent-event-beforeshow'>            /**
 </span>             * @event beforeshow
-             * Fires before the component is shown when calling the {@link #show} method.
-             * Return false from an event handler to stop the show.
+             * Fires before the component is shown when calling the {@link #show} method. Return false from an event
+             * handler to stop the show.
              * @param {Ext.Component} this
              */
-             'beforeshow',
+            'beforeshow',
 <span id='Ext-AbstractComponent-event-show'>            /**
 </span>             * @event show
              * Fires after the component is shown when calling the {@link #show} method.
              * @param {Ext.Component} this
              */
-             'show',
+            'show',
 <span id='Ext-AbstractComponent-event-beforehide'>            /**
 </span>             * @event beforehide
-             * Fires before the component is hidden when calling the {@link #hide} method.
-             * Return false from an event handler to stop the hide.
+             * Fires before the component is hidden when calling the {@link #hide} method. Return false from an event
+             * handler to stop the hide.
              * @param {Ext.Component} this
              */
-             'beforehide',
+            'beforehide',
 <span id='Ext-AbstractComponent-event-hide'>            /**
 </span>             * @event hide
-             * Fires after the component is hidden.
-             * Fires after the component is hidden when calling the {@link #hide} method.
+             * Fires after the component is hidden. Fires after the component is hidden when calling the {@link #hide}
+             * method.
              * @param {Ext.Component} this
              */
-             'hide',
+            'hide',
 <span id='Ext-AbstractComponent-event-removed'>            /**
 </span>             * @event removed
              * Fires when a component is removed from an Ext.container.Container
              * @param {Ext.Component} this
              * @param {Ext.container.Container} ownerCt Container which holds the component
              */
-             'removed',
+            'removed',
 <span id='Ext-AbstractComponent-event-beforerender'>            /**
 </span>             * @event beforerender
-             * Fires before the component is {@link #rendered}. Return false from an
-             * event handler to stop the {@link #render}.
+             * Fires before the component is {@link #rendered}. Return false from an event handler to stop the
+             * {@link #render}.
              * @param {Ext.Component} this
              */
-             'beforerender',
+            'beforerender',
 <span id='Ext-AbstractComponent-event-render'>            /**
 </span>             * @event render
              * Fires after the component markup is {@link #rendered}.
              * @param {Ext.Component} this
              */
-             'render',
+            'render',
 <span id='Ext-AbstractComponent-event-afterrender'>            /**
 </span>             * @event afterrender
-             * &lt;p&gt;Fires after the component rendering is finished.&lt;/p&gt;
-             * &lt;p&gt;The afterrender event is fired after this Component has been {@link #rendered}, been postprocesed
-             * by any afterRender method defined for the Component.&lt;/p&gt;
+             * Fires after the component rendering is finished.
+             *
+             * The afterrender event is fired after this Component has been {@link #rendered}, been postprocesed by any
+             * afterRender method defined for the Component.
              * @param {Ext.Component} this
              */
-             'afterrender',
+            'afterrender',
 <span id='Ext-AbstractComponent-event-beforedestroy'>            /**
 </span>             * @event beforedestroy
-             * Fires before the component is {@link #destroy}ed. Return false from an event handler to stop the {@link #destroy}.
+             * Fires before the component is {@link #destroy}ed. Return false from an event handler to stop the
+             * {@link #destroy}.
              * @param {Ext.Component} this
              */
-             'beforedestroy',
+            'beforedestroy',
 <span id='Ext-AbstractComponent-event-destroy'>            /**
 </span>             * @event destroy
              * Fires after the component is {@link #destroy}ed.
              * @param {Ext.Component} this
              */
-             'destroy',
+            'destroy',
 <span id='Ext-AbstractComponent-event-resize'>            /**
 </span>             * @event resize
              * Fires after the component is resized.
@@ -693,7 +826,7 @@ and a property `descEl` referencing the `div` Element which contains the descrip
              * @param {Number} adjWidth The box-adjusted width that was set
              * @param {Number} adjHeight The box-adjusted height that was set
              */
-             'resize',
+            'resize',
 <span id='Ext-AbstractComponent-event-move'>            /**
 </span>             * @event move
              * Fires after the component is moved.
@@ -701,7 +834,7 @@ and a property `descEl` referencing the `div` Element which contains the descrip
              * @param {Number} x The new x position
              * @param {Number} y The new y position
              */
-             'move'
+            'move'
         );
 
         me.getId();
@@ -713,9 +846,7 @@ and a property `descEl` referencing the `div` Element which contains the descrip
 
         if (me.plugins) {
             me.plugins = [].concat(me.plugins);
-            for (i = 0, len = me.plugins.length; i &lt; len; i++) {
-                me.plugins[i] = me.constructPlugin(me.plugins[i]);
-            }
+            me.constructPlugins();
         }
 
         me.initComponent();
@@ -762,16 +893,25 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         //&lt;/debug&gt;
     },
 
-    initComponent: Ext.emptyFn,
+    initComponent: function () {
+        // This is called again here to allow derived classes to add plugin configs to the
+        // plugins array before calling down to this, the base initComponent.
+        this.constructPlugins();
+    },
 
 <span id='Ext-AbstractComponent-method-getState'>    /**
-</span>     * &lt;/p&gt;The supplied default state gathering method for the AbstractComponent class.&lt;/p&gt;
-     * This method returns dimension setings such as &lt;code&gt;flex&lt;/code&gt;, &lt;code&gt;anchor&lt;/code&gt;, &lt;code&gt;width&lt;/code&gt;
-     * and &lt;code&gt;height&lt;/code&gt; along with &lt;code&gt;collapsed&lt;/code&gt; state.&lt;/p&gt;
-     * &lt;p&gt;Subclasses which implement more complex state should call the superclass's implementation, and apply their state
-     * to the result if this basic state is to be saved.&lt;/p&gt;
-     * &lt;p&gt;Note that Component state will only be saved if the Component has a {@link #stateId} and there as a StateProvider
-     * configured for the document.&lt;/p&gt;
+</span>     * The supplied default state gathering method for the AbstractComponent class.
+     *
+     * This method returns dimension settings such as `flex`, `anchor`, `width` and `height` along with `collapsed`
+     * state.
+     *
+     * Subclasses which implement more complex state should call the superclass's implementation, and apply their state
+     * to the result if this basic state is to be saved.
+     *
+     * Note that Component state will only be saved if the Component has a {@link #stateId} and there as a StateProvider
+     * configured for the document.
+     *
+     * @return {Object}
      */
     getState: function() {
         var me = this,
@@ -798,7 +938,15 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         // If we have flex, only store the perpendicular dimension.
         if (layout &amp;&amp; me.flex) {
             state.flex = me.flex;
-            state[layout.perpendicularPrefix] = me['get' + layout.perpendicularPrefixCap]();
+            if (layout.perpendicularPrefix) {
+                state[layout.perpendicularPrefix] = me['get' + layout.perpendicularPrefixCap]();
+            } else {
+                //&lt;debug&gt;
+                if (Ext.isDefined(Ext.global.console)) {
+                    Ext.global.console.warn('Ext.Component: Specified a flex value on a component not inside a Box layout');
+                }
+                //&lt;/debug&gt;
+            }
         }
         // If we have anchor, only store dimensions which are *not* being anchored
         else if (layout &amp;&amp; me.anchor) {
@@ -891,11 +1039,13 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-findLayoutController'>    /**
-</span>     * &lt;p&gt;This method finds the topmost active layout who's processing will eventually determine the size and position of this
-     * Component.&lt;p&gt;
-     * &lt;p&gt;This method is useful when dynamically adding Components into Containers, and some processing must take place after the
-     * final sizing and positioning of the Component has been performed.&lt;/p&gt;
-     * @returns
+</span>     * This method finds the topmost active layout who's processing will eventually determine the size and position of
+     * this Component.
+     *
+     * This method is useful when dynamically adding Components into Containers, and some processing must take place
+     * after the final sizing and positioning of the Component has been performed.
+     *
+     * @return {Ext.Component}
      */
     findLayoutController: function() {
         return this.findParentBy(function(c) {
@@ -927,6 +1077,23 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         return plugin;
     },
 
+<span id='Ext-AbstractComponent-method-constructPlugins'>    /**
+</span>     * Ensures that the plugins array contains fully constructed plugin instances. This converts any configs into their
+     * appropriate instances.
+     */
+    constructPlugins: function() {
+        var me = this,
+            plugins = me.plugins,
+            i, len;
+
+        if (plugins) {
+            for (i = 0, len = plugins.length; i &lt; len; i++) {
+                // this just returns already-constructed plugin instances...
+                plugins[i] = me.constructPlugin(plugins[i]);
+            }
+        }
+    },
+
     // @private
     initPlugin : function(plugin) {
         plugin.init(this);
@@ -935,9 +1102,9 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-doAutoRender'>    /**
-</span>     * Handles autoRender.
-     * Floating Components may have an ownerCt. If they are asking to be constrained, constrain them within that
-     * ownerCt, and have their z-index managed locally. Floating Components are always rendered to document.body
+</span>     * Handles autoRender. Floating Components may have an ownerCt. If they are asking to be constrained, constrain them
+     * within that ownerCt, and have their z-index managed locally. Floating Components are always rendered to
+     * document.body
      */
     doAutoRender: function() {
         var me = this;
@@ -953,6 +1120,11 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         var me = this;
 
         if (!me.rendered &amp;&amp; me.fireEvent('beforerender', me) !== false) {
+
+            // Flag set during the render process.
+            // It can be used to inhibit event-driven layout calls during the render phase
+            me.rendering = true;
+
             // If this.el is defined, we want to make sure we are dealing with
             // an Ext Element.
             if (me.el) {
@@ -970,7 +1142,7 @@ and a property `descEl` referencing the `div` Element which contains the descrip
 
             // Tell the encapsulating element to hide itself in the way the Component is configured to hide
             // This means DISPLAY, VISIBILITY or OFFSETS.
-            me.el.setVisibilityMode(Ext.core.Element[me.hideMode.toUpperCase()]);
+            me.el.setVisibilityMode(Ext.Element[me.hideMode.toUpperCase()]);
 
             if (me.overCls) {
                 me.el.hover(me.addOverCls, me.removeOverCls, me);
@@ -996,6 +1168,9 @@ and a property `descEl` referencing the `div` Element which contains the descrip
                 // pass silent so the event doesn't fire the first time.
                 me.disable(true);
             }
+
+            // Delete the flag once the rendering is done.
+            delete me.rendering;
         }
         return me;
     },
@@ -1011,10 +1186,10 @@ and a property `descEl` referencing the `div` Element which contains the descrip
 
         if (!el) {
             if (position) {
-                el = Ext.core.DomHelper.insertBefore(position, me.getElConfig(), true);
+                el = Ext.DomHelper.insertBefore(position, me.getElConfig(), true);
             }
             else {
-                el = Ext.core.DomHelper.append(container, me.getElConfig(), true);
+                el = Ext.DomHelper.append(container, me.getElConfig(), true);
             }
         }
         else if (me.allowDomMove !== false) {
@@ -1077,9 +1252,17 @@ and a property `descEl` referencing the `div` Element which contains the descrip
 
         me.getComponentLayout();
 
-        // Set the size if a size is configured, or if this is the outermost Container
-        if (!me.ownerCt || (me.height || me.width)) {
+        // Set the size if a size is configured, or if this is the outermost Container.
+        // Also, if this is a collapsed Panel, it needs an initial component layout
+        // to lay out its header so that it can have a height determined.
+        if (me.collapsed || (!me.ownerCt || (me.height || me.width))) {
             me.setSize(me.width, me.height);
+        } else {
+            // It is expected that child items be rendered before this method returns and
+            // the afterrender event fires. Since we aren't going to do the layout now, we
+            // must render the child items. This is handled implicitly above in the layout
+            // caused by setSize.
+            me.renderChildren();
         }
 
         // For floaters, calculate x and y if they aren't defined by aligning
@@ -1105,8 +1288,36 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         }
     },
 
+<span id='Ext-AbstractComponent-method-registerFloatingItem'>    /**
+</span>     * @private
+     * Called by Component#doAutoRender
+     *
+     * Register a Container configured `floating: true` with this Component's {@link Ext.ZIndexManager ZIndexManager}.
+     *
+     * Components added in ths way will not participate in any layout, but will be rendered
+     * upon first show in the way that {@link Ext.window.Window Window}s are.
+     */
+    registerFloatingItem: function(cmp) {
+        var me = this;
+        if (!me.floatingItems) {
+            me.floatingItems = Ext.create('Ext.ZIndexManager', me);
+        }
+        me.floatingItems.register(cmp);
+    },
+
+    renderChildren: function () {
+        var me = this,
+            layout = me.getComponentLayout();
+
+        me.suspendLayout = true;
+        layout.renderChildren();
+        delete me.suspendLayout;
+    },
+
     frameCls: Ext.baseCSSPrefix + 'frame',
 
+    frameIdRegex: /[-]frame\d+[TMB][LCR]$/,
+
     frameElementCls: {
         tl: [],
         tc: [],
@@ -1121,21 +1332,21 @@ and a property `descEl` referencing the `div` Element which contains the descrip
 
     frameTpl: [
         '&lt;tpl if=&quot;top&quot;&gt;',
-            '&lt;tpl if=&quot;left&quot;&gt;&lt;div class=&quot;{frameCls}-tl {baseCls}-tl {baseCls}-{ui}-tl&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tl&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tl}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
-                '&lt;tpl if=&quot;right&quot;&gt;&lt;div class=&quot;{frameCls}-tr {baseCls}-tr {baseCls}-{ui}-tr&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tr&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tr}; padding-right: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
-                    '&lt;div class=&quot;{frameCls}-tc {baseCls}-tc {baseCls}-{ui}-tc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tc}; height: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/div&gt;',
+            '&lt;tpl if=&quot;left&quot;&gt;&lt;div id=&quot;{fgid}TL&quot; class=&quot;{frameCls}-tl {baseCls}-tl {baseCls}-{ui}-tl&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tl&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tl}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
+                '&lt;tpl if=&quot;right&quot;&gt;&lt;div id=&quot;{fgid}TR&quot; class=&quot;{frameCls}-tr {baseCls}-tr {baseCls}-{ui}-tr&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tr&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tr}; padding-right: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
+                    '&lt;div id=&quot;{fgid}TC&quot; class=&quot;{frameCls}-tc {baseCls}-tc {baseCls}-{ui}-tc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tc}; height: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/div&gt;',
                 '&lt;tpl if=&quot;right&quot;&gt;&lt;/div&gt;&lt;/tpl&gt;',
             '&lt;tpl if=&quot;left&quot;&gt;&lt;/div&gt;&lt;/tpl&gt;',
         '&lt;/tpl&gt;',
-        '&lt;tpl if=&quot;left&quot;&gt;&lt;div class=&quot;{frameCls}-ml {baseCls}-ml {baseCls}-{ui}-ml&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-ml&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {ml}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
-            '&lt;tpl if=&quot;right&quot;&gt;&lt;div class=&quot;{frameCls}-mr {baseCls}-mr {baseCls}-{ui}-mr&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-mr&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {mr}; padding-right: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
-                '&lt;div class=&quot;{frameCls}-mc {baseCls}-mc {baseCls}-{ui}-mc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-mc&lt;/tpl&gt;&lt;/tpl&gt;&quot; role=&quot;presentation&quot;&gt;&lt;/div&gt;',
+        '&lt;tpl if=&quot;left&quot;&gt;&lt;div id=&quot;{fgid}ML&quot; class=&quot;{frameCls}-ml {baseCls}-ml {baseCls}-{ui}-ml&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-ml&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {ml}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
+            '&lt;tpl if=&quot;right&quot;&gt;&lt;div id=&quot;{fgid}MR&quot; class=&quot;{frameCls}-mr {baseCls}-mr {baseCls}-{ui}-mr&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-mr&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {mr}; padding-right: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
+                '&lt;div id=&quot;{fgid}MC&quot; class=&quot;{frameCls}-mc {baseCls}-mc {baseCls}-{ui}-mc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-mc&lt;/tpl&gt;&lt;/tpl&gt;&quot; role=&quot;presentation&quot;&gt;&lt;/div&gt;',
             '&lt;tpl if=&quot;right&quot;&gt;&lt;/div&gt;&lt;/tpl&gt;',
         '&lt;tpl if=&quot;left&quot;&gt;&lt;/div&gt;&lt;/tpl&gt;',
         '&lt;tpl if=&quot;bottom&quot;&gt;',
-            '&lt;tpl if=&quot;left&quot;&gt;&lt;div class=&quot;{frameCls}-bl {baseCls}-bl {baseCls}-{ui}-bl&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-bl&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {bl}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
-                '&lt;tpl if=&quot;right&quot;&gt;&lt;div class=&quot;{frameCls}-br {baseCls}-br {baseCls}-{ui}-br&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-br&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {br}; padding-right: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
-                    '&lt;div class=&quot;{frameCls}-bc {baseCls}-bc {baseCls}-{ui}-bc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-bc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {bc}; height: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/div&gt;',
+            '&lt;tpl if=&quot;left&quot;&gt;&lt;div id=&quot;{fgid}BL&quot; class=&quot;{frameCls}-bl {baseCls}-bl {baseCls}-{ui}-bl&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-bl&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {bl}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
+                '&lt;tpl if=&quot;right&quot;&gt;&lt;div id=&quot;{fgid}BR&quot; class=&quot;{frameCls}-br {baseCls}-br {baseCls}-{ui}-br&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-br&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {br}; padding-right: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/tpl&gt;',
+                    '&lt;div id=&quot;{fgid}BC&quot; class=&quot;{frameCls}-bc {baseCls}-bc {baseCls}-{ui}-bc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-bc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {bc}; height: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/div&gt;',
                 '&lt;tpl if=&quot;right&quot;&gt;&lt;/div&gt;&lt;/tpl&gt;',
             '&lt;tpl if=&quot;left&quot;&gt;&lt;/div&gt;&lt;/tpl&gt;',
         '&lt;/tpl&gt;'
@@ -1145,21 +1356,21 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         '&lt;table&gt;&lt;tbody&gt;',
             '&lt;tpl if=&quot;top&quot;&gt;',
                 '&lt;tr&gt;',
-                    '&lt;tpl if=&quot;left&quot;&gt;&lt;td class=&quot;{frameCls}-tl {baseCls}-tl {baseCls}-{ui}-tl&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tl&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tl}; padding-left:{frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
-                    '&lt;td class=&quot;{frameCls}-tc {baseCls}-tc {baseCls}-{ui}-tc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tc}; height: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;',
-                    '&lt;tpl if=&quot;right&quot;&gt;&lt;td class=&quot;{frameCls}-tr {baseCls}-tr {baseCls}-{ui}-tr&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tr&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tr}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
+                    '&lt;tpl if=&quot;left&quot;&gt;&lt;td id=&quot;{fgid}TL&quot; class=&quot;{frameCls}-tl {baseCls}-tl {baseCls}-{ui}-tl&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tl&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tl}; padding-left:{frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
+                    '&lt;td id=&quot;{fgid}TC&quot; class=&quot;{frameCls}-tc {baseCls}-tc {baseCls}-{ui}-tc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tc}; height: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;',
+                    '&lt;tpl if=&quot;right&quot;&gt;&lt;td id=&quot;{fgid}TR&quot; class=&quot;{frameCls}-tr {baseCls}-tr {baseCls}-{ui}-tr&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-tr&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {tr}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
                 '&lt;/tr&gt;',
             '&lt;/tpl&gt;',
             '&lt;tr&gt;',
-                '&lt;tpl if=&quot;left&quot;&gt;&lt;td class=&quot;{frameCls}-ml {baseCls}-ml {baseCls}-{ui}-ml&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-ml&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {ml}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
-                '&lt;td class=&quot;{frameCls}-mc {baseCls}-mc {baseCls}-{ui}-mc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-mc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: 0 0;&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;',
-                '&lt;tpl if=&quot;right&quot;&gt;&lt;td class=&quot;{frameCls}-mr {baseCls}-mr {baseCls}-{ui}-mr&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-mr&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {mr}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
+                '&lt;tpl if=&quot;left&quot;&gt;&lt;td id=&quot;{fgid}ML&quot; class=&quot;{frameCls}-ml {baseCls}-ml {baseCls}-{ui}-ml&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-ml&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {ml}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
+                '&lt;td id=&quot;{fgid}MC&quot; class=&quot;{frameCls}-mc {baseCls}-mc {baseCls}-{ui}-mc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-mc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: 0 0;&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;',
+                '&lt;tpl if=&quot;right&quot;&gt;&lt;td id=&quot;{fgid}MR&quot; class=&quot;{frameCls}-mr {baseCls}-mr {baseCls}-{ui}-mr&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-mr&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {mr}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
             '&lt;/tr&gt;',
             '&lt;tpl if=&quot;bottom&quot;&gt;',
                 '&lt;tr&gt;',
-                    '&lt;tpl if=&quot;left&quot;&gt;&lt;td class=&quot;{frameCls}-bl {baseCls}-bl {baseCls}-{ui}-bl&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-bl&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {bl}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
-                    '&lt;td class=&quot;{frameCls}-bc {baseCls}-bc {baseCls}-{ui}-bc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-bc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {bc}; height: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;',
-                    '&lt;tpl if=&quot;right&quot;&gt;&lt;td class=&quot;{frameCls}-br {baseCls}-br {baseCls}-{ui}-br&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-br&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {br}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
+                    '&lt;tpl if=&quot;left&quot;&gt;&lt;td id=&quot;{fgid}BL&quot; class=&quot;{frameCls}-bl {baseCls}-bl {baseCls}-{ui}-bl&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-bl&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {bl}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
+                    '&lt;td id=&quot;{fgid}BC&quot; class=&quot;{frameCls}-bc {baseCls}-bc {baseCls}-{ui}-bc&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-bc&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {bc}; height: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;',
+                    '&lt;tpl if=&quot;right&quot;&gt;&lt;td id=&quot;{fgid}BR&quot; class=&quot;{frameCls}-br {baseCls}-br {baseCls}-{ui}-br&lt;tpl if=&quot;uiCls&quot;&gt;&lt;tpl for=&quot;uiCls&quot;&gt; {parent.baseCls}-{parent.ui}-{.}-br&lt;/tpl&gt;&lt;/tpl&gt;&quot; style=&quot;background-position: {br}; padding-left: {frameWidth}px&quot; role=&quot;presentation&quot;&gt;&lt;/td&gt;&lt;/tpl&gt;',
                 '&lt;/tr&gt;',
             '&lt;/tpl&gt;',
         '&lt;/tbody&gt;&lt;/table&gt;'
@@ -1176,11 +1387,18 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         var me = this,
             frameInfo = me.getFrameInfo(),
             frameWidth = frameInfo.width,
-            frameTpl = me.getFrameTpl(frameInfo.table);
+            frameTpl = me.getFrameTpl(frameInfo.table),
+            frameGenId;
 
         if (me.frame) {
+            // since we render id's into the markup and id's NEED to be unique, we have a
+            // simple strategy for numbering their generations.
+            me.frameGenId = frameGenId = (me.frameGenId || 0) + 1;
+            frameGenId = me.id + '-frame' + frameGenId;
+
             // Here we render the frameTpl to this component. This inserts the 9point div or the table framing.
             frameTpl.insertFirst(me.el, Ext.apply({}, {
+                fgid:       frameGenId,
                 ui:         me.ui,
                 uiCls:      me.uiCls,
                 frameCls:   me.frameCls,
@@ -1195,17 +1413,14 @@ and a property `descEl` referencing the `div` Element which contains the descrip
             // The frameBody is returned in getTargetEl, so that layouts render items to the correct target.=
             me.frameBody = me.el.down('.' + me.frameCls + '-mc');
 
-            // Add the render selectors for each of the frame elements
-            Ext.apply(me.renderSelectors, {
-                frameTL: '.' + me.baseCls + '-tl',
-                frameTC: '.' + me.baseCls + '-tc',
-                frameTR: '.' + me.baseCls + '-tr',
-                frameML: '.' + me.baseCls + '-ml',
-                frameMC: '.' + me.baseCls + '-mc',
-                frameMR: '.' + me.baseCls + '-mr',
-                frameBL: '.' + me.baseCls + '-bl',
-                frameBC: '.' + me.baseCls + '-bc',
-                frameBR: '.' + me.baseCls + '-br'
+            // Clean out the childEls for the old frame elements (the majority of the els)
+            me.removeChildEls(function (c) {
+                return c.id &amp;&amp; me.frameIdRegex.test(c.id);
+            });
+
+            // Add the childEls for each of the new frame elements
+            Ext.each(['TL','TC','TR','ML','MC','MR','BL','BC','BR'], function (suffix) {
+                me.childEls.push({ name: 'frame' + suffix, id: frameGenId + suffix });
             });
         }
     },
@@ -1397,9 +1612,11 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-initCls'>    /**
-</span>     * &lt;p&gt;Creates an array of class names from the configurations to add to this Component's &lt;code&gt;el&lt;/code&gt; on render.&lt;/p&gt;
-     * &lt;p&gt;Private, but (possibly) used by ComponentQuery for selection by class name if Component is not rendered.&lt;/p&gt;
-     * @return {Array} An array of class names with which the Component's element will be rendered.
+</span>     * Creates an array of class names from the configurations to add to this Component's `el` on render.
+     *
+     * Private, but (possibly) used by ComponentQuery for selection by class name if Component is not rendered.
+     *
+     * @return {String[]} An array of class names with which the Component's element will be rendered.
      * @private
      */
     initCls: function() {
@@ -1432,8 +1649,8 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-setUI'>    /**
-</span>     * Sets the UI for the component. This will remove any existing UIs on the component. It will also
-     * loop through any uiCls set on the component and rename them so they include the new UI
+</span>     * Sets the UI for the component. This will remove any existing UIs on the component. It will also loop through any
+     * uiCls set on the component and rename them so they include the new UI
      * @param {String} ui The new UI for the component
      */
     setUI: function(ui) {
@@ -1478,10 +1695,10 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-addClsWithUI'>    /**
-</span>     * Adds a cls to the uiCls array, which will also call {@link #addUIClsToElement} and adds
-     * to all elements of this component.
-     * @param {String/Array} cls A string or an array of strings to add to the uiCls
-     * @param (Boolean) skip True to skip adding it to the class and do it later (via the return)
+</span>     * Adds a cls to the uiCls array, which will also call {@link #addUIClsToElement} and adds to all elements of this
+     * component.
+     * @param {String/String[]} cls A string or an array of strings to add to the uiCls
+     * @param {Object} skip (Boolean) skip True to skip adding it to the class and do it later (via the return)
      */
     addClsWithUI: function(cls, skip) {
         var me = this,
@@ -1509,9 +1726,9 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-removeClsWithUI'>    /**
-</span>     * Removes a cls to the uiCls array, which will also call {@link #removeUIClsFromElement} and removes
-     * it from all elements of this component.
-     * @param {String/Array} cls A string or an array of strings to remove to the uiCls
+</span>     * Removes a cls to the uiCls array, which will also call {@link #removeUIClsFromElement} and removes it from all
+     * elements of this component.
+     * @param {String/String[]} cls A string or an array of strings to remove to the uiCls
      */
     removeClsWithUI: function(cls, skip) {
         var me = this,
@@ -1549,19 +1766,19 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-addUIClsToElement'>    /**
-</span>     * Method which adds a specified UI + uiCls to the components element.
-     * Can be overridden to remove the UI from more than just the components element.
+</span>     * Method which adds a specified UI + uiCls to the components element. Can be overridden to remove the UI from more
+     * than just the components element.
      * @param {String} ui The UI to remove from the element
      */
     addUIClsToElement: function(cls, force) {
         var me = this,
             result = [],
             frameElementCls = me.frameElementCls;
-        
+
         result.push(Ext.baseCSSPrefix + cls);
         result.push(me.baseCls + '-' + cls);
         result.push(me.baseCls + '-' + me.ui + '-' + cls);
-        
+
         if (!force &amp;&amp; me.frame &amp;&amp; !Ext.supports.CSS3BorderRadius) {
             // define each element of the frame
             var els = ['tl', 'tc', 'tr', 'ml', 'mc', 'mr', 'bl', 'bc', 'br'],
@@ -1589,19 +1806,19 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-removeUIClsFromElement'>    /**
-</span>     * Method which removes a specified UI + uiCls from the components element.
-     * The cls which is added to the element will be: `this.baseCls + '-' + ui`
+</span>     * Method which removes a specified UI + uiCls from the components element. The cls which is added to the element
+     * will be: `this.baseCls + '-' + ui`
      * @param {String} ui The UI to add to the element
      */
     removeUIClsFromElement: function(cls, force) {
         var me = this,
             result = [],
             frameElementCls = me.frameElementCls;
-        
+
         result.push(Ext.baseCSSPrefix + cls);
         result.push(me.baseCls + '-' + cls);
         result.push(me.baseCls + '-' + me.ui + '-' + cls);
-        
+
         if (!force &amp;&amp; me.frame &amp;&amp; !Ext.supports.CSS3BorderRadius) {
             // define each element of the frame
             var els = ['tl', 'tc', 'tr', 'ml', 'mc', 'mr', 'bl', 'bc', 'br'],
@@ -1630,14 +1847,14 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     addUIToElement: function(force) {
         var me = this,
             frameElementCls = me.frameElementCls;
-        
+
         me.addCls(me.baseCls + '-' + me.ui);
-        
+
         if (me.frame &amp;&amp; !Ext.supports.CSS3BorderRadius) {
             // define each element of the frame
             var els = ['tl', 'tc', 'tr', 'ml', 'mc', 'mr', 'bl', 'bc', 'br'],
                 i, el, cls;
-            
+
             // loop through each of them, and if they are defined add the ui
             for (i = 0; i &lt; els.length; i++) {
                 el = me['frame' + els[i].toUpperCase()];
@@ -1660,14 +1877,14 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     removeUIFromElement: function() {
         var me = this,
             frameElementCls = me.frameElementCls;
-        
+
         me.removeCls(me.baseCls + '-' + me.ui);
-        
+
         if (me.frame &amp;&amp; !Ext.supports.CSS3BorderRadius) {
             // define each element of the frame
             var els = ['tl', 'tc', 'tr', 'ml', 'mc', 'mr', 'bl', 'bc', 'br'],
                 i, j, el, cls;
-                
+
             // loop through each of them, and if they are defined add the ui
             for (i = 0; i &lt; els.length; i++) {
                 el = me['frame' + els[i].toUpperCase()];
@@ -1683,16 +1900,22 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
     getElConfig : function() {
+        if (Ext.isString(this.autoEl)) {
+            this.autoEl = {
+                tag: this.autoEl
+            };
+        }
+
         var result = this.autoEl || {tag: 'div'};
         result.id = this.id;
         return result;
     },
 
 <span id='Ext-AbstractComponent-method-getInsertPosition'>    /**
-</span>     * This function takes the position argument passed to onRender and returns a
-     * DOM element that you can use in the insertBefore.
-     * @param {String/Number/Element/HTMLElement} position Index, element id or element you want
-     * to put this component before.
+</span>     * This function takes the position argument passed to onRender and returns a DOM element that you can use in the
+     * insertBefore.
+     * @param {String/Number/Ext.Element/HTMLElement} position Index, element id or element you want to put this
+     * component before.
      * @return {HTMLElement} DOM element that you can use in the insertBefore
      */
     getInsertPosition: function(position) {
@@ -1711,7 +1934,7 @@ and a property `descEl` referencing the `div` Element which contains the descrip
 
 <span id='Ext-AbstractComponent-method-initContainer'>    /**
 </span>     * Adds ctCls to container.
-     * @return {Ext.core.Element} The initialized container
+     * @return {Ext.Element} The initialized container
      * @private
      */
     initContainer: function(container) {
@@ -1743,6 +1966,7 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         var me = this;
 
         return Ext.applyIf(me.renderData, {
+            id: me.id,
             ui: me.ui,
             uiCls: me.uiCls,
             baseCls: me.baseCls,
@@ -1798,14 +2022,14 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-initStyles'>    /**
-</span>     * Function description
+</span>     * Converts style definitions to String.
      * @return {String} A CSS style string with style, padding, margin and border.
      * @private
      */
     initStyles: function() {
         var style = {},
             me = this,
-            Element = Ext.core.Element;
+            Element = Ext.Element;
 
         if (Ext.isString(me.style)) {
             style = Element.parseStyles(me.style);
@@ -1828,8 +2052,7 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-initContent'>    /**
-</span>     * Initializes this components contents. It checks for the properties
-     * html, contentEl and tpl/data.
+</span>     * Initializes this components contents. It checks for the properties html, contentEl and tpl/data.
      * @private
      */
     initContent: function() {
@@ -1839,7 +2062,7 @@ and a property `descEl` referencing the `div` Element which contains the descrip
             pre;
 
         if (me.html) {
-            target.update(Ext.core.DomHelper.markup(me.html));
+            target.update(Ext.DomHelper.markup(me.html));
             delete me.html;
         }
 
@@ -1884,18 +2107,74 @@ and a property `descEl` referencing the `div` Element which contains the descrip
         }
     },
 
+<span id='Ext-AbstractComponent-method-addChildEls'>    /**
+</span>     * Adds each argument passed to this method to the {@link #childEls} array.
+     */
+    addChildEls: function () {
+        var me = this,
+            childEls = me.childEls || (me.childEls = []);
+
+        childEls.push.apply(childEls, arguments);
+    },
+
+<span id='Ext-AbstractComponent-method-removeChildEls'>    /**
+</span>     * Removes items in the childEls array based on the return value of a supplied test function. The function is called
+     * with a entry in childEls and if the test function return true, that entry is removed. If false, that entry is
+     * kept.
+     * @param {Function} testFn The test function.
+     */
+    removeChildEls: function (testFn) {
+        var me = this,
+            old = me.childEls,
+            keepers = (me.childEls = []),
+            n, i, cel;
+
+        for (i = 0, n = old.length; i &lt; n; ++i) {
+            cel = old[i];
+            if (!testFn(cel)) {
+                keepers.push(cel);
+            }
+        }
+    },
+
 <span id='Ext-AbstractComponent-method-applyRenderSelectors'>    /**
-</span>     * Sets references to elements inside the component. E.g body -&gt; x-panel-body
+</span>     * Sets references to elements inside the component. This applies {@link #renderSelectors}
+     * as well as {@link #childEls}.
      * @private
      */
     applyRenderSelectors: function() {
-        var selectors = this.renderSelectors || {},
-            el = this.el.dom,
-            selector;
+        var me = this,
+            childEls = me.childEls,
+            selectors = me.renderSelectors,
+            el = me.el,
+            dom = el.dom,
+            baseId, childName, childId, i, selector;
+
+        if (childEls) {
+            baseId = me.id + '-';
+            for (i = childEls.length; i--; ) {
+                childName = childId = childEls[i];
+                if (typeof(childName) != 'string') {
+                    childId = childName.id || (baseId + childName.itemId);
+                    childName = childName.name;
+                } else {
+                    childId = baseId + childId;
+                }
 
-        for (selector in selectors) {
-            if (selectors.hasOwnProperty(selector) &amp;&amp; selectors[selector]) {
-                this[selector] = Ext.get(Ext.DomQuery.selectNode(selectors[selector], el));
+                // We don't use Ext.get because that is 3x (or more) slower on IE6-8. Since
+                // we know the el's are children of our el we use getById instead:
+                me[childName] = el.getById(childId);
+            }
+        }
+
+        // We still support renderSelectors. There are a few places in the framework that
+        // need them and they are a documented part of the API. In fact, we support mixing
+        // childEls and renderSelectors (no reason not to).
+        if (selectors) {
+            for (selector in selectors) {
+                if (selectors.hasOwnProperty(selector) &amp;&amp; selectors[selector]) {
+                    me[selector] = Ext.get(Ext.DomQuery.selectNode(selectors[selector], dom));
+                }
             }
         }
     },
@@ -1910,13 +2189,14 @@ and a property `descEl` referencing the `div` Element which contains the descrip
     },
 
 <span id='Ext-AbstractComponent-method-up'>    /**
-</span>     * &lt;p&gt;Walks up the &lt;code&gt;ownerCt&lt;/code&gt; axis looking for an ancestor Container which matches
-     * the passed simple selector.&lt;/p&gt;
-     * &lt;p&gt;Example:&lt;pre&gt;&lt;code&gt;
-var owningTabPanel = grid.up('tabpanel');
-&lt;/code&gt;&lt;/pre&gt;
-     * @param {String} selector Optional. The simple selector to test.
-     * @return {Container} The matching ancestor Container (or &lt;code&gt;undefined&lt;/code&gt; if no match was found).
+</span>     * Walks up the `ownerCt` axis looking for an ancestor Container which matches the passed simple selector.
+     *
+     * Example:
+     *
+     *     var owningTabPanel = grid.up('tabpanel');
+     *
+     * @param {String} [selector] The simple selector to test.
+     * @return {Ext.container.Container} The matching ancestor Container (or `undefined` if no match was found).
      */
     up: function(selector) {
         var result = this.ownerCt;
@@ -1931,12 +2211,17 @@ var owningTabPanel = grid.up('tabpanel');
     },
 
 <span id='Ext-AbstractComponent-method-nextSibling'>    /**
-</span>     * &lt;p&gt;Returns the next sibling of this Component.&lt;/p&gt;
-     * &lt;p&gt;Optionally selects the next sibling which matches the passed {@link Ext.ComponentQuery ComponentQuery} selector.&lt;/p&gt;
-     * &lt;p&gt;May also be refered to as &lt;code&gt;&lt;b&gt;next()&lt;/b&gt;&lt;/code&gt;&lt;/p&gt;
-     * &lt;p&gt;Note that this is limited to siblings, and if no siblings of the item match, &lt;code&gt;null&lt;/code&gt; is returned. Contrast with {@link #nextNode}&lt;/p&gt;
-     * @param {String} selector Optional A {@link Ext.ComponentQuery ComponentQuery} selector to filter the following items.
-     * @returns The next sibling (or the next sibling which matches the selector). Returns null if there is no matching sibling.
+</span>     * Returns the next sibling of this Component.
+     *
+     * Optionally selects the next sibling which matches the passed {@link Ext.ComponentQuery ComponentQuery} selector.
+     *
+     * May also be refered to as **`next()`**
+     *
+     * Note that this is limited to siblings, and if no siblings of the item match, `null` is returned. Contrast with
+     * {@link #nextNode}
+     * @param {String} [selector] A {@link Ext.ComponentQuery ComponentQuery} selector to filter the following items.
+     * @return {Ext.Component} The next sibling (or the next sibling which matches the selector).
+     * Returns null if there is no matching sibling.
      */
     nextSibling: function(selector) {
         var o = this.ownerCt, it, last, idx, c;
@@ -1961,12 +2246,18 @@ var owningTabPanel = grid.up('tabpanel');
     },
 
 <span id='Ext-AbstractComponent-method-previousSibling'>    /**
-</span>     * &lt;p&gt;Returns the previous sibling of this Component.&lt;/p&gt;
-     * &lt;p&gt;Optionally selects the previous sibling which matches the passed {@link Ext.ComponentQuery ComponentQuery} selector.&lt;/p&gt;
-     * &lt;p&gt;May also be refered to as &lt;code&gt;&lt;b&gt;prev()&lt;/b&gt;&lt;/code&gt;&lt;/p&gt;
-     * &lt;p&gt;Note that this is limited to siblings, and if no siblings of the item match, &lt;code&gt;null&lt;/code&gt; is returned. Contrast with {@link #previousNode}&lt;/p&gt;
-     * @param {String} selector Optional. A {@link Ext.ComponentQuery ComponentQuery} selector to filter the preceding items.
-     * @returns The previous sibling (or the previous sibling which matches the selector). Returns null if there is no matching sibling.
+</span>     * Returns the previous sibling of this Component.
+     *
+     * Optionally selects the previous sibling which matches the passed {@link Ext.ComponentQuery ComponentQuery}
+     * selector.
+     *
+     * May also be refered to as **`prev()`**
+     *
+     * Note that this is limited to siblings, and if no siblings of the item match, `null` is returned. Contrast with
+     * {@link #previousNode}
+     * @param {String} [selector] A {@link Ext.ComponentQuery ComponentQuery} selector to filter the preceding items.
+     * @return {Ext.Component} The previous sibling (or the previous sibling which matches the selector).
+     * Returns null if there is no matching sibling.
      */
     previousSibling: function(selector) {
         var o = this.ownerCt, it, idx, c;
@@ -1991,11 +2282,13 @@ var owningTabPanel = grid.up('tabpanel');
     },
 
 <span id='Ext-AbstractComponent-method-previousNode'>    /**
-</span>     * &lt;p&gt;Returns the previous node in the Component tree in tree traversal order.&lt;/p&gt;
-     * &lt;p&gt;Note that this is not limited to siblings, and if invoked upon a node with no matching siblings, will
-     * walk the tree in reverse order to attempt to find a match. Contrast with {@link #previousSibling}.&lt;/p&gt;
-     * @param {String} selector Optional. A {@link Ext.ComponentQuery ComponentQuery} selector to filter the preceding nodes.
-     * @returns The previous node (or the previous node which matches the selector). Returns null if there is no matching node.
+</span>     * Returns the previous node in the Component tree in tree traversal order.
+     *
+     * Note that this is not limited to siblings, and if invoked upon a node with no matching siblings, will walk the
+     * tree in reverse order to attempt to find a match. Contrast with {@link #previousSibling}.
+     * @param {String} [selector] A {@link Ext.ComponentQuery ComponentQuery} selector to filter the preceding nodes.
+     * @return {Ext.Component} The previous node (or the previous node which matches the selector).
+     * Returns null if there is no matching node.
      */
     previousNode: function(selector, includeSelf) {
         var node = this,
@@ -2027,11 +2320,13 @@ var owningTabPanel = grid.up('tabpanel');
     },
 
 <span id='Ext-AbstractComponent-method-nextNode'>    /**
-</span>     * &lt;p&gt;Returns the next node in the Component tree in tree traversal order.&lt;/p&gt;
-     * &lt;p&gt;Note that this is not limited to siblings, and if invoked upon a node with no matching siblings, will
-     * walk the tree to attempt to find a match. Contrast with {@link #nextSibling}.&lt;/p&gt;
-     * @param {String} selector Optional A {@link Ext.ComponentQuery ComponentQuery} selector to filter the following nodes.
-     * @returns The next node (or the next node which matches the selector). Returns null if there is no matching node.
+</span>     * Returns the next node in the Component tree in tree traversal order.
+     *
+     * Note that this is not limited to siblings, and if invoked upon a node with no matching siblings, will walk the
+     * tree to attempt to find a match. Contrast with {@link #nextSibling}.
+     * @param {String} [selector] A {@link Ext.ComponentQuery ComponentQuery} selector to filter the following nodes.
+     * @return {Ext.Component} The next node (or the next node which matches the selector).
+     * Returns null if there is no matching node.
      */
     nextNode: function(selector, includeSelf) {
         var node = this,
@@ -2062,8 +2357,8 @@ var owningTabPanel = grid.up('tabpanel');
     },
 
 <span id='Ext-AbstractComponent-method-getId'>    /**
-</span>     * Retrieves the id of this component.
-     * Will autogenerate an id if one has not already been set.
+</span>     * Retrieves the id of this component. Will autogenerate an id if one has not already been set.
+     * @return {String}
      */
     getId : function() {
         return this.id || (this.id = 'ext-comp-' + (this.getAutoId()));
@@ -2075,6 +2370,7 @@ var owningTabPanel = grid.up('tabpanel');
 
 <span id='Ext-AbstractComponent-method-getEl'>    /**
 </span>     * Retrieves the top level element representing this component.
+     * @return {Ext.core.Element}
      */
     getEl : function() {
         return this.el;
@@ -2089,21 +2385,24 @@ var owningTabPanel = grid.up('tabpanel');
     },
 
 <span id='Ext-AbstractComponent-method-isXType'>    /**
-</span>     * &lt;p&gt;Tests whether or not this Component is of a specific xtype. This can test whether this Component is descended
-     * from the xtype (default) or whether it is directly of the xtype specified (shallow = true).&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;If using your own subclasses, be aware that a Component must register its own xtype
-     * to participate in determination of inherited xtypes.&lt;/b&gt;&lt;/p&gt;
-     * &lt;p&gt;For a list of all available xtypes, see the {@link Ext.Component} header.&lt;/p&gt;
-     * &lt;p&gt;Example usage:&lt;/p&gt;
-     * &lt;pre&gt;&lt;code&gt;
-var t = new Ext.form.field.Text();
-var isText = t.isXType('textfield');        // true
-var isBoxSubclass = t.isXType('field');       // true, descended from Ext.form.field.Base
-var isBoxInstance = t.isXType('field', true); // false, not a direct Ext.form.field.Base instance
-&lt;/code&gt;&lt;/pre&gt;
+</span>     * Tests whether or not this Component is of a specific xtype. This can test whether this Component is descended
+     * from the xtype (default) or whether it is directly of the xtype specified (shallow = true).
+     *
+     * **If using your own subclasses, be aware that a Component must register its own xtype to participate in
+     * determination of inherited xtypes.**
+     *
+     * For a list of all available xtypes, see the {@link Ext.Component} header.
+     *
+     * Example usage:
+     *
+     *     var t = new Ext.form.field.Text();
+     *     var isText = t.isXType('textfield');        // true
+     *     var isBoxSubclass = t.isXType('field');       // true, descended from Ext.form.field.Base
+     *     var isBoxInstance = t.isXType('field', true); // false, not a direct Ext.form.field.Base instance
+     *
      * @param {String} xtype The xtype to check for this Component
-     * @param {Boolean} shallow (optional) False to check whether this Component is descended from the xtype (this is
-     * the default), or true to check whether this Component is directly of the specified xtype.
+     * @param {Boolean} [shallow=false] True to check whether this Component is directly of the specified xtype, false to
+     * check whether this Component is descended from the xtype.
      * @return {Boolean} True if this component descends from the specified xtype, false otherwise.
      */
     isXType: function(xtype, shallow) {
@@ -2120,29 +2419,32 @@ var isBoxInstance = t.isXType('field', true); // false, not a direct Ext.form.fi
     },
 
 <span id='Ext-AbstractComponent-method-getXTypes'>    /**
-</span>     * &lt;p&gt;Returns this Component's xtype hierarchy as a slash-delimited string. For a list of all
-     * available xtypes, see the {@link Ext.Component} header.&lt;/p&gt;
-     * &lt;p&gt;&lt;b&gt;If using your own subclasses, be aware that a Component must register its own xtype
-     * to participate in determination of inherited xtypes.&lt;/b&gt;&lt;/p&gt;
-     * &lt;p&gt;Example usage:&lt;/p&gt;
-     * &lt;pre&gt;&lt;code&gt;
-var t = new Ext.form.field.Text();
-alert(t.getXTypes());  // alerts 'component/field/textfield'
-&lt;/code&gt;&lt;/pre&gt;
+</span>     * Returns this Component's xtype hierarchy as a slash-delimited string. For a list of all available xtypes, see the
+     * {@link Ext.Component} header.
+     *
+     * **If using your own subclasses, be aware that a Component must register its own xtype to participate in
+     * determination of inherited xtypes.**
+     *
+     * Example usage:
+     *
+     *     var t = new Ext.form.field.Text();
+     *     alert(t.getXTypes());  // alerts 'component/field/textfield'
+     *
      * @return {String} The xtype hierarchy string
      */
     getXTypes: function() {
         var self = this.self,
-            xtypes      = [],
-            parentPrototype  = this,
-            xtype;
+            xtypes, parentPrototype, parentXtypes;
 
         if (!self.xtypes) {
-            while (parentPrototype &amp;&amp; Ext.getClass(parentPrototype)) {
-                xtype = Ext.getClass(parentPrototype).xtype;
+            xtypes = [];
+            parentPrototype = this;
+
+            while (parentPrototype) {
+                parentXtypes = parentPrototype.xtypes;
 
-                if (xtype !== undefined) {
-                    xtypes.unshift(xtype);
+                if (parentXtypes !== undefined) {
+                    xtypes.unshift.apply(xtypes, parentXtypes);
                 }
 
                 parentPrototype = parentPrototype.superclass;
@@ -2157,15 +2459,12 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 
 <span id='Ext-AbstractComponent-method-update'>    /**
 </span>     * Update the content area of a component.
-     * @param {Mixed} htmlOrData
-     * If this component has been configured with a template via the tpl config
-     * then it will use this argument as data to populate the template.
-     * If this component was not configured with a template, the components
-     * content area will be updated via Ext.core.Element update
-     * @param {Boolean} loadScripts
-     * (optional) Only legitimate when using the html configuration. Defaults to false
-     * @param {Function} callback
-     * (optional) Only legitimate when using the html configuration. Callback to execute when scripts have finished loading
+     * @param {String/Object} htmlOrData If this component has been configured with a template via the tpl config then
+     * it will use this argument as data to populate the template. If this component was not configured with a template,
+     * the components content area will be updated via Ext.Element update
+     * @param {Boolean} [loadScripts=false] Only legitimate when using the html configuration.
+     * @param {Function} [callback] Only legitimate when using the html configuration. Callback to execute when
+     * scripts have finished loading
      */
     update : function(htmlOrData, loadScripts, cb) {
         var me = this;
@@ -2176,7 +2475,7 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
                 me.tpl[me.tplWriteMode](me.getTargetEl(), htmlOrData || {});
             }
         } else {
-            me.html = Ext.isObject(htmlOrData) ? Ext.core.DomHelper.markup(htmlOrData) : htmlOrData;
+            me.html = Ext.isObject(htmlOrData) ? Ext.DomHelper.markup(htmlOrData) : htmlOrData;
             if (me.rendered) {
                 me.getTargetEl().update(me.html, loadScripts, cb);
             }
@@ -2198,10 +2497,13 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 
 <span id='Ext-AbstractComponent-method-isVisible'>    /**
 </span>     * Returns true if this component is visible.
-     * @param {Boolean} deep. &lt;p&gt;Optional. Pass &lt;code&gt;true&lt;/code&gt; to interrogate the visibility status of all
-     * parent Containers to determine whether this Component is truly visible to the user.&lt;/p&gt;
-     * &lt;p&gt;Generally, to determine whether a Component is hidden, the no argument form is needed. For example
-     * when creating dynamically laid out UIs in a hidden Container before showing them.&lt;/p&gt;
+     *
+     * @param {Boolean} [deep=false] Pass `true` to interrogate the visibility status of all parent Containers to
+     * determine whether this Component is truly visible to the user.
+     *
+     * Generally, to determine whether a Component is hidden, the no argument form is needed. For example when creating
+     * dynamically laid out UIs in a hidden Container before showing them.
+     *
      * @return {Boolean} True if this component is visible, false otherwise.
      */
     isVisible: function(deep) {
@@ -2238,8 +2540,7 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 
 <span id='Ext-AbstractComponent-method-enable'>    /**
 </span>     * Enable the component
-     * @param {Boolean} silent
-     * Passing false will supress the 'enable' event from being fired.
+     * @param {Boolean} [silent=false] Passing true will supress the 'enable' event from being fired.
      */
     enable: function(silent) {
         var me = this;
@@ -2261,8 +2562,7 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 
 <span id='Ext-AbstractComponent-method-disable'>    /**
 </span>     * Disable the component.
-     * @param {Boolean} silent
-     * Passing true, will supress the 'disable' event from being fired.
+     * @param {Boolean} [silent=false] Passing true will supress the 'disable' event from being fired.
      */
     disable: function(silent) {
         var me = this;
@@ -2306,7 +2606,7 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 
 <span id='Ext-AbstractComponent-method-setDisabled'>    /**
 </span>     * Enable or disable the component.
-     * @param {Boolean} disabled
+     * @param {Boolean} disabled True to disable.
      */
     setDisabled : function(disabled) {
         return this[disabled ? 'disable': 'enable']();
@@ -2343,8 +2643,7 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
     },
 
 <span id='Ext-AbstractComponent-method-addClass'>    /**
-</span>     * @deprecated 4.0 Replaced by {@link #addCls}
-     * Adds a CSS class to the top level element representing this component.
+</span>     * Adds a CSS class to the top level element representing this component.
      * @param {String} cls The CSS class name to add
      * @return {Ext.Component} Returns the Component to allow method chaining.
      */
@@ -2354,7 +2653,8 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 
 <span id='Ext-AbstractComponent-method-removeCls'>    /**
 </span>     * Removes a CSS class from the top level element representing this component.
-     * @returns {Ext.Component} Returns the Component to allow method chaining.
+     * @param {Object} className
+     * @return {Ext.Component} Returns the Component to allow method chaining.
      */
     removeCls : function(className) {
         var me = this;
@@ -2495,7 +2795,7 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
      * respective Container, firing an added event.
      * References are established at add time rather than at render time.
      * @param {Ext.container.Container} container Container which holds the component
-     * @param {number} pos Position at which the component was added
+     * @param {Number} pos Position at which the component was added
      */
     onAdded : function(container, pos) {
         this.ownerCt = container;
@@ -2523,19 +2823,22 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 
 <span id='Ext-AbstractComponent-method-setSize'>    /**
 </span>     * Sets the width and height of this Component. This method fires the {@link #resize} event. This method can accept
-     * either width and height as separate arguments, or you can pass a size object like &lt;code&gt;{width:10, height:20}&lt;/code&gt;.
-     * @param {Mixed} width The new width to set. This may be one of:&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
-     * &lt;li&gt;A Number specifying the new width in the {@link #getEl Element}'s {@link Ext.core.Element#defaultUnit}s (by default, pixels).&lt;/li&gt;
-     * &lt;li&gt;A String used to set the CSS width style.&lt;/li&gt;
-     * &lt;li&gt;A size object in the format &lt;code&gt;{width: widthValue, height: heightValue}&lt;/code&gt;.&lt;/li&gt;
-     * &lt;li&gt;&lt;code&gt;undefined&lt;/code&gt; to leave the width unchanged.&lt;/li&gt;
-     * &lt;/ul&gt;&lt;/div&gt;
-     * @param {Mixed} height The new height to set (not required if a size object is passed as the first arg).
-     * This may be one of:&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
-     * &lt;li&gt;A Number specifying the new height in the {@link #getEl Element}'s {@link Ext.core.Element#defaultUnit}s (by default, pixels).&lt;/li&gt;
-     * &lt;li&gt;A String used to set the CSS height style. Animation may &lt;b&gt;not&lt;/b&gt; be used.&lt;/li&gt;
-     * &lt;li&gt;&lt;code&gt;undefined&lt;/code&gt; to leave the height unchanged.&lt;/li&gt;
-     * &lt;/ul&gt;&lt;/div&gt;
+     * either width and height as separate arguments, or you can pass a size object like `{width:10, height:20}`.
+     *
+     * @param {Number/String/Object} width The new width to set. This may be one of:
+     *
+     *   - A Number specifying the new width in the {@link #getEl Element}'s {@link Ext.Element#defaultUnit}s (by default, pixels).
+     *   - A String used to set the CSS width style.
+     *   - A size object in the format `{width: widthValue, height: heightValue}`.
+     *   - `undefined` to leave the width unchanged.
+     *
+     * @param {Number/String} height The new height to set (not required if a size object is passed as the first arg).
+     * This may be one of:
+     *
+     *   - A Number specifying the new height in the {@link #getEl Element}'s {@link Ext.Element#defaultUnit}s (by default, pixels).
+     *   - A String used to set the CSS height style. Animation may **not** be used.
+     *   - `undefined` to leave the height unchanged.
+     *
      * @return {Ext.Component} this
      */
     setSize : function(width, height) {
@@ -2647,6 +2950,10 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 <span id='Ext-AbstractComponent-method-doComponentLayout'>    /**
 </span>     * This method needs to be called whenever you change something on this component that requires the Component's
      * layout to be recalculated.
+     * @param {Object} width
+     * @param {Object} height
+     * @param {Object} isSetSize
+     * @param {Object} callingContainer
      * @return {Ext.container.Container} this
      */
     doComponentLayout : function(width, height, isSetSize, callingContainer) {
@@ -2661,15 +2968,12 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
         // Only Panels have a collapse method, and that just sets the width/height such that only
         // a single docked Header parallel to the collapseTo side are visible, and the Panel body is hidden.
         if (me.rendered &amp;&amp; componentLayout) {
-
-
             // If no width passed, then only insert a value if the Component is NOT ALLOWED to autowidth itself.
             if (!Ext.isDefined(width)) {
                 if (me.isFixedWidth()) {
                     width = Ext.isDefined(me.width) ? me.width : lastComponentSize.width;
                 }
             }
-
             // If no height passed, then only insert a value if the Component is NOT ALLOWED to autoheight itself.
             if (!Ext.isDefined(height)) {
                 if (me.isFixedHeight()) {
@@ -2684,6 +2988,7 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 
             componentLayout.layout(width, height, isSetSize, callingContainer);
         }
+
         return me;
     },
 
@@ -2714,31 +3019,39 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
     },
 
 <span id='Ext-AbstractComponent-method-afterComponentLayout'>    /**
-</span>     * @param {Number} adjWidth The box-adjusted width that was set
+</span>     * Occurs after componentLayout is run.
+     * @param {Number} adjWidth The box-adjusted width that was set
      * @param {Number} adjHeight The box-adjusted height that was set
      * @param {Boolean} isSetSize Whether or not the height/width are stored on the component permanently
      * @param {Ext.Component} callingContainer Container requesting the layout. Only used when isSetSize is false.
      */
     afterComponentLayout: function(width, height, isSetSize, callingContainer) {
-        this.fireEvent('resize', this, width, height);
+        var me = this,
+            layout = me.componentLayout,
+            oldSize = me.preLayoutSize;
+
+        ++me.componentLayoutCounter;
+        if (!oldSize || ((width !== oldSize.width) || (height !== oldSize.height))) {
+            me.fireEvent('resize', me, width, height);
+        }
     },
 
 <span id='Ext-AbstractComponent-method-beforeComponentLayout'>    /**
-</span>     * Occurs before componentLayout is run. Returning false from this method will prevent the componentLayout
-     * from being executed.
+</span>     * Occurs before componentLayout is run. Returning false from this method will prevent the componentLayout from
+     * being executed.
      * @param {Number} adjWidth The box-adjusted width that was set
      * @param {Number} adjHeight The box-adjusted height that was set
      * @param {Boolean} isSetSize Whether or not the height/width are stored on the component permanently
      * @param {Ext.Component} callingContainer Container requesting sent the layout. Only used when isSetSize is false.
      */
     beforeComponentLayout: function(width, height, isSetSize, callingContainer) {
+        this.preLayoutSize = this.componentLayout.lastComponentSize;
         return true;
     },
 
 <span id='Ext-AbstractComponent-method-setPosition'>    /**
-</span>     * Sets the left and top of the component.  To set the page XY position instead, use
-     * {@link Ext.Component#setPagePosition setPagePosition}.
-     * This method fires the {@link #move} event.
+</span>     * Sets the left and top of the component. To set the page XY position instead, use
+     * {@link Ext.Component#setPagePosition setPagePosition}. This method fires the {@link #move} event.
      * @param {Number} left The new left
      * @param {Number} top The new top
      * @return {Ext.Component} this
@@ -2763,7 +3076,8 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
         return me;
     },
 
-    /* @private
+<span id='Ext-AbstractComponent-property-onPosition'>    /**
+</span>     * @private
      * Called after the component is moved, this method is empty by default but can be implemented by any
      * subclass that needs to perform custom logic after a move occurs.
      * @param {Number} x The new x position
@@ -2772,11 +3086,13 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
     onPosition: Ext.emptyFn,
 
 <span id='Ext-AbstractComponent-method-setWidth'>    /**
-</span>     * Sets the width of the component.  This method fires the {@link #resize} event.
-     * @param {Number} width The new width to setThis may be one of:&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
-     * &lt;li&gt;A Number specifying the new width in the {@link #getEl Element}'s {@link Ext.core.Element#defaultUnit}s (by default, pixels).&lt;/li&gt;
-     * &lt;li&gt;A String used to set the CSS width style.&lt;/li&gt;
-     * &lt;/ul&gt;&lt;/div&gt;
+</span>     * Sets the width of the component. This method fires the {@link #resize} event.
+     *
+     * @param {Number} width The new width to setThis may be one of:
+     *
+     *   - A Number specifying the new width in the {@link #getEl Element}'s {@link Ext.Element#defaultUnit}s (by default, pixels).
+     *   - A String used to set the CSS width style.
+     *
      * @return {Ext.Component} this
      */
     setWidth : function(width) {
@@ -2784,12 +3100,14 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
     },
 
 <span id='Ext-AbstractComponent-method-setHeight'>    /**
-</span>     * Sets the height of the component.  This method fires the {@link #resize} event.
-     * @param {Number} height The new height to set. This may be one of:&lt;div class=&quot;mdetail-params&quot;&gt;&lt;ul&gt;
-     * &lt;li&gt;A Number specifying the new height in the {@link #getEl Element}'s {@link Ext.core.Element#defaultUnit}s (by default, pixels).&lt;/li&gt;
-     * &lt;li&gt;A String used to set the CSS height style.&lt;/li&gt;
-     * &lt;li&gt;&lt;i&gt;undefined&lt;/i&gt; to leave the height unchanged.&lt;/li&gt;
-     * &lt;/ul&gt;&lt;/div&gt;
+</span>     * Sets the height of the component. This method fires the {@link #resize} event.
+     *
+     * @param {Number} height The new height to set. This may be one of:
+     *
+     *   - A Number specifying the new height in the {@link #getEl Element}'s {@link Ext.Element#defaultUnit}s (by default, pixels).
+     *   - A String used to set the CSS height style.
+     *   - _undefined_ to leave the height unchanged.
+     *
      * @return {Ext.Component} this
      */
     setHeight : function(height) {
@@ -2846,11 +3164,11 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 
 <span id='Ext-AbstractComponent-method-setLoading'>    /**
 </span>     * This method allows you to show or hide a LoadMask on top of this component.
-     * @param {Boolean/Object/String} load True to show the default LoadMask, a config object
-     * that will be passed to the LoadMask constructor, or a message String to show. False to
-     * hide the current LoadMask.
-     * @param {Boolean} targetEl True to mask the targetEl of this Component instead of the this.el.
-     * For example, setting this to true on a Panel will cause only the body to be masked. (defaults to false)
+     *
+     * @param {Boolean/Object/String} load True to show the default LoadMask, a config object that will be passed to the
+     * LoadMask constructor, or a message String to show. False to hide the current LoadMask.
+     * @param {Boolean} [targetEl=false] True to mask the targetEl of this Component instead of the `this.el`. For example,
+     * setting this to true on a Panel will cause only the body to be masked.
      * @return {Ext.LoadMask} The LoadMask instance that has just been shown.
      */
     setLoading : function(load, targetEl) {
@@ -2880,11 +3198,11 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
     },
 
 <span id='Ext-AbstractComponent-method-setDocked'>    /**
-</span>     * Sets the dock position of this component in its parent panel. Note that
-     * this only has effect if this item is part of the dockedItems collection
-     * of a parent that has a DockLayout (note that any Panel has a DockLayout
-     * by default)
-     * @return {Component} this
+</span>     * Sets the dock position of this component in its parent panel. Note that this only has effect if this item is part
+     * of the dockedItems collection of a parent that has a DockLayout (note that any Panel has a DockLayout by default)
+     * @param {Object} dock The dock position.
+     * @param {Boolean} [layoutParent=false] True to re-layout parent.
+     * @return {Ext.Component} this
      */
     setDocked : function(dock, layoutParent) {
         var me = this;
@@ -2902,7 +3220,49 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
         if (me.monitorResize &amp;&amp; Ext.EventManager.resizeEvent) {
             Ext.EventManager.resizeEvent.removeListener(me.setSize, me);
         }
-        Ext.destroy(me.componentLayout, me.loadMask);
+        // Destroying the floatingItems ZIndexManager will also destroy descendant floating Components
+        Ext.destroy(
+            me.componentLayout,
+            me.loadMask,
+            me.floatingItems
+        );
+    },
+
+<span id='Ext-AbstractComponent-method-cleanElementRefs'>    /**
+</span>     * Remove any references to elements added via renderSelectors/childEls
+     * @private
+     */
+    cleanElementRefs: function(){
+        var me = this,
+            i = 0,
+            childEls = me.childEls,
+            selectors = me.renderSelectors,
+            selector,
+            name,
+            len;
+
+        if (me.rendered) {
+            if (childEls) {
+                for (len = childEls.length; i &lt; len; ++i) {
+                    name = childEls[i];
+                    if (typeof(name) != 'string') {
+                        name = name.name;
+                    }
+                    delete me[name];
+                }
+            }
+
+            if (selectors) {
+                for (selector in selectors) {
+                    if (selectors.hasOwnProperty(selector)) {
+                        delete me[selector];
+                    }
+                }
+            }
+        }
+        delete me.rendered;
+        delete me.el;
+        delete me.frameBody;
     },
 
 <span id='Ext-AbstractComponent-method-destroy'>    /**
@@ -2936,12 +3296,14 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
                     me.el.remove();
                 }
 
-                Ext.ComponentManager.unregister(me);
                 me.fireEvent('destroy', me);
+                Ext.ComponentManager.unregister(me);
 
                 me.mixins.state.destroy.call(me);
 
                 me.clearListeners();
+                // make sure we clean up the element references after removing all events
+                me.cleanElementRefs();
                 me.destroying = false;
                 me.isDestroyed = true;
             }
@@ -2949,9 +3311,9 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
     },
 
 <span id='Ext-AbstractComponent-method-getPlugin'>    /**
-</span>     * Retrieves a plugin by its pluginId which has been bound to this
-     * component.
-     * @returns {Ext.AbstractPlugin} pluginInstance
+</span>     * Retrieves a plugin by its pluginId which has been bound to this component.
+     * @param {Object} pluginId
+     * @return {Ext.AbstractPlugin} plugin instance.
      */
     getPlugin: function(pluginId) {
         var i = 0,
@@ -2967,7 +3329,7 @@ alert(t.getXTypes());  // alerts 'component/field/textfield'
 <span id='Ext-AbstractComponent-method-isDescendantOf'>    /**
 </span>     * Determines whether this component is the descendant of a particular container.
      * @param {Ext.Container} container
-     * @returns {Boolean} isDescendant
+     * @return {Boolean} True if it is.
      */
     isDescendantOf: function(container) {
         return !!this.findParentBy(function(p){