/**
 * @class Ext.calendar.panel.Base
 * @extend Ext.calendar.panel.AbstractBase
 * @abstract
 * A base class that composes a calendar view and a
 * {@link Ext.calendar.header.Base header}.  Calendar views display events for a date /
 * time range specified by the view subclasses:
 *
 * - {@link Ext.calendar.panel.Day Day}
 * - {@link Ext.calendar.panel.Days Days}
 * - {@link Ext.calendar.panel.Week Week}
 * - {@link Ext.calendar.panel.Weeks Weeks}
 * - {@link Ext.calendar.panel.Month Month}
 * - {@link Ext.calendar.panel.Multi Multi}
 *
 * By default, the view will display the current date along with any other dates surround
 * that date as specified by the particular view type.  A target date can be specified
 * by setting the {@link #cfg-value} config option.
 *
 * ### Sample View
 *
 * Below is a sample view instance.  The following example shows how to create a day view,
 * but the basic configuration applies to all view subclasses with the exception of the
 * xtype used.
 *
 *     Ext.create({
 *         xtype: 'calendar-day',
 *         renderTo: Ext.getBody(),
 *         height: 400,
 *         width: 400,
 *         store: {
 *             autoLoad: true,
 *             proxy: {
 *                 type: 'ajax',
 *                 url: 'calendars.php'
 *             },
 *             eventStoreDefaults: {
 *                 proxy: {
 *                     type: 'ajax',
 *                     url: 'events.php'
 *                 }
 *             }
 *         }
 *     });
 *
 * Configurations for the view can be specified directly on the panel:
 *
 *     Ext.create({
 *         xtype: 'calendar-day',
 *         height: 500,
 *         height: 500,
 *         resizeEvents: false,
 *         startTime: 8,
 *         endTime: 16,
 *         store: {
 *             autoLoad: true,
 *             proxy: {
 *                 type: 'ajax',
 *                 url: 'calendars.php'
 *             },
 *             eventStoreDefaults: {
 *                 proxy: {
 *                     type: 'ajax',
 *                     url: 'events.php'
 *                 }
 *             }
 *         }
 *         listeners: {
 *             eventdrop: function() {
 *                 console.log('Dropped');
 *             }
 *         }
 *     });
 *
 * **Note:** For more information on possible store configurations and the expected
 * server response for both Calendars and Events stores see:
 * {@link Ext.calendar.store.Calendars}.
 *
 * ### In-View Calendar Events
 *
 * Events show on the view timeline with their start and end times correlating to either
 * the date or the time slots depending on the view type.  The events will display on the
 * timeline according to your local timezone offset from GMT (the expected format for
 * start / end times for events is UTC).  The timezone offset can be applied explicitly
 * using the {@link #cfg-timezoneOffset} config option.  If the view has multiple source
 * calendars, their events will attempt to share overlapping space within their
 * corresponding date / time slots.  Events will be displayed as a different color for
 * each source calendar and their appearance will vary slightly depending on their
 * {@link Ext.calendar.Event.html#cfg-mode mode}.  The overlapping behavior of events
 * competing for the same time slot can be managed using the {@link #cfg-displayOverlap}
 * config option.
 *
 * ### Adding / Editing Events
 *
 * Events may be added to the view by dragging / swiping across the timeline to create
 * the event endpoints.  Doing so shows the {@link Ext.calendar.form.Add add event form}
 * with the dates / times pre-populated from the drag selection.  The
 * {@link #cfg-allowSelection} config can be set to false to prevent user from creating
 * events in this way.  Events added programmatically by calling the
 * {@link #method-showAddForm} method to present the add input form.  Set the view's
 * {@link #cfg-addForm} config to `null` to prevent events from being added to the
 * calendar.
 *
 * Double clicking / tapping an event within the view shows the
 * {@link Ext.calendar.form.Edit edit event form} allowing events to be edited by users.
 * The add form and edit form can be configured using the view's {@link #cfg-addForm} and
 * {@link #cfg-editForm} configs.  For views with time displayed on the y axis of the
 * view (Day, Days, and Week), existing events can be resized using the resize handle on
 * the event widget as well as dragged across the view.  The {@link #cfg-resizeEvents},
 * {@link #cfg-draggable}, and {@link #cfg-droppable} configs may be used to manage event
 * interactions.
 *
 * ### View Navigation
 *
 * The calendar view does not create controls for navigating the view's date range,
 * however the view can be navigated programmatically.  The view's target date can be set
 * explicitly using the {@link #method-setValue} method.  The
 * {@link #method-movePrevious} and {@link #method-moveNext} methods may be called to
 * move the displayed date range forward or back.  And the {@link #method-navigate} lets
 * you move the date an arbitrary amount relative to the current date {@link #cfg-value}.
 *
 * ### Compact Mode
 * The base view class has a {@link #cfg-compact} config.  This boolean configures
 * whether or not the view is in compact mode.  It’s expected that this will be used as a
 * platform config or a responsive config.  Setting compact mode by itself does not
 * modify how the view displays.  What it does do is apply the
 * {@link #cfg-compactOptions} config over the top over the current configuration
 * options.  These `compactOptions` are what is used to specify what compactness means
 * for a particular view.  Check out the `compactOptions` for each calendar view type to
 * see its default `compactOptions`.
 */
 
/**
 * @cfg {Boolean} [addForm=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-addForm
 * @accessor
 */
/**
 * @cfg {Boolean} [compact=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-compact
 * @accessor
 */
/**
 * @cfg {Boolean} [compactOptions=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-compactOptions
 * @accessor
 */
/**
 * @cfg {Boolean} [controlStoreRange=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-controlStoreRange
 * @accessor
 */
/**
 * @cfg {Boolean} [editForm=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-editForm
 * @accessor
 */
/**
 * @cfg {Boolean} [eventDefaults=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-eventDefaults
 * @accessor
 */
/**
 * @cfg {Boolean} [gestureNavigation=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-gestureNavigation
 * @accessor
 */
/**
 * @cfg {Boolean} [store=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-store
 * @accessor
 */
/**
 * @cfg {Boolean} [timezoneOffset=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-timezoneOffset
 * @accessor
 */
/**
 * @cfg {Boolean} [value=true]
 * @inheritdoc Ext.calendar.view.Base#cfg-value
 * @accessor
 */
 
/**
 * @event beforeeventadd
 * @inheritdoc Ext.calendar.view.Base#beforeeventadd
 */
 
/**
 * @event beforeeventedit
 * @inheritdoc Ext.calendar.view.Base#beforeeventadd
 */
 
/**
 * @event eventadd
 * @inheritdoc Ext.calendar.view.Base#eventadd
 */
 
/**
 * @event eventedit
 * @inheritdoc Ext.calendar.view.Base#eventedit
 */
 
/**
 * @event eventdrop
 * @inheritdoc Ext.calendar.view.Base#eventdrop
 */
 
/**
 * @event eventtap
 * @inheritdoc Ext.calendar.view.Base#eventtap
 */
 
/**
 * @event validateeventadd
 * @inheritdoc Ext.calendar.view.Base#validateeventadd
 */
 
/**
 * @event validateeventedit
 * @inheritdoc Ext.calendar.view.Base#validateeventedit
 */
 
/**
 * @event validateeventdrop
 * @inheritdoc Ext.calendar.view.Base#validateeventdrop
 */
 
/**
 * @event valuechange
 * @inheritdoc Ext.calendar.view.Base#valuechange
 */
 
/**
 * @cfg {Object} [dayHeader=null]
 * A config for the {@link Ext.calendar.header.Base day header}. This can be
 * configured directly on the panel.  The relevant configurations will be
 * forwarded to the header.
 * @accessor
 */
 
/**
 * @cfg {Object} [view=null]
 * A config for the main calendar view. This can be configured directly on the panel,
 * the relevant configurations will be forwarded to the view.
 */
 
/**
 * @method getDisplayRange
 * @inheritdoc Ext.calendar.view.Base#method-getDisplayRange
 */
 
/**
 * @method getVisibleRange
 * @inheritdoc Ext.calendar.view.Base#method-getVisibleRange
 */
 
/**
 * @method moveNext
 * @inheritdoc Ext.calendar.view.Base#method-moveNext
 */
 
/**
 * @method movePrevious
 * @inheritdoc Ext.calendar.view.Base#method-movePrevious
 */
 
/**
 * @method navigate
 * @inheritdoc Ext.calendar.view.Base#method-navigate
 */
 
/**
 * @method showAddForm
 * @inheritdoc Ext.calendar.view.Base#method-showAddForm
 */
 
/**
 * @method showEditForm
 * @inheritdoc Ext.calendar.view.Base#method-showEditForm
 */