
Research
/Security News
Shai Hulud Strikes Again (v2)
Another wave of Shai-Hulud campaign has hit npm with more than 500 packages and 700+ versions affected.
@bento/pressable
Advanced tools
Pressable primitive provides consistent press interactions and accessibility features for building interactive components
The @bento/pressable package provides a standardized foundation for interactive elements in the Bento library. It exports the Pressable primitive, which provides consistent press interactions and accessibility features for building interactive components.
npm install --save @bento/pressable
The @bento/pressable package exports the Pressable primitive:
import { Pressable } from '@bento/pressable';
<Pressable onPress={() => console.log('Div pressed!')}>
<div>Press me</div>
</Pressable>
The following properties are available to be used on the Pressable primitive:
| Prop | Type | Required | Description |
|---|---|---|---|
children | ReactElement<any, string | JSXElementConstructor<any>> | Yes | A single React element that will be made pressable. |
onPress | (e: PressEvent) => void | No | Handler that is called when the pressable is pressed. |
Similar to the standard onClick event, but normalized to handle all interaction methods consistently. | |||
onPressStart | (e: PressEvent) => void | No | Handler that is called when a press interaction starts. |
onPressEnd | (e: PressEvent) => void | No | Handler that is called when a press interaction ends, either |
| over the target or when the pointer leaves the target. | |||
onPressChange | (isPressed: boolean) => void | No | Handler that is called when the press state changes. |
onPressUp | (e: PressEvent) => void | No | Handler that is called when a press is released over the target, regardless of |
| whether it started on the target or not. | |||
slot | string | No | A named part of a component that can be customized. This is implemented by the consuming component. |
| The exposed slot names of a component are available in the components documentation. | |||
slots | Record<string, object | Function> | No | An object that contains the customizations for the slots. |
| The main way you interact with the slot system as a consumer. |
For all other properties specified on the Pressable primitive, the component will pass them down to the direct child element of the component. Which would be the equivalent of you adding them directly to the child element.
import { Pressable } from '@bento/pressable';
function MyComponent() {
return (
<Pressable onPress={() => console.log('Pressed!')}>
<div>Press me</div>
</Pressable>
);
}
The simplest way to use Pressable is to wrap a div element. The component will handle all the necessary accessibility features and interaction states.
<Source language='tsx' code={ DivExample } />
You can also make link elements pressable while maintaining their semantic meaning and default browser behavior.
<Source language='tsx' code={ LinkExample } />
For custom components, you need to forward the ref and pass props to the underlying element to ensure proper functionality.
<Source language='tsx' code={ CustomExample } />
The Pressable component automatically handles accessibility features:
The following data attributes are exposed and can be used for styling:
data-pressed - True when the button is being presseddata-hovered - True when the button is hovereddata-focused - True when the button has focusdata-focus-visible - True when focus should be visible (keyboard navigation)[data-pressed='true'] {
background-color: #ccc;
}
[data-focus-visible='true'] {
outline: 2px solid blue;
}
FAQs
Pressable primitive provides consistent press interactions and accessibility features for building interactive components
We found that @bento/pressable demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
/Security News
Another wave of Shai-Hulud campaign has hit npm with more than 500 packages and 700+ versions affected.

Product
Add real-time Socket webhook events to your workflows to automatically receive software supply chain alert changes in real time.

Security News
ENISA has become a CVE Program Root, giving the EU a central authority for coordinating vulnerability reporting, disclosure, and cross-border response.