> ## 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.

# Popover

> Afișați conținut contextual ancorat la un declanșator.

## Prezentare generală

Utilizați `Popover` pentru informații contextuale sau controale simple. Compuneți separat portalul, wrapperul de poziționare și fereastra pop-up. Folosiți [Dropdown](https://docs.twenty.com/ro/ui/components/navigation/dropdown.md) pentru meniuri, selectoare și panouri cu navigare de nivel superior.

**Light**

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

**Dark**

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

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

## Utilizare

### Stare necontrolată

Utilizați `defaultOpen` pentru a seta vizibilitatea inițială. Fereastra popover gestionează modificările ulterioare provenite de la declanșatorul său, controalele de închidere și interacțiunile de închidere.

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

export const ContactDetailsPopover = () => (
  <Popover.Root defaultOpen={false}>
    <Popover.Trigger render={<Button>Show details</Button>} />
    <Popover.Portal>
      <Popover.Positioner align="start">
        <Popover.Popup
          style={{ boxSizing: 'border-box', width: 260, padding: 16, gap: 12 }}
        >
          <Popover.Title>Contact details</Popover.Title>
          <Popover.Description>
            Reach Alex at alex@example.com.
          </Popover.Description>
          <Popover.Close
            style={{ alignSelf: 'flex-end' }}
            render={<Button size="sm">Close</Button>}
          />
        </Popover.Popup>
      </Popover.Positioner>
    </Popover.Portal>
  </Popover.Root>
);
```

`defaultOpen` are implicit valoarea `false`, astfel încât poate fi omis. Utilizați `Title` și `Description` pentru a identifica fereastra pop-up. Declanșatorul redă implicit un buton; `render` vă permite să furnizați un element compatibil.

## Comparație de poziționare

Comparați laturile acceptate cu și fără săgeată. Aceste exemple deschise păstrează fiecare fereastră pop-up lângă declanșatorul său pentru inspecție; utilizați exemplul Display pentru a încerca să deschideți și să închideți un popover.

**Light**

[Comparație de poziționare pentru popover (light)](https://storybook.twenty.com/iframe.html?id=ui-surfaces-popover--catalog\&viewMode=story\&globals=colorScheme:light)

**Dark**

[Comparație de poziționare pentru popover (dark)](https://storybook.twenty.com/iframe.html?id=ui-surfaces-popover--catalog\&viewMode=story\&globals=colorScheme:dark)

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

## Anatomie

Păstrați declanșatorul și fereastra pop-up în `Popover.Root`. Fereastra pop-up poate conține text, controale de formular și acțiuni.

```text theme={null}
Popover.Root
├── Popover.Trigger
└── Popover.Portal
    ├── Popover.Backdrop (optional)
    └── Popover.Positioner
        └── Popover.Popup
            ├── Popover.Arrow (optional)
            └── Popover.Viewport (optional)
                ├── Popover.Title
                ├── Popover.Description
                └── Popover.Close
```

| Parte | Scop și țintă nativă |
| - | - |
| `Root` | Deține starea, declanșatoarele și interacțiunile. Nu redă niciun element DOM. |
| `Declanșator` | Deschide fereastra pop-up și îi furnizează ancora implicită. Vizează un buton. |
| `Portal` | Alege destinația. Proprietățile native, gestionarele, `render` și ref vizează div-ul său. |
| `Positioner` | Deține ancorele, alinierea, decalajele și gestionarea coliziunilor. Vizează propriul div. |
| `Popup` | Redă conținutul și gestionează focalizarea. Vizează div-ul său. |
| `Arrow` | Săgeată opțională stilizată în Popup. Vizează div-ul său. |
| `Backdrop` | Fundal opțional upstream în Portal. Vizează div-ul său. |
| `Viewport` | Container de tranziție opțional pentru conținutul în schimbare. Vizează div-ul său. |
| `Titlu` | Furnizează un nume accesibil vizibil. Vizează un h2. |
| `Description` | Asociază text explicativ. Vizează un paragraf. |
| `Închide` | Solicită închiderea. Vizează un buton. |

Toate părțile redate acceptă atributele native Base UI instalate, gestionarele, ref-urile și compunerea `render` de elemente/funcții. Componentele personalizate trebuie să redirecționeze proprietățile și ref-ul furnizate. Fiecare parte are un tip public `Popover\<Part>Props` și `Popover\<Part>State`. `PopoverRootProps` și `PopoverTriggerProps` păstrează genericele de payload. `PopoverHandle`, `PopoverRootActions`, `PopoverRootChangeEventDetails` și `PopoverRootChangeEventReason` sunt, de asemenea, exportate din `twenty-ui/primitives/surfaces`.

## Stare controlată

Transmiteți `open` și actualizați-l cu `onOpenChange` pentru a gestiona vizibilitatea aceleiași ferestre popover în starea React.

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

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

  return (
    <Popover.Root open={open} onOpenChange={setOpen}>
      <Popover.Trigger render={<Button>Show details</Button>} />
      <Popover.Portal>
        <Popover.Positioner align="start">
          <Popover.Popup
            style={{
              boxSizing: 'border-box',
              width: 260,
              padding: 16,
              gap: 12,
            }}
          >
            <Popover.Title>Contact details</Popover.Title>
            <Popover.Description>
              Reach Alex at alex@example.com.
            </Popover.Description>
            <Popover.Close
              style={{ alignSelf: 'flex-end' }}
              render={<Button size="sm">Close</Button>}
            />
          </Popover.Popup>
        </Popover.Positioner>
      </Popover.Portal>
    </Popover.Root>
  );
};
```

`onOpenChange` primește următoarea valoare booleană și detaliile evenimentului, inclusiv modificările solicitate de declanșator, controalele de închidere, Escape și interacțiunea din exterior.

## Combinare cu butoane

Transmiteți un `Button` Twenty UI prin `render` pentru a-l utiliza ca declanșator sau control de închidere. Popoverul își păstrează starea deschisă, comportamentul tastaturii și gestionarea focalizării.

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

export const ImportHelp = () => (
  <Popover.Root>
    <Popover.Trigger render={<Button variant="outline">Import help</Button>} />
    <Popover.Portal>
      <Popover.Positioner align="start">
        <Popover.Popup
          style={{ boxSizing: 'border-box', width: 260, padding: 16, gap: 12 }}
        >
          <Popover.Arrow />
          <Popover.Title>Import a CSV file</Popover.Title>
          <Popover.Description>
            Use a header row to identify your columns.
          </Popover.Description>
          <Popover.Close
            style={{ alignSelf: 'flex-end' }}
            render={<Button size="sm">Got it</Button>}
          />
        </Popover.Popup>
      </Popover.Positioner>
    </Popover.Portal>
  </Popover.Root>
);
```

`render` combină comportamentul cu butonul furnizat. Componentele wrapper personalizate trebuie să [transmită mai departe props și ref furnizate](https://docs.twenty.com/ro/ui/primitives/overview#custom-components) pentru a păstra acel comportament.

## Poziționare și focalizare

`Positioner` are implicit `side="bottom"`, `align="center"` și `sideOffset={8}`. Acceptă contractul Base UI instalat complet, inclusiv ancore de element/ref/funcție/virtuale, decalaje funcționale, `positionMethod`, `collisionBoundary`, `collisionPadding`, `collisionAvoidance`, `arrowPadding`, `sticky` și `disableAnchorTracking`. DirectionProvider controlează poziționarea logică și furnizează direcția DOM. Un `dir` explicit poate suprascrie atributul nativ; folosiți furnizorul pentru a schimba plasarea logică a laturii.

```tsx theme={null}
import { useRef } from 'react';
import { Popover } from 'twenty-ui/primitives/surfaces';

export const AnchoredHelp = () => {
  const anchor = useRef<HTMLDivElement>(null);

  return (
    <div ref={anchor}>
      <Popover.Root>
        <Popover.Trigger>Help</Popover.Trigger>
        <Popover.Portal>
          <Popover.Positioner
            anchor={anchor}
            side="inline-end"
            align="start"
            sideOffset={({ anchor }) => anchor.width / 2}
            collisionBoundary="clipping-ancestors"
            collisionAvoidance={{ side: 'flip', align: 'shift' }}
            collisionPadding={8}
            positionMethod="fixed"
          >
            <Popover.Popup aria-label="Help">
              <Popover.Arrow />
              Contextual help
            </Popover.Popup>
          </Popover.Positioner>
        </Popover.Portal>
      </Popover.Root>
    </div>
  );
};
```

Escape închide fereastra pop-up și restabilește focalizarea pe declanșatorul său. Interacțiunea din exterior o închide implicit. `Popup.initialFocus` și `Popup.finalFocus` acceptă țintele de focalizare și callback-urile upstream. `Root.modal` păstrează modurile implicit nemodal, modal și de blocare a focalizării din Base UI pentru utilizare independentă.

## Destinațiile portalului și tema

Setați `container` și `keepMounted` în `Portal`:

| Recipient | Rezoluție |
| - | - |
| Omis sau `undefined` | Folosește cel mai apropiat container ThemeProvider cu scop delimitat. În absența acestuia, Base UI folosește portalul părinte sau corpul documentului. |
| `null` | Așteaptă fără a reda conținutul portalului până când containerul se schimbă. Nu revine la temă sau la corpul documentului. |
| Element, ShadowRoot sau ref | Transmite ținta furnizată neschimbată către Base UI. Un ref nerezolvat păstrează alternativa portalului părinte/corpului documentului din Base UI; folosiți null explicit atunci când este necesară așteptarea. |

Destinația implicită cu scop delimitat își păstrează tokenurile CSS și schema de culori. O destinație explicită moștenește CSS-ul din scopul său DOM efectiv. Plasați-o în scopul temei intenționate sau furnizați acolo stilurile temei. Țintele ShadowRoot au nevoie de CSS-ul bibliotecii și de stilurile temei în acel arbore shadow. Contextul temei React și direcția de text furnizată rămân disponibile în portaluri. Acest API nu extinde destinațiile de portal permise ale rendererului.

## Declanșatoare și payload-uri detașate

`Popover.createHandle\<TPayload>()` conectează declanșatoarele detașate la o rădăcină și expune `open(triggerId)`, `close()` și `isOpen`. `Popover.Handle` este constructorul de handle upstream instalat. Funcția render a rădăcinii primește payload-ul activ. Apelați acțiunile imperative din gestionarele de evenimente sau efecte.

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

export const OwnerHelp = () => {
  const [handle] = useState(() => Popover.createHandle<{ name: string }>());

  return (
    <>
      <Popover.Trigger handle={handle} id="owner" payload={{ name: 'Alice' }}>
        Owner
      </Popover.Trigger>
      <Popover.Root handle={handle}>
        {({ payload }) => (
          <Popover.Portal>
            <Popover.Positioner align="start">
              <Popover.Popup aria-label="Account owner">
                {payload?.name}
                <Popover.Close>Close</Popover.Close>
              </Popover.Popup>
            </Popover.Positioner>
          </Popover.Portal>
        )}
      </Popover.Root>
    </>
  );
};
```

`onOpenChange` păstrează `reason`, `event`, `trigger`, `cancel()` și `preventUnmountOnClose()`. Rădăcinile controlate păstrează `triggerId`; rădăcinile necontrolate păstrează `defaultTriggerId`. `actionsRef` expune acțiunile upstream de închidere/demontare.

## Migrare

Mutați `container` și `keepMounted` din Popup în Portal. Mutați proprietățile de plasare, ancoră și coliziune în Positioner. Înlocuiți `Popup.arrow` cu un copil explicit `Popover.Arrow`. Proprietățile native, gestionarele, proprietățile de focalizare și ref-ul Popup continuă să vizeze elementul de conținut. Dropdown.Content își păstrează asamblarea convenabilă existentă.

În componentele front-end, folosiți compunerea nemodală în cadrul politicii existente pentru portaluri cu scop delimitat. Popoverele/dialogurile native ale browserului și modalitatea directă deținută de aplicație sunt interzise; folosiți API-ul de dialog al gazdei SDK pentru dialoguri. Lucrul privind capabilitățile rendererului pentru portal, geometrie, derulare și închidere rămâne separat de acest API primitiv.

## Proprietăți

Referința este generată din tipurile de componente publice. Atributele native, inclusiv numele accesibile și gestionarii de evenimente, sunt acceptate și pe părțile care redau elemente.

### Popover.Root

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

A ref to imperative actions.

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

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

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

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

Whether the popover is initially open.

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

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

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

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

Connects detached triggers and imperative open/close actions.

**Root.modal** `boolean | "trap-focus"` (default: false)

Determines if the popover enters a modal state when open.

* `true`: user interaction is limited to the popover: document page scroll is locked, and pointer interactions on outside elements are disabled.
* `false`: user interaction with the rest of the document is allowed.
* `'trap-focus'`: focus is trapped inside the popover, but document page scroll is not locked and pointer interactions outside of it remain enabled.

On touch devices, a `true` modal blocks outside taps but leaves the page scrollable unless the popup spans nearly the full viewport width, matching native iOS behavior.

When `modal` is `true`, focus trapping is enabled only if `<Popover.Close>` is rendered
inside `<Popover.Popup>`. It can be visually hidden with your own CSS if needed, such as
Tailwind's `sr-only` utility.

When `modal` is `'trap-focus'`, render `<Popover.Close>` inside `<Popover.Popup>` so touch
screen readers can escape the popup.

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

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

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

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

**Root.open** `boolean`

Whether the popover is currently open.

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

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

### Popover.Trigger

**Trigger.className** `string | ((state: PopoverTriggerState) =\> 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 popover that was opened on hover.
Specified in milliseconds.

Requires the `openOnHover` prop.

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

How long to wait before the popover may be opened on hover. Specified in milliseconds.

Requires the `openOnHover` prop.

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

A handle to associate the trigger with a popover.

**Trigger.id** `string`

ID of the trigger. In addition to being forwarded to the rendered element,
it is also used to specify the active trigger for the popover in controlled mode (with the PopoverRoot `triggerId` prop).

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

Whether the component renders a native `<button>` element when replacing it
via the `render` prop.
Set to `false` if the rendered element is not a button (e.g. `<div>`).

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

Whether the popover should also open when the trigger is hovered.

**Trigger.payload** `Payload`

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

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

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.

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

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

### Popover.Portal

**Portal.className** `string | ((state: PopoverPortalState) =\> 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`

When omitted, uses the scoped theme container, then the Base UI parent portal or document body. Explicit null delays rendering until a target is supplied. Explicit elements, ShadowRoots and refs are forwarded unchanged; their DOM scope supplies CSS tokens.

**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. Native props, handlers and render target this element.

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

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: PopoverPortalState) =\> CSSProperties | undefined)`

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

### Popover.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: PopoverPositionerState) =\> 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. Accepts the complete Base UI anchor, collision and positioning contract.

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

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: bottom)

Which side of the anchor element to align the popup against.
May automatically change to avoid collisions.

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

Distance from the anchor. Defaults to 8. 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: PopoverPositionerState) =\> CSSProperties | undefined)`

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

### Popover.Popup

**Popup.children** `ReactNode`

Popup content. Compose Portal, Positioner and Arrow separately.

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

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

**Popup.finalFocus** `boolean | RefObject\<HTMLElement | null\> | ((closeType: InteractionType) =\> boolean | void | HTMLElement | null)`

Determines the element to focus when the popover is closed.

* `false`: Do not move focus.
* `true`: Move focus based on the default behavior (trigger or previously focused element).
* `RefObject`: Move focus to the ref element.
* `function`: Called with the interaction type (`mouse`, `touch`, `pen`, or `keyboard`).
  Return an element to focus, `true` to use the default behavior, `null` to fall back to the default behavior, or `false`/`undefined` to do nothing.

**Popup.initialFocus** `boolean | RefObject\<HTMLElement | null\> | ((openType: InteractionType) =\> boolean | void | HTMLElement | null)`

Determines the element to focus when the popover is opened.
By default, focus moves to the first tabbable element inside the popup, except when the popover
is opened by touch — then the popup itself is focused to avoid opening the virtual keyboard.

* `false`: Do not move focus.
* `true`: Move focus based on the default behavior (first tabbable element or popup).
* `RefObject`: Move focus to the ref element.
* `function`: Called with the interaction type (`mouse`, `touch`, `pen`, or `keyboard`).
  Return an element to focus, `true` to use the default behavior, `null` to fall back to the default behavior, or `false`/`undefined` to do nothing.

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

Ref to the popup div. Focus props, native attributes, handlers and render target this element.

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

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: PopoverPopupState) =\> CSSProperties | undefined)`

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

### Popover.Arrow

**Arrow\.className** `string | ((state: PopoverArrowState) =\> 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, PopoverArrowState\>`

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: PopoverArrowState) =\> CSSProperties | undefined)`

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

### Popover.Backdrop

**Backdrop.className** `string | ((state: PopoverBackdropState) =\> string | undefined)`

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

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

Ref to the optional backdrop div. Compose inside Portal.

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

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.

**Backdrop.style** `CSSProperties | ((state: PopoverBackdropState) =\> CSSProperties | undefined)`

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

### Popover.Title

**Title.className** `string | ((state: PopoverTitleState) =\> string | undefined)`

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

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

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.

**Title.style** `CSSProperties | ((state: PopoverTitleState) =\> CSSProperties | undefined)`

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

### Popover.Description

**Description.className** `string | ((state: PopoverDescriptionState) =\> string | undefined)`

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

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

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.

**Description.style** `CSSProperties | ((state: PopoverDescriptionState) =\> CSSProperties | undefined)`

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

### Popover.Close

**Close.className** `string | ((state: PopoverCloseState) =\> string | undefined)`

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

**Close.nativeButton** `boolean` (default: true)

Whether the component renders a native `<button>` element when replacing it
via the `render` prop.
Set to `false` if the rendered element is not a button (for example, `<div>`).

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

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.

**Close.style** `CSSProperties | ((state: PopoverCloseState) =\> CSSProperties | undefined)`

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

### Popover.Viewport

**Viewport.children** `ReactNode`

The content to render inside the transition container.

**Viewport.className** `string | ((state: PopoverViewportState) =\> 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 for changing trigger payloads.

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

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: PopoverViewportState) =\> CSSProperties | undefined)`

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


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