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

# ListItemButton

> Pulsanti di azione nativi con l'aspetto condiviso delle righe di elenco.

## Panoramica

Usa `ListItemButton` per le righe di azione e i pulsanti di selezione autonomi. Combina il layout di [ListItem](https://docs.twenty.com/it/ui/primitives/navigation/list-item.md) con un pulsante nativo, incluse l'attivazione con Invio e Spazio, la gestione dello stato attivo e del comportamento disabilitato. Il valore predefinito è `type="button"`.

**Light**

[Esempio di ListItemButton (light)](https://storybook.twenty.com/iframe.html?id=ui-components-listitembutton--display\&viewMode=story\&globals=colorScheme:light)

**Dark**

[Esempio di ListItemButton (dark)](https://storybook.twenty.com/iframe.html?id=ui-components-listitembutton--display\&viewMode=story\&globals=colorScheme:dark)

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

## Utilizzo

```tsx theme={null}
import { ListItemButton } from 'twenty-ui/components/navigation';
import { IconCopy } from 'twenty-ui/icon';

export const DuplicateAction = ({
  onDuplicate,
}: {
  onDuplicate: () => void;
}) => (
  <ListItemButton
    startIcon={<IconCopy />}
    description="Create a copy"
    onClick={onDuplicate}
  >
    Duplicate
  </ListItemButton>
);
```

## Azioni e stato disabilitato

Passa direttamente `onClick` e `disabled`. I pulsanti disabilitati usano l'aspetto della riga corrispondente, impediscono l'attivazione e rimangono nell'ordine di tabulazione.

```tsx theme={null}
import { ListItemButton } from 'twenty-ui/components/navigation';
import { IconCopy } from 'twenty-ui/icon';

type DuplicateActionProps = {
  onDuplicate: () => void;
  disabled?: boolean;
};

export const DuplicateAction = ({
  onDuplicate,
  disabled = false,
}: DuplicateActionProps) => (
  <ListItemButton
    disabled={disabled}
    onClick={onDuplicate}
    startIcon={<IconCopy />}
    description="Create a copy"
  >
    Duplicate
  </ListItemButton>
);
```

**Light**

[Riga di azione disabilitata (light)](https://storybook.twenty.com/iframe.html?id=ui-components-listitembutton--disabled\&viewMode=story\&globals=colorScheme:light)

**Dark**

[Riga di azione disabilitata (dark)](https://storybook.twenty.com/iframe.html?id=ui-components-listitembutton--disabled\&viewMode=story\&globals=colorScheme:dark)

[Open in Storybook](https://storybook.twenty.com/?path=/story/ui-components-listitembutton--disabled)

Imposta `focusableWhenDisabled` per mantenere attivabile lo stato attivo di un pulsante disabilitato. Usa `aria-disabled` e continua a bloccare l'attivazione. Gli attributi, gli eventi, gli stili, i nomi delle classi e un riferimento `HTMLButtonElement` del pulsante nativo raggiungono il pulsante. Gli eventi si propagano normalmente; i chiamanti forniscono qualsiasi criterio per `stopPropagation()` o `preventDefault()`.

## Selezione e slot visivi

L'applicazione gestisce gli stati indipendenti `active`, `selected` e `focused`. Usa `active` per la riga aperta o corrente. Abbina `selected` allo stato accessibile appropriato, ad esempio `aria-pressed` per un pulsante di attivazione/disattivazione. `focused` evidenzia la riga senza spostare lo stato attivo del DOM. Gli indicatori e i suggerimenti per le scorciatoie sono decorativi; la tua applicazione registra le scorciatoie e gestisce la navigazione.

```tsx theme={null}
import { useState } from 'react';
import { ListItemButton } from 'twenty-ui/components/navigation';

export const ShowArchivedToggle = () => {
  const [selected, setSelected] = useState(false);

  return (
    <ListItemButton
      aria-pressed={selected}
      selected={selected}
      indicator="check"
      onClick={() => setSelected(!selected)}
    >
      Show archived records
    </ListItemButton>
  );
};
```

**Light**

[Riga di azione selezionata (light)](https://storybook.twenty.com/iframe.html?id=ui-components-listitembutton--selected\&viewMode=story\&globals=colorScheme:light)

**Dark**

[Riga di azione selezionata (dark)](https://storybook.twenty.com/iframe.html?id=ui-components-listitembutton--selected\&viewMode=story\&globals=colorScheme:dark)

[Open in Storybook](https://storybook.twenty.com/?path=/story/ui-components-listitembutton--selected)

Usa `startIcon`, `endIcon`, `description` e `descriptionPlacement` per i contenuti di supporto. `color="danger"` contrassegna un'azione distruttiva. `shortcutJoinLabel` controlla il testo tra scorciatoie sequenziali e `hasSubmenu` visualizza un indicatore di sottomenu.

## Contenuto di supporto su più righe

Imposta `descriptionPlacement="below"` per disporre il testo di supporto sotto l'etichetta. L'etichetta mantiene il proprio comportamento di troncamento. Passa [Text](https://docs.twenty.com/it/ui/primitives/typography/text.md) con `truncate` o `lineClamp` come `description` quando hai bisogno di un'anteprima più breve. I posizionamenti `inline` e `end` mantengono il loro aspetto esistente.

```tsx theme={null}
import { ListItemButton } from 'twenty-ui/components/navigation';
import { Avatar } from 'twenty-ui/primitives/data-display';

type PlanningActionProps = {
  active?: boolean;
  disabled?: boolean;
  onOpen: () => void;
};

export const PlanningAction = ({
  active = false,
  disabled = false,
  onOpen,
}: PlanningActionProps) => (
  <ListItemButton
    active={active}
    disabled={disabled}
    descriptionPlacement="below"
    description="Review the proposed timeline and confirm the next steps with the team."
    startIcon={<Avatar name="Alex Morgan" size="md" imageProps={{ alt: '' }} />}
    onClick={onOpen}
  >
    Quarterly planning
  </ListItemButton>
);
```

`active` applica lo sfondo della riga corrente. Imposta `selectionAppearance="accent"` per un riempimento accentato sulle righe selezionate con qualsiasi posizionamento della descrizione; il valore predefinito mantiene lo stile di selezione esistente basato sull'indicatore. `focused` applica lo sfondo evidenziato condiviso; il contorno focus-visible segue lo stato attivo effettivo della tastiera. Queste prop non aggiungono uno stato accessibile né spostano lo stato attivo. L'attivazione nativa dei pulsanti e il comportamento disabilitato rimangono invariati.

## Controlli indipendenti

Mantieni pulsanti e caselle di controllo indipendenti accanto a `ListItemButton`, affinché ciascuno mantenga il proprio stato attivo e la propria attivazione. Non annidarli nei relativi slot di contenuto o icona. Il componente non dispone di uno slot `actions`. Usa un `ListItem` con la relativa radice `div` predefinita per [una riga con controlli indipendenti](https://docs.twenty.com/it/ui/primitives/navigation/list-item.md#independent-controls) e fornisci il comportamento disabilitato e la propagazione degli eventi per ciascun controllo.

```tsx theme={null}
import { ListItemButton } from 'twenty-ui/components/navigation';
import { Button } from 'twenty-ui/primitives/input';

type ContactActionsProps = {
  onOpen: () => void;
  onDetails: () => void;
};

export const ContactActions = ({ onOpen, onDetails }: ContactActionsProps) => (
  <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
    <ListItemButton onClick={onOpen} description="Account owner">
      Alex Morgan
    </ListItemButton>
    <Button onClick={onDetails} aria-label="Open Alex Morgan's details">
      Details
    </Button>
  </div>
);
```

**Light**

[Controlli di azione affiancati (light)](https://storybook.twenty.com/iframe.html?id=ui-components-listitembutton--independent-action\&viewMode=story\&globals=colorScheme:light)

**Dark**

[Controlli di azione affiancati (dark)](https://storybook.twenty.com/iframe.html?id=ui-components-listitembutton--independent-action\&viewMode=story\&globals=colorScheme:dark)

[Open in Storybook](https://storybook.twenty.com/?path=/story/ui-components-listitembutton--independent-action)

Usa `ListItem` per contenuti passivi, link o proprietari semantici personalizzati. Usa le parti degli elementi [Dropdown](https://docs.twenty.com/it/ui/components/navigation/dropdown.md) e [Select](https://docs.twenty.com/it/ui/primitives/input/select.md) esistenti all'interno dei rispettivi proprietari popup, che forniscono ruoli e navigazione tramite tastiera.

## Props

**active** `boolean`

Marks the open or current item independently of selection and focus. The caller supplies accessible state.

**color** `"danger" | "neutral"`

Color of the text and icons. `danger` marks a destructive action.

**description** `ReactNode`

Supporting text, placed according to `descriptionPlacement`.

**descriptionPlacement** `"below" | "end" | "inline"`

Places supporting content inline after the label, at the end, or below it with wrapping. Inline is the default.

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

Disables activation and applies the matching row appearance.

**endIcon** `ReactNode`

Icon rendered after the content.

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

Keeps a disabled button focusable with aria-disabled while preventing activation.

**focused** `boolean`

Highlights the row without moving DOM focus.

**hasSubmenu** `boolean`

Displays a decorative submenu indicator.

**indicator** `"check" | "checkbox" | "none"`

Selection indicator: a check icon after the content or a checkbox before
it.

**ref** `Ref\<HTMLButtonElement\>`

Ref to the native HTMLButtonElement.

**selected** `boolean`

Applies selected styling and a decorative indicator. The caller supplies selection state and accessible semantics.

**selectionAppearance** `"accent" | "default"`

Selection styling independent of description placement. `default` preserves indicator-based styling; `accent` fills selected rows with the accent background.

**shortcut** `ShortcutDefinition`

Displays decorative shortcut hints. The caller registers the shortcuts.

**shortcutJoinLabel** `string`

Text between sequential shortcut steps. Defaults to `then`; pass an empty string to omit it.

**startIcon** `ReactNode`

Icon rendered before the content.


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