import { VegaSlimmer } from '../../../vega-slimmer/vega-slimmer-core';
import { ClassPrototype } from '../../../types/class.type';
import { EventEmitter } from '../../../stencil-public-runtime';
import { VegaEventID } from '../event-id/vega-event-id';
import { VegaEventEmitHandlerSlimmer } from './event-emit-handlers/vega-event-emit-handler';
import { NativeEventEmitHandlerSlimmer } from './event-emit-handlers/native-event-emit-handler';
import { JqueryDelegatedEventEmitHandlerSlimmer } from './event-emit-handlers/jquery-delegated-event-emit-handler';
import { Nullable } from '../../../types/general';
import { DynamicMapFromClass } from '../../slimmers/types';
export declare type ChangeManagerEventLike<T> = {
  host: HTMLElement;
  detail: T;
  eventName?: string;
  /**
   * Invoke the method to prevent the event default behavior from the internal event listener.
   */
  preventDefault: () => void;
};
/** The EventEmitSlimmerBase class is a TypeScript class that extends VegaSlimmer and provides methods for emitting events with or without notifications. */
export declare class EventEmitSlimmerBase extends VegaSlimmer {
  host: HTMLElement;
  eventID: VegaEventID;
  vegaEvent: EventEmitter;
  nativeEvent: EventEmitter;
  protected vegaEventEmitHandler: VegaEventEmitHandlerSlimmer;
  protected nativeEventEmitHandler: NativeEventEmitHandlerSlimmer;
  protected jqueryDelegatedEventEmitHandler: JqueryDelegatedEventEmitHandlerSlimmer;
  private eventName;
  private eventHandlers;
  /**
   * The constructor function takes an object with an eventName property and assigns it to the eventName property of the class.
   *
   * @param {{ eventName: string }} eventName  - The constructor function takes in an object with a property called "eventName" of type
   * string. The value of "eventName" is then assigned to the instance variable "this.eventName".
   */
  constructor({ eventID }: {
    eventID: VegaEventID;
  });
  /**
   * emit the vega component event
   *
   * @param {unknown} [detail] the event detail
   * @param {Event} [e] the event object
   * @returns {Nullable<Event>} The emitted event.
   */
  emit: <T>(detail?: T, e?: Event) => Nullable<Event>;
  /**
   * used to clean up and remove any observers that were added to the host element during the lifecycle of the class
   */
  removeObserverFromHost: () => void;
  /**
   * The function checks if a given HTML element has been removed from the document.
   *
   * @param {Nullable<HTMLElement>} node - The `node` parameter is of type `Nullable<HTMLElement>`, which means it can either be
   * an `HTMLElement` or `null`. It represents the element that needs to be checked if it has been removed from the document.
   * @returns {boolean} a boolean value.
   */
  private isNodeRemovedFromDocument;
  /**
   * The function initializes event handlers for different types of events.
   */
  private initialEventHandlers;
}
/**
 * The function `createEventEmitSlimmer` creates a slimmer version of an event emitter class by mapping specific properties and events.
 *
 * @param {ClassPrototype<unknown>} mapFromClass - The class prototype from which the event emitter will be created.
 * @param {VegaEventID} eventID - The eventName parameter is a VegaEventID that represents the name of the event.
 * @param {string} [nativeEventPropertyName] - usually the native event name is eventID#nativeName, set a property name when the native name is used by other method or property
 * @returns {EventEmitSlimmerBase} an instance of the `EventEmitSlimmerBase` class.
 */
export declare function createEventEmitSlimmer<T extends DynamicMapFromClass>(mapFromClass: ClassPrototype<T>, eventID: VegaEventID, nativeEventPropertyName?: string): EventEmitSlimmerBase;
