import { VegaSlimmer } from '../../../../../vega-slimmer/vega-slimmer-core';
import { VegaCalendar } from '../../../vega-calendar';
import { CalendarDate } from '../../../../../helpers/calendar';
import { Nullable } from '../../../../../types/general';
import { CalendarEvent } from '../../../../../helpers/calendar/calendar-event';
/** This code snippet defines a TypeScript class `VegaCalendarMonthEventRenderer` that extends `VegaSlimmer`. Here's a breakdown of what the class and its methods are doing: */
export declare class VegaCalendarMonthEventRenderer extends VegaSlimmer {
  protected viewMode: VegaCalendar['viewMode'];
  protected host: VegaCalendar['host'];
  protected calendarEventController: VegaCalendar['calendarEventController'];
  protected eventItemRenderer: VegaCalendar['eventItemRenderer'];
  protected fullDayEventLayoutRenderer: VegaCalendar['fullDayEventLayoutRenderer'];
  protected eventPreviewPopoverRenderer: VegaCalendar['eventPreviewPopoverRenderer'];
  protected renderer: VegaCalendar['renderer'];
  protected eventPreviewPopoverController: VegaCalendar['eventPreviewPopoverController'];
  private eventContainerRef;
  private maxMonthDisplayEventsCount;
  private popoverHideObserver;
  /**
   * current row dates all events.
   *
   * @param {CalendarDate[]} rowDate the current view date object
   * @returns {Nullable<CalendarEvent>[][]} the current view events
   */
  getCurrentRowEvents(rowDate: CalendarDate[]): Nullable<CalendarEvent>[][];
  /**
   * The function filterRowDisplayEvents processes a 2D array of CalendarEvent objects to limit the number of events displayed per row.
   *
   * @param {(CalendarEvent|null)[][]} rowEvents - `rowEvents` is an array of arrays of `CalendarEvent` objects. Each inner array represents events for a specific row in a calendar display.
   * @returns {Nullable<CalendarEvent>[][]} the current row should display events array
   */
  filterRowDisplayEvents(rowEvents: Nullable<CalendarEvent>[][]): Nullable<CalendarEvent>[][];
  /**
   * Get the month event container element ref
   *
   * @returns {HTMLDivElement} the container element
   */
  getMonthEventContainerRef(): HTMLDivElement;
  /**
   * render the current date events
   *
   * @param {CalendarDate} calendarDate current day
   * @param {Nullable<CalendarEvent>[]} allEvents current row events
   * @param {Nullable<CalendarEvent>[]} displayEvents current row should display events
   * @param {number} currentViewIndex current day index of week
   * @returns {HTMLDivElement} the events container
   */
  render(calendarDate: CalendarDate, allEvents: Nullable<CalendarEvent>[], displayEvents: Nullable<CalendarEvent>[], currentViewIndex: number): HTMLDivElement;
  /**
   * Add a month event display count change observer, than update the component
   */
  protected addMaxDisplayCountChange(): void;
  /**
   * Render the event more button if there is no enough space to display all event
   *
   * @param {Nullable<CalendarEvent>[]} events all event list array
   * @param {number} moreItemsLength popover events length
   * @param {CalendarDate} calendarDate current date
   * @returns {Nullable<HTMLDivElement>} the more button or null
   */
  private renderMoreButton;
  /**
   * The `hideTheCutOffEvents` method in the `VegaCalendarMonthEventRenderer` class is responsible for removing any cut-off events from the displayed events in each row
   *
   * @param {Nullable<CalendarEvent>[][]} allEvents the all events
   * @param {Nullable<CalendarEvent>[][]} rowEvents the display events
   * @returns {Nullable<CalendarEvent>[][]} new event array
   */
  private hideTheCutOffEvents;
  private setPopoverHideObserver;
}
