import type { VirtualElement } from "@floating-ui/dom";
import type { DataPoint } from "@d3plus/data";
import { BaseClass } from "../utils/index.js";
/**
    Creates HTML tooltips in the body of a webpage.
*/
export default class Tooltip extends BaseClass {
    _arrow: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _arrowStyle: Record<string, string>;
    _background: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _body: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _bodyStyle: Record<string, string>;
    _border: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _borderRadius: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _className: string;
    _data: DataPoint[];
    _footer: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _footerStyle: Record<string, string>;
    _height: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _id: (d: DataPoint, i: number) => string;
    _offset: (d: DataPoint, i?: number) => number;
    _padding: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _pointerEvents: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _tooltipRefs: Record<string, {
        reference: VirtualElement | HTMLElement;
        arrowEl: HTMLElement;
        tooltip: HTMLElement;
        arrowHeight: number;
        arrowDistance: number;
    }>;
    _position: (d: DataPoint, i?: number) => number[] | HTMLElement;
    _tableStyle: Record<string, string>;
    _tbody: unknown[];
    _tbodyStyle: Record<string, string>;
    _thead: unknown[];
    _theadStyle: Record<string, string>;
    _title: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _titleStyle: Record<string, string>;
    _tooltipStyle: Record<string, string>;
    _trStyle: Record<string, unknown>;
    _tdStyle: Record<string, string>;
    _maxWidth: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _minWidth: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    _width: (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    /**
        Invoked when creating a new class instance, and sets any default parameters.
        @private
  */
    constructor();
    /**
        The inner return object and draw function that gets assigned the public methods.
        @private
  */
    render(callback?: (...args: unknown[]) => unknown): this;
    /**
     The inner HTML content of the arrow element, empty by default.
  
  @example <caption>default accessor</caption>
     function value(d) {
    return d.arrow || "";
  }
  */
    arrow(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    arrow(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
     CSS styles applied to the arrow element.
  
  @example <caption>default styles</caption>
     {
       "content": "",
       "border-width": "10px",
       "border-style": "solid",
       "border-color": "rgba(255, 255, 255, 0.75) transparent transparent transparent",
       "position": "absolute"
     }
  */
    arrowStyle(): Record<string, string>;
    arrowStyle(_: Record<string, string>): this;
    /**
        The background color accessor for each tooltip.
  */
    background(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    background(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        The body content accessor for each tooltip.
  
  @example <caption>default accessor</caption>
  function value(d) {
    return d.body || "";
  }
  */
    body(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    body(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        CSS styles applied to the body element.
  
  @example <caption>default styles</caption>
  {
    "font-size": "12px",
    "font-weight": "400"
  }
  */
    bodyStyle(): Record<string, string>;
    bodyStyle(_: Record<string, string>): this;
    /**
        The border accessor for each tooltip.
  */
    border(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    border(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        The border-radius accessor for each tooltip.
  */
    borderRadius(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    borderRadius(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        The CSS class name applied to the tooltip container.
  */
    className(): string;
    className(_: string): this;
    /**
        The data array used to create tooltips.
  */
    data(): DataPoint[];
    data(_: DataPoint[]): this;
    /**
        The footer content accessor for each tooltip.
  
  @example <caption>default accessor</caption>
  function value(d) {
    return d.footer || "";
  }
  */
    footer(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    footer(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        CSS styles applied to the footer element.
  
  @example <caption>default styles</caption>
  {
    "font-size": "12px",
    "font-weight": "400"
  }
  */
    footerStyle(): Record<string, string>;
    footerStyle(_: Record<string, string>): this;
    /**
        The height accessor for each tooltip.
  */
    height(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    height(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        The unique id accessor for each tooltip.
  
  @example <caption>default accessor</caption>
  function value(d, i) {
    return d.id || "" + i;
  }
  */
    id(): (d: DataPoint, i: number) => string;
    id(_: ((d: DataPoint, i: number) => string) | string): this;
    /**
        The pixel offset between the tooltip and its anchor point.
  */
    offset(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    offset(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | number): this;
    /**
        The inner padding of each tooltip.
  */
    padding(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    padding(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        The pointer-events CSS property for each tooltip.
  */
    pointerEvents(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    pointerEvents(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        The position of each tooltip. Can be an HTMLElement to anchor to, a selection string, or coordinate points in reference to the client viewport (not the overall page).
  
  @example <caption>default accessor</caption>
     function value(d) {
      return [d.x, d.y];
    }
  */
    position(): (d: DataPoint, i?: number) => number[] | HTMLElement;
    position(_: ((d: DataPoint, i?: number) => number[] | HTMLElement) | number[] | HTMLElement | string): this;
    /**
        CSS styles applied to the table element.
  
  @example <caption>default styles</caption>
  {
    "border-collapse": "collapse",
    "border-spacing": "0",
    "width": "100%"
  }
  */
    tableStyle(): Record<string, string>;
    tableStyle(_: Record<string, string>): this;
    /**
        The table body contents as an array of functions or strings.
  */
    tbody(): unknown[];
    tbody(_: unknown[]): this;
    /**
        CSS styles applied to the table body element.
  
  @example <caption>default styles</caption>
  {
    "font-size": "12px",
    "font-weight": "600",
    "text-align": "center"
  }
  */
    tbodyStyle(): Record<string, string>;
    tbodyStyle(_: Record<string, string>): this;
    /**
        The table head contents as an array of functions or strings.
  */
    thead(): unknown[];
    thead(_: unknown[]): this;
    /**
        CSS styles applied to the table head element.
  
  @example <caption>default styles</caption>
  {
    "font-size": "12px",
    "font-weight": "600",
    "text-align": "center"
  }
  */
    theadStyle(): Record<string, string>;
    theadStyle(_: Record<string, string>): this;
    /**
        The title content accessor for each tooltip.
  
  @example <caption>default accessor</caption>
  function value(d) {
    return d.title || "";
  }
  */
    title(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    title(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        CSS styles applied to the title element.
  
  @example <caption>default styles</caption>
  {
    "font-size": "14px",
    "font-weight": "600",
    "padding-bottom": "5px"
  }
  */
    titleStyle(): Record<string, string>;
    titleStyle(_: Record<string, string>): this;
    /**
        Overall CSS styles applied to the tooltip container.
  
  @example <caption>default styles</caption>
  {
    "font-family": "'Inter', 'Helvetica Neue', 'HelveticaNeue', 'Helvetica', 'Arial', sans-serif",
    "font-size": "14px",
    "font-weight": "600",
    "padding-bottom": "5px"
  }
  */
    tooltipStyle(): Record<string, string>;
    tooltipStyle(_: Record<string, string>): this;
    /**
        An object with CSS keys and values to be applied to all <tr> elements inside of each <tbody>.
  
  @example <caption>default styles</caption>
    {
      "border-top": "1px solid rgba(0, 0, 0, 0.1)"
    }
  */
    trStyle(): Record<string, unknown>;
    trStyle(_: Record<string, unknown>): this;
    /**
        An object with CSS keys and values to be applied to all <td> elements inside of each <tr>.
  */
    tdStyle(): Record<string, string>;
    tdStyle(_: Record<string, string>): this;
    /**
        The max-width accessor for each tooltip.
  */
    maxWidth(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    maxWidth(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        The min-width accessor for each tooltip.
  */
    minWidth(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    minWidth(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
    /**
        The width accessor for each tooltip.
  */
    width(): (d: DataPoint, i?: number) => DataPoint[keyof DataPoint];
    width(_: ((d: DataPoint, i?: number) => DataPoint[keyof DataPoint]) | string): this;
}
