/// <reference types="svelte" />
import { SvelteComponentTyped } from "svelte";

export interface TooltipProps
  extends svelte.JSX.HTMLAttributes<HTMLElementTagNameMap["div"]> {
  /**
   * Set the alignment of the tooltip relative to the icon
   * @default "center"
   */
  align?: "start" | "center" | "end";

  /**
   * Set the direction of the tooltip relative to the button
   * @default "bottom"
   */
  direction?: "top" | "right" | "bottom" | "left";

  /**
   * Set to `true` to open the tooltip
   * @default false
   */
  open?: boolean;

  /**
   * Set to `true` to hide the tooltip icon
   * @default false
   */
  hideIcon?: boolean;

  /**
   * Specify the icon from `carbon-icons-svelte` to render for the tooltip button
   * Icon size must be 16px (e.g., `Add16`, `Task16`)
   */
  icon?: typeof import("carbon-icons-svelte").CarbonIcon;

  /**
   * Specify the ARIA label for the tooltip button
   * @default ""
   */
  iconDescription?: string;

  /**
   * Specify the icon name attribute
   * @default ""
   */
  iconName?: string;

  /**
   * Set the button tabindex
   * @default "0"
   */
  tabindex?: string;

  /**
   * Set an id for the tooltip
   * @default "ccs-" + Math.random().toString(36)
   */
  tooltipId?: string;

  /**
   * Set an id for the tooltip button
   * @default "ccs-" + Math.random().toString(36)
   */
  triggerId?: string;

  /**
   * Set the tooltip button text
   * @default ""
   */
  triggerText?: string;

  /**
   * Obtain a reference to the trigger text HTML element
   * @default null
   */
  ref?: null | HTMLDivElement;

  /**
   * Obtain a reference to the tooltip HTML element
   * @default null
   */
  refTooltip?: null | HTMLDivElement;

  /**
   * Obtain a reference to the icon HTML element
   * @default null
   */
  refIcon?: null | HTMLDivElement;
}

export default class Tooltip extends SvelteComponentTyped<
  TooltipProps,
  { click: WindowEventMap["click"]; mousedown: WindowEventMap["mousedown"] },
  { default: {}; icon: {}; triggerText: {} }
> {}
