    /**
     * Component layout for Tip/ToolTip/etc. components
     * @class Ext.layout.component.Tip
     * @extends Ext.layout.component.Dock
     * @private
     */

    Ext.define('Ext.layout.component.Tip', {

        /* Begin Definitions */

        alias: ['layout.tip'],

        extend: 'Ext.layout.component.Dock',

        /* End Definitions */

        type: 'tip',

        onLayout: function(width, height) {
            var me = this,
                owner = me.owner,
                el = owner.el,
                minWidth,
                maxWidth,
                naturalWidth,
                constrainedWidth,
                xy = el.getXY();

            // Position offscreen so the natural width is not affected by the viewport's right edge
            el.setXY([-9999,-9999]);

            // Calculate initial layout
            this.callParent(arguments);

            // Handle min/maxWidth for auto-width tips
            if (!Ext.isNumber(width)) {
                minWidth = owner.minWidth;
                maxWidth = owner.maxWidth;
                // IE6/7 in strict mode have a problem doing an autoWidth
                if (Ext.isStrict && (Ext.isIE6 || Ext.isIE7)) {
                    constrainedWidth = me.doAutoWidth();
                } else {
                    naturalWidth = el.getWidth();
                }
                if (naturalWidth < minWidth) {
                    constrainedWidth = minWidth;
                }
                else if (naturalWidth > maxWidth) {
                    constrainedWidth = maxWidth;
                }
                if (constrainedWidth) {
                    this.callParent([constrainedWidth, height]);
                }
            }

            // Restore position
            el.setXY(xy);
        },

        doAutoWidth: function(){
            var me = this,
                owner = me.owner,
                body = owner.body,
                width = body.getTextWidth();

            if (owner.header) {
                width = Math.max(width, owner.header.getWidth());
            }
            if (!Ext.isDefined(me.frameWidth)) {
                me.frameWidth = owner.el.getWidth() - body.getWidth();
            }
            width += me.frameWidth + body.getPadding('lr');
            return width;
        }
    });