RN Neo
Components

Pressable

Touchable container with a physical press animation

A touchable container with a physical press animation. On press it shifts along both axes to simulate the shadow being pushed in — the core interaction of Neubrutalism. Supports a loading state that disables interaction while staying visible.

Usage

import { Pressable, Text } from 'rn-neo';

<Pressable onPress={() => console.log('pressed')}>
  <Text>Click me</Text>
</Pressable>

// With border and shadow
<Pressable border shadow shadowColor="shadow" onPress={handleSubmit}>
  <Text>Submit</Text>
</Pressable>

// Loading state
<Pressable loading={isSubmitting} onPress={handleSubmit}>
  <Text>Submit</Text>
</Pressable>

// Custom appearance
<Pressable
  backgroundColor="secondary"
  border
  shadow
  radius="md"
  padding="lg"
  onPress={handlePress}
>
  <Text>Secondary action</Text>
</Pressable>

Behavior

  • On pressIn, it shifts by half the resolved shadowSize on both axes and the shadow offset doubles — simulating a physical push. On pressOut it returns.
  • The press animation only fires when animation is enabled in the theme and the component is neither disabled nor loading.
  • When loading is true, the component is disabled and ignores all interactions. disabled and loading set the matching accessibility states.
  • Your onPressIn / onPressOut handlers run alongside the internal tracking — they are not replaced.
Defaults that differ from Box: padding is 'md', backgroundColor is 'primary', and accessibilityRole is 'button'. Font props (textColor, fontSize, fontWeight, fontFamily) cascade into any Text children.

Props

Pressable

PropTypeDefaultDescription
loadingbooleanDisables the component and sets accessibilityState.busy.

Font

PropTypeDefaultDescription
textColorColors | stringText color cascaded to children.
fontSizeFontSizeFont size token.
fontWeight'normal' | 'medium' | 'bold'Font weight token.
fontFamilystringCustom font family string.

Background

PropTypeDefaultDescription
backgroundColorBgColors | string'primary'Background color. Token or any color string.

Border

PropTypeDefaultDescription
borderbooleanFrom themeWhether to show a border.
borderSizeBorderSize | numberFrom themeBorder width. Token or raw number.
borderColorColors | stringFrom themeBorder color.
radiusRadius | numberFrom themeBorder radius. Token or raw number.

Shadow

PropTypeDefaultDescription
shadowbooleanFrom themeWhether to show a shadow.
shadowSizeShadowSize | numberFrom themeShadow offset size. Doubles and shifts on press.
shadowColorColors | stringFrom themeShadow color.

Spacing

Accepts all standard spacing props (padding*, margin*); padding defaults to 'md'. See Box → Spacing for the full list.
Pressable also accepts all standard React Native PressablePropsonPress, onLongPress, hitSlop, accessibilityLabel, … The style prop is applied last and overrides token-based styles.

Accessibility

Pressable sets accessibilityRole="button" by default and passes disabled and busy (from loading) to accessibilityState automatically.

On this page