import React from 'react';

export type HtmlBuilder<E extends HTMLElement> = (element: E) => any | (() => void);

export function useHtml<E extends HTMLElement>(ref: React.MutableRefObject<E>, callback: HtmlBuilder<E> | HtmlBuilder<E>[], deps?: any[]): void;
export function useHtmlRef<E extends HTMLElement>(callback: HtmlBuilder<E> | HtmlBuilder<E>[], deps?: any[]): React.MutableRefObject<E>;

export function useLayoutHtml<E extends HTMLElement>(ref: React.MutableRefObject<E>, callback: HtmlBuilder<E> | HtmlBuilder<E>[], deps?: any[]): void;
export function useLayoutHtmlRef<E extends HTMLElement>(callback: HtmlBuilder<E> | HtmlBuilder<E>[], deps?: any[]): React.MutableRefObject<E>;

export function useHtmlAttributes<E extends HTMLElement>(ref: React.MutableRefObject<E>, attributes: Record<string, string | number | boolean | undefined>, deps?: any[]): void;
export function useHtmlAttributesRef<E extends HTMLElement>(attributes: Record<string, string | number | boolean | undefined>, deps?: any[]): React.MutableRefObject<E>;