import { VegaComponentName, VegaNativeEventNameType } from '../../../types/ui.type';
import { JQueryDelegatedEventStrategy } from './jquery-delegated-event-strategy';
/** The code is defining an abstract class called `BaseStrategy` that implements the `JQueryDelegatedEventStrategy` interface. */
export declare abstract class BaseStrategy implements JQueryDelegatedEventStrategy {
  /**
   * The vega component tag name
   */
  abstract vegaComponentName: VegaComponentName;
  /**
   * The native event name, such as `click`, `change`, `focus`, `blur`
   */
  abstract eventName: VegaNativeEventNameType;
  /**
   * The function "getHostName" returns the VegaComponentName.
   *
   * @returns {VegaComponentName} The method is returning the value of the variable "vegaComponentName" of type VegaComponentName.
   */
  getHostName(): VegaComponentName;
  /**
   * The function "getEventName" returns the name of an event as a string.
   *
   * @returns {VegaNativeEventNameType} a string value, which is the eventName.
   */
  getEventName(): VegaNativeEventNameType;
  /**
   * The function handles a click event on a specified element and dispatches a custom event with an optional detail.
   *
   * @param {HTMLElement} vegaHost - The `vegaHost` parameter is an HTMLElement that represents the host element where the event will be dispatched.
   * @param {unknown} [detail] - The `detail` parameter is an optional argument that represents additional information or data that can be passed along with the event. It can be of any type, as it is defined as `unknown`.
   * @returns {Event} a custom event of type `Event`.
   */
  handle(vegaHost: HTMLElement, detail?: unknown): Event;
  /**
   * The function copies attributes from one HTML element to another, excluding attributes starting with "on", "id".
   *
   * @param {HTMLElement} element - The `element` parameter is an HTMLElement object that represents the
   * source element from which the attributes will be copied.
   * @param {HTMLElement} target - The target parameter is an HTMLElement where the attributes of the
   * element parameter will be copied to.
   */
  protected copyAttributesToTarget(element: HTMLElement, target: HTMLElement): void;
  /**
   * The function creates and returns a new event object based on the given event name.
   *
   * @param {VegaNativeEventNameType} eventName - The eventName parameter is the name of the event that
   * you want to create. It can be any valid event name, such as "click", "keydown", "mouseover", etc.
   * @returns {Event} a cloned event object.
   */
  protected createEvent(eventName: VegaNativeEventNameType): Event;
  /**
   * The method need to create an element which should be delegated from vega component
   *
   * @param {HTMLElement} delegatedTarget The vega component element
   * @returns {HTMLElement} The event target
   * @example $('vega-button').on('click','button',()=>{})
   * vega-button: The delegated target element
   * button: The element should be return
   */
  abstract createEventTarget(delegatedTarget: HTMLElement): HTMLElement;
}
