> ## Documentation Index
> Fetch the complete documentation index at: https://docs.twenty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Información sobre herramientas

> Muestra información complementaria cuando se pasa el cursor sobre un activador o este recibe el foco.

## Resumen

Usa `Tooltip` para una explicación breve de un control o texto truncado. Mantén visible la información esencial, asigna a los controles un nombre accesible y usa [Popover](https://docs.twenty.com/es/ui/primitives/surfaces/popover.md) cuando el contenido contenga enlaces, botones u otros controles.

**Light**

[Ejemplo de tooltip (light)](https://storybook.twenty.com/iframe.html?id=ui-surfaces-tooltip--display\&viewMode=story\&globals=colorScheme:light)

**Dark**

[Ejemplo de tooltip (dark)](https://storybook.twenty.com/iframe.html?id=ui-surfaces-tooltip--display\&viewMode=story\&globals=colorScheme:dark)

[Open in Storybook](https://storybook.twenty.com/?path=/story/ui-surfaces-tooltip--display)

## "Uso"

```tsx theme={null}
import { Button } from 'twenty-ui/primitives/input';
import { Tooltip } from 'twenty-ui/primitives/surfaces';
import { Text } from 'twenty-ui/primitives/typography';

export const ExportHelp = () => (
  <Tooltip content="Download the visible records as a CSV file" side="top">
    <Text render={<span />}>
      <Button>Export records</Button>
    </Text>
  </Tooltip>
);
```

El componente de conveniencia acepta un elemento activador como `children`. Los elementos nativos reciben directamente los atributos del activador, los controladores de eventos y la ref. Los componentes de activador personalizados deben reenviar todos ellos. Un elemento contenedor también funciona con un componente que no reenvía cada prop del activador.

Al pasar el cursor se abre el tooltip después de `delay` milisegundos, cuyo valor predeterminado es `600`. El foco del teclado lo abre inmediatamente. `closeDelay` tiene como valor predeterminado `0`; al pasar el cursor sobre el emergente, permanece abierto a menos que se establezca `disableHoverablePopup`. Escape lo descarta.

## Estado controlado

Use `open` y `onOpenChange` juntos cuando la aplicación controla la visibilidad. Use `defaultOpen` solo para establecer la visibilidad inicial de un tooltip no controlado.

```tsx theme={null}
import { useState } from 'react';
import { Button } from 'twenty-ui/primitives/input';
import { Tooltip } from 'twenty-ui/primitives/surfaces';

export const ControlledExportHelp = () => {
  const [open, setOpen] = useState(false);

  return (
    <Tooltip
      content="Download the visible records as a CSV file"
      open={open}
      onOpenChange={setOpen}
      delay={300}
    >
      <span>
        <Button>Export records</Button>
      </span>
    </Tooltip>
  );
};
```

## Contenido enriquecido y composición

La forma abreviada acepta `description` y `startIcon` junto con `content`. El contenido de nodo personalizado se representa tal como se proporciona, a menos que una descripción o un icono solicite el diseño de título.

```tsx theme={null}
import { IconInfoCircle } from 'twenty-ui/icon';
import { Button } from 'twenty-ui/primitives/input';
import { Tooltip } from 'twenty-ui/primitives/surfaces';

export const ExportDetails = () => (
  <Tooltip
    content="Export visible records"
    description="Only records matching your current filters are included."
    startIcon={<IconInfoCircle />}
    arrow
  >
    <Button>Export records</Button>
  </Tooltip>
);
```

El uso compuesto expone cada parte instalada de Base UI y el diseño opcional de `Tooltip.Body`. Ensamble explícitamente el portal, el posicionamiento, el emergente y la flecha opcional. Popup procesa sus elementos secundarios tal como se proporcionan; Body ofrece el mismo diseño de título, descripción e icono decorativo que la forma abreviada.

```tsx theme={null}
import { Button } from 'twenty-ui/primitives/input';
import { Tooltip } from 'twenty-ui/primitives/surfaces';

export const ComposedExportDetails = () => (
  <Tooltip.Provider delay={300} closeDelay={100} timeout={400}>
    <Tooltip.Root>
      <Tooltip.Trigger render={<Button>Export records</Button>} />
      <Tooltip.Portal>
        <Tooltip.Positioner side="inline-end" sideOffset={10} arrowPadding={8}>
          <Tooltip.Popup>
            <Tooltip.Arrow />
            <Tooltip.Viewport>
              <Tooltip.Body description="Only records matching your current filters are included.">
                Export visible records
              </Tooltip.Body>
            </Tooltip.Viewport>
          </Tooltip.Popup>
        </Tooltip.Positioner>
      </Tooltip.Portal>
    </Tooltip.Root>
  </Tooltip.Provider>
);
```

| Parte | Destino de elemento nativo, prop y ref |
| - | - |
| `Root` | Coordinación del estado y la carga útil. Sin nodo DOM, props nativas ni ref de DOM. `actionsRef` expone `close` y `unmount`. |
| `Proveedor` | `delay`, `closeDelay` y `timeout` compartidos. Sin nodo DOM ni ref de DOM. |
| `Disparador` | Un botón de forma predeterminada. Las props nativas, los controladores, `render` y la ref se dirigen al elemento activador. |
| `Portal` | El div del portal. De forma predeterminada usa el contenedor del tema y, después, el cuerpo del documento. |
| `Positioner` | El div de posicionamiento. Gestiona el ancla, el lado físico/lógico, los desplazamientos, la gestión de colisiones, el posicionamiento fijo y el relleno de la flecha. |
| `Popup` | El div emergente. Gestiona el contenido, las props nativas, los estilos, `render` y la ref. |
| `Body` | El div opcional del cuerpo dentro de Popup o Viewport. Las props nativas, los estilos, `render` y la ref apuntan a su raíz. |
| `Arrow` | El div de flecha dentro de Popup. |
| `Viewport` | El div opcional para las transiciones entre cargas útiles de activadores. |

`Tooltip.Body` acepta elementos secundarios de título opcionales y nodos `description` y `startIcon`. Los títulos usan un grosor medio; las descripciones usan el color secundario del tooltip, conservan los saltos de línea y ajustan el texto largo. Omite los elementos secundarios de título para un tooltip que solo tenga descripción. El icono es decorativo y solo aparece con un título. Body no añade ningún rol de tooltip, estilos de popup, tamaño ni posicionamiento. El contenido arbitrario de Popup sigue siendo compatible. Importa `TooltipBodyProps` desde `twenty-ui/primitives/surfaces` al tipar un contenedor.

Cada parte de DOM acepta props nativas, refs y composición de `render` mediante elemento o devolución de llamada. Las props nativas de nivel superior de la forma abreviada, `render` y la ref se dirigen a Popup. Use `triggerProps`, `positionerProps` y `portalProps` para personalizar los otros destinos; estas anulan los valores predeterminados de la forma abreviada. Los elementos secundarios proporcionan el elemento de representación predeterminado del activador. Ambas formas conservan el estado Root controlado/no controlado y los detalles del evento de devolución de llamada de Base UI, incluidos la cancelación, el motivo, el evento original y el activador activo.

`Tooltip.createHandle\<TPayload>()` conecta activadores desacoplados con cualquiera de las dos formas mediante `handle`. Los elementos secundarios de Root compuesto o `content` de la forma abreviada pueden ser una función que reciba la carga útil activa tipada. `Tooltip.Handle` y el tipo público `TooltipHandle` exponen el contrato de identificador instalado. Los identificadores admiten `open(triggerId)` y `close()` imperativos mientras su Root está montado.

## Migración

Reemplace `content={<Tooltip.Content description={description} startIcon={icon}>title</Tooltip.Content>}` por `content={title} description={description} startIcon={icon}`. En el uso compuesto, utiliza `Tooltip.Body` para el diseño compartido de título y descripción, o compón tu propio contenido. Se eliminan `Tooltip.Content` y `TooltipContentProps`.

Las props de posicionamiento existentes de Popup compuesto se trasladan a Positioner. Envuélvelo en Portal, mueve `container` y `keepMounted` a Portal, conserva `maxWidth` en Popup y reemplaza `arrow` por un elemento secundario Arrow. Conserva explícitamente el espaciado anterior con `sideOffset={10}` cuando sea necesario. El posicionador compuesto conserva el `sideOffset={0}` de Base UI. Ambas formas limitan Popup a 300 píxeles de forma predeterminada.

## Controles deshabilitados

Los botones nativos deshabilitados no pueden recibir el foco del teclado. Envuelva uno en un activador enfocable para que los usuarios puedan descubrir por qué la acción no está disponible.

```tsx theme={null}
import { Button } from 'twenty-ui/primitives/input';
import { Tooltip } from 'twenty-ui/primitives/surfaces';

export const UnavailableExport = () => (
  <Tooltip content="Select at least one record to export">
    <span tabIndex={0} aria-label="Export records unavailable">
      <Button disabled>Export records</Button>
    </span>
  </Tooltip>
);
```

Establecer `disabled` en la forma abreviada o Root suprime el tooltip en sí. `disabled` del activador suprime la interacción del tooltip de ese activador. Deshabilite el control nativo mediante sus propias props o el elemento de representación de Trigger.

## Ubicación y texto desbordado

La forma abreviada usa de forma predeterminada `side="top"`, `align="center"` y `sideOffset={10}`. Tanto las descripciones emergentes abreviadas como las compuestas tienen una anchura máxima de 300 píxeles, limitada por el espacio disponible junto al ancla. Pasa `maxWidth` a la abreviada o a `Tooltip.Popup` para elegir un máximo diferente, incluidas vistas previas más amplias. Los estilos de ventana emergente nativos siguen estando disponibles para tamaños personalizados. La ubicación se ajusta al espacio disponible. Un tooltip abierto se oculta mientras su ancla se desplaza fuera de la vista, incluso fuera de un contenedor de desplazamiento. Use `arrow` para una flecha y `container` para anular el destino del portal del tema; consulte [temas](https://docs.twenty.com/es/ui/theming.md).

Use [OverflowingTextWithTooltip](https://docs.twenty.com/es/ui/primitives/typography/overflowing-text-with-tooltip.md) cuando una etiqueta de texto deba mostrar su valor completo solo cuando esté truncada. Sus props existentes `text`, `tooltipContent` y `tooltipPlace` siguen disponibles.

## "Props"

La referencia se genera a partir de los tipos de componentes públicos. También se aceptan atributos y controladores de eventos nativos del emergente.

**actionsRef** `RefObject\<TooltipRootActions | null\>`

A ref to imperative actions.

* `unmount`: Ends the closing phase of the tooltip after an externally controlled closing animation finishes.
  Call `preventUnmountOnClose()` in `onOpenChange` first, otherwise the tooltip completes closing on its own.
  Whether it leaves the DOM is decided by `keepMounted` on the portal.
* `close`: Closes the tooltip imperatively when called.

**align** `"center" | "end" | "start"` (default: center)

Alignment relative to the trigger. Defaults to center.

**alignOffset** `number | OffsetFunction` (default: 0)

Offset along the alignment axis in pixels.

**anchor** `Element | VirtualElement | RefObject\<Element | null\> | (() =\> Element | VirtualElement | null) | null`

An explicit positioning anchor for the popup.

**arrow** `boolean`

Displays an arrow pointing to the trigger. Defaults to false.

**arrowPadding** `number` (default: 5)

Minimum distance from the arrow to the popup edges.

**children** `ReactElement\<unknown, string | JSXElementConstructor\<any\>\>` *required*

A single trigger element. Custom components must forward their ref, native attributes, and event handlers.

**className** `string | ((state: TooltipPopupState) =\> string | undefined)`

Additional CSS class for the popup.

**closeDelay** `number` (default: 0)

Delay in milliseconds before closing after hover ends. Defaults to 0.

**closeOnClick** `boolean` (default: true)

Whether the tooltip should close when this trigger is clicked.

**collisionAvoidance** `CollisionAvoidance`

Determines how to handle collisions when positioning the popup.

`side` controls overflow on the preferred placement axis (`top`/`bottom` or `left`/`right`):

* `'flip'`: keep the requested side when it fits; otherwise try the opposite side
  (`top` and `bottom`, or `left` and `right`).
* `'shift'`: never change side; keep the requested side and move the popup within
  the clipping boundary so it stays visible.
* `'none'`: do not correct side-axis overflow.

`align` controls overflow on the alignment axis (`start`/`center`/`end`):

* `'flip'`: keep side, but swap `start` and `end` when the requested alignment overflows.
* `'shift'`: keep side and requested alignment, then nudge the popup along the
  alignment axis to fit.
* `'none'`: do not correct alignment-axis overflow.

`fallbackAxisSide` controls fallback behavior on the perpendicular axis when the
preferred axis cannot fit:

* `'start'`: allow perpendicular fallback and try the logical start side first
  (`top` before `bottom`, or `left` before `right` in LTR).
* `'end'`: allow perpendicular fallback and try the logical end side first
  (`bottom` before `top`, or `right` before `left` in LTR).
* `'none'`: do not fallback to the perpendicular axis.

When `side` is `'shift'`, explicitly setting `align` only supports `'shift'` or `'none'`.
If `align` is omitted, it defaults to `'flip'`.

**collisionBoundary** `Boundary` (default: clipping-ancestors)

An element or a rectangle that delimits the area that the popup is confined to.

**collisionPadding** `Padding` (default: 5)

Additional space to maintain from the edge of the collision boundary.

**container** `HTMLElement | ShadowRoot | RefObject\<HTMLElement | ShadowRoot | null\> | null`

Portal destination. Defaults to the current theme container.

**content** `ReactNode | PayloadChildRenderFunction\<TPayload\>` *required*

Supplementary content, or a function receiving the active trigger payload. Strings and numbers use the shorthand title layout.

**defaultOpen** `boolean` (default: false)

Initial visibility when the tooltip manages its own state.

**defaultTriggerId** `string | null`

ID of the trigger that the tooltip is associated with.
This is useful in conjunction with the `defaultOpen` prop to create an initially open tooltip.

**delay** `number` (default: 600)

Delay in milliseconds before opening on hover. Defaults to 600.

**description** `ReactNode`

Optional secondary text below the shorthand title.

**disableAnchorTracking** `boolean` (default: false)

Whether to disable the popup from tracking any layout shift of its positioning anchor.

**disabled** `boolean` (default: false)

Prevents the tooltip from opening.

**disableHoverablePopup** `boolean` (default: false)

Prevents hovering over the popup from keeping it open.

**handle** `TooltipHandle\<TPayload\>`

Connects detached triggers and preserves their typed payloads.

**keepMounted** `boolean`

Keeps the popup mounted while closed.

**maxWidth** `MaxWidth\<string | number\>`

Maximum popup width. Defaults to 300 pixels and is capped by the space available beside the anchor.

**onOpenChange** `((open: boolean, eventDetails: TooltipRootChangeEventDetails) =\> void)`

Receives the requested open state and unchanged Base UI event details, including reason, event, trigger and cancel().

**onOpenChangeComplete** `((open: boolean) =\> void)`

Event handler called after any animations complete when the tooltip is opened or closed.

**open** `boolean`

Controlled visibility of the tooltip.

**portalProps** `TooltipPortalProps`

Full Portal props, including native props, ref and render. Overrides shorthand portal defaults.

**positionerProps** `TooltipPositionerProps`

Full Positioner props, including native props, ref and render. Overrides shorthand placement defaults.

**positionMethod** `"absolute" | "fixed"` (default: absolute)

CSS positioning method for the popup.

**ref** `Ref\<HTMLDivElement\>`

Ref forwarded to the popup element.

**render** `ReactElement\<unknown, string | JSXElementConstructor\<any\>\> | ComponentRenderFn\<HTMLProps, TooltipPopupState\>`

Allows you to replace the component's HTML element
with a different tag, or compose it with another component.

Accepts a `ReactElement` or a function that returns the element to render.

**side** `"bottom" | "inline-end" | "inline-start" | "left" | "right" | "top"` (default: top)

Preferred side of the trigger. Defaults to top and may change to avoid collisions.

**sideOffset** `number | OffsetFunction` (default: 10)

Distance from the trigger in pixels. Defaults to 10.

**startIcon** `ReactNode`

Optional node before the shorthand title.

**sticky** `boolean` (default: false)

Whether to maintain the popup in the viewport after
the anchor element was scrolled out of view.

**style** `CSSProperties | ((state: TooltipPopupState) =\> CSSProperties | undefined)`

Inline styles for the popup.

**trackCursorAxis** `"both" | "none" | "x" | "y"` (default: none)

Determines which axis the tooltip should track the cursor on.

**triggerId** `string | null`

ID of the trigger that the tooltip is associated with.
This is useful in conjunction with the `open` prop to create a controlled tooltip.
There's no need to specify this prop when the tooltip is uncontrolled (that is, when the `open` prop is not set).

**triggerProps** `TooltipTriggerProps\<TPayload\>`

Full Trigger props, including native props, ref, render and payload. Overrides the shorthand trigger defaults.

**withExitAnimation** `boolean`

Fades and slides the popup out when it closes instead of hiding it at once.

### Tooltip.Root

**Root.actionsRef** `RefObject\<TooltipRootActions | null\>`

A ref to imperative actions.

* `unmount`: Ends the closing phase of the tooltip after an externally controlled closing animation finishes.
  Call `preventUnmountOnClose()` in `onOpenChange` first, otherwise the tooltip completes closing on its own.
  Whether it leaves the DOM is decided by `keepMounted` on the portal.
* `close`: Closes the tooltip imperatively when called.

**Root.children** `ReactNode | PayloadChildRenderFunction\<Payload\>`

Parts or a render function receiving the active trigger payload. Root renders no DOM node.

**Root.defaultOpen** `boolean` (default: false)

Whether the tooltip is initially open.

To render a controlled tooltip, use the `open` prop instead.

**Root.defaultTriggerId** `string | null`

ID of the trigger that the tooltip is associated with.
This is useful in conjunction with the `defaultOpen` prop to create an initially open tooltip.

**Root.disabled** `boolean` (default: false)

Whether the tooltip is disabled.

**Root.disableHoverablePopup** `boolean` (default: false)

Whether the tooltip contents can be hovered without closing the tooltip.

**Root.handle** `TooltipHandle\<Payload\>`

Connects detached triggers and imperative open/close actions.

**Root.onOpenChange** `((open: boolean, eventDetails: TooltipRootChangeEventDetails) =\> void)`

Receives the requested open state and unchanged Base UI event details, including reason, event, trigger and cancel().

**Root.onOpenChangeComplete** `((open: boolean) =\> void)`

Event handler called after any animations complete when the tooltip is opened or closed.

**Root.open** `boolean`

Whether the tooltip is currently open.

**Root.trackCursorAxis** `"both" | "none" | "x" | "y"` (default: none)

Determines which axis the tooltip should track the cursor on.

**Root.triggerId** `string | null`

ID of the trigger that the tooltip is associated with.
This is useful in conjunction with the `open` prop to create a controlled tooltip.
There's no need to specify this prop when the tooltip is uncontrolled (that is, when the `open` prop is not set).

### Tooltip.Trigger

**Trigger.className** `string | ((state: TooltipTriggerState) =\> string | undefined)`

CSS class applied to the element, or a function that
returns a class based on the component's state.

**Trigger.closeDelay** `number` (default: 0)

How long to wait before closing the tooltip. Specified in milliseconds.

**Trigger.closeOnClick** `boolean` (default: true)

Whether the tooltip should close when this trigger is clicked.

**Trigger.delay** `number` (default: 600)

How long to wait before opening the tooltip on hover. Specified in milliseconds.

**Trigger.disabled** `boolean` (default: false)

Disables tooltip interaction for this trigger without disabling its native element.

**Trigger.handle** `TooltipHandle\<Payload\>`

A handle to associate the trigger with a tooltip.

**Trigger.payload** `Payload`

A payload to pass to the tooltip when it is opened.

**Trigger.ref** `((((instance: HTMLButtonElement | null) =\> void | (() =\> VoidOrUndefinedOnly)) | RefObject\<HTMLButtonElement | null\>) & (((instance: HTMLElement | null) =\> void | (() =\> VoidOrUndefinedOnly)) | RefObject\<...\>)) | null`

Ref to the rendered trigger element, a button by default.

**Trigger.render** `ReactElement\<unknown, string | JSXElementConstructor\<any\>\> | ComponentRenderFn\<HTMLProps, TooltipTriggerState\>`

Composes a native element or a component that forwards attributes, handlers and ref.

**Trigger.style** `CSSProperties | ((state: TooltipTriggerState) =\> CSSProperties | undefined)`

Style applied to the element, or a function that
returns a style object based on the component's state.

### Tooltip.Portal

**Portal.className** `string | ((state: TooltipPortalState) =\> string | undefined)`

CSS class applied to the element, or a function that
returns a class based on the component's state.

**Portal.container** `HTMLElement | ShadowRoot | RefObject\<HTMLElement | ShadowRoot | null\> | null`

Portal destination. Defaults to the current theme container, then the document body.

**Portal.keepMounted** `boolean` (default: false)

Whether to keep the portal mounted in the DOM while the popup is hidden.

**Portal.ref** `Ref\<HTMLDivElement\>`

Ref to the portal div.

**Portal.render** `ReactElement\<unknown, string | JSXElementConstructor\<any\>\> | ComponentRenderFn\<HTMLProps, TooltipPortalState\>`

Allows you to replace the component's HTML element
with a different tag, or compose it with another component.

Accepts a `ReactElement` or a function that returns the element to render.

**Portal.style** `CSSProperties | ((state: TooltipPortalState) =\> CSSProperties | undefined)`

Style applied to the element, or a function that
returns a style object based on the component's state.

### Tooltip.Positioner

**Positioner.align** `"center" | "end" | "start"` (default: center)

How to align the popup relative to the specified side.

**Positioner.alignOffset** `number | OffsetFunction` (default: 0)

Additional offset along the alignment axis in pixels.
Also accepts a function that returns the offset to read the dimensions of the anchor
and positioner elements, along with its side and alignment.

The function takes a `data` object parameter with the following properties:

* `data.anchor`: the dimensions of the anchor element with properties `width` and `height`.
* `data.positioner`: the dimensions of the positioner element with properties `width` and `height`.
* `data.side`: which side of the anchor element the positioner is aligned against.
* `data.align`: how the positioner is aligned relative to the specified side.

**Positioner.anchor** `Element | VirtualElement | RefObject\<Element | null\> | (() =\> Element | VirtualElement | null) | null`

An element to position the popup against.
By default, the popup will be positioned against the trigger.

**Positioner.arrowPadding** `number` (default: 5)

Minimum distance to maintain between the arrow and the edges of the popup.

Use it to prevent the arrow element from hanging out of the rounded corners of a popup.

**Positioner.className** `string | ((state: TooltipPositionerState) =\> string | undefined)`

CSS class applied to the element, or a function that
returns a class based on the component's state.

**Positioner.collisionAvoidance** `CollisionAvoidance`

Determines how to handle collisions when positioning the popup.

`side` controls overflow on the preferred placement axis (`top`/`bottom` or `left`/`right`):

* `'flip'`: keep the requested side when it fits; otherwise try the opposite side
  (`top` and `bottom`, or `left` and `right`).
* `'shift'`: never change side; keep the requested side and move the popup within
  the clipping boundary so it stays visible.
* `'none'`: do not correct side-axis overflow.

`align` controls overflow on the alignment axis (`start`/`center`/`end`):

* `'flip'`: keep side, but swap `start` and `end` when the requested alignment overflows.
* `'shift'`: keep side and requested alignment, then nudge the popup along the
  alignment axis to fit.
* `'none'`: do not correct alignment-axis overflow.

`fallbackAxisSide` controls fallback behavior on the perpendicular axis when the
preferred axis cannot fit:

* `'start'`: allow perpendicular fallback and try the logical start side first
  (`top` before `bottom`, or `left` before `right` in LTR).
* `'end'`: allow perpendicular fallback and try the logical end side first
  (`bottom` before `top`, or `right` before `left` in LTR).
* `'none'`: do not fallback to the perpendicular axis.

When `side` is `'shift'`, explicitly setting `align` only supports `'shift'` or `'none'`.
If `align` is omitted, it defaults to `'flip'`.

**Positioner.collisionBoundary** `Boundary` (default: clipping-ancestors)

An element or a rectangle that delimits the area that the popup is confined to.

**Positioner.collisionPadding** `Padding` (default: 5)

Additional space to maintain from the edge of the collision boundary.

**Positioner.disableAnchorTracking** `boolean` (default: false)

Whether to disable the popup from tracking any layout shift of its positioning anchor.

**Positioner.positionMethod** `"absolute" | "fixed"` (default: absolute)

Determines which CSS `position` property to use.

**Positioner.ref** `Ref\<HTMLDivElement\>`

Ref to the positioning div. Native props, styles and render target this element.

**Positioner.render** `ReactElement\<unknown, string | JSXElementConstructor\<any\>\> | ComponentRenderFn\<HTMLProps, TooltipPositionerState\>`

Allows you to replace the component's HTML element
with a different tag, or compose it with another component.

Accepts a `ReactElement` or a function that returns the element to render.

**Positioner.side** `"bottom" | "inline-end" | "inline-start" | "left" | "right" | "top"` (default: top)

Preferred physical or logical side of the anchor. Defaults to top.

**Positioner.sideOffset** `number | OffsetFunction` (default: 0)

Distance from the anchor. Defaults to 0 in compound usage. Accepts a number or positioning function.

**Positioner.sticky** `boolean` (default: false)

Whether to maintain the popup in the viewport after
the anchor element was scrolled out of view.

**Positioner.style** `CSSProperties | ((state: TooltipPositionerState) =\> CSSProperties | undefined)`

Style applied to the element, or a function that
returns a style object based on the component's state.

### Tooltip.Popup

**Popup.children** `ReactNode`

Content rendered as supplied. Does not create a portal, positioner, title layout or arrow.

**Popup.className** `string | ((state: TooltipPopupState) =\> string | undefined)`

CSS class applied to the element, or a function that
returns a class based on the component's state.

**Popup.maxWidth** `MaxWidth\<string | number\>`

Maximum popup width. Defaults to 300 pixels and is capped by the space available beside the anchor.

**Popup.ref** `Ref\<HTMLDivElement\>`

Ref to the popup div. Native props, styles and render target this element.

**Popup.render** `ReactElement\<unknown, string | JSXElementConstructor\<any\>\> | ComponentRenderFn\<HTMLProps, TooltipPopupState\>`

Allows you to replace the component's HTML element
with a different tag, or compose it with another component.

Accepts a `ReactElement` or a function that returns the element to render.

**Popup.style** `CSSProperties | ((state: TooltipPopupState) =\> CSSProperties | undefined)`

Style applied to the element, or a function that
returns a style object based on the component's state.

**Popup.withExitAnimation** `boolean` (default: false)

Enables the optional Twenty exit transition.

### Tooltip.Body

**Body.children** `ReactNode`

Optional title content, displayed with medium weight. Omit it for a description-only tooltip.

**Body.description** `ReactNode`

Optional secondary content. Preserves line breaks and wraps long text.

**Body.ref** `Ref\<HTMLDivElement\>`

Ref to the body div. Native props, styles and render target this element.

**Body.render** `ReactElement\<unknown, string | JSXElementConstructor\<any\>\> | ComponentRenderFn\<HTMLProps, \{\}\>`

Composes the body root through an element or render callback while preserving its layout and content.

**Body.startIcon** `ReactNode`

Optional decorative node before the title. Omitted when the title is empty.

### Tooltip.Arrow

**Arrow\.className** `string | ((state: TooltipArrowState) =\> string | undefined)`

CSS class applied to the element, or a function that
returns a class based on the component's state.

**Arrow\.ref** `Ref\<HTMLDivElement\>`

Ref to the arrow div. Compose inside Popup.

**Arrow\.render** `ReactElement\<unknown, string | JSXElementConstructor\<any\>\> | ComponentRenderFn\<HTMLProps, TooltipArrowState\>`

Allows you to replace the component's HTML element
with a different tag, or compose it with another component.

Accepts a `ReactElement` or a function that returns the element to render.

**Arrow\.style** `CSSProperties | ((state: TooltipArrowState) =\> CSSProperties | undefined)`

Style applied to the element, or a function that
returns a style object based on the component's state.

### Tooltip.Viewport

**Viewport.children** `ReactNode`

The content to render inside the transition container.

**Viewport.className** `string | ((state: TooltipViewportState) =\> string | undefined)`

CSS class applied to the element, or a function that
returns a class based on the component's state.

**Viewport.ref** `Ref\<HTMLDivElement\>`

Ref to the content-transition div. Useful when several triggers share changing content.

**Viewport.render** `ReactElement\<unknown, string | JSXElementConstructor\<any\>\> | ComponentRenderFn\<HTMLProps, TooltipViewportState\>`

Allows you to replace the component's HTML element
with a different tag, or compose it with another component.

Accepts a `ReactElement` or a function that returns the element to render.

**Viewport.style** `CSSProperties | ((state: TooltipViewportState) =\> CSSProperties | undefined)`

Style applied to the element, or a function that
returns a style object based on the component's state.

### Tooltip.Provider

**Provider.children** `ReactNode`

Tooltips sharing delay, closeDelay and timeout configuration. Provider renders no DOM node.

**Provider.closeDelay** `number`

How long to wait before closing a tooltip. Specified in milliseconds.

**Provider.delay** `number`

How long to wait before opening the tooltip on hover. Specified in milliseconds.

**Provider.timeout** `number` (default: 400)

Another tooltip will open instantly if the previous tooltip
is closed within this timeout. Specified in milliseconds.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.